Contesto Aziendale

Azienda

Neonatal Health Solutions Obiettivo: Creare un modello statistico in grado di prevedere con precisione il peso dei neonati alla nascita, basandosi su variabili cliniche raccolte da tre ospedali. Il progetto mira a migliorare la gestione delle gravidanze ad alto rischio, ottimizzare le risorse ospedaliere e garantire migliori risultati per la salute neonatale.

Il progetto si inserisce all’interno di un contesto di crescente attenzione verso la prevenzione delle complicazioni neonatali. La possibilità di prevedere il peso alla nascita dei neonati rappresenta un’opportunità fondamentale per migliorare la pianificazione clinica e ridurre i rischi associati a nascite problematiche, come parti prematuri o neonati con basso peso. Di seguito, i principali benefici che questo progetto porterà all’azienda e al settore sanitario:

1. Miglioramento delle previsioni cliniche

Il peso del neonato è un indicatore chiave della sua salute. Avere un modello predittivo accurato consente al personale medico di intervenire tempestivamente in caso di anomalie, riducendo le complicazioni perinatali come le difficoltà respiratorie o l’ipoglicemia.

2. Ottimizzazione delle risorse ospedaliere

Sapere in anticipo quali neonati potrebbero avere bisogno di cure intensive aiuta a organizzare le risorse umane e tecnologiche degli ospedali in modo efficiente. Questo si traduce in una riduzione dei costi operativi e una migliore pianificazione dell’utilizzo delle unità di terapia intensiva neonatale (TIN).

3. Prevenzione e identificazione dei fattori di rischio

Il modello potrà evidenziare i fattori che maggiormente influenzano negativamente il peso del neonato (come il fumo materno, gravidanze multiple o età avanzata della madre). Queste informazioni sono preziose per la prevenzione e la gestione personalizzata delle gravidanze, permettendo interventi proattivi in caso di rischio elevato.

4. Valutazione delle pratiche ospedaliere

Attraverso un’analisi comparativa tra i tre ospedali coinvolti, l’azienda potrà identificare eventuali differenze nei risultati clinici, come una maggiore incidenza di parti cesarei in una determinata struttura. Ciò consente di monitorare la qualità delle pratiche e armonizzare i protocolli tra i diversi centri ospedalieri, migliorando la coerenza delle cure.

5. Supporto alla pianificazione strategica

L’analisi dei dati e le previsioni possono essere utilizzate per prendere decisioni informate non solo a livello clinico ma anche strategico. L’azienda potrà sfruttare queste informazioni per implementare nuove politiche di salute pubblica, garantendo un impatto positivo sui tassi di mortalità e morbilità neonatale.

Nota. Ho rimosso due righe dove la madre aveva 0 e 1 anno.

1. Raccolta dei Dati e Struttura del Dataset

Per costruire il modello predittivo, abbiamo raccolto dati su 2500 neonati provenienti da tre ospedali. Le variabili raccolte includono:

  • Età della madre: Misura dell’età in anni.
  • Numero di gravidanze: Quante gravidanze ha avuto la madre.
  • Fumo materno: Un indicatore binario (0=non fumatrice, 1=fumatrice).
  • Durata della gravidanza: Numero di settimane di gestazione.
  • Peso del neonato: Peso alla nascita in grammi.
  • Lunghezza e diametro del cranio: Lunghezza del neonato e diametro craniale, misurabili anche durante la gravidanza tramite ecografie.
  • Tipo di parto: Naturale o cesareo.
  • Ospedale di nascita: Ospedale 1, 2 o 3.
  • Sesso del neonato: Maschio (M) o femmina (F).

L’obiettivo principale è identificare quali di queste variabili sono più predittive del peso alla nascita, con un focus particolare sull’impatto del fumo materno e delle settimane di gestazione, che potrebbero indicare nascite premature.

##   Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio Tipo.parto
## 1         26            0         0         42 3380       490    325        Nat
## 2         21            2         0         39 3150       490    345        Nat
## 3         34            3         0         38 3640       500    375        Nat
## 4         28            1         0         41 3690       515    365        Nat
## 5         20            0         0         38 3700       480    335        Nat
## 6         32            0         0         40 3200       495    340        Nat
##   Ospedale Sesso
## 1     osp3     M
## 2     osp1     F
## 3     osp2     M
## 4     osp2     M
## 5     osp3     F
## 6     osp2     F
##   Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio
## 1         26            0         0         42 3380       490    325
## 2         21            2         0         39 3150       490    345
## 3         34            3         0         38 3640       500    375
## 4         28            1         0         41 3690       515    365
## 5         20            0         0         38 3700       480    335
## 6         32            0         0         40 3200       495    340
##   Parto.naturale Ospedale Femmina
## 1              1        3       0
## 2              1        1       1
## 3              1        2       0
## 4              1        2       0
## 5              1        3       1
## 6              1        2       1

Scatterplot

Commento agli scatterplot

Mi sembra di notare un andamento lineare per ‘Lunghezza’, ‘Cranio’, e ‘Peso’ (in ordine di quanto è vicino alla linearità l’andamento). Riguardo ‘Anni.madre’, il grafico mostra una nuvola di punti centrata, senza una tendenza lineare evidente tra le due variabili.

Nota: Per le variabili con pochi valori discreti qui non ho fatto nulla, le analizzerò in questo senso nella sezione prossima tramite boxplots e piecharts, quindi evito di ripetere.

Correlazione lineare

Indice di Spearman

##        variabile   rho
## 1     Anni.madre -0.01
## 2   N.gravidanze  0.02
## 3      Fumatrici -0.04
## 4     Gestazione  0.43
## 5      Lunghezza  0.75
## 6         Cranio  0.63
## 7 Parto.naturale  0.01
## 8       Ospedale  0.02
## 9        Femmina -0.27

Commento alla correlazione lineare e all’indice di Spearman.

Le due correlazioni danno risultati simili. C’è una correlazione: - Debole per ‘Femmina’ ~ Proporzionalità inversa. - Moderata per ‘Gestazione’. - Forte per ‘Lunghezza’ e ‘Cranio’.

Osservazione: che ‘Lunghezza’ ha a sua volta una correlazione forte con ‘Cranio’ e ‘Gestazione’ e ‘Cranio’ e ‘Gestazione’ sono a loro volta legate tra loro. ‘Femmina’ invece sembra indipendente da queste, il che la rende interessante come variabile anche se di per se è meno correlata con ‘Peso’. Quindi sarà unportante considerare il VIF mentre si pensera al modello per considerare anche la possibilità di rimuovere una o due di queste variabili (ad esempio, ‘Lunghezza’ e ‘Cranio’ sono molto correlate, quindi magari il modelli migliore ne ha solo una delle due, è una possibilità da considerare).

Test chi quadrato di Pearson

Prima di tutto creo delle classi delle variabili troppo granulari. Ho fatto varie prove per scegliere questi parametri, così che non avesi mai classi poco popolose (problematico per il chi value).

Anni.madre -> 0-20, 20-30, 30-38, 39+

N.gravidanze -> 0, 1, 2, 3, 4+

Peso -> 0-2750,2751-3500, 3501+

Gestazione -> 0-35, 36-37, 38-40, 41+

Lunghezza -> 0-425, 426-450, 451-475, 475+

Cranio -> 0-320, 321-340, 341+

## # A tibble: 9 × 4
##   Variabile      Statistica Gradi_libertà P_value
##   <chr>               <dbl>         <dbl>   <dbl>
## 1 Anni.madre          20.6              8   0.008
## 2 N.gravidanze         8.72             8   0.367
## 3 Fumatrici            5.3              2   0.071
## 4 Gestazione         724.               6   0    
## 5 Lunghezza         1600.               6   0    
## 6 Cranio             913.               4   0    
## 7 Parto.naturale       3.51             2   0.173
## 8 Ospedale             8.49             4   0.075
## 9 Femmina            119.               2   0

Commento al test chi quadrato di Pearson

Da questa analisi, si ha la conferma che “Gestazione”, “Cranio”, “Lunghezza” e “Femmina” hanno una correlazione forte (con magnitudine molto più forte nei primi 3). Sembra che anche “Anni.madre” abbia una correlazione significativa, debole, ma ha un p-value comunque minore di 0.05 (cosa che non avevo colto dagli scatterplot). Sicuramente non è una correlazione impattante come le altre, ma ne terremo considerazione (e non è lineare). L’unica cosa inaspettata è che ospedale ha un p-value piccolo, non significativo ma quasi, mentre mi sarei aspettato che fosse la variabile con il p-value più alto.

Test di Kendall

Commento al test di Kendall.

Kendall confermal, ma con valori diversi, la correlazione lineare. In particolare, le variabili con correlazione significativa restano ‘Gestazione’, ‘Lunghezza’, ‘Cranio’, ‘Femmina’. La correlazione per ‘Femmina’ è praticamente uguale nei due test, quella per ‘Gestazione è quasi dimezzata, quella di ’Lunghezza’ è diminuita di circa 1/4 (da 0.8 a 0.59) mentre quella di ‘Cranio’ diminuisce di meno di metà (da 0.7 a 0.47). Questo lo interpreto considerando che ‘Gestazione’, ‘Lunghezza’, ‘Cranio’ siano più correlate linearmente con ‘Peso’ (si vede bene anche dallo scatter) rispetto alle altre variabili, e Kendall coglie meno la correlazione perchè la correlazione lineare è più specifica per il tipo di correlazione reale che esite. Rispetto ‘Femmina’, evidentemente accade che la correlazione che c’è non è altrettanto lineare, ma viene colta comunque sia dalla correlazione lineare che da un test più robusto come quello di Kendall.

Variabili più interessanti individuate finora

Le variabili che per i test fatti finora sembrano le più interessanti sono:

  • ‘Gestazione’, ‘Lunghezza’, ‘Cranio’ per la evidente correlazione lineare che hanno con ‘Peso’. Sembra chiaro che il loro contributo è lineare per ora, ma faremo più prove in seguito.
  • ‘Femmina’, che ha una correlazione debole sia misurata con Kendall che con una correlazione lineare, ma sembra interessante anche perchè meno correlata alle altre.
  • ‘Anni.madre’, nel test chi quadro facendo varie prove trovo un p-value di 0.007. Probabilmente l’intensità della correlazione è bassa, ma c’è, anche se penso che alla fine non avrà un impatto.

Nota: Tra le due variabili indicate come più critice, ‘Gestazione’ risulta rilevanete, mente ‘Fumatrici’ non sembra rilevante in nessuno dei casi. In ogni caso, qualunque considerazione qui non mi sembra troppo indicativa, visto il fatto che ci sono pochissime righe (il 4%) con madre fumatrice. (Farò osservazioni ulteriori riguardo ‘Fumatrici’ nell’analisi dei boxplots e piecharts, come già accennato.)

2. Analisi e Modellizzazione

Analisi Preliminare

Nella prima fase, esploreremo le variabili attraverso un’analisi descrittiva per comprenderne la distribuzione e identificare eventuali outlier o anomalie. Inoltre si saggeranno le seguenti ipotesi con i test adatti:

  1. in alcuni ospedali si fanno più parti cesarei
  2. La media del peso e della lunghezza di questo campione di neonati sono significativamente uguali a quelle della popolazione
  3. Le misure antropometriche sono significativamente diverse tra i due sessi

Misure (visualizzate con barcharts)

Commento ai barchart

Vedo che media e mediana sono valori simili o coincidenti, che è segnale di dati centrati e simmetrici.

  • Anni.madre: Sembra una variabile simmetrica con code pesanti sia a destra che sinistra (Nota. A questo punto del progetto ho notato che c’erano delle madri con 0 e 1 anno. Ho corretto la cosa rimuovendole dall’inizio.)
  • N.gravidanze: Qui mi aspetto outlier con valori molto alti.
  • Gestazione e Lunghezza: Il contrario, le distrubuzioni sono sbilancaiate verso il basso con degli outlier (visto che comunque media e mediana sono quasi uguali, con la media un po’ inveriore proprio perchè attratta dagli outlier di valore basso).
  • Peso e Cranio: Mi sembrano distrubuzioni regolari senza grossi sbilanciamenti, ‘Cranio’ è leggermente sbilanciata in basso.

Indici di forma

##              skewness kurtosis
## Anni.madre       0.15     2.89
## N.gravidanze     2.51    13.98
## Gestazione      -2.07    11.26
## Peso            -0.65     5.03
## Lunghezza       -1.51     9.48
## Cranio          -0.79     5.94

Commento agli indici di forma.

Le variabili, come già immaginavo, sono simmetriche. N.gravidanze come previsto ha una coda pesante verso la destra. Anche ‘Gestazione’ e ‘Lunghezza’ in realtà, in generale tutte le variabili sono sbilanciate a destra a livello di pesantezza della coda. ‘Anni.madre’ è simmetrica con code poco pesanti, il che significa che i suoi massimi e minimi sono outliers.

Boxplot (normalizzato)

Ho normalizzato il boxplot, alla fine volevo vedere più che altro caratteristiche qualitative e non quantitative. Inoltre ho voluto esplorare meglio la variabile ‘Fumatrici’, in particolare in relazione agli outliers, colorando di rosso quelli con ‘Fumatrici’=1 (relativi a madri fumetrici). Non sembra che ad esempio gestazioni molto basse siano particolarmente legate a fumatrici (1 su 71).

  • Anni.Madre: Come già osservato, ci sono pochi outliers sia bassi che alti. (NB. ripeto, c’erano sono due outliers non realistici, rimossi.)
  • Cranio, Gestazione, Lunghezza: Qui vedo degli outliers con valori bassi, ma che non costituiscono code pesanti perchè in realtà le variabili sono sbilanciate a destra (cosa che non si vede troppo dal boxplot, forse un po’ per lunghezza.) Vedremo nell’analisi dei residui se questi elementi vale la pena tenerli, forse no perchè sono molto sbilanciati ma alla fine poco influenti.
  • N.gravidanze: Ci sono alcune madri con tante gravidanze, la maggiorparte ne ha avute ‘poche’ (quantitativamente, 0,1,2). E’ una variabile con code verso destra (o meglio, l’alto) pesanti e in questo caso gli outliers hanno rilevanza.
  • Peso: Variabile bilanciata.

Misure di variabilità

## # A tibble: 6 × 6
##   Variabile    Range  Variance     SD    CV   IQR
##   <chr>        <dbl>     <dbl>  <dbl> <dbl> <dbl>
## 1 Anni.madre      33     27.2    5.22  0.19     7
## 2 N.gravidanze    12      1.64   1.28  1.3      1
## 3 Gestazione      18      3.49   1.87  0.05     2
## 4 Peso          4100 275866.   525.    0.16   630
## 5 Lunghezza      255    693.    26.3   0.05    30
## 6 Cranio         155    270.    16.4   0.05    20

Commento a misure di variazione

Le variabili sembrano essere abbastanza stabili, tranne N.gravidanze, ma qui c’è un discorso a parte. N.gravidanze sembra la variabile con più varianza, causato sicuramente dagli outliers. Secondo me non ha senso interpretare questo risultato, analizzerò N.gravidanze senza outliers (da 0 a 3) nei grafici sotto.

Frequenze di variabili con pochi valori discreti

Commento alle frequenze delle variabili con pochi valori discreti

  • Femmina: Qui si riflette il fatto che questa variabile è correlata a peso. Infatti, più si va verso classi di peso alte, più il numero di femmine diminuisce.
  • Fumatrici: Variabile su cui si può dire poco, in quanto sono presenti pochi campioni di madri fumatrici. Addirittura sembrano esserci meno fumatrici per bambini a peso basso, che è l’opposto di quello che ci si aspetta, ma comunque non è significativo.
  • N.Gravidanze: Anche qui sembra che se il bimbo è il quarto, il suo peso ha una leggera tendenza ad essere o basso o alto, ma è poco significativo per farci venire i dubbi sui test precedenti.
  • Ospedale: Qui non c’è nessuna correlazione
  • Parto.naturale: Sembra che se si nasce di parto cesario si abbia la tendenza ad avere un peso più nella media, che per me è anche intuitivo, se si procede col cesario, lo si fa nel momento in cui il bambino non è prematuro ne si aspetta troppo. In seguito proverò a considerare questa variabile, anche se non mi aspetto abbia un impatto così significativo.
##   Peso_range    n
## 1     0-2000   50
## 2  2000-3000  578
## 3  3000-4000 1690
## 4      4000+  180

Questo comportamento è interessante quindi per ora non mi sento di scartare le variabili, in seguito vedrò se tenerle o no.

Gini index

## # A tibble: 6 × 2
##   Variabile          Gini
##   <chr>             <dbl>
## 1 N.gravidanze      0.678
## 2 Fumatrici         0.08 
## 3 Parto.naturale    0.413
## 4 Ospedale          0.667
## 5 Femmina           0.5  
## 6 N.gravidanze (≤3) 0.653

Commento indice di Gini

Le variabili, a parte ‘Fumatrici’, sono abbastanza bilanciate. Per ‘N.gravidanze’ ho anche fatto una prova restringendo il campo escludento le code (è la variabile con le code più pesanti), e non cambia di molto.

Verifica ipotesi

Ipotesi 1: In alcuni ospedali ci sono più parti cesari.

\(H_0\): Non ci sono differenze sistematiche tra il numero di parti cesari

E ora provo a smentirla. Faccio 3 test Z confrontando coppie di ospedali. Scelgo \(\alpha\) uguale a 0.05.

## [1] "Z value del confronto tra Ospedale 1 e 2: -0.13"
## [1] "Z value del confronto tra Ospedale 1 e 3: 0.82"
## [1] "Z value del confronto tra Ospedale 2 e 3: 0.96"

Non rifiuto l’ipotesi in tutti e tre i casi. Gli p-value sono 0.896, 0.412 e 0.96. Da notare che il non-rifiuto è più forte (p-value più alto) tra ospedale 1 e 2, dove effettivamente il numero di cesari è molto vicino.

Conclusione Non rifiuto l’ipotesi.

Ipotesi 2. La media del peso e della lunghezza di questo campione di neonati sono significativamente uguali a quelle della popolazione.

Prendo valori di riferimento come peso e lunghezza della popolazione 3300 e 500 e come confidenza 0.95.

## [1] "p-value per peso: 0.132"
## [1] "p-value per lunghezza assumendio media della popolazione:"
## [1] "500: 2.1e-23"
## [1] "495: 0.564"
## [1] "490: 9.29e-19"

Peso: Il t-test di peso dimostra che siamo in linea con la popolazione, avendo un pvalue 0.132.

Lunghezza: Lunghezza dimostra che siamo leggermente sotto rispetto alla lunghezza della popolazione. In realtà saremmo in linea se come media avessi scelto 495, visto che la mia scelta è stata non precisa ma ho preso un riferimento che ho trovato, in realtà anche in questo caso nel complesso concludo che siamo in linea con la popolazione.

Conclusione: In sostanza, non rifiuto l’ipotesi 2.

Ipotesi 3. Le misure antropometriche sono significativamente diverse tra i due sessi

## [1] "p-value per 'Peso' confrontando maschi e femmine 7.28e-33"
## [1] "p-value per 'Lunghezza' confrontando maschi e femmine 2.23e-21"
## [1] "p-value per 'Cranio' confrontando maschi e femmine 1.41e-13"

Quello che ho fatto è fare un test confrontando direttamente maschi e femmine. Il test verifica se i due vettori soni uguali, p-value bassi dicono che non lo sono.

Conclusione: Quindi (rifiutando il suo opposto in realtà) non rifiuto l’Ipotesi 3.

Creazione del Modello di Regressione

Verrà sviluppato un modello di regressione lineare multipla che includa tutte le variabili rilevanti. In questo modo, potremo quantificare l’impatto di ciascuna variabile indipendente sul peso del neonato ed eventuali interazioni. Ad esempio, ci aspettiamo che una maggiore durata della gestazione aumenterebbe in media il peso del neonato.

Le regressioni le farò con le variabili scalate (media 0 e deviazione standard 1) in modo tale che anche i coefficienti possono aiutarmi a capire il peso relativo di una rispetto alle altre.

Faccio una prima previsione usando tutte le variabili, tanto per avere un riferimento iniziale più che altro.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.717 
## R² aggiustato:             0.716 
## MSE:                       72498.73 
## MSE normalizzato:          0.234 
## RSE:                       269.256 
## RSE normalizzato:          0.484 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.931 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                        Estimate Std. Error  t value Pr(>|t|)
## (Intercept)           3292.0080     6.1678 533.7428   0.0000
## scale(Anni.madre)        3.7701     6.6969   0.5630   0.5735
## scale(N.gravidanze)     16.3283     6.6921   2.4399   0.0148
## scale(Fumatrici)        -6.1865     6.1988  -0.9980   0.3184
## scale(Gestazione)       59.6631     7.8476   7.6028   0.0000
## scale(Lunghezza)       260.5545     8.6367  30.1682   0.0000
## scale(Cranio)          175.3192     7.7087  22.7431   0.0000
## scale(Parto.naturale)   15.9970     6.1814   2.5879   0.0097
## scale(Ospedale)          9.5418     6.1791   1.5442   0.1227
## scale(Femmina)         -43.4808     6.2905  -6.9121   0.0000
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                         Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Anni.madre)        1    312663    312663    4.1136  0.042673 *  
## scale(N.gravidanze)      1    142877    142877    1.8798  0.170512    
## scale(Fumatrici)         1    446742    446742    5.8776  0.015423 *  
## scale(Gestazione)        1 175944384 175944384 2314.8464 < 2.2e-16 ***
## scale(Lunghezza)         1 161219224 161219224 2121.1120 < 2.2e-16 ***
## scale(Cranio)            1  40352376  40352376  530.9038 < 2.2e-16 ***
## scale(Parto.naturale)    1    549754    549754    7.2330  0.007218 ** 
## scale(Ospedale)          1    201356    201356    2.6492  0.103762    
## scale(Femmina)           1   3631410   3631410   47.7774 6.409e-12 ***
## Residuals             1988 151101792     76007                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                          Sum Sq PercVar
## scale(Anni.madre)        312663   0.059
## scale(N.gravidanze)      142877   0.027
## scale(Fumatrici)         446742   0.084
## scale(Gestazione)     175944384  32.954
## scale(Lunghezza)      161219224  30.196
## scale(Cranio)          40352376   7.558
## scale(Parto.naturale)    549754   0.103
## scale(Ospedale)          201356   0.038
## scale(Femmina)          3631410   0.680
## Residuals             151101792  28.301
## 
## AIC: 28136.74 
## BIC: 28198.33 
## ═══════════════════════════════════════════

In media, il modello sbaglia di circa + o - 269 grammi nel prevedere il peso del neonato, circa il 48% dela deviazione standard del peso reale. Quindi le prestazioni sono precise e coerenti coi pesi reali.

Ora faccio la previsione con le variabili rilevanti che ho selezionato, tenendo in realtà anche ‘Parto.naturale’ perchè da sopra sembra che sia rilevante e guardando i diagrammi a torta sembrava che fosse comunque legata a ‘Peso’, nonostante questo legame non l’avessi colto prima. Qui mi risulta che ‘Anni.Madre’ non è rilevante, ma la tengo per ora perchè dalle analisi prima sembrava interessante, semmai la tolgo dopo.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.716 
## R² aggiustato:             0.715 
## MSE:                       72498.73 
## MSE normalizzato:          0.234 
## RSE:                       269.256 
## RSE normalizzato:          0.484 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.931 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                        Estimate Std. Error  t value Pr(>|t|)
## (Intercept)           3292.0080     6.1774 532.9153   0.0000
## scale(Cranio)          177.0471     7.6952  23.0075   0.0000
## scale(Gestazione)       58.4550     7.8338   7.4619   0.0000
## scale(Lunghezza)       259.8352     8.6311  30.1047   0.0000
## scale(Anni.madre)        9.6774     6.2679   1.5440   0.1228
## scale(Femmina)         -44.0950     6.2918  -7.0083   0.0000
## scale(Parto.naturale)   15.7905     6.1830   2.5538   0.0107
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                         Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Cranio)            1 258171372 258171372 3386.1573 < 2.2e-16 ***
## scale(Gestazione)        1  47016396  47016396  616.6637 < 2.2e-16 ***
## scale(Lunghezza)         1  72442447  72442447  950.1500 < 2.2e-16 ***
## scale(Anni.madre)        1    213504    213504    2.8003   0.09440 .  
## scale(Femmina)           1   3761443   3761443   49.3348  2.95e-12 ***
## scale(Parto.naturale)    1    497265    497265    6.5221   0.01073 *  
## Residuals             1991 151800152     76243                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                          Sum Sq PercVar
## scale(Cranio)         258171372  48.356
## scale(Gestazione)      47016396   8.806
## scale(Lunghezza)       72442447  13.568
## scale(Anni.madre)        213504   0.040
## scale(Femmina)          3761443   0.705
## scale(Parto.naturale)    497265   0.093
## Residuals             151800152  28.432
## 
## AIC: 28139.95 
## BIC: 28184.75 
## ═══════════════════════════════════════════

Non ho peggioramenti, eliminando le variabili che non ho ritenuto interessanti. In realtà guardando solo AIC e BIC sembra che il modello con tutte le variabili principali sia migliore, ma in questo caso si tratta di overfitting. Basta guardare la significatività delle variabili. Per fortuna torna come previsto, ovvero semplificando il modello non ho peggioramenti dei risultati.

Selezione del Modello Ottimale

Attraverso tecniche di selezione del modello, come la minimizzazione del criterio di informazione di Akaike (AIC) o di Bayes (BIC), selezioneremo il modello più parsimonioso, eliminando le variabili non significative. Verranno considerati anche modelli con interazioni tra le variabili e possibili effetti non lineari.

Come punto di partenza scelgo il modello avente come variabili <‘Lunghezza’, ‘Cranio’,‘Gestazione’,‘Anni.madre’, ‘Parto.naturale’,‘Femmina’>. Come detto prima, queste sono variabili che in almeno una delle fasi precedenti sono risultate rilevanti.

Qui ora faccio una serie di prove guardando AIC e BIC, scegliendo il modello migliore e poi nella sezione successiva lo analizzerò più nel dettaglio.

Chi tenere tra ‘Anni.madre’, ‘Parto.naturale’, e ‘Femmina’.

Intanto cerco di capire chi tenere tra ‘Anni.madre’ e ‘Parto.naturale’, visto che la prima non risultava rilevante dopo la regressione iniziale e la seconda non risultava rilevante nell’analisi della seconda parte del progetto.

## Rimuovo 'Anni.madre'
## 
## AIC: 28140.34 
## BIC: 28179.54
## Rimuovo 'Parto.naturale'
## 
## AIC: 28144.48 
## BIC: 28183.68
## Rimuovo 'Anni.madre' e 'Parto.naturale'
## 
## AIC: 28144.83 
## BIC: 28178.43

La cosa migliore sembra rimuovere ‘Anni.madre’, BIC è leggermente peggiore nel caso di rimozione di entrambe, ma ho un miglioramento di impatto maggiore nell’AIC. Comunque siamo lì non ci sono differenze grosse. Ora valuto se rimuovere ‘Femmina’, che risultava rilevante sempre, ma con un impatto inferiore rispetto a ‘Gestazione’, ‘Cranio’, e ‘Lunghezza’.

## Modello attuale
## 
## AIC: 28140.34 
## BIC: 28179.54
## Rimuovo 'Femmina'
## 
## AIC: 28187.42 
## BIC: 28221.01

Ho un peggioramento di BIC (quindi anche di AIC), quindi mantengo la variabile ‘Femmina’. Il suo impatto è marginale, ma comunque rilevante, ci da vera informazione.

Conclusione: Rimuovo Anni.madre. Le mie variabili di riferimento ora sono <‘Lunghezza’, ‘Cranio’,‘Gestazione’, ‘Parto.naturale’,‘Femmina’>, anche se ‘Parto.naturale’ non mi convince ancora.

Rimozione variabili correlate alle altre.

Quello che è da capire è se alcune variabili sono correlate e posso fare a meno di una. Ad esempio, vedendo le correlazioni, noto che ‘Lunghezza’ e ‘Cranio’ sono molto correlate. I loro coefficienti, infatti, pur essendo alti, poi non si riperquotono nel peso ANOVA mostrata in precedenza. Ad esempio, ‘Lunghezza’ ha il coefficente maggiore, ma il suo peso nel summary ANOVA è nettamente più basso di ‘Cranio’. ‘Gestazione’, anche dalla tabella di correlazione, sembra essere più indipendente dalle altre due. Faccio delle prove calcolando intanto i VIF.

##         scale(Cranio)     scale(Gestazione)      scale(Lunghezza) 
##                 1.540                 1.576                 1.951 
##        scale(Femmina) scale(Parto.naturale) 
##                 1.036                 1.001

Sembra che le variabili siano sufficientemente indipendenti tra di loro. Rimuovendone una dovrei avere un peggioramento notevole del modello. Faccio una prova, rimuovendo la più vicina all’essere poco significativa ovvero ‘Lunghezza’ (che in effetti ha un valore vicino a 2).

## Modello attuale
## 
## AIC: 28140.34 
## BIC: 28179.54
## Rimuovo 'Lunghezza'
## 
## AIC: 28886.22 
## BIC: 28919.81

Ho un peggioramento circa 10 volte più significativo rimuovendo ‘Lunghezza’ rispetto a rimuovere ‘Femmina’, dato che ‘Femmina’ già era utile tenerlo qui non ci sono dubbi.

Arricchimento del modello con variabili non lineari.

Dato che Lunghezza e Cranio sono correlate, inserisco un termine che ne è il prodotto sperando di spiegare meglio la variabile.

## Modello attuale
## 
## AIC: 28140.34 
## BIC: 28179.54
## Aggiungo 'Lunghezza'*'Cranio'
## 
## AIC: 28131.61 
## BIC: 28176.41
## Aggiungo 'Lunghezza'*'Cranio' e tolgo 'Cranio'
## 
## AIC: 28129.69 
## BIC: 28168.89
## Aggiungo 'Lunghezza'*'Cranio' e tolgo 'Lunghezza'
## 
## AIC: 28130.02 
## BIC: 28169.22
## Aggiungo 'Lunghezza'*'Cranio' e tolgo sia 'Lunghezza' che 'Cranio'
## 
## AIC: 28145.95 
## BIC: 28179.55

La cosa migliore sembra aggiungere ‘Lunghezza’*‘Cranio’ e togliere ‘Cranio’. Le mie variabili ora sono **<‘Lunghezza’, ‘Lunghezza’*‘Cranio’,‘Gestazione’, ‘Parto.naturale’,‘Femmina’>**

Provo ad inserire un contributo quadratico di gestazione, che mi sembra la meno lineare delle variabili.

## Modello attuale
## 
## AIC: 28129.69 
## BIC: 28168.89
## Aggiungo 'Gestazione'^2
## 
## AIC: 28129.2 
## BIC: 28174
## Aggiungo 'Gestazione'^2 e rimuovo 'Gestazione'
## 
## AIC: 28131.73 
## BIC: 28170.93

Il contributo di ‘Gestazione’ non sembra significativo quindi evito di aggiungerlo per ora. Provo ad inserire ‘Cranio’\(^2\) e ‘Lunghezza’\(^2\)

## Modello attuale
## 
## AIC: 28129.69 
## BIC: 28168.89
## Aggiungo 'Cranio'^2
## 
## AIC: 28131.23 
## BIC: 28176.03
## Aggiungo 'Lunghezza'^2
## 
## AIC: 28089.2 
## BIC: 28134
## Aggiungo 'Lunghezza'^2 e 'Cranio'^2
## 
## AIC: 28053.46 
## BIC: 28103.86

L’ultima variante, dove entrambe ‘Cranio’ e ‘Lunghezza’ vengono inserite con un termine quadratico, sembra la migliore per ora guardando solo indici AIC e BIC. In seguito raffinero eventualmente questa scelta con analisi più approfondite.

Le mie variabili ora sono **<‘Lunghezza’, ‘Lunghezza’*‘Cranio’, ‘Lunghezza’\(^2\),‘Cranio’\(^2\), ‘Gestazione’, ‘Parto.naturale’,‘Femmina’>**

Analisi della Qualità del Modello

Una volta ottenuto il modello finale, valuteremo la sua capacità predittiva utilizzando metriche come R² e il Root Mean Squared Error (RMSE). Un’attenzione particolare sarà rivolta all’analisi dei residui e alla presenza di valori influenti, che potrebbero distorcere le previsioni, indagando su di essi.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.728 
## R² aggiustato:             0.727 
## MSE:                       70178.62 
## MSE normalizzato:          0.227 
## RSE:                       264.912 
## RSE normalizzato:          0.476 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.933 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                               Estimate Std. Error  t value Pr(>|t|)
## (Intercept)                  3292.0080     6.0436 544.7112   0.0000
## scale(Gestazione)              70.6230     7.8358   9.0129   0.0000
## scale(Lunghezza)             -255.9479   102.6690  -2.4929   0.0127
## scale(Femmina)                -41.8224     6.1726  -6.7755   0.0000
## scale(Parto.naturale)          13.7863     6.0533   2.2775   0.0229
## scale(I(Cranio * Lunghezza)) -899.1023   199.0740  -4.5164   0.0000
## scale(I(Lunghezza)^2)        1048.2567   116.4301   9.0033   0.0000
## scale(I(Cranio)^2)            655.0842   106.3389   6.1603   0.0000
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                                Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Gestazione)               1 172696287 172696287 2366.4556 < 2.2e-16 ***
## scale(Lunghezza)                1 162723752 162723752 2229.8021 < 2.2e-16 ***
## scale(Femmina)                  1   4817452   4817452   66.0135 7.777e-16 ***
## scale(Parto.naturale)           1    589231    589231    8.0742  0.004536 ** 
## scale(I(Cranio * Lunghezza))    1  41901779  41901779  574.1797 < 2.2e-16 ***
## scale(I(Lunghezza)^2)           1   3180850   3180850   43.5872 5.186e-11 ***
## scale(I(Cranio)^2)              1   2769456   2769456   37.9498 8.760e-10 ***
## Residuals                    1990 145223772     72977                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                                 Sum Sq PercVar
## scale(Gestazione)            172696287  32.346
## scale(Lunghezza)             162723752  30.478
## scale(Femmina)                 4817452   0.902
## scale(Parto.naturale)           589231   0.110
## scale(I(Cranio * Lunghezza))  41901779   7.848
## scale(I(Lunghezza)^2)          3180850   0.596
## scale(I(Cranio)^2)             2769456   0.519
## Residuals                    145223772  27.200
## 
## AIC: 28053.46 
## BIC: 28103.86 
## ═══════════════════════════════════════════

Commento Il modello sembra avere una buona capacità predittiva, spiegando quindi circa il 73% della variabilità del peso neonatale e sbagliando di media di circa 264 grammi, quindi meglio di prima (anche in termini di RSE normalizzato). Le variabili più influenti risultano Gestazione e Lunghezza, che insieme spiegano oltre il 60% della varianza, l’effetto di Cranio lo vediamo nel termine ‘Cranio’x’Lunghezza’. Da notare che ‘Cranio’ sembra poco influente, a giudicare dai numeri, ma in realtà non è così, la sua influenza è esercitata perchè è correlato con ‘Lunghezza’. Limitando l’influenza di ‘Cranio’, che non spiega troppo di più di quello che spiega ‘Lunghezza’, ‘Gestazione’ si dimostra più rilevante e addirittura la più rilevante di tutte, cosa che non era sospettabile nella fase di selezione delle variabili. Tutti i coefficienti sono statisticamente significativi. L’effetto di Femmina è negativo, come atteso, mentre Parto naturale ha un’influenza positiva ma modesta. L’AIC e il BIC sono relativamente bassi, rispetto ai modelli precedenti, suggerendo un buon compromesso tra accuratezza e semplicità.

Studio dei residui e raffinamento finale

##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -1327.76  -180.79   -11.15     0.00   161.66  1204.76
## [1] 4.924656e-15
## [1] 269.6683

La media è vicina a 0, quindi il modello non sbaglia sempre sistematicamente allo stesso modo o sovrastimando o sottostimando (non c’è bias). Anche la mediana con minimo e massimo sono minanciati. La deviazione standard è di 270 grammi, in linea esattamente con il MSE misurato prima che è circa \(270^2\). Dal grafico qui sotto si vede che la media dei residui è esattamente l’asse X, quindi si può essere soddisfatti di questa analisi.

Mi sembra chiaro che ci sono dei valori influenti (uno in particolare molto influente). Andiamo ad analizzare meglio la cosa.

##      CookD
## 1549  7.18
## 310   0.36
## 1427  0.17
## 155   0.03
## 2113  0.03
## 684   0.03
##      Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio
## 1549         35            1         0         38 4370       315    374
## 310          40            3         0         28 1560       420    379
## 1427         24            4         0         29 1280       390    355
## 155          30            0         0         36 3610       410    330
## 2113         35            1         0         32 1890       500    309
## 684          30            1         0         39 3000       475    390
##      Parto.naturale Ospedale Femmina
## 1549              1        3       1
## 310               1        3       1
## 1427              1        1       1
## 155               1        1       0
## 2113              1        2       1
## 684               0        2       1

Qui sopra le righe influenti sono ordinate per magnitudine di influenza. La riga 1549 è quella che nel grafico precedente si stacca novevolmente dalle altre, con un valore 7.18. E’ un bambino con cranio e lunghezza ridotti ma molto pesante, che va contro ogni intuizione avuta finora. (Gli altri sono dati dove ci sono valori fuori la norma, come gestazioni basse.) Dato che questa riga da sola ha 20 volte più influenza della seconda più influente ed è 700 volte più influente dell’ottava più influente, verifico se basta rimuovere questa riga per avere risultati notevolmente migliori.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.729 
## R² aggiustato:             0.728 
## MSE:                       70213.34 
## MSE normalizzato:          0.227 
## RSE:                       264.978 
## RSE normalizzato:          0.476 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.933 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                               Estimate Std. Error  t value Pr(>|t|)
## (Intercept)                  3292.0541     6.0408 544.9724   0.0000
## scale(Gestazione)              70.9508     7.8315   9.0596   0.0000
## scale(Lunghezza)             -256.3408   102.6203  -2.4980   0.0126
## scale(Femmina)                -42.0642     6.1694  -6.8182   0.0000
## scale(Parto.naturale)          13.3568     6.0507   2.2075   0.0274
## scale(I(Cranio * Lunghezza)) -899.6498   198.9320  -4.5224   0.0000
## scale(I(Lunghezza)^2)        1048.6479   116.3749   9.0109   0.0000
## scale(I(Cranio)^2)            655.6487   106.2168   6.1727   0.0000
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                                Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Gestazione)               1 172863085 172863085 2372.1341 < 2.2e-16 ***
## scale(Lunghezza)                1 162615128 162615128 2231.5053 < 2.2e-16 ***
## scale(Femmina)                  1   4843878   4843878   66.4707 6.215e-16 ***
## scale(Parto.naturale)           1    573542    573542    7.8705  0.005074 ** 
## scale(I(Cranio * Lunghezza))    1  42102486  42102486  577.7563 < 2.2e-16 ***
## scale(I(Lunghezza)^2)           1   3176168   3176168   43.5853 5.191e-11 ***
## scale(I(Cranio)^2)              1   2776638   2776638   38.1027 8.112e-10 ***
## Residuals                    1989 144943184     72872                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                                 Sum Sq PercVar
## scale(Gestazione)            172863085  32.378
## scale(Lunghezza)             162615128  30.458
## scale(Femmina)                 4843878   0.907
## scale(Parto.naturale)           573542   0.107
## scale(I(Cranio * Lunghezza))  42102486   7.886
## scale(I(Lunghezza)^2)          3176168   0.595
## scale(I(Cranio)^2)             2776638   0.520
## Residuals                    144943184  27.148
## 
## AIC: 28036.56 
## BIC: 28086.96 
## ═══════════════════════════════════════════

Rimuovendo solo questa riga già ho un miglioramento.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.772 
## R² aggiustato:             0.771 
## MSE:                       70071.78 
## MSE normalizzato:          0.227 
## RSE:                       264.711 
## RSE normalizzato:          0.476 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.933 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                               Estimate Std. Error  t value Pr(>|t|)
## (Intercept)                  3292.4562     5.2857 622.8950   0.0000
## scale(Gestazione)              53.3074     6.8372   7.7967   0.0000
## scale(Lunghezza)              -91.7854   101.2307  -0.9067   0.3647
## scale(Femmina)                -43.4192     5.3929  -8.0512   0.0000
## scale(Parto.naturale)           9.7989     5.2973   1.8498   0.0645
## scale(I(Cranio * Lunghezza)) -629.1142   367.7507  -1.7107   0.0873
## scale(I(Lunghezza)^2)         717.9933   210.8698   3.4049   0.0007
## scale(I(Cranio)^2)            498.2524   199.4788   2.4978   0.0126
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                                Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Gestazione)               1 141107306 141107306 2666.6085 < 2.2e-16 ***
## scale(Lunghezza)                1 161852703 161852703 3058.6495 < 2.2e-16 ***
## scale(Femmina)                  1   4689071   4689071   88.6128 < 2.2e-16 ***
## scale(Parto.naturale)           1    286299    286299    5.4104  0.020123 *  
## scale(I(Cranio * Lunghezza))    1  29225480  29225480  552.2954 < 2.2e-16 ***
## scale(I(Lunghezza)^2)           1    353293    353293    6.6764  0.009844 ** 
## scale(I(Cranio)^2)              1    330138    330138    6.2389  0.012582 *  
## Residuals                    1886  99800318     52916                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                                 Sum Sq PercVar
## scale(Gestazione)            141107306  32.242
## scale(Lunghezza)             161852703  36.983
## scale(Femmina)                 4689071   1.071
## scale(Parto.naturale)           286299   0.065
## scale(I(Cranio * Lunghezza))  29225480   6.678
## scale(I(Lunghezza)^2)           353293   0.081
## scale(I(Cranio)^2)              330138   0.075
## Residuals                     99800318  22.804
## 
## AIC: 25984.95 
## BIC: 26034.87 
## ═══════════════════════════════════════════

Qui invece ho rimosso tutto e il miglioramento è notevole, spiego il 5% in più della variabilità e AIC e BIC sono molto minori. In realtà tolti questi valori significativi, risulta che ‘Lunghezza’ non lo è più (diventa collineare col suo termine quadrato e interattivo con ‘Cranio’)

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.772 
## R² aggiustato:             0.771 
## MSE:                       71689.95 
## MSE normalizzato:          0.232 
## RSE:                       267.75 
## RSE normalizzato:          0.481 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.932 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                               Estimate Std. Error  t value Pr(>|t|)
## (Intercept)                  3292.4562     5.2855 622.9244   0.0000
## scale(Gestazione)              51.3440     6.4849   7.9175   0.0000
## scale(Femmina)                -43.7574     5.3797  -8.1338   0.0000
## scale(Parto.naturale)           9.9766     5.2934   1.8847   0.0596
## scale(I(Cranio * Lunghezza)) -709.7392   356.8213  -1.9891   0.0468
## scale(I(Lunghezza)^2)         674.1089   205.2303   3.2846   0.0010
## scale(I(Cranio)^2)            541.4772   193.6893   2.7956   0.0052
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                                Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Gestazione)               1 141107306 141107306 2666.8600 < 2.2e-16 ***
## scale(Femmina)                  1  14165622  14165622  267.7234 < 2.2e-16 ***
## scale(Parto.naturale)           1      8332      8332    0.1575  0.691538    
## scale(I(Cranio * Lunghezza))    1 178572020 178572020 3374.9250 < 2.2e-16 ***
## scale(I(Lunghezza)^2)           1   3533985   3533985   66.7906 5.473e-16 ***
## scale(I(Cranio)^2)              1    413522    413522    7.8154  0.005233 ** 
## Residuals                    1887  99843821     52911                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                                 Sum Sq PercVar
## scale(Gestazione)            141107306  32.242
## scale(Femmina)                14165622   3.237
## scale(Parto.naturale)             8332   0.002
## scale(I(Cranio * Lunghezza)) 178572020  40.803
## scale(I(Lunghezza)^2)          3533985   0.808
## scale(I(Cranio)^2)              413522   0.094
## Residuals                     99843821  22.814
## 
## AIC: 25983.78 
## BIC: 26028.15 
## ═══════════════════════════════════════════

Parto.naturale risulta marginale, a quanto pare erano questi residui a renderlo interessante, quindi provo a toglierla.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.771 
## R² aggiustato:             0.771 
## MSE:                       70273.35 
## MSE normalizzato:          0.227 
## RSE:                       265.091 
## RSE normalizzato:          0.477 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.933 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                               Estimate Std. Error  t value Pr(>|t|)
## (Intercept)                  3292.4562     5.2891 622.5038   0.0000
## scale(Gestazione)              51.6071     6.4878   7.9545   0.0000
## scale(Femmina)                -43.8628     5.3831  -8.1483   0.0000
## scale(I(Cranio * Lunghezza)) -733.0898   356.8471  -2.0544   0.0401
## scale(I(Lunghezza)^2)         687.0636   205.2538   3.3474   0.0008
## scale(I(Cranio)^2)            554.2633   193.7013   2.8614   0.0043
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                                Df    Sum Sq   Mean Sq   F value    Pr(>F)    
## scale(Gestazione)               1 141107306 141107306 2663.2598 < 2.2e-16 ***
## scale(Femmina)                  1  14165622  14165622  267.3620 < 2.2e-16 ***
## scale(I(Cranio * Lunghezza))    1 178411646 178411646 3367.3420 < 2.2e-16 ***
## scale(I(Lunghezza)^2)           1   3494449   3494449   65.9542 8.243e-16 ***
## scale(I(Cranio)^2)              1    433814    433814    8.1878  0.004264 ** 
## Residuals                    1888 100031771     52983                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                                 Sum Sq PercVar
## scale(Gestazione)            141107306  32.242
## scale(Femmina)                14165622   3.237
## scale(I(Cranio * Lunghezza)) 178411646  40.766
## scale(I(Lunghezza)^2)          3494449   0.798
## scale(I(Cranio)^2)              433814   0.099
## Residuals                    100031771  22.857
## 
## AIC: 25985.34 
## BIC: 26024.17 
## ═══════════════════════════════════════════

Gli \(R^2\) restano uguali (0.771), MSE e AIC sono scesi di un po’. Il modello è più pulito. Provo ora a rimuovere ‘Cranio’x’Lunghezza’.

## ═══════════════════════════════════════════
## 📊  Valutazione modello lineare
## ═══════════════════════════════════════════
## R²:                        0.771 
## R² aggiustato:             0.77 
## MSE:                       70365.85 
## MSE normalizzato:          0.228 
## RSE:                       265.266 
## RSE normalizzato:          0.477 
## MAPE (%):                  0.07 
## 1 - MAPE (pseudo-accuracy): 0.933 
## ───────────────────────────────
## 
## --- Coefficienti del modello ---
##                        Estimate Std. Error  t value Pr(>|t|)
## (Intercept)           3292.4562     5.2936 621.9739        0
## scale(Gestazione)       50.9166     6.4846   7.8519        0
## scale(Femmina)         -44.2131     5.3850  -8.2105        0
## scale(I(Lunghezza)^2)  265.6730     7.3917  35.9423        0
## scale(I(Cranio)^2)     156.5682     6.6709  23.4704        0
## 
## --- ANOVA ---
## Analysis of Variance Table
## 
## Response: Peso
##                         Df    Sum Sq   Mean Sq F value    Pr(>F)    
## scale(Gestazione)        1 141107306 141107306 2658.73 < 2.2e-16 ***
## scale(Femmina)           1  14165622  14165622  266.91 < 2.2e-16 ***
## scale(I(Lunghezza)^2)    1 152880509 152880509 2880.56 < 2.2e-16 ***
## scale(I(Cranio)^2)       1  29235792  29235792  550.86 < 2.2e-16 ***
## Residuals             1889 100255378     53073                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## --- Percentuale di varianza spiegata ---
##                          Sum Sq PercVar
## scale(Gestazione)     141107306  32.242
## scale(Femmina)         14165622   3.237
## scale(I(Lunghezza)^2) 152880509  34.933
## scale(I(Cranio)^2)     29235792   6.680
## Residuals             100255378  22.908
## 
## AIC: 25987.57 
## BIC: 26020.85 
## ═══════════════════════════════════════════

‘Cranio’x’Lunghezza’ è marginale, migliora di un po’ l’adattamento ma di poco e preferisco rimuoverlo a favore di semplicità e stabilità. Le variabili che alla fine decido di tenere sono solo 4, ovvero ‘Lunghezza’ e ‘Cranio’ quadratiche e ‘Gestazione’ e ‘Femmina’ lineari.

<‘Lunghezza’\(^2\),‘Cranio’\(^2\), ‘Gestazione’, ‘Femmina’>

Commento finale

Il modello è notevolmente migliore rispetto a quelli precedenti in termine di \(R^2\), più o meno uguale in termini di RSE. Quindi questo ultimo modello spiega meglio la varianza e può adattarsi meglio a dati nuovi e risulta più affidabile fuori dal training, mantenendo però qui gli stessi risultati.

3. Previsioni e Risultati

Una volta validato il modello, lo useremo per fare previsioni pratiche. Ad esempio, potremo stimare il peso di una neonata considerando una madre alla terza gravidanza che partorirà alla 39esima settimana.

Prima commento un po’ il modello, poi faccio degli esperimenti ed evidenzio che effettivamente quello che è previsto accade.

  • Lunghezza: Ha esclusivamente il termine quadratico, significa che per valori oltre la media e più piccoli della media la lunghezza cresce. Questo ovviamente preso di per se è controintuitivo (non ha senso che la lunghezza bassa aumenti il peso), ma in realtà per Lunghezze basse il contributo lineare di ‘Gestazione’ e ‘Femmina’ prende il sopravvento ed è per questo che nel complesso si ha un comportamento monotono di ‘Peso’.

Parto da un caso iniziale che chiamo di riferimento e lo modifico in vari modi (ogni modifica che evidenzio è fatta a partire dal caso di riferimento).

## RIFERIMENTO: Gestazione = 39,  Lunghezza = 495, Cranio = 340, Parto.naturale = 1, Femmina = 1
##        fit      lwr     upr
## 1 3232.914 2780.857 3684.97
## 
## ---------------------
## 
## Femmina -> 0
##        fit      lwr      upr
## 1 3321.326 2869.259 3773.393
## 
## ---------------------
## 
## Lunghezza -> 480
##        fit      lwr      upr
## 1 3064.069 2611.939 3516.199
## 
## ---------------------
## 
## Lunghezza -> 510
##        fit      lwr      upr
## 1 3406.954 2954.777 3859.131
## 
## ---------------------
## 
## Cranio -> 330
##        fit     lwr      upr
## 1 3130.966 2678.83 3583.102
## 
## ---------------------
## 
## Cranio -> 350
##        fit      lwr      upr
## 1 3337.905 2885.762 3790.047
## 
## ---------------------
## 
## Gestazione -> 36
##        fit      lwr      upr
## 1 3142.747 2690.138 3595.357
## 
## ---------------------
## 
## Gestazione -> 42
##       fit      lwr      upr
## 1 3323.08 2870.455 3775.705

Da un caso di riferimento ho provato ad abbassare ed alzare una stessa variabile di una stessa quantità. Si vede come il cambiamento di ‘Lunghezza’ e ‘Cranio’ è più impattante di ‘Gestazione’ e ‘Femmina’.

  • Femmina: Il modello aumenta il peso di circa 90 grammi quando si passa da una femmina ad un maschio. Contando che è una variabile bilanciata (guardando Gini) e che il coefficente è -43, a occhio ci sta che sia calato di 90 (mi aspetterei più o meno -86).

  • Lunghezza (per Cranio il discorso è simile, lo evito): Da notare che ho questa situazione:

480->495->510 e 3064.069->3232.914->3406.954

Ovvero da 480 a 495 ho un incremento di 168 e da 495 a 3407 ho un incremento di 175, che non è lineare chiaramente ma non di discosta troppo. Anche guardando il dataset l’incremento sembra coerente, tra i 10mm e i 20 millimetri di lunghezza diversi ho circa una cresita si 100 o 200 grammi, chiaramente qui è più marcata leggermente verso destra perchè come detto il modello scelto è quadratico.

  • Gestazione: Qui è evidente la linearità e più o meno ogni giorno in più mi va a variare 30 grammi, cosa che è rispecchiata in questo caso specifico.

Valutazione: Dal caso specifico studiato, non ci sono sorprese rispetto a quello che prevede il modello e quello che ci si aspetterebbe dato il dataset.

4. Visualizzazioni

Infine, utilizzeremo grafici e rappresentazioni visive per comunicare i risultati del modello e mostrare le relazioni più significative tra le variabili. Ad esempio, potremmo visualizzare l’impatto del numero di settimane di gestazione e del fumo sul peso previsto.

Mostro solo come va una variabile, le altre le mantengo fisse ai loro valori medi (variabili continue) o più frequenti.

Lunghezza e Cranio.

Ragionamento su ‘Lunghezza e Cranio’: Il modello sembra spiegare bene la maggior parte dei dati, mentre per la coda a sinistra ha un bias positivo e ci sono errori notevoli. Questi sono i valori influenti scartati, che se considerati mi andavano ad influire negativamente sulla maggioranza dei dati. In particolare, il modello sembra predirre bene i dati intorno alla media (per ‘Lunghezza’, ad esempio, tra 494 e 495).

Nota. Con un modello lineare sarei stato in grado di andare a spiegare meglio i dati in coda, restando abbastanza vicino nella nuvola di dati centrali, ma risulta meglio essere più imprecisi in coda migliorando anche di relativamente poco la spiegazione sui quartili principali. Nel caso si volesse essere più precisi nelle code a discapito di errori più marcati nel complesso, potrebbe aver senso un modello lineare. Di base questi ragionamenti confermano le osservazioni che avevamo fatto osservando i boxplots e commentando le misure di forma.

Ragionamento su ‘Gestazione’: Il ragionamento è uguale a quello per ‘Lunghezza’ e ‘Cranio’, solo che qui la variabile ottiene lo stesso risultato con un comportamento lineare.

Ragionamento su ‘Femmina’: Il modello appiattisce la differenza tra maschi e femmine, prevedendo sotto la mediana per i maschi e sopra per le femmine. In realtà però non è così, è da notare che in questo caso la differenza tra maschi e femmine è l’unica differenza, mentre sto tenendo costanti le altre variabili, che però sono correlate a ‘Femmina’. Quindi quella spinta in più verso il valore di mediana sarebbe dato da ‘Lunghezze’ e ‘Cranio’ più alti, cosa che non accade qua. Questo appiattimento quindi è quello che dovevamo aspettarci da questo particolare grafico, anche se poi in realtà il puntino blu è leggermente più in alto per i maschi che per le femmine. Quindi in conclusione il grafico conferma che il nostro modello sta usando questa variabile correttamente.

Conclusioni

Il progetto di previsione del peso neonatale è un’iniziativa fondamentale per Neonatal Health Solutions. Attraverso l’uso di dati clinici dettagliati e strumenti di analisi statistica avanzati, possiamo contribuire a migliorare la qualità della cura prenatale, ridurre i rischi per i neonati e ottimizzare l’efficienza delle risorse ospedaliere. Questo progetto rappresenta un punto di svolta per l’azienda, consentendo non solo un miglioramento della pratica clinica ma anche l’implementazione di politiche sanitarie più informate e proattive.

Il modello funziona bene: spiega circa il 77% del peso alla nascita e ha un’accuratezza intorno al 93%. I fattori che contano di più sono lunghezza, gestazione e cranio, mentre le femmine pesano in media un po’ meno dei maschi. In generale, i risultati sono solidi e il modello può essere un buon supporto per valutazioni cliniche rapide e affidabili.