L’obiettivo di questo lavoro è costruire un modello statistico per la previsione del peso neonatale alla nascita. Il peso del neonato rappresenta infatti una variabile clinicamente rilevante, poiché può essere associato a condizioni di rischio, prematurità o necessità di assistenza specifica dopo il parto.
Il dataset contiene informazioni relative a 2500 neonati provenienti da tre ospedali. Le variabili disponibili riguardano caratteristiche materne, come età, numero di gravidanze precedenti e abitudine al fumo, caratteristiche della gravidanza, come la durata della gestazione, e misure antropometriche del neonato, come peso, lunghezza e circonferenza cranica.
dati <- read.csv("C:\\Users\\anton\\Desktop\\neonati.csv")
attach(dati)
summary(dati)
## Anni.madre N.gravidanze Fumatrici Gestazione
## Min. : 0.00 Min. : 0.0000 Min. :0.0000 Min. :25.00
## 1st Qu.:25.00 1st Qu.: 0.0000 1st Qu.:0.0000 1st Qu.:38.00
## Median :28.00 Median : 1.0000 Median :0.0000 Median :39.00
## Mean :28.16 Mean : 0.9812 Mean :0.0416 Mean :38.98
## 3rd Qu.:32.00 3rd Qu.: 1.0000 3rd Qu.:0.0000 3rd Qu.:40.00
## Max. :46.00 Max. :12.0000 Max. :1.0000 Max. :43.00
## Peso Lunghezza Cranio Tipo.parto
## Min. : 830 Min. :310.0 Min. :235 Length:2500
## 1st Qu.:2990 1st Qu.:480.0 1st Qu.:330 Class :character
## Median :3300 Median :500.0 Median :340 Mode :character
## Mean :3284 Mean :494.7 Mean :340
## 3rd Qu.:3620 3rd Qu.:510.0 3rd Qu.:350
## Max. :4930 Max. :565.0 Max. :390
## Ospedale Sesso
## Length:2500 Length:2500
## Class :character Class :character
## Mode :character Mode :character
##
##
##
table(Tipo.parto)
## Tipo.parto
## Ces Nat
## 728 1772
table(Ospedale)
## Ospedale
## osp1 osp2 osp3
## 816 849 835
table(Sesso)
## Sesso
## F M
## 1256 1244
table(Fumatrici)
## Fumatrici
## 0 1
## 2396 104
table(Anni.madre == 0)
##
## FALSE TRUE
## 2499 1
table(N.gravidanze)
## N.gravidanze
## 0 1 2 3 4 5 6 7 8 9 10 11 12
## 1096 818 340 150 48 21 11 1 8 2 3 1 1
summary(Peso[Gestazione < 37])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 830 1892 2435 2342 2815 4520
summary(Peso[Gestazione >= 37])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1750 3050 3320 3349 3640 4930
Dall’analisi descrittiva emergono diversi aspetti che vale la pena commentare. Il dataset è composto da 2500 osservazioni e, in generale, le distribuzioni delle variabili principali appaiono coerenti con quanto ci si aspetterebbe in un contesto di rilevazioni neonatali.
L’età media delle madri è pari a circa 28 anni, con una distribuzione abbastanza simmetrica intorno alla media. Si osserva però un valore pari a 0, che è chiaramente anomalo: si tratta verosimilmente di un errore di codifica oppure di un missing value gestito in modo improprio. È un dato da trattare con attenzione; come vedremo, l’età materna non rientrerà tra i predittori del modello finale, quindi questa anomalia non influenza le previsioni, ma resta un punto da segnalare.
La variabile relativa al numero di gravidanze precedenti presenta una distribuzione fortemente asimmetrica a destra, concentrata sui valori bassi: la maggior parte delle madri ha avuto zero, una o due gravidanze precedenti. Sono presenti alcune osservazioni con valori più elevati, fino a un massimo di 12, ma si tratta di casi isolati che possono essere considerati come code della distribuzione e che, se necessario, andranno valutati come potenziali outlier.
Il fumo materno risulta una variabile particolarmente sbilanciata: solo 104 madri su 2500 sono classificate come fumatrici, circa il 4% del campione. È un aspetto rilevante in vista delle analisi successive, perché una numerosità così ridotta in uno dei due gruppi potrebbe compromettere la potenza statistica dei confronti e, eventualmente, richiedere tecniche specifiche per il trattamento di gruppi non bilanciati.
La durata della gestazione si concentra intorno alle 39 settimane, valore mediano coerente con la fisiologia dei parti a termine. Suddividendo il campione in prematuri, cioè con gestazione inferiore a 37 settimane, e nati a termine emerge una differenza piuttosto marcata in termini di peso medio alla nascita: circa 2342 g per i prematuri contro 3349 g per i nati dalla 37ª settimana in poi. La differenza, di circa 1000 g, è già a livello descrittivo un forte indizio della relazione tra età gestazionale e peso neonatale, che andrà poi verificata formalmente in fase di modellazione.
Per quanto riguarda le variabili qualitative, i parti naturali risultano più frequenti dei cesarei, mentre la distribuzione per ospedale è molto equilibrata tra le tre strutture considerate. Anche la variabile sesso si presenta quasi perfettamente bilanciata tra maschi e femmine. Nel complesso, quindi, il campione appare omogeneo rispetto a ospedale e sesso, mentre risulta nettamente più sbilanciato rispetto a fumo materno e prematurità: un elemento da tenere presente nelle analisi successive, soprattutto quando si lavorerà con confronti tra sottogruppi.
# Associazione tra ospedale e tipo di parto
tab_osp_parto <- table(Ospedale, Tipo.parto)
prop.table(tab_osp_parto, margin = 1) * 100
## Tipo.parto
## Ospedale Ces Nat
## osp1 29.65686 70.34314
## osp2 29.91755 70.08245
## osp3 27.78443 72.21557
chisq.test(tab_osp_parto)
##
## Pearson's Chi-squared test
##
## data: tab_osp_parto
## X-squared = 1.0972, df = 2, p-value = 0.5778
# Confronto con i valori medi di riferimento della popolazione
mu_peso <- 3405
mu_lunghezza <- 500
t.test(Peso, mu = mu_peso)
##
## One Sample t-test
##
## data: Peso
## t = -11.515, df = 2499, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 3405
## 95 percent confidence interval:
## 3263.490 3304.672
## sample estimates:
## mean of x
## 3284.081
t.test(Lunghezza, mu = mu_lunghezza)
##
## One Sample t-test
##
## data: Lunghezza
## t = -10.084, df = 2499, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 500
## 95 percent confidence interval:
## 493.6598 495.7242
## sample estimates:
## mean of x
## 494.692
# Differenze antropometriche tra i due sessi
aggregate(Peso ~ Sesso, FUN = mean)
## Sesso Peso
## 1 F 3161.132
## 2 M 3408.215
aggregate(Lunghezza ~ Sesso, FUN = mean)
## Sesso Lunghezza
## 1 F 489.7643
## 2 M 499.6672
aggregate(Cranio ~ Sesso, FUN = mean)
## Sesso Cranio
## 1 F 337.6330
## 2 M 342.4486
t.test(Peso ~ Sesso)
##
## Welch Two Sample t-test
##
## data: Peso by Sesso
## t = -12.106, df = 2490.7, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
## -287.1051 -207.0615
## sample estimates:
## mean in group F mean in group M
## 3161.132 3408.215
t.test(Lunghezza ~ Sesso)
##
## Welch Two Sample t-test
##
## data: Lunghezza by Sesso
## t = -9.582, df = 2459.3, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
## -11.929470 -7.876273
## sample estimates:
## mean in group F mean in group M
## 489.7643 499.6672
t.test(Cranio ~ Sesso)
##
## Welch Two Sample t-test
##
## data: Cranio by Sesso
## t = -7.4102, df = 2491.4, p-value = 1.718e-13
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
## -6.089912 -3.541270
## sample estimates:
## mean in group F mean in group M
## 337.6330 342.4486
In questa fase sono stati applicati alcuni test di ipotesi con l’obiettivo di verificare la presenza di differenze significative tra gruppi e rispetto ad alcuni valori di riferimento presi dalla letteratura.
Come prima cosa è stata valutata l’eventuale associazione tra ospedale e tipo di parto. Le percentuali di parti cesarei nelle tre strutture risultano piuttosto simili tra loro: 29,66% nell’ospedale 1, 29,92% nell’ospedale 2 e 27,78% nell’ospedale 3. Il test chi-quadrato di indipendenza non risulta significativo, con p-value pari a 0,5778, quindi non emerge alcuna evidenza statistica di un’associazione tra le due variabili. In altre parole, sulla base dei dati a disposizione, non possiamo affermare che la struttura ospedaliera influisca sulla probabilità che un parto sia cesareo piuttosto che naturale.
Successivamente, il peso e la lunghezza medi del campione sono stati confrontati con valori di riferimento per neonati a termine, pari rispettivamente a 3405 g e 500 mm. Il peso medio osservato è 3284,08 g, quindi inferiore al riferimento, e il t-test a un campione risulta altamente significativo: si rifiuta dunque l’ipotesi nulla di uguaglianza tra la media campionaria e il valore atteso. Lo stesso vale per la lunghezza, con una media campionaria di 494,69 mm contro i 500 mm di riferimento, anche in questo caso con p-value molto basso.
Questi risultati vanno però interpretati con una certa cautela. Il campione include anche neonati prematuri, mentre i valori di riferimento sono costruiti su nati a termine: è quindi plausibile che la presenza di soggetti con età gestazionale inferiore abbassi le medie osservate. Inoltre, con una numerosità campionaria così elevata, pari a 2500 osservazioni, anche scostamenti modesti dal valore di riferimento possono risultare statisticamente significativi pur non avendo necessariamente una grande rilevanza pratica.
Infine, sono state confrontate le principali misure antropometriche tra femmine e maschi. I maschi mostrano valori medi più alti in tutte le variabili considerate: peso, lunghezza e circonferenza cranica. Trattandosi di due gruppi con varianze non necessariamente uguali è stato utilizzato il t-test di Welch, che restituisce differenze statisticamente significative per tutte e tre le variabili. Si può quindi concludere che, nel campione in esame, le misure antropometriche risultano significativamente maggiori nei neonati maschi rispetto alle femmine.
n <- nrow(dati)
n
## [1] 2500
shapiro.test(Peso)
##
## Shapiro-Wilk normality test
##
## data: Peso
## W = 0.97066, p-value < 2.2e-16
Prima della costruzione del modello è stata analizzata la variabile target, cioè il peso neonatale. Il test di Shapiro-Wilk risulta significativo, indicando uno scostamento dalla normalità. Tuttavia, questo risultato va interpretato con prudenza: con un campione molto grande, come in questo caso, il test diventa estremamente sensibile e può segnalare come significative anche deviazioni non particolarmente gravi. Per questo motivo, oltre al test formale, è utile osservare anche le rappresentazioni grafiche e l’andamento dei residui del modello.
dati_quant <- dati[, c("Peso", "Gestazione", "Lunghezza", "Cranio",
"Anni.madre", "N.gravidanze")]
names(dati_quant) <- c("Peso", "Gestazione", "Lunghezza", "Cranio",
"Età madre", "N. gravidanze")
panel.cor <- function(x, y, digits = 2, ...) {
usr <- par("usr")
on.exit(par(usr = usr))
par(usr = c(0, 1, 0, 1))
r <- cor(x, y, use = "complete.obs", method = "pearson")
txt <- round(r, digits)
text(0.5, 0.5, txt, cex = 1.2 + abs(r) * 2.5)
}
panel.hist <- function(x, ...) {
usr <- par("usr")
on.exit(par(usr = usr))
par(usr = c(usr[1:2], 0, 1.5))
h <- hist(x, plot = FALSE)
breaks <- h$breaks
y <- h$counts / max(h$counts)
rect(breaks[-length(breaks)], 0, breaks[-1], y,
col = "lightgray", border = "white")
}
pairs(dati_quant,
lower.panel = panel.smooth,
upper.panel = panel.cor,
diag.panel = panel.hist,
cex.labels = 1.4,
font.labels = 2,
gap = 0.6,
main = "Matrice di correlazione tra variabili quantitative")
La matrice di correlazione consente di osservare le relazioni lineari tra le variabili quantitative prima della costruzione del modello. Come prevedibile, il peso neonatale risulta fortemente associato alle altre misure antropometriche del neonato, in particolare alla lunghezza e alla circonferenza cranica. Anche la durata della gestazione mostra una relazione positiva con il peso, coerentemente con l’idea che una gravidanza più lunga sia associata a un maggiore sviluppo fetale e quindi a un peso alla nascita più elevato.
Le variabili materne, come età della madre e numero di gravidanze precedenti, sembrano invece mostrare relazioni lineari più deboli con il peso. Questa prima esplorazione suggerisce quindi che le variabili antropometriche e la gestazione saranno probabilmente tra i predittori più importanti nel modello di regressione.
boxplot(Peso ~ Sesso,
main = "Peso per sesso",
xlab = "Sesso",
ylab = "Peso")
boxplot(Peso ~ Fumatrici,
main = "Peso per abitudine al fumo",
xlab = "Fumatrici",
ylab = "Peso")
boxplot(Peso ~ Tipo.parto,
main = "Peso per tipo di parto",
xlab = "Tipo di parto",
ylab = "Peso")
boxplot(Peso ~ Ospedale,
main = "Peso per ospedale",
xlab = "Ospedale",
ylab = "Peso")
t.test(Peso ~ Sesso)
##
## Welch Two Sample t-test
##
## data: Peso by Sesso
## t = -12.106, df = 2490.7, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
## -287.1051 -207.0615
## sample estimates:
## mean in group F mean in group M
## 3161.132 3408.215
t.test(Peso ~ Fumatrici)
##
## Welch Two Sample t-test
##
## data: Peso by Fumatrici
## t = 1.034, df = 114.1, p-value = 0.3033
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
## -45.61354 145.22674
## sample estimates:
## mean in group 0 mean in group 1
## 3286.153 3236.346
t.test(Peso ~ Tipo.parto)
##
## Welch Two Sample t-test
##
## data: Peso by Tipo.parto
## t = -0.12968, df = 1493, p-value = 0.8968
## alternative hypothesis: true difference in means between group Ces and group Nat is not equal to 0
## 95 percent confidence interval:
## -46.27992 40.54037
## sample estimates:
## mean in group Ces mean in group Nat
## 3282.047 3284.916
summary(aov(Peso ~ Ospedale))
## Df Sum Sq Mean Sq F value Pr(>F)
## Ospedale 2 936237 468118 1.699 0.183
## Residuals 2497 687952305 275512
Per valutare il rapporto tra il peso e le variabili qualitative sono stati utilizzati boxplot e test di confronto tra gruppi. Il peso medio risulta significativamente diverso tra maschi e femmine, confermando quanto già emerso nell’analisi precedente: i maschi presentano in media un peso maggiore rispetto alle femmine.
Per quanto riguarda il fumo materno, il confronto grezzo mostra un peso medio leggermente inferiore nei neonati da madri fumatrici, ma la differenza non risulta statisticamente significativa. Questo risultato può dipendere anche dalla forte sproporzione tra i due gruppi, dato che le madri fumatrici sono molto meno numerose delle non fumatrici.
Il tipo di parto non sembra invece essere associato a differenze significative nel peso medio, così come non emergono differenze statisticamente significative tra i tre ospedali. Questi risultati indicano che, a livello descrittivo e nei confronti semplici, sesso e misure antropometriche sembrano più rilevanti rispetto a tipo di parto e ospedale nella spiegazione del peso neonatale.
mod1 <- lm(Peso ~ Fumatrici + Gestazione + Sesso + Lunghezza + Cranio +
Anni.madre + N.gravidanze, data = dati)
summary(mod1)
##
## Call:
## lm(formula = Peso ~ Fumatrici + Gestazione + Sesso + Lunghezza +
## Cranio + Anni.madre + N.gravidanze, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1161.56 -181.19 -15.75 163.70 2630.75
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6714.4109 141.1515 -47.569 < 2e-16 ***
## Fumatrici -30.2959 27.5971 -1.098 0.2724
## Gestazione 32.9331 3.8267 8.606 < 2e-16 ***
## SessoM 78.0845 11.2039 6.969 4.06e-12 ***
## Lunghezza 10.2342 0.3009 34.009 < 2e-16 ***
## Cranio 10.5177 0.4268 24.642 < 2e-16 ***
## Anni.madre 0.9585 1.1347 0.845 0.3984
## N.gravidanze 11.2756 4.6690 2.415 0.0158 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.6 on 2492 degrees of freedom
## Multiple R-squared: 0.7272, Adjusted R-squared: 0.7264
## F-statistic: 949 on 7 and 2492 DF, p-value: < 2.2e-16
vif(mod1)
## Fumatrici Gestazione Sesso Lunghezza Cranio Anni.madre
## 1.006659 1.694517 1.040359 2.078644 1.628748 1.186683
## N.gravidanze
## 1.184706
mod2 <- lm(Peso ~ Fumatrici + Gestazione + Sesso + Anni.madre +
N.gravidanze, data = dati)
summary(mod2)
##
## Call:
## lm(formula = Peso ~ Fumatrici + Gestazione + Sesso + Anni.madre +
## N.gravidanze, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1466.6 -271.3 -12.0 261.1 1901.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3292.719 186.469 -17.658 <2e-16 ***
## Fumatrici -110.625 41.480 -2.667 0.0077 **
## Gestazione 163.525 4.518 36.193 <2e-16 ***
## SessoM 164.913 16.697 9.877 <2e-16 ***
## Anni.madre 3.797 1.705 2.226 0.0261 *
## N.gravidanze 18.477 7.005 2.638 0.0084 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 413.4 on 2494 degrees of freedom
## Multiple R-squared: 0.3814, Adjusted R-squared: 0.3802
## F-statistic: 307.6 on 5 and 2494 DF, p-value: < 2.2e-16
Sono stati stimati due modelli di regressione lineare multipla. Il
primo modello, indicato come mod1, include fumo materno,
durata della gestazione, sesso, lunghezza, circonferenza cranica, età
materna e numero di gravidanze precedenti. Si tratta del modello più
completo, perché considera sia variabili materne e gestazionali sia
misure antropometriche del neonato.
Il secondo modello, indicato come mod2, esclude invece
lunghezza e circonferenza cranica, mantenendo solo fumo materno, durata
della gestazione, sesso, età materna e numero di gravidanze precedenti.
Questo modello è meno potente dal punto di vista predittivo, ma è più
interpretabile dal punto di vista clinico, perché utilizza soprattutto
informazioni materne e gestazionali.
Nel modello completo l’R² corretto è pari a circa 0,726, quindi il modello riesce a spiegare circa il 72,6% della variabilità del peso neonatale. Risultano statisticamente significative la durata della gestazione, il sesso del neonato, la lunghezza, la circonferenza cranica e il numero di gravidanze precedenti. In particolare, a parità delle altre variabili, una settimana in più di gestazione è associata a un aumento medio del peso, i maschi pesano mediamente più delle femmine, e valori maggiori di lunghezza e circonferenza cranica sono associati a pesi maggiori.
Nel modello completo il fumo materno non risulta statisticamente significativo. Questo non significa necessariamente che il fumo non abbia alcun ruolo, ma che, una volta considerate anche lunghezza, cranio, gestazione, sesso e altre variabili, il suo contributo specifico non emerge come significativo.
Il modello ridotto mostra invece un R² corretto più basso, pari a circa 0,380, ma in questo caso il fumo materno risulta significativo: a parità di gestazione, sesso, età materna e numero di gravidanze, i neonati da madri fumatrici pesano mediamente circa 111 grammi in meno. Questo suggerisce che l’effetto del fumo può essere visibile quando si considerano solo variabili materne e gestazionali, mentre tende ad attenuarsi nel modello completo, dove entrano anche misure antropometriche molto vicine al peso.
Il controllo della multicollinearità tramite VIF non evidenzia criticità. Tutti i valori risultano ampiamente inferiori alle soglie comunemente considerate problematiche, quindi non emergono segnali di forte ridondanza tra i predittori. Anche lunghezza e circonferenza cranica, pur essendo entrambe misure antropometriche, possono essere mantenute nel modello.
# Modello base con i soli effetti principali, usato come riferimento per i confronti
mod_base <- lm(Peso ~ Gestazione + Fumatrici + Sesso + Lunghezza +
Cranio + N.gravidanze, data = dati)
# Interazione fumo-gestazione: l'effetto del fumo cambia con le settimane di gestazione?
mod_int <- lm(Peso ~ Gestazione * Fumatrici + Sesso + Lunghezza +
Cranio + N.gravidanze, data = dati)
summary(mod_int)
##
## Call:
## lm(formula = Peso ~ Gestazione * Fumatrici + Sesso + Lunghezza +
## Cranio + N.gravidanze, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1149.9 -181.1 -17.1 163.6 2636.3
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6699.0708 136.6478 -49.024 < 2e-16 ***
## Gestazione 33.1472 3.8389 8.635 < 2e-16 ***
## Fumatrici 794.5870 757.2739 1.049 0.29415
## SessoM 78.7548 11.2151 7.022 2.81e-12 ***
## Lunghezza 10.2285 0.3009 33.988 < 2e-16 ***
## Cranio 10.5305 0.4263 24.704 < 2e-16 ***
## N.gravidanze 12.7641 4.3451 2.938 0.00334 **
## Gestazione:Fumatrici -21.0157 19.2765 -1.090 0.27572
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.6 on 2492 degrees of freedom
## Multiple R-squared: 0.7273, Adjusted R-squared: 0.7265
## F-statistic: 949.3 on 7 and 2492 DF, p-value: < 2.2e-16
anova(mod_base, mod_int)
## Analysis of Variance Table
##
## Model 1: Peso ~ Gestazione + Fumatrici + Sesso + Lunghezza + Cranio +
## N.gravidanze
## Model 2: Peso ~ Gestazione * Fumatrici + Sesso + Lunghezza + Cranio +
## N.gravidanze
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 2493 187973654
## 2 2492 187884041 1 89614 1.1886 0.2757
# Effetto non lineare della gestazione tramite un termine quadratico
mod_poly <- lm(Peso ~ poly(Gestazione, 2) + Sesso + Lunghezza +
Cranio + N.gravidanze + Fumatrici, data = dati)
summary(mod_poly)
##
## Call:
## lm(formula = Peso ~ poly(Gestazione, 2) + Sesso + Lunghezza +
## Cranio + N.gravidanze + Fumatrici, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1145.00 -180.96 -13.12 165.00 2659.10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5494.4034 157.5197 -34.881 < 2e-16 ***
## poly(Gestazione, 2)1 2930.7077 358.6777 8.171 4.81e-16 ***
## poly(Gestazione, 2)2 640.8036 282.7497 2.266 0.02352 *
## SessoM 75.9814 11.2351 6.763 1.68e-11 ***
## Lunghezza 10.3386 0.3042 33.989 < 2e-16 ***
## Cranio 10.6312 0.4280 24.841 < 2e-16 ***
## N.gravidanze 12.7990 4.3416 2.948 0.00323 **
## Fumatrici -29.2442 27.5772 -1.060 0.28904
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.4 on 2492 degrees of freedom
## Multiple R-squared: 0.7277, Adjusted R-squared: 0.7269
## F-statistic: 951.4 on 7 and 2492 DF, p-value: < 2.2e-16
anova(mod_base, mod_poly)
## Analysis of Variance Table
##
## Model 1: Peso ~ Gestazione + Fumatrici + Sesso + Lunghezza + Cranio +
## N.gravidanze
## Model 2: Peso ~ poly(Gestazione, 2) + Sesso + Lunghezza + Cranio + N.gravidanze +
## Fumatrici
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 2493 187973654
## 2 2492 187587020 1 386634 5.1362 0.02352 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Oltre al modello puramente additivo, come previsto dalla traccia, sono stati considerati anche un termine di interazione e un effetto non lineare. L’interazione tra fumo e gestazione verifica se il fumo materno penalizzi il peso in misura diversa a seconda della durata della gravidanza, mentre il termine quadratico sulla gestazione verifica se la relazione tra settimane e peso si discosti dalla linearità.
Il termine di interazione tra gestazione e fumo non risulta statisticamente significativo, con un p-value pari a 0,276: non emerge quindi alcuna evidenza che l’effetto del fumo dipenda dalla durata della gestazione. Il termine quadratico della gestazione è invece formalmente significativo, con un p-value pari a 0,024, segnalando una lieve curvatura nella relazione tra settimane e peso.
I due termini vanno però valutati in modo diverso. L’interazione, non significativa, può essere scartata senza esitazioni. Il termine quadratico, pur significativo, produce un miglioramento pratico trascurabile: l’R² corretto passa da 0,7265 a 0,7269 e l’RMSE resta sostanzialmente invariato. Si tratta dunque di un effetto reale ma di entità minima, che verrà valutato nella sezione di confronto, insieme ai criteri informativi, prima di decidere se inserirlo nel modello finale.
# Selezione stepwise basata sulla minimizzazione dell'AIC, a partire dal modello completo
mod_step <- MASS::stepAIC(mod1, direction = "both", trace = FALSE)
mod_step$anova
## Stepwise Model Path
## Analysis of Deviance Table
##
## Initial Model:
## Peso ~ Fumatrici + Gestazione + Sesso + Lunghezza + Cranio +
## Anni.madre + N.gravidanze
##
## Final Model:
## Peso ~ Gestazione + Sesso + Lunghezza + Cranio + N.gravidanze
##
##
## Step Df Deviance Resid. Df Resid. Dev AIC
## 1 2492 187919851 28084.70
## 2 - Anni.madre 1 53803.09 2493 187973654 28083.42
## 3 - Fumatrici 1 91891.97 2494 188065546 28082.64
summary(mod_step)
##
## Call:
## lm(formula = Peso ~ Gestazione + Sesso + Lunghezza + Cranio +
## N.gravidanze, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1149.44 -180.81 -15.58 163.64 2639.72
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6681.1445 135.7229 -49.226 < 2e-16 ***
## Gestazione 32.3321 3.7980 8.513 < 2e-16 ***
## SessoM 77.9927 11.2021 6.962 4.26e-12 ***
## Lunghezza 10.2486 0.3006 34.090 < 2e-16 ***
## Cranio 10.5402 0.4262 24.728 < 2e-16 ***
## N.gravidanze 12.4750 4.3396 2.875 0.00408 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.6 on 2494 degrees of freedom
## Multiple R-squared: 0.727, Adjusted R-squared: 0.7265
## F-statistic: 1328 on 5 and 2494 DF, p-value: < 2.2e-16
mod_fin <- mod_step
Per ottenere il modello più parsimonioso, come previsto dalla
traccia, è stata utilizzata una procedura di selezione stepwise basata
sulla minimizzazione dell’AIC, a partire dal modello completo
mod1. La procedura elimina progressivamente le variabili
che non contribuiscono in modo apprezzabile all’adattamento.
Il risultato è un modello che esclude età materna e fumo, entrambe
non significative nel modello completo, e mantiene durata della
gestazione, sesso, lunghezza, circonferenza cranica e numero di
gravidanze precedenti. Questo modello, indicato come
mod_fin, rappresenta un buon compromesso tra adattamento ai
dati e parsimonia: conserva sostanzialmente la stessa capacità
esplicativa del modello completo utilizzando però un numero ridotto di
predittori, tutti statisticamente significativi.
AIC(mod1, mod2, mod_int, mod_poly, mod_fin)
## df AIC
## mod1 9 35181.39
## mod2 7 37224.22
## mod_int 9 35180.92
## mod_poly 9 35176.96
## mod_fin 7 35179.33
BIC(mod1, mod2, mod_int, mod_poly, mod_fin)
## df BIC
## mod1 9 35233.81
## mod2 7 37264.99
## mod_int 9 35233.33
## mod_poly 9 35229.38
## mod_fin 7 35220.10
anova(mod_fin, mod1)
## Analysis of Variance Table
##
## Model 1: Peso ~ Gestazione + Sesso + Lunghezza + Cranio + N.gravidanze
## Model 2: Peso ~ Fumatrici + Gestazione + Sesso + Lunghezza + Cranio +
## Anni.madre + N.gravidanze
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 2494 188065546
## 2 2492 187919851 2 145695 0.966 0.3807
Per la scelta del modello finale sono stati confrontati i diversi
modelli stimati tramite i criteri AIC e BIC, oltre al confronto ANOVA
tra modelli annidati. Il modello ridotto mod2, privo delle
misure antropometriche, mostra valori di AIC e BIC nettamente più alti,
confermando che lunghezza e circonferenza cranica apportano un
contributo informativo importante.
Tra i modelli che includono le misure antropometriche le differenze
sono invece minime. L’AIC premia di pochissimo il modello con il termine
quadratico, mod_poly, con un valore di 35177 contro 35179
di mod_fin, coerentemente con la lieve significatività del
termine di secondo grado. Il BIC, che penalizza più severamente la
complessità, indica al contrario come migliore il modello parsimonioso
mod_fin, con il valore più basso in assoluto pari a 35220.
Ci troviamo quindi nel caso tipico in cui AIC e BIC danno indicazioni
opposte a fronte di uno scarto pratico irrilevante.
Si è quindi scelto mod_fin come modello finale: pur non
avendo l’AIC più basso in assoluto, è il modello indicato dal BIC, è il
più parsimonioso, contiene solo variabili significative ed è il più
semplice da interpretare e da usare in previsione. Il confronto ANOVA
tra mod_fin e mod1 non risulta significativo,
con un p-value pari a 0,38, a conferma che le variabili escluse dalla
selezione, cioè età materna e fumo, non aggiungono capacità esplicativa
rilevante. La lieve non linearità della gestazione, statisticamente
reale ma di entità pratica trascurabile, viene segnalata ma non inclusa,
per privilegiare semplicità e robustezza. Il modello ridotto
mod2 resta comunque utile come confronto interpretativo,
perché mostra meglio il ruolo delle variabili materne e gestazionali, e
in particolare l’effetto del fumo, quando non si includono le altre
misure del neonato.
par(mfrow = c(2, 2))
plot(mod_fin)
par(mfrow = c(1, 1))
res_fin <- residuals(mod_fin)
rmse_fin <- sqrt(mean(res_fin^2))
r2_fin <- summary(mod_fin)$r.squared
r2adj_fin <- summary(mod_fin)$adj.r.squared
rmse_fin
## [1] 274.274
r2_fin
## [1] 0.7270015
r2adj_fin
## [1] 0.7264542
La qualità del modello finale è stata valutata attraverso i grafici diagnostici, l’R², l’R² corretto e l’RMSE. Il modello presenta un R² corretto pari a circa 0,726 e un RMSE pari a circa 274 g. In termini pratici, ciò significa che il modello spiega una quota molto rilevante della variabilità del peso e che l’errore medio di previsione è dell’ordine di 274 grammi, un livello ragionevole considerando la naturale variabilità biologica del peso alla nascita.
I grafici diagnostici permettono di valutare visivamente alcune assunzioni del modello lineare, tra cui linearità, omoschedasticità e normalità approssimativa dei residui. Nel complesso il modello appare adeguato per finalità predittive, anche se i grafici evidenziano la presenza di alcuni valori estremi, soprattutto in corrispondenza dei residui più elevati, che meritano un approfondimento specifico.
cook <- cooks.distance(mod_fin)
soglia <- 4 / n
n_infl <- sum(cook > soglia)
oss_infl <- which(cook > soglia)
n_infl
## [1] 124
max(cook)
## [1] 0.8300965
dati[which.max(cook), ]
## Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio
## 1551 35 1 0 38 4370 315 374
## Tipo.parto Ospedale Sesso
## 1551 Nat osp3 F
# Ristima del modello escludendo le osservazioni influenti, come controllo di robustezza
mod_noinfl <- lm(formula(mod_fin), data = dati[-oss_infl, ])
round(cbind(completo = coef(mod_fin),
senza_influenti = coef(mod_noinfl)), 2)
## completo senza_influenti
## (Intercept) -6681.14 -7015.35
## Gestazione 32.33 30.54
## SessoM 77.99 78.70
## Lunghezza 10.25 11.26
## Cranio 10.54 10.21
## N.gravidanze 12.47 15.32
Per indagare la presenza di osservazioni influenti è stata calcolata la distanza di Cook, usando come soglia di attenzione il valore convenzionale 4/n. Le osservazioni che la superano sono 124, circa il 5% del campione, una quota fisiologica per un dataset di queste dimensioni. Il valore massimo della distanza di Cook è circa 0,83: resta sotto la soglia critica più severa, pari a 1, ma supera quella più prudente di 0,5, segnalando almeno un’osservazione moderatamente influente che merita un esame diretto.
Tale osservazione, corrispondente alla riga 1551, riguarda un neonato con lunghezza pari a 315 mm, tra i valori più bassi dell’intero campione, ma con un peso di 4370 g, tra i più alti. Si tratta di una combinazione biologicamente implausibile, verosimilmente dovuta a un errore di misurazione o di trascrizione, ed è proprio questa incoerenza tra lunghezza e peso a renderla così influente. Per verificare che casi del genere non distorcano le conclusioni, il modello è stato ristimato escludendo tutte le osservazioni segnalate: i coefficienti variano in modo modesto e non cambiano né segno né ordine di grandezza, a conferma della sostanziale stabilità del modello. Le previsioni vanno comunque interpretate con maggiore cautela nei casi più lontani dal profilo medio del campione.
nuova_neonata <- data.frame(
Fumatrici = 0,
Gestazione = 39,
Sesso = "F",
Lunghezza = 490,
Cranio = 338,
Anni.madre = 28,
N.gravidanze = 3
)
pred <- predict(mod_fin, newdata = nuova_neonata, interval = "prediction")
pred
## fit lwr upr
## 1 3201.615 2662.635 3740.596
Infine, il modello selezionato è stato utilizzato per effettuare una previsione pratica, coerente con lo scenario proposto: una neonata di madre alla terza gravidanza che partorisce alla 39ª settimana. Poiché il modello finale impiega anche lunghezza e circonferenza cranica, che nello scenario non sono specificate ma sono comunque rilevabili in gravidanza tramite ecografia, sono stati assunti valori tipici, pari a 490 mm e 338 mm, mentre il numero di gravidanze precedenti è stato posto pari a 3.
Il modello stima un peso alla nascita pari a circa 3202 g, con un intervallo di previsione al 95% compreso approssimativamente tra 2663 g e 3741 g. L’intervallo è piuttosto ampio, ma coerente con la variabilità biologica del peso neonatale: anche a parità delle caratteristiche osservate, neonati con profili simili possono presentare pesi differenti. La previsione puntuale va quindi interpretata come stima del peso atteso, mentre l’intervallo fornisce un intervallo plausibile entro cui potrebbe collocarsi il peso effettivo.
È utile osservare che il modello finale predice il peso anche a
partire da misure del neonato stesso, come lunghezza e cranio: ciò lo
rende molto accurato, ma in una logica di pianificazione anticipata
richiede che tali misure siano disponibili, per esempio tramite
ecografia. Quando si dispone delle sole informazioni materne e
gestazionali, il modello ridotto mod2 rappresenta
un’alternativa meno precisa ma comunque utilizzabile.
L’analisi ha permesso di individuare alcune variabili fortemente associate al peso neonatale. In particolare, la durata della gestazione, il sesso del neonato, la lunghezza e la circonferenza cranica risultano tra i predittori più rilevanti, insieme al numero di gravidanze precedenti.
La fase di modellazione ha previsto la stima di un modello completo, la verifica di possibili interazioni ed effetti non lineari e una selezione automatica basata sull’AIC. Quest’ultima ha portato a un modello finale parsimonioso, che esclude età materna e fumo, non significativi, mantenendo le sole variabili realmente informative. Il modello finale conserva un’elevata capacità esplicativa, spiegando circa il 72,6% della variabilità del peso, con un errore medio di previsione di circa 274 g.
Il confronto tra modelli ha mostrato che l’inclusione delle misure antropometriche migliora nettamente la qualità predittiva, mentre l’interazione fumo-gestazione si è rivelata non significativa e la lieve non linearità della gestazione, pur statisticamente significativa, ha un impatto pratico trascurabile. Il modello ridotto ha comunque fornito informazioni utili dal punto di vista interpretativo, evidenziando il possibile effetto negativo del fumo materno sul peso alla nascita quando si considerano solo variabili materne e gestazionali. L’analisi dei valori influenti, infine, ha confermato la stabilità del modello rispetto ai casi più estremi, segnalando al tempo stesso la presenza di qualche dato anomalo da verificare a livello di qualità della rilevazione.
Nel complesso, il modello finale rappresenta uno strumento utile per stimare il peso neonatale sulla base di variabili cliniche disponibili. Le previsioni devono comunque essere interpretate con cautela, soprattutto in presenza di neonati prematuri o profili molto diversi da quelli mediamente osservati nel campione.