dataset = read.csv("neonati.csv", header = TRUE, stringsAsFactors = FALSE)
head(dataset, 10)
## 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
## 7 26 1 0 39 3100 480 345
## 8 25 0 0 40 3580 510 349
## 9 22 1 0 40 3670 500 335
## 10 23 0 0 41 3700 510 362
## Tipo.parto Ospedale Sesso
## 1 Nat osp3 M
## 2 Nat osp1 F
## 3 Nat osp2 M
## 4 Nat osp2 M
## 5 Nat osp3 F
## 6 Nat osp2 F
## 7 Nat osp3 F
## 8 Nat osp1 M
## 9 Ces osp2 F
## 10 Ces osp2 F
Variabile risposta: il peso del neonato è la variabile risposta; si tratta di una variabile di tipo quantitativo (continua), la cui unità di misura si esprime in grammi. La variabile risposta è la variabile statisticamente dipendente dalle variabili esplicative, e che il modello dovrà stimare.
Variabili esplicative:
età della madre, variabile quantitativa discreta caratterizzata da una potenziale relazione con la variabile risposta;
numero di gravidanze: variabile quantitativa discreta con una possibile associazione al peso neonatale;
fumo materno: variabile categorica nominale binaria, la cui relazione con il peso del neonato è molto probabile;
durata della gravidanza: variabile quantitativa continua, probabilmente il principale predittore del peso;
lunghezza del neonato: variabile quantitativa continua, con una considerabile significatività predittiva;
diametro del craneo: variabile quantitativa continua, simile alla variabile lunghezza (in termini di dipendenza);
tipo di parto: variabile categorica nominale, la cui relazione con la variabile risposta è probabilmente inversa (il tipo di parto potrebbe essere conseguenza del peso, e non il contrario);
ospedale: variabile categorica nominale, il cui legame al peso neonatale è plausibile in termini di differenze strutturali e protocolli ospedalieri (utile soprattutto per valutare gli effetti sistematici, e non casuali);
sesso del neonato: variabile categorica binaria, con probabile relazione alla variabile risposta.
summary(dataset[, c("Anni.madre",
"N.gravidanze",
"Gestazione",
"Peso",
"Lunghezza",
"Cranio")])
## Anni.madre N.gravidanze Gestazione Peso
## Min. : 0.00 Min. : 0.0000 Min. :25.00 Min. : 830
## 1st Qu.:25.00 1st Qu.: 0.0000 1st Qu.:38.00 1st Qu.:2990
## Median :28.00 Median : 1.0000 Median :39.00 Median :3300
## Mean :28.16 Mean : 0.9812 Mean :38.98 Mean :3284
## 3rd Qu.:32.00 3rd Qu.: 1.0000 3rd Qu.:40.00 3rd Qu.:3620
## Max. :46.00 Max. :12.0000 Max. :43.00 Max. :4930
## Lunghezza Cranio
## Min. :310.0 Min. :235
## 1st Qu.:480.0 1st Qu.:330
## Median :500.0 Median :340
## Mean :494.7 Mean :340
## 3rd Qu.:510.0 3rd Qu.:350
## Max. :565.0 Max. :390
Da un’analisi preliminare degli indici di posizione è possibile notare alcune enomalie nei dati raccolti. Nel caso della variabile Anni.madre si rileva che il valore minimo corrisponde a 0 anni (valore logicamente impossibile), seguito dal valore 1 anno (rilevabile ordinando il dataset in funzione dell’età). Entrambi sono probabilmente associabili a un errore commesso durante la raccolta dati. Le altre variabili non sembrano mostrare ulteriori incoerenze nei dati.
sapply(dataset[, c("Anni.madre",
"N.gravidanze",
"Gestazione",
"Peso",
"Lunghezza",
"Cranio")], sd)
## Anni.madre N.gravidanze Gestazione Peso Lunghezza Cranio
## 5.273578 1.280587 1.868639 525.038744 26.318644 16.425330
sapply(dataset[, c("Anni.madre",
"N.gravidanze",
"Gestazione",
"Peso",
"Lunghezza",
"Cranio")], function(x){(sd(x)/mean(x))*100})
## Anni.madre N.gravidanze Gestazione Peso Lunghezza Cranio
## 18.724536 130.512310 4.793792 15.987388 5.320208 4.830565
La variabilità delle variabili quantitative considerate risulta essere piuttosto ridotta, ad eccezione del numero di gravidanze (il cui coefficiente di variazione supera il 100%). Questo dato è legato al fatto che la deviazione standard appare maggiore del valor medio (come conseguenza della presenza di valori pari a zero).
library(moments)
sapply(dataset[, c("Anni.madre",
"N.gravidanze",
"Gestazione",
"Peso",
"Lunghezza",
"Cranio")], skewness)
## Anni.madre N.gravidanze Gestazione Peso Lunghezza Cranio
## 0.0428115 2.5142541 -2.0653133 -0.6470308 -1.5146991 -0.7850527
sapply(dataset[, c("Anni.madre",
"N.gravidanze",
"Gestazione",
"Peso",
"Lunghezza",
"Cranio")], kurtosis)
## Anni.madre N.gravidanze Gestazione Peso Lunghezza Cranio
## 3.380417 13.989406 11.258150 5.031532 9.487174 5.946206
Le distribuzioni appaiono quasi tutte asimmetriche (fatta eccezzione per l’età della madre), e leptocurtiche (ovvero più allungate). I risultati di asimmetria e curtosi più emblematici sono quelli relativi al numero di gravidanze, infatti si osserva una distribuzione fortemente asimmetrica e positiva (con valori e modalità basse più frequenti) e leptocurtica (più allungata rispetto alle altre distribuzioni).
Distribuzioni_frequenze = function(x) {
n = table(x)
f = prop.table(n)
data_file_out = data.frame(
Modalità = names(n),
Frequenza_assoluta = as.vector(n),
Frequenza_relativa = as.vector(f)
)
data_file_out$Frequenza_cumulata = cumsum(data_file_out$Frequenza_assoluta)
data_file_out$Frequenza_relativa_cumulata = cumsum(data_file_out$Frequenza_relativa)
return(data_file_out)
}
Distribuzioni_frequenze(dataset$Fumatrici)
## Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1 0 2396 0.9584 2396
## 2 1 104 0.0416 2500
## Frequenza_relativa_cumulata
## 1 0.9584
## 2 1.0000
Distribuzioni_frequenze(dataset$Tipo.parto)
## Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1 Ces 728 0.2912 728
## 2 Nat 1772 0.7088 2500
## Frequenza_relativa_cumulata
## 1 0.2912
## 2 1.0000
Distribuzioni_frequenze(dataset$Ospedale)
## Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1 osp1 816 0.3264 816
## 2 osp2 849 0.3396 1665
## 3 osp3 835 0.3340 2500
## Frequenza_relativa_cumulata
## 1 0.3264
## 2 0.6660
## 3 1.0000
Distribuzioni_frequenze(dataset$Sesso)
## Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1 F 1256 0.5024 1256
## 2 M 1244 0.4976 2500
## Frequenza_relativa_cumulata
## 1 0.5024
## 2 1.0000
In prima istanza, dalle distribuzioni di frequenza delle variabili qualitative, si possono fare alcune considerazioni. All’interno del campione preso in esame, la maggior parte delle madri risulta essere non fumatrice (95% circa), mentre la modalità di parto più frequente è il parto naturale (circa il 70%). La distribuzione delle unità statistiche tra i tre ospedali presi in esame è piuttosto omegenea, e lo stesso vale per il sesso dei neonati. Tra queste, la variabile di maggiore interessante è il fumo materno, il quale potrebbe avere una forte relazione con la variabile risposta. Tuttavia è possibile che lo sbilanciamento tra le frequenze dei due valori assumibili da tale variabile, renda la stessa poco informativa per un modello predittivo.
library(ggplot2)
ggplot(dataset, aes(x = Peso)) +
geom_histogram(binwidth = 1,
color = "steelblue") +
scale_y_continuous(breaks = seq(0, 60, by=20), limits = c(0, 60)) +
labs(title = "Profilo del Peso Neonatale",
x = "Peso (grammi)",
y = "Frequenza Assoluta") +
theme_classic(base_size = 14)
ggplot(dataset, aes(x = Peso)) +
geom_density(fill = "steelblue", alpha = 0.4) +
labs(title = "Distribuzione del Peso Neonatale",
x = "Peso (grammi)",
y = "Densità") +
theme_classic(base_size = 14)
ggplot(dataset, aes(x = Sesso, y = Peso)) +
geom_boxplot(fill = "gray") +
labs(title = "Peso alla Nascita per Sesso del Neonato",
x = "Sesso",
y = "Peso (grammi)") +
theme_classic()
ggplot(dataset, aes(x = Ospedale, y = Peso)) +
geom_boxplot(fill = "gray") +
labs(title = "Peso alla Nascita per Ospedale",
x = "Ospedale",
y = "Peso (grammi)") +
theme_classic()
ggplot(dataset, aes(x = Tipo.parto, y = Peso)) +
geom_boxplot(fill = "gray") +
labs(title = "Peso alla Nascita per Tipo di Parto",
x = "Tipo di Parto",
y = "Peso (grammi)") +
theme_classic()
dataset$Fumatrici = factor(dataset$Fumatrici,
levels = c(0,1),
labels = c("Non Fumatrice", "Fumatrice"))
ggplot(dataset, aes(x = Fumatrici, y = Peso)) +
geom_boxplot(fill = "gray") +
labs(title = "Peso alla Nascita per Fumo Materno",
x = "Fumo",
y = "Peso (grammi)") +
theme_classic()
La distribuzione del peso neonatale appare approssimativamente simmetrica, caratterizzata da una leggera coda a sinistra (valori più bassi), coerente con la presenza di alcuni neonati sottopeso. Non emergono evidenti multimodalità (è presente un solo picco) tali da suggerire la presenza di sottogruppi distinti. Inoltre la maggior parte dei pesi si concentra in un intervallo compreso tra i 3000 e i 4000 grammi circa. Dai boxplot invece si osserva la presenza di numerosi outlier, in particolare nella coda inferiore della distribuzione. Tali osservazioni rappresentano probabilmente neonati sottopeso e non necessariamente errori di rilevazione. Inoltre non sono visibili differenze significative tra le mediane (e più in generale tra le ditribuzioni) delle varie categorie. Nel confronto tra i sessi si nota una mediana del peso leggermente superiore per i maschi rispetto alle femmine. Tuttavia, la sovrapposizione degli intervalli interquartili suggerisce che la differenza, pur visibile a livello descrittivo, potrebbe non essere marcata. Il boxplot relativo al fumo materno mostra una mediana del peso inferiore per i neonati di madri fumatrici. Ciononostante, l’elevato sbilanciamento tra le frequenze delle due modalità potrebbe limitare l’affidabilità del confronto descrittivo. I boxplot relativi ai diversi ospedali non evidenziano differenze sostanziali né in termini di mediana, né di dispersione, suggerendo un’assenza di marcate eterogeneità strutturali tra le strutture considerate.
cor(dataset[, c("Anni.madre",
"N.gravidanze",
"Gestazione",
"Peso",
"Lunghezza",
"Cranio")])
## Anni.madre N.gravidanze Gestazione Peso Lunghezza
## Anni.madre 1.00000000 0.38063184 -0.1356671 -0.02247017 -0.06349157
## N.gravidanze 0.38063184 1.00000000 -0.1014919 0.00240730 -0.06040371
## Gestazione -0.13566714 -0.10149194 1.0000000 0.59176872 0.61892045
## Peso -0.02247017 0.00240730 0.5917687 1.00000000 0.79603676
## Lunghezza -0.06349157 -0.06040371 0.6189204 0.79603676 1.00000000
## Cranio 0.01607670 0.03900707 0.4608289 0.70480151 0.60334097
## Cranio
## Anni.madre 0.01607670
## N.gravidanze 0.03900707
## Gestazione 0.46082894
## Peso 0.70480151
## Lunghezza 0.60334097
## Cranio 1.00000000
plot(dataset$Anni.madre, dataset$Peso, pch = 20)
plot(dataset$N.gravidanze, dataset$Peso, pch = 20)
plot(dataset$Lunghezza, dataset$Cranio, pch = 20)
La durata della gravidanza mostra una forte plausibilità di associazione con il peso, e nel contempo anche le variabili antropometriche (lunghezza e diametro cranico) risultano fortemente correlate tra loro e con la variabile risposta, suggerendo una possibile futura attenzione alla multicollinearità nel modello. Al contrario, l’età della madre e il numero di gravidanze non sembrano mostrare alcun tipo di relazione lineare con la variabile risposta, per cui potrebbe essere ragionevole escluderle dal modello predittivo.
H(0): ospedale e tipologia di parto sono indipendenti
H(1): esiste un’associazione tra ospedale e tipologia di parto
tabella_contingenza = table(dataset$Ospedale, dataset$Tipo.parto)
tabella_contingenza
##
## Ces Nat
## osp1 242 574
## osp2 254 595
## osp3 232 603
test_chi = chisq.test(tabella_contingenza)
test_chi
##
## Pearson's Chi-squared test
##
## data: tabella_contingenza
## X-squared = 1.0972, df = 2, p-value = 0.5778
test_chi$expected
##
## Ces Nat
## osp1 237.6192 578.3808
## osp2 247.2288 601.7712
## osp3 243.1520 591.8480
fisher.test(tabella_contingenza)
##
## Fisher's Exact Test for Count Data
##
## data: tabella_contingenza
## p-value = 0.5782
## alternative hypothesis: two.sided
Il test Chi-quadrato di indipendenza non evidenzia una relazione statisticamente significativa tra ospedale e tipo di parto (X-squared = 1.0972; p-value = 0.5778 >> 0.05). Le frequenze osservate risultano molto vicine a quelle attese sotto ipotesi di indipendenza. Pertanto, non vi è evidenza che in uno specifico ospedale si effettuino proporzionalmente più parti cesarei rispetto agli altri (non si rifiuta l’ipotesi nulla). Le eventuali differenze osservate appaiono attribuibili alla variabilità campionaria.
H(0): media del peso e della lunghezza del campione coincidono con le medie della popolazione
H(1): media del peso e della lunghezza del campione noon sono significativamente uguali alle medie della popolazione
mu_peso_pop = 3300
mu_lunghezza_pop = 500
test_peso = t.test(dataset$Peso, mu = mu_peso_pop)
test_peso
##
## One Sample t-test
##
## data: dataset$Peso
## t = -1.516, df = 2499, p-value = 0.1296
## alternative hypothesis: true mean is not equal to 3300
## 95 percent confidence interval:
## 3263.490 3304.672
## sample estimates:
## mean of x
## 3284.081
test_lunghezza = t.test(dataset$Lunghezza, mu = mu_lunghezza_pop)
test_lunghezza
##
## One Sample t-test
##
## data: dataset$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
shapiro.test(dataset$Peso)
##
## Shapiro-Wilk normality test
##
## data: dataset$Peso
## W = 0.97066, p-value < 2.2e-16
Il test t non evidenzia una differenza statisticamente significativa tra la media del peso campionario (3284 g) e il valore di riferimento pari a 3300 g (t = -1.516; p-value = 0.1296 > 0.05). L’intervallo di confidenza al 95% include il valore ipotizzato, confermando la compatibilità tra campione e popolazione (ipotesi nulla non rifiutata). Sebbene il test di Shapiro-Wilk segnali una deviazione dalla normalità, l’elevata numerosità campionaria (n = 2500) rende il test t robusto a tali violazioni. Parallelamente, il test evidenzia che la lunghezza media del campione (494.69 mm) è statisticamente inferiore al valore di riferimento pari a 500 mm (t = -10.084; p-value < 2.2e-16 << 0.05). L’intervallo di confidenza al 95% non include il valore ipotizzato, confermando il rigetto dell’ipotesi nulla. Ciononostante, la differenza osservata è pari a circa 5 millimetri, entità relativamente contenuta dal punto di vista clinico.
H(0): le medie delle misure antropometriche non sono significativamente diverse tra maschi e femmine
H(1): le medie delle misure antropometriche sono significativamente diverse tra maschi e femmine
t_peso_sesso = t.test(Peso ~ Sesso, data = dataset)
t_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_lunghezza_sesso = t.test(Lunghezza ~ Sesso, data = dataset)
t_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_cranio_sesso = t.test(Cranio ~ Sesso, data = dataset)
t_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
Il confronto tra maschi e femmine evidenzia differenze statisticamente significative per tutte le misure antropometriche considerate. In particolare, i maschi presentano un peso medio superiore di circa 247 grammi rispetto alle femmine (p-value < 2.2e-16). Analogamente, risultano maggiori sia la lunghezza media (circa 10 mm di differenza) sia la circonferenza cranica (circa 4.8 mm). Tali risultati sono coerenti con l’evidenza biologica secondo cui i neonati maschi tendono ad avere dimensioni superiori rispetto alle femmine.
dataset <- subset(dataset, !(Anni.madre %in% c(0, 1)))
L’eliminazione di alcuni dati presenti nel dataset è ragionevole dal momento in cui la numerosità campionaria risulta essere piuttosto elevata; a maggior ragione se tali unità statistiche sono soggette a errori di imputazione.
mod_1 = lm(Peso ~ Anni.madre
+ N.gravidanze
+ Gestazione
+ Lunghezza
+ Cranio,
data = dataset)
summary(mod_1)
##
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Gestazione +
## Lunghezza + Cranio, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1129.74 -183.13 -12.59 167.92 2630.94
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6841.5343 141.4286 -48.374 <2e-16 ***
## Anni.madre 0.9652 1.1599 0.832 0.4054
## N.gravidanze 12.0612 4.7131 2.559 0.0106 *
## Gestazione 33.2285 3.8572 8.615 <2e-16 ***
## Lunghezza 10.4648 0.3020 34.650 <2e-16 ***
## Cranio 10.6301 0.4308 24.674 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 277.3 on 2492 degrees of freedom
## Multiple R-squared: 0.7218, Adjusted R-squared: 0.7212
## F-statistic: 1293 on 5 and 2492 DF, p-value: < 2.2e-16
mod_2 = update(mod_1, ~. - Anni.madre)
summary(mod_2)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio,
## data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1118.36 -181.20 -12.15 167.93 2636.44
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6808.8062 135.8418 -50.123 < 2e-16 ***
## N.gravidanze 13.5089 4.3800 3.084 0.00206 **
## Gestazione 32.8947 3.8360 8.575 < 2e-16 ***
## Lunghezza 10.4643 0.3020 34.651 < 2e-16 ***
## Cranio 10.6486 0.4302 24.752 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 277.3 on 2493 degrees of freedom
## Multiple R-squared: 0.7217, Adjusted R-squared: 0.7213
## F-statistic: 1616 on 4 and 2493 DF, p-value: < 2.2e-16
mod_3 = update(mod_2, ~. - N.gravidanze)
summary(mod_3)
##
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza + Cranio, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1105.68 -183.52 -12.69 166.41 2622.95
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6778.1583 135.7089 -49.946 <2e-16 ***
## Gestazione 31.7554 3.8247 8.303 <2e-16 ***
## Lunghezza 10.4210 0.3022 34.486 <2e-16 ***
## Cranio 10.7911 0.4285 25.186 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 277.8 on 2494 degrees of freedom
## Multiple R-squared: 0.7207, Adjusted R-squared: 0.7203
## F-statistic: 2145 on 3 and 2494 DF, p-value: < 2.2e-16
mod_4 = lm(Peso ~ Gestazione
+ Lunghezza,
data = dataset)
summary(mod_4)
##
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1152.7 -199.8 -19.6 192.2 3627.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5350.0450 138.0593 -38.75 <2e-16 ***
## Gestazione 45.1583 4.2411 10.65 <2e-16 ***
## Lunghezza 13.8954 0.3011 46.16 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 311 on 2495 degrees of freedom
## Multiple R-squared: 0.6496, Adjusted R-squared: 0.6493
## F-statistic: 2313 on 2 and 2495 DF, p-value: < 2.2e-16
mod_5 = lm(Peso ~ Gestazione
+ Cranio,
data = dataset)
summary(mod_5)
##
## Call:
## lm(formula = Peso ~ Gestazione + Cranio, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1360.91 -225.64 -8.12 224.37 1469.02
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6394.6522 164.3339 -38.91 <2e-16 ***
## Gestazione 95.3298 4.0717 23.41 <2e-16 ***
## Cranio 17.5365 0.4632 37.86 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 337.5 on 2495 degrees of freedom
## Multiple R-squared: 0.5874, Adjusted R-squared: 0.5871
## F-statistic: 1776 on 2 and 2495 DF, p-value: < 2.2e-16
anova(mod_1, mod_2, mod_3, mod_4, mod_5)
## Analysis of Variance Table
##
## Model 1: Peso ~ Anni.madre + N.gravidanze + Gestazione + Lunghezza + Cranio
## Model 2: Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio
## Model 3: Peso ~ Gestazione + Lunghezza + Cranio
## Model 4: Peso ~ Gestazione + Lunghezza
## Model 5: Peso ~ Gestazione + Cranio
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 2492 191639589
## 2 2493 191692844 -1 -53254 0.6925 0.405396
## 3 2494 192424285 -1 -731441 9.5114 0.002064 **
## 4 2495 241365355 -1 -48941070 636.4089 < 2.2e-16 ***
## 5 2495 284182810 0 -42817455
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(mod_1, mod_2, mod_3, mod_4, mod_5)
## df AIC
## mod_1 7 35200.22
## mod_2 6 35198.92
## mod_3 5 35206.43
## mod_4 4 35770.50
## mod_5 4 36178.44
BIC(mod_1, mod_2, mod_3, mod_4, mod_5)
## df BIC
## mod_1 7 35240.99
## mod_2 6 35233.86
## mod_3 5 35235.55
## mod_4 4 35793.79
## mod_5 4 36201.73
In primo luogo è stata condotta un’analisi volta a valutare l’impatto delle sole variabili quantitative sulla variabile risposta Peso, con l’obiettivo di individuare eventuali predittori poco rilevanti e di verificare possibili problematiche di multicollinearità. Il primo modello include tutte le variabili quantitative disponibili e dall’analisi emerge una ridotta significatività statistica per le variabili Anni.madre e N.gravidanze (p-value rispettivamente pari a 0.4054 e 0.0106). A tale modello corrisponde un R quadro pari a 0.7218, mentre l’errore standard residuo è di circa 277g. Il secondo modello è stato ottenuto eliminando la variabile Anni.madre, e rispetto al modello precedente si osserva una trascurabile diminuzione del fattore R quadro (0.7217). L’errore standard residuo resta sostanzialmente invariato, inoltre si rileva un incremento della significatività della variabile N.gravidanze (p-value = 0.00206), evidenza confermata anche dal confronto tramite test ANOVA tra i modelli annidati. Nel terzo modello, eliminando anche la variabile N.gravidanze, si osserva un moderato aumento dell’errore standard residuo e una lieve riduzione del coefficiente di determinazione (0.7207). Il test ANOVA indica però come la variabile rimossa fornisse un contributo statisticamente significativo condizionatamente alle altre variabili; pertanto, la sua esclusione non risulta giustificata dal punto di vista inferenziale. Gli ultimi due modelli, nei quali le variabili Lunghezza e Cranio non sono incluse contemporaneamente, mostrano una marcata riduzione del coefficiente R quadro e un sensibile incremento dell’errore standard residuo, evidenziando una significativa perdita di capacità esplicativa. Il confronto ANOVA tra i modelli 4 e 5 e i modelli precedenti suggerisce l’opportunità di mantenere entrambe le variabili nel modello di regressione, nonostante la loro correlazione reciproca. Infine, l’analisi comparativa degli indici informativi AIC e BIC porta a individuare come modello preferibile il modello 2, che esclude unicamente la variabile Anni.madre, garantendo il miglior compromesso tra bontà di adattamento e parsimonia.
library(car)
## Caricamento del pacchetto richiesto: carData
vif(mod_2)
## N.gravidanze Gestazione Lunghezza Cranio
## 1.022216 1.669153 2.053033 1.622427
par(mfrow=c(2,2))
plot(mod_2)
lev = hatvalues(mod_2)
plot(lev)
p = sum(lev)
n = nrow(dataset)
soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
## 3 13 15 34 47 61
## 0.004144628 0.005348393 0.006384459 0.006330591 0.004091677 0.004074567
## 67 89 96 101 106 131
## 0.005061173 0.012580300 0.005091319 0.007516185 0.013201134 0.006301323
## 134 151 155 161 189 190
## 0.007261161 0.010048467 0.006178597 0.019369096 0.004531657 0.005180517
## 204 205 206 220 249 277
## 0.013758661 0.005078029 0.008226152 0.007140899 0.004566339 0.004133326
## 294 304 305 310 312 315
## 0.005392658 0.004693725 0.004682055 0.028668439 0.011459533 0.005145748
## 348 378 440 442 445 471
## 0.004121778 0.015936990 0.004930444 0.007404052 0.007482938 0.004274133
## 486 492 497 516 540 582
## 0.005049514 0.008261498 0.004707257 0.012693738 0.004134315 0.011164034
## 587 592 614 615 629 638
## 0.008322582 0.006260323 0.005034980 0.004466877 0.004230136 0.005573556
## 656 657 684 697 702 706
## 0.005669547 0.005027922 0.008389813 0.005493596 0.005061173 0.004195534
## 726 729 748 750 757 765
## 0.004411121 0.004889093 0.008560393 0.006918327 0.007894547 0.005173699
## 769 805 828 893 895 913
## 0.004007519 0.014357517 0.006950689 0.004591706 0.004708871 0.005115923
## 928 946 947 949 951 956
## 0.022661203 0.006515166 0.008383174 0.004392898 0.004022658 0.007665979
## 964 985 991 1008 1014 1049
## 0.004029692 0.006783725 0.004295524 0.005001734 0.008451943 0.004672780
## 1067 1091 1096 1106 1130 1166
## 0.008395289 0.007682371 0.004603339 0.005504258 0.031513152 0.005083204
## 1181 1188 1200 1219 1238 1248
## 0.005323594 0.006239247 0.005016914 0.030480569 0.004992954 0.012920980
## 1262 1273 1275 1291 1293 1294
## 0.004185997 0.006859386 0.004068395 0.005698916 0.005731728 0.004435634
## 1311 1321 1323 1325 1356 1357
## 0.009473731 0.009133604 0.004057347 0.004541346 0.004584433 0.006864213
## 1385 1395 1400 1402 1411 1420
## 0.012619889 0.004697373 0.005309650 0.004503404 0.007715017 0.004462202
## 1426 1428 1429 1450 1505 1551
## 0.004217571 0.008177383 0.021692559 0.014780512 0.012783196 0.048800922
## 1553 1556 1560 1573 1593 1606
## 0.007885899 0.005380663 0.004118021 0.004214200 0.004661169 0.004720021
## 1610 1617 1619 1628 1686 1692
## 0.008520202 0.004435777 0.015056165 0.005015678 0.008306823 0.004298817
## 1693 1701 1712 1718 1727 1735
## 0.004720388 0.009383004 0.006576676 0.006465690 0.012940147 0.004126594
## 1780 1781 1802 1809 1827 1858
## 0.025492866 0.016529710 0.004156061 0.008677581 0.005022425 0.004107116
## 1868 1892 1893 1911 1962 1967
## 0.004996338 0.004784549 0.004040041 0.004149449 0.004878094 0.004792006
## 1977 2037 2040 2046 2086 2089
## 0.006547897 0.004668764 0.011373547 0.005306884 0.012972461 0.006259049
## 2098 2114 2115 2120 2140 2146
## 0.004683334 0.013313489 0.011480195 0.018663873 0.006199231 0.005099620
## 2148 2149 2157 2175 2200 2215
## 0.007542042 0.012103757 0.005245436 0.032531265 0.010401116 0.004674369
## 2216 2220 2221 2224 2225 2244
## 0.007909966 0.004903488 0.021007035 0.004838764 0.005437839 0.006655216
## 2257 2307 2317 2318 2337 2353
## 0.006142702 0.012294996 0.007322418 0.004360961 0.004717443 0.004255103
## 2359 2408 2422 2436 2437 2452
## 0.009911047 0.008465160 0.021291712 0.004732981 0.021652651 0.023809600
## 2458 2471 2478
## 0.008445752 0.020569450 0.005535105
plot(rstudent(mod_2))
abline(h=c(-2,2), col=2)
outlierTest(mod_2)
## rstudent unadjusted p-value Bonferroni p
## 1551 9.937878 7.5343e-23 1.8821e-19
## 155 5.200544 2.1486e-07 5.3673e-04
## 1306 4.619274 4.0467e-06 1.0109e-02
cook = cooks.distance(mod_2)
plot(cook)
max(cook)
## [1] 0.9751441
std_par = par(mfrow = c(1,1))
par(std_par)
Al fine di valutare la solidità del modello 2 è stata condotta un’analisi diagnostica completa, comprendente la verifica della multicollinearità, l’analisi dei residui, l’identificazione di osservazioni influenti e la valutazione dei leverage. In primo luogo, l’analisi della multicollinearità tramite Variance Inflation Factor (VIF) evidenzia valori contenuti per tutte le variabili esplicative: N.gravidanze (1.02), Gestazione (1.67), Lunghezza (2.05) e Cranio (1.62). Tali valori risultano ampiamente inferiori alle soglie comunemente considerate problematiche, indicando l’assenza di multicollinearità rilevante. In particolare, sebbene Lunghezza e Cranio siano biologicamente correlate, il livello di correlazione non risulta tale da compromettere la stabilità delle stime o l’interpretabilità dei coefficienti. Il modello può pertanto essere considerato stabile dal punto di vista strutturale. L’analisi dei leverage, calcolati tramite gli hat values, mostra una soglia teorica pari a 0.0040, con un valore massimo osservato di 0.0488. Sebbene alcune osservazioni superino la soglia convenzionale, ciò risulta comprensibile in presenza di un campione numeroso. Il leverage elevato indica combinazioni relativamente rare delle variabili esplicative, ma non implica automaticamente un’influenza distorsiva sul modello. L’esame dei residui studentizzati mostra alcune osservazioni con valore assoluto superiore a 2, corrispondenti a circa il 4% del campione. Tale proporzione risulta coerente con quanto atteso sotto l’ipotesi di normalità dei residui (circa il 5%), suggerendo l’assenza di un numero anomalo di outlier. Il test formale per l’identificazione di outlier non segnala criticità tali da compromettere l’affidabilità complessiva del modello. Ciononostante, si ritiene opportuno indagare ulteriormente su tre outlier estremamenti lontani dalla previsione del modello e statisticamente incompatibili con l’ipotesi di normalità dei residui, ossia i punti: 1306, 155 e 1551. Infine, l’analisi della Cook’s distance evidenzia un valore massimo pari a 0.975. Tale valore, pur risultando prossimo alla soglia indicativa di forte influenza (1), non la supera. Ciò suggerisce la presenza di almeno un’osservazione potenzialmente influente (probabilmente il punto 1551), la cui analisi individuale potrebbe risultare opportuna; tuttavia, non emergono evidenze di instabilità sistemica del modello. Nel complesso, la diagnostica condotta indica che il modello 2 è statisticamente solido: non presenta problematiche di multicollinearità, non evidenzia deviazioni sostanziali dalle assunzioni di base della regressione lineare e non risulta dominato da osservazioni fortemente influenti. Le osservazioni estreme appaiono compatibili con la naturale variabilità del fenomeno analizzato e non compromettono la validità inferenziale del modello, anche se risulta opportuno investigare sulla loro natura.
new_dataset <- subset(dataset, row.names(dataset) != 1551)
new_mod_2 = lm(Peso ~ N.gravidanze
+ Gestazione
+ Lunghezza
+ Cranio,
data = new_dataset)
vif(new_mod_2)
## N.gravidanze Gestazione Lunghezza Cranio
## 1.022484 1.677961 2.111187 1.655146
par(mfrow=c(2,2))
plot(new_mod_2)
lev = hatvalues(new_mod_2)
plot(lev)
p = sum(lev)
n = nrow(dataset)
soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
## 3 13 15 34 47 61
## 0.004176758 0.005367725 0.006464200 0.006521702 0.004234200 0.004235625
## 67 89 96 101 106 131
## 0.005061584 0.012580311 0.005097567 0.007586328 0.013206457 0.006342065
## 134 151 155 161 189 190
## 0.007264605 0.010048646 0.006419350 0.019425908 0.004602412 0.005200113
## 204 205 206 220 249 277
## 0.013793557 0.005124262 0.008237282 0.007485408 0.004629036 0.004133711
## 294 304 305 310 312 315
## 0.005402568 0.004868750 0.004682725 0.028908632 0.011574271 0.005249778
## 348 378 440 442 445 471
## 0.004278579 0.015946514 0.004943580 0.007411451 0.007487090 0.004430230
## 486 492 497 516 540 565
## 0.005049730 0.008384026 0.004709549 0.012707656 0.004217834 0.004009504
## 582 587 592 614 615 629
## 0.011187095 0.008337452 0.006265217 0.005048988 0.004577996 0.004235129
## 638 656 657 684 697 702
## 0.005583773 0.005775514 0.005111533 0.008665300 0.005641445 0.005061584
## 706 726 729 748 750 757
## 0.004200878 0.004494610 0.005010470 0.008586026 0.006936034 0.007897100
## 765 769 805 828 893 895
## 0.005182800 0.004056704 0.014399652 0.006952112 0.004599764 0.004716914
## 896 913 928 946 947 949
## 0.004021662 0.005118404 0.022850762 0.006527731 0.008445184 0.004418693
## 951 956 964 985 991 1008
## 0.004080597 0.007792162 0.004189395 0.006789256 0.004298293 0.005002130
## 1014 1049 1067 1091 1096 1106
## 0.008627737 0.004674870 0.008395448 0.007682546 0.004634585 0.005519039
## 1130 1166 1181 1188 1200 1219
## 0.031638892 0.005185751 0.005337204 0.006497898 0.005171213 0.030480694
## 1238 1248 1262 1273 1275 1291
## 0.004996471 0.012936987 0.004194097 0.006954448 0.004117937 0.005736221
## 1293 1294 1311 1321 1323 1325
## 0.005839709 0.004640045 0.009475816 0.009160595 0.004162421 0.004546154
## 1356 1357 1385 1395 1400 1402
## 0.004616896 0.006872382 0.012619991 0.004808889 0.005374660 0.004705062
## 1411 1420 1426 1428 1429 1450
## 0.007767406 0.004462234 0.004227169 0.008333391 0.022012783 0.014789606
## 1505 1553 1556 1560 1573 1593
## 0.012784077 0.007920062 0.005409418 0.004206564 0.004231473 0.004690105
## 1606 1610 1617 1619 1628 1686
## 0.004908552 0.008643270 0.004438659 0.015286517 0.005123141 0.008307208
## 1692 1693 1701 1712 1718 1727
## 0.004343552 0.004763909 0.009525641 0.006788159 0.006475666 0.012946273
## 1735 1780 1781 1802 1809 1827
## 0.004291141 0.025533909 0.016543287 0.004323222 0.008687202 0.005049858
## 1858 1868 1892 1893 1911 1962
## 0.004107387 0.005031779 0.004801142 0.004067113 0.004294453 0.004973655
## 1967 1977 2037 2040 2046 2086
## 0.004792730 0.006548038 0.004677247 0.011947261 0.005318489 0.012975802
## 2089 2098 2114 2115 2120 2140
## 0.006337469 0.004703172 0.013408848 0.011707366 0.018665947 0.006206913
## 2146 2148 2149 2157 2175 2200
## 0.005103777 0.007584098 0.012115341 0.005248685 0.032542584 0.010402450
## 2215 2216 2220 2221 2224 2225
## 0.004675657 0.007918054 0.004903674 0.021016651 0.004859064 0.005498581
## 2244 2257 2307 2317 2318 2337
## 0.006655247 0.006223306 0.012326453 0.007363315 0.004398632 0.004842870
## 2353 2359 2408 2422 2436 2437
## 0.004294291 0.009916182 0.008468894 0.021311354 0.004736426 0.021812436
## 2452 2458 2471 2478
## 0.023811367 0.008447234 0.020586575 0.005556762
plot(rstudent(new_mod_2))
abline(h=c(-2,2), col=2)
outlierTest(new_mod_2)
## rstudent unadjusted p-value Bonferroni p
## 155 5.460692 5.2124e-08 0.00013015
## 1306 4.728068 2.3930e-06 0.00597540
cook = cooks.distance(new_mod_2)
plot(cook)
max(cook)
## [1] 0.07986242
par(std_par)
In seguito alla rimozione dell’osservazione 1551, la distanza di Cook assume un valore decisamente ragionevole (0.0798 << 1). Ciononostante, si considera conveniente non rimuovere tale unità prima dell’aver incluso nel modello anche le variabili qualitative, in quanto essa non appare soggetta a errori di inserimento nel dataset.
dataset$Fumatrici = factor(dataset$Fumatrici)
dataset$Ospedale = factor(dataset$Ospedale)
dataset$Tipo.parto = factor(dataset$Tipo.parto)
dataset$Sesso = factor(dataset$Sesso)
mod_6 = lm(Peso ~., data = dataset)
summary(mod_6)
##
## Call:
## lm(formula = Peso ~ ., data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1123.26 -181.53 -14.45 161.05 2611.89
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6735.7960 141.4790 -47.610 < 2e-16 ***
## Anni.madre 0.8018 1.1467 0.699 0.4845
## N.gravidanze 11.3812 4.6686 2.438 0.0148 *
## FumatriciFumatrice -30.2741 27.5492 -1.099 0.2719
## Gestazione 32.5773 3.8208 8.526 < 2e-16 ***
## Lunghezza 10.2922 0.3009 34.207 < 2e-16 ***
## Cranio 10.4722 0.4263 24.567 < 2e-16 ***
## Tipo.partoNat 29.6335 12.0905 2.451 0.0143 *
## Ospedaleosp2 -11.0912 13.4471 -0.825 0.4096
## Ospedaleosp3 28.2495 13.5054 2.092 0.0366 *
## SessoM 77.5723 11.1865 6.934 5.18e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274 on 2487 degrees of freedom
## Multiple R-squared: 0.7289, Adjusted R-squared: 0.7278
## F-statistic: 668.7 on 10 and 2487 DF, p-value: < 2.2e-16
mod_7 = update(mod_6, ~.
- Anni.madre
- Ospedale
- Tipo.parto)
summary(mod_7)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza +
## Cranio + Sesso, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1150.24 -181.32 -15.73 162.95 2635.69
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6682.2637 135.7983 -49.207 < 2e-16 ***
## N.gravidanze 12.6996 4.3470 2.921 0.00352 **
## FumatriciFumatrice -30.5728 27.6048 -1.108 0.26818
## Gestazione 32.6437 3.8079 8.573 < 2e-16 ***
## Lunghezza 10.2309 0.3011 33.979 < 2e-16 ***
## Cranio 10.5366 0.4265 24.707 < 2e-16 ***
## SessoM 78.1596 11.2117 6.971 4.01e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.7 on 2491 degrees of freedom
## Multiple R-squared: 0.7271, Adjusted R-squared: 0.7265
## F-statistic: 1106 on 6 and 2491 DF, p-value: < 2.2e-16
mod_8 = update(mod_7, ~.
- Fumatrici)
summary(mod_8)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Sesso, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1149.37 -180.98 -15.57 163.69 2639.09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6681.7251 135.8036 -49.201 < 2e-16 ***
## N.gravidanze 12.4554 4.3416 2.869 0.00415 **
## Gestazione 32.3827 3.8008 8.520 < 2e-16 ***
## Lunghezza 10.2455 0.3008 34.059 < 2e-16 ***
## Cranio 10.5410 0.4265 24.717 < 2e-16 ***
## SessoM 77.9807 11.2111 6.956 4.47e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.7 on 2492 degrees of freedom
## Multiple R-squared: 0.727, Adjusted R-squared: 0.7265
## F-statistic: 1327 on 5 and 2492 DF, p-value: < 2.2e-16
Il primo modello (modello 6) include tutte le variabili presenti nel dataset, sia quantitative che qualitative. Dall’analisi dei coefficienti emerge che alcune di esse esercitano un’influenza trascurabile sulla variabile risposta, come suggerito dai rispettivi p-value non significativi. Il modello successivo infatti è stato realizzato a partire dal sesto modello eliminando le variabili meno influenti, ovvero Anni.madre, Ospedale e Tipo.parto. Le ragioni che hanno condotto alla rimozione di tali variabili non sono riconducibili esclusivamente alla loro scarsa significatività statistica, ma anche alla natura della relazione con la variabile risposta. In particolare, per alcune di esse potrebbe non essere appropriato ipotizzare un rapporto di tipo esplicativo unidirezionale. Ad esempio, nel caso della tipologia di parto, è plausibile che la relazione sia inversa rispetto a quella modellizzata: il peso neonatale stimato o atteso potrebbe influenzare la scelta del tipo di parto, piuttosto che rappresentarne una conseguenza. In questo senso, includere tale variabile come predittore del peso potrebbe introdurre un’ambiguità interpretativa sul piano causale, configurando una potenziale relazione di dipendenza invertita. Il confronto tra i due modelli mostra differenze molto contenute in termini di coefficiente di determinazione (R quadro pari a 0.7289 per il modello 6 e 0.7271 per il modello 7). Quest’ultimo quindi risulta più parsimonioso, mantenendo una capacità esplicativa sostanzialmente analoga. Eliminando la variabile Fumatrici si ottiene il modello 8, caratterizzato da un coefficiente di determinazione pari a 0.7270. Si osserva che il contributo del fumo materno non risulta statisticamente significativo (p-value pari a 0.26818 nel modello 7), suggerendo un effetto marginale all’interno del campione analizzato. È plausibile che tale risultato sia influenzato anche dalla ridotta frequenza di madri fumatrici nel dataset. Anche le differenze tra gli RSE dei tre modelli risultano minime, indicando livelli di errore residuo molto simili. Da questa prima analisi comparativa si può quindi ritenere che, tra i modelli considerati, il modello 8 rappresenti una scelta efficiente in termini di equilibrio tra semplicità e capacità esplicativa.
anova(mod_6, mod_7, mod_8, mod_2)
## Analysis of Variance Table
##
## Model 1: Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza +
## Cranio + Tipo.parto + Ospedale + Sesso
## Model 2: Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio +
## Sesso
## Model 3: Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Sesso
## Model 4: Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 2487 186743194
## 2 2491 187949505 -4 -1206312 4.0163 0.002992 **
## 3 2492 188042054 -1 -92548 1.2325 0.267022
## 4 2493 191692844 -1 -3650790 48.6203 3.965e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(mod_2, mod_6, mod_7, mod_8)
## df AIC
## mod_2 6 35198.92
## mod_6 12 35145.57
## mod_7 8 35153.66
## mod_8 7 35152.89
BIC(mod_2, mod_6, mod_7, mod_8)
## df BIC
## mod_2 6 35233.86
## mod_6 12 35215.45
## mod_7 8 35200.24
## mod_8 7 35193.65
library(car)
vif(mod_6)
## GVIF Df GVIF^(1/(2*Df))
## Anni.madre 1.190241 1 1.090982
## N.gravidanze 1.189278 1 1.090540
## Fumatrici 1.007426 1 1.003706
## Gestazione 1.695675 1 1.302181
## Lunghezza 2.086879 1 1.444604
## Cranio 1.631049 1 1.277125
## Tipo.parto 1.004227 1 1.002111
## Ospedale 1.004267 2 1.001065
## Sesso 1.040743 1 1.020168
vif(mod_8)
## N.gravidanze Gestazione Lunghezza Cranio Sesso
## 1.023462 1.669779 2.075747 1.624568 1.040184
La scelta del modello è stata effettuata sulla base dei risultati del test ANOVA e dei criteri informativi AIC e BIC. Dal confronto tra il modello 6 e il modello 7 emerge un peggioramento statisticamente significativo (ΔRSS = 1.206.312, F = 4.016, p = 0.00299), mentre la rimozione della variabile Fumatrici non comporta una riduzione significativa della qualità del modello. Anche il modello 2, nel quale non è presente la variabile Sesso, evidenzia un marcato peggioramento rispetto al modello 8. In termini strettamente statistici, il test ANOVA suggerirebbe come preferibile il modello contenente tutte le variabili del dataset. Tuttavia, tale risultato potrebbe essere associato a un possibile fenomeno di overfitting, per cui il modello risulterebbe molto aderente ai dati osservati nel campione, ma potenzialmente meno generalizzabile a campioni caratterizzati da diversa variabilità e differente struttura. Anche l’indice AIC individua nel modello 6 la specificazione più efficiente, mentre il criterio BIC, che applica una penalizzazione più severa alla complessità del modello, identifica nel modello 8 la soluzione migliore tra quelle considerate. Nel complesso, l’analisi evidenzia come il modello sia principalmente guidato dalle variabili Gestazione, Lunghezza, Cranio e Sesso, con un contributo statisticamente significativo (seppur più contenuto) della variabile N.gravidanze. Alla luce di tali considerazioni, la scelta finale del modello di regressione si orienta verso il modello 8.
par(mfrow=c(2,2))
plot(mod_8)
lev = hatvalues(mod_8)
plot(lev)
p = sum(lev)
n = nrow(dataset)
soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
## 13 15 34 67 89 96
## 0.005632888 0.007056483 0.006748974 0.005896189 0.012817563 0.005351869
## 101 106 131 134 151 155
## 0.007528094 0.014487904 0.007237755 0.007553514 0.010889886 0.007209736
## 161 189 190 204 205 206
## 0.020341133 0.004894598 0.005366831 0.014494112 0.005351828 0.009482503
## 220 294 305 310 312 315
## 0.007403130 0.005914307 0.005445189 0.028815300 0.013173723 0.005386836
## 378 440 442 445 486 492
## 0.015942080 0.005405733 0.007725708 0.007511227 0.005165714 0.008274392
## 497 516 582 587 592 614
## 0.005167522 0.013080707 0.011667393 0.008415872 0.006385013 0.005300091
## 638 656 657 684 697 702
## 0.006693153 0.005934494 0.005323517 0.008825948 0.005864920 0.005203163
## 729 748 750 757 765 805
## 0.005024448 0.008567254 0.006943755 0.008146487 0.006076412 0.014358658
## 828 893 895 913 928 946
## 0.007180179 0.005076266 0.005297643 0.005574016 0.022745493 0.006910965
## 947 956 985 1008 1014 1049
## 0.008409518 0.007791530 0.007040035 0.005343994 0.008474086 0.004956561
## 1067 1091 1106 1130 1166 1181
## 0.008467035 0.008940030 0.005967511 0.031739177 0.005513581 0.005678043
## 1188 1200 1219 1238 1248 1273
## 0.006481533 0.005493009 0.030697778 0.005912496 0.014631359 0.007089553
## 1291 1293 1311 1321 1325 1356
## 0.006118589 0.006074423 0.009626391 0.009295311 0.004857340 0.005306940
## 1357 1385 1395 1400 1402 1411
## 0.006967713 0.012641828 0.005129491 0.005932524 0.004816704 0.008049539
## 1420 1428 1429 1450 1505 1551
## 0.005156670 0.008195421 0.021758961 0.015106684 0.013334256 0.048802841
## 1553 1556 1573 1593 1606 1610
## 0.008507417 0.005923458 0.005049368 0.005624961 0.005009312 0.008725821
## 1617 1619 1628 1686 1693 1701
## 0.004869997 0.015069038 0.005070717 0.009356578 0.005079185 0.010846383
## 1712 1718 1727 1735 1780 1781
## 0.006993461 0.006961226 0.013303625 0.004886226 0.025544997 0.016833696
## 1809 1827 1868 1892 1962 1967
## 0.008711082 0.006068655 0.005206137 0.005333985 0.005541287 0.005339716
## 1977 2037 2040 2046 2086 2089
## 0.006928794 0.004890003 0.011504028 0.005471894 0.013194769 0.006293791
## 2098 2114 2115 2120 2140 2146
## 0.005097113 0.013318873 0.011779730 0.018667270 0.006244737 0.005804705
## 2148 2149 2157 2175 2200 2215
## 0.007930323 0.013589469 0.005910248 0.032531736 0.011679031 0.004894044
## 2216 2220 2221 2224 2225 2244
## 0.008120291 0.005415586 0.021633907 0.005841119 0.005593576 0.006929530
## 2257 2307 2317 2318 2337 2359
## 0.006171101 0.013972901 0.007677230 0.004834368 0.005230839 0.010068259
## 2408 2422 2436 2437 2452 2458
## 0.009702475 0.021536269 0.004986609 0.023951342 0.023848222 0.008509142
## 2471 2478
## 0.020905930 0.005777111
plot(rstudent(mod_8))
abline(h=c(-2,2), col=2)
outlierTest(mod_8)
## rstudent unadjusted p-value Bonferroni p
## 1551 10.046230 2.6345e-23 6.5810e-20
## 155 5.025345 5.3818e-07 1.3444e-03
## 1306 4.824963 1.4848e-06 3.7092e-03
cook = cooks.distance(mod_8)
plot(cook)
max(cook)
## [1] 0.8297645
shapiro.test(residuals(mod_8))
##
## Shapiro-Wilk normality test
##
## data: residuals(mod_8)
## W = 0.97414, p-value < 2.2e-16
lmtest::bptest(mod_8)
##
## studentized Breusch-Pagan test
##
## data: mod_8
## BP = 90.297, df = 5, p-value < 2.2e-16
lmtest::dwtest(mod_8)
##
## Durbin-Watson test
##
## data: mod_8
## DW = 1.9532, p-value = 0.1209
## alternative hypothesis: true autocorrelation is greater than 0
par(std_par)
L’analisi diagnostica del modello 8 è stata condotta mediante esame grafico dei residui, valutazione dei leverage, identificazione di outlier e osservazioni influenti, nonché tramite test formali di normalità, omoschedasticità e autocorrelazione. Dall’elenco delle osservazioni con leverage superiore alla soglia emerge la presenza di numerosi punti con valori relativamente elevati; in particolare l’osservazione 1551, la quale presenta un leverage pari a 0.0488, sensibilmente superiore rispetto alla maggior parte delle altre osservazioni (e ciò indica la presenza di punti con potenziale influenza sulla stima dei coefficienti). Dall’analisi dei residui studentizzati emergono alcune osservazioni con valori particolarmente elevati: 1551 (rstudent ≈ 10.05); 155 (rstudent ≈ 5.03); 1306 (rstudent ≈ 4.82). Tra queste, l’unità 1551 presenta un p-value estremamente basso anche dopo correzione Bonferroni, configurandosi come outlier statisticamente significativo. Pertanto, è lecito affermare che nel modello sono presenti osservazioni anomale in grado di influenzare le stime. Il valore massimo della distanza di Cook è pari a 0.8298, ovvero un valore elevato, ma non oltre il limite critico convenzionale. Ciononostante, esso suggerisce la presenza di almeno un’osservazione con potenziale influenza rilevante. In seguito al test di Shapiro–Wilk (W = 0.974, p-value < 2.2e-16) si rifiuta l’ipotesi nulla di normalità dei residui, tuttavia, dato l’elevato numero di osservazioni, il test risulta estremamente sensibile a deviazioni anche minime dalla normalità. Il test di Breusch–Pagan (BP = 90.297, p-value < 2.2e-16) conferma la presenza di eteroschedasticità nel modello (o per meglio dire si rifiuta l’ipotesi nulla di omoschedasticità). In ultimo, dal test di Durbin–Watson (DW = 1.9532, p-value = 0.1209) si evince che non è possibile rifiutare l’ipotesi nulla di assenza di autocorrelazione positiva (non emergono infatti evidenze di autocorrelazione dei residui). Nel suo complesso, l’analisi diagnostica mette in evidenzia tre aspetti principali del modello numero 8: la presenza di osservazioni ad alto leverage; la presenza di outlier significativi (in particolare l’osservazione 1551); e l’evidenza di eteroschedasticità. Non sono stati rilevati invece problemi di autocorrelazione.
new_mod_8 = lm(Peso ~ N.gravidanze
+ Gestazione
+ Lunghezza
+ Cranio
+ Sesso,
data = new_dataset)
par(mfrow=c(2,2))
plot(new_mod_8)
lev = hatvalues(new_mod_8)
plot(lev)
p = sum(lev)
n = nrow(dataset)
soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
## 13 15 34 61 67 89
## 0.005652432 0.007136882 0.006940890 0.004869520 0.005896549 0.012817580
## 96 101 106 131 134 151
## 0.005358003 0.007598319 0.014493465 0.007279053 0.007557049 0.010890102
## 155 161 189 190 204 205
## 0.007449075 0.020397279 0.004965808 0.005386256 0.014528554 0.005397742
## 206 220 294 304 305 310
## 0.009493300 0.007748495 0.005924013 0.004966921 0.005445796 0.029056026
## 312 315 348 378 440 442
## 0.013287205 0.005491317 0.004861284 0.015951584 0.005418645 0.007733246
## 445 486 492 497 516 582
## 0.007515410 0.005165916 0.008397034 0.005169723 0.013094416 0.011690760
## 587 592 614 638 656 657
## 0.008430636 0.006389978 0.005313926 0.006703068 0.006040939 0.005407576
## 684 697 702 729 748 750
## 0.009102422 0.006012105 0.005203595 0.005146189 0.008592925 0.006961523
## 757 765 805 828 893 895
## 0.008149113 0.006085774 0.014400774 0.007181654 0.005084148 0.005305492
## 913 928 946 947 949 956
## 0.005576593 0.022934693 0.006923732 0.008471642 0.004827317 0.007918071
## 964 985 1008 1014 1049 1067
## 0.004869271 0.007045674 0.005344423 0.008650058 0.004958583 0.008467204
## 1091 1106 1130 1166 1181 1188
## 0.008940250 0.005982058 0.031864438 0.005615533 0.005691457 0.006740896
## 1200 1219 1238 1248 1273 1291
## 0.005646540 0.030697918 0.005915854 0.014646899 0.007184195 0.006156251
## 1293 1294 1311 1321 1325 1356
## 0.006181858 0.004955574 0.009628526 0.009322114 0.004862260 0.005339840
## 1357 1385 1395 1400 1402 1411
## 0.006975799 0.012641926 0.005241631 0.005998106 0.005019076 0.008101552
## 1420 1428 1429 1450 1505 1553
## 0.005156717 0.008351581 0.022079600 0.015115623 0.013335076 0.008541167
## 1556 1560 1573 1593 1606 1610
## 0.005952569 0.004867876 0.005066301 0.005653425 0.005198507 0.008848437
## 1617 1619 1628 1686 1693 1701
## 0.004872980 0.015299235 0.005178399 0.009356907 0.005122352 0.010987726
## 1712 1718 1727 1735 1780 1781
## 0.007204101 0.006971003 0.013309886 0.005049770 0.025585909 0.016847455
## 1809 1827 1868 1892 1962 1967
## 0.008720653 0.006095609 0.005241333 0.005350307 0.005636135 0.005340384
## 1977 2037 2040 2046 2086 2089
## 0.006928956 0.004898610 0.012078521 0.005483623 0.013198032 0.006372359
## 2098 2114 2115 2120 2140 2146
## 0.005117210 0.013414168 0.012006161 0.018669336 0.006252471 0.005808710
## 2148 2149 2157 2175 2200 2215
## 0.007972743 0.013600683 0.005913367 0.032543061 0.011680251 0.004895285
## 2216 2220 2221 2224 2225 2244
## 0.008128263 0.005415745 0.021643303 0.005861015 0.005654042 0.006929553
## 2257 2307 2317 2318 2337 2359
## 0.006251841 0.014003708 0.007718470 0.004872419 0.005355546 0.010073475
## 2408 2422 2436 2437 2452 2458
## 0.009706018 0.021555714 0.004990138 0.024109409 0.023849966 0.008510597
## 2471 2478
## 0.020922840 0.005798563
plot(rstudent(new_mod_8))
abline(h=c(-2,2), col=2)
outlierTest(new_mod_8)
## rstudent unadjusted p-value Bonferroni p
## 155 5.285313 1.3639e-07 0.00034056
## 1306 4.940535 8.3077e-07 0.00207440
## 1399 -4.348609 1.4251e-05 0.03558600
cook = cooks.distance(new_mod_8)
plot(cook)
max(cook)
## [1] 0.06504824
shapiro.test(residuals(new_mod_8))
##
## Shapiro-Wilk normality test
##
## data: residuals(new_mod_8)
## W = 0.98891, p-value = 5.23e-13
lmtest::bptest(new_mod_8)
##
## studentized Breusch-Pagan test
##
## data: new_mod_8
## BP = 11.343, df = 5, p-value = 0.04499
lmtest::dwtest(new_mod_8)
##
## Durbin-Watson test
##
## data: new_mod_8
## DW = 1.9536, p-value = 0.1227
## alternative hypothesis: true autocorrelation is greater than 0
par(std_par)
A seguito dell’identificazione dell’osservazione 1551 come outlier influente, è stato stimato nuovamente il modello di regressione lineare multipla escludendo tale unità campionaria. L’analisi diagnostica è stata quindi ripetuta al fine di valutare eventuali variazioni nella struttura dei residui e nella stabilità del modello. I leverage risultano distribuiti in un intervallo contenuto, senza la presenza di valori anomali paragonabili a quello precedentemente riscontrato per l’osservazione 1551. Il valore massimo della distanza di Cook risulta ora pari a 0.065, per cui (rispetto al valore precedente) si osserva una drastica riduzione dell’influenza massima esercitata da una singola osservazione. Il nuovo valore è ampiamente al di sotto della soglia convenzionale, suggerendo l’assenza di osservazioni fortemente influenti nel modello aggiornato, e questo rappresenta il cambiamento più sostanziale. Ciononostante, dall’analisi dei residui studentizzati emergono ancora alcune osservazioni anomale, ma nessuna di esse presenta valori estremi. Anche dopo la rimozione dell’osservazione 1551 si rifiuta l’ipotesi nulla di normalità dei residui, tuttavia il valore di W risulta più vicino a 1 rispetto al caso precedente (suggerendo un miglioramento minimo nella distribuzione dei residui). Considerata l’elevata numerosità campionaria, il test rimane ugualmente molto sensibile a deviazioni anche modeste dalla normalità. Dal test di Breusch–Pagan si osserva un cambiamento rilevante rispetto alla situazione precedente. Il risultato infatti è da considerarsi borderline: l’ipotesi nulla di omoschedasticità viene formalmente rifiutata al livello del 5%, ma con evidenza molto più debole, per cui si suppone che una parte significativa dell’eteroschedasticità precedentemente riscontrata fosse associata all’osservazione 1551. Anche l’ipotesi nulla di assenza di autocorrelazione positiva non viene rifiutata. Questo risultato rimane sostanzialmente invariato rispetto al modello precedente, confermando l’assenza di correlazione seriale nei residui.
Per concludere, la rimozione dell’osservazione 1551 ha prodotto effetti rilevanti sotto diversi profili:
eliminazione di un punto altamente influente (drastica riduzione della Cook’s distance massima da 0.83 a 0.065);
riduzione marcata dell’eteroschedasticità (Breusch–Pagan da p < 2e-16 a p ≈ 0.045);
miglioramento della normalità dei residui (W passato da 0.974 a 0.989);
persistenza di alcuni outlier moderati, ma assenza di casi estremamente critici.
Nel complesso, il modello appare ora più stabile e meno condizionato da singole osservazioni estreme. Le principali criticità riscontrate nella prima analisi risultano significativamente attenuate.
summary(mod_8)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Sesso, data = dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1149.37 -180.98 -15.57 163.69 2639.09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6681.7251 135.8036 -49.201 < 2e-16 ***
## N.gravidanze 12.4554 4.3416 2.869 0.00415 **
## Gestazione 32.3827 3.8008 8.520 < 2e-16 ***
## Lunghezza 10.2455 0.3008 34.059 < 2e-16 ***
## Cranio 10.5410 0.4265 24.717 < 2e-16 ***
## SessoM 77.9807 11.2111 6.956 4.47e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274.7 on 2492 degrees of freedom
## Multiple R-squared: 0.727, Adjusted R-squared: 0.7265
## F-statistic: 1327 on 5 and 2492 DF, p-value: < 2.2e-16
summary(new_mod_8)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Sesso, data = new_dataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1165.68 -179.74 -12.42 162.92 1410.68
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6683.8326 133.1602 -50.194 < 2e-16 ***
## N.gravidanze 13.1448 4.2576 3.087 0.00204 **
## Gestazione 29.6341 3.7369 7.930 3.27e-15 ***
## Lunghezza 10.8899 0.3019 36.077 < 2e-16 ***
## Cranio 9.9192 0.4227 23.465 < 2e-16 ***
## SessoM 78.1376 10.9929 7.108 1.53e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 269.3 on 2491 degrees of freedom
## Multiple R-squared: 0.7372, Adjusted R-squared: 0.7367
## F-statistic: 1398 on 5 and 2491 DF, p-value: < 2.2e-16
Il confronto tra il modello stimato sul dataset originale e quello ottenuto sul nuovo dataset (eliminando l’osservazione 1551) evidenzia una sostanziale stabilità della struttura del modello, accompagnata da un lieve miglioramento delle performance nel secondo caso. I coefficienti stimati risultano molto simili in termini sia di segno sia di ordine di grandezza, a indicare che la relazione tra le variabili esplicative e la variabile risposta è robusta rispetto alla modifica del campione. Per il modello costruito sul dataset modificato si osserva un incremento del coefficiente di determinazione (0.7372 rispetto a 0.7270), così come una riduzione dell’errore standard residuo (269.3 contro 274.7). Sebbene la differenza non sia marcata in termini assoluti, essa suggerisce una migliore capacità esplicativa del modello nel secondo campione e una minore dispersione dei residui. L’R quadro aggiustato conferma questa tendenza, indicando che il miglioramento non è imputabile a un aumento del numero di parametri, ma a una reale ottimizzazione dell’adattamento. Dal punto di vista dei coefficienti, le variazioni sono contenute: l’effetto della Gestazione si riduce leggermente, mentre quello della Lunghezza aumenta; l’impatto del Cranio diminuisce in modo marginale. L’effetto della variabile Sesso rimane sostanzialmente invariato, così come quello di N.gravidanze, che continua a mostrare un contributo statisticamente significativo (ma di entità modesta). Tutte le variabili mantengono un’elevata significatività statistica in entrambi i modelli. Nel complesso, le differenze osservate non alterano l’interpretazione sostanziale del modello, ma indicano una lieve maggiore efficienza del modello stimato sul nuovo dataset.
nuovo_neonato <- data.frame(
N.gravidanze = 2,
Gestazione = 39,
Lunghezza = 500,
Cranio = 341,
Sesso = factor("M", levels = levels(dataset$Sesso)))
predict(new_mod_8, newdata = nuovo_neonato, interval = "prediction")
## fit lwr upr
## 1 3403.714 2875.261 3932.166
La previsione ottenuta per un’unità con N.gravidanze = 2, Gestazione = 39, Lunghezza = 500, Cranio = 341 e Sesso = M, restituisce un peso stimato pari a 3403.7 g. L’intervallo di previsione al 95% risulta essere piuttosto ampio e tale aspetto è fisiologico, infatti esso incorpora anche la variabilità individuale non spiegata dal modello (errore residuo). Ne consegue che, pur in presenza di una buona capacità esplicativa complessiva (R² ≈ 0.74), permane una quota di variabilità biologica non catturata dalle variabili incluse. In sintesi, il modello fornisce una stima affidabile del peso medio atteso per neonati con le caratteristiche considerate, ma la dispersione osservata nell’intervallo di previsione ricorda che la variabilità individuale rimane un elemento strutturale del fenomeno e non può essere completamente eliminata attraverso una specificazione lineare.
library(ggplot2)
ggplot(data = new_dataset)+
geom_point(aes(x = Gestazione,
y = Peso,
col = Sesso), position = "jitter")+
geom_smooth(aes(x = Gestazione,
y = Peso,
col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
ggplot(data = new_dataset)+
geom_point(aes(x = Lunghezza,
y = Peso,
col = Sesso), position = "jitter")+
geom_smooth(aes(x = Lunghezza,
y = Peso,
col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
ggplot(data = new_dataset)+
geom_point(aes(x = Cranio,
y = Peso,
col = Sesso), position = "jitter")+
geom_smooth(aes(x = Cranio,
y = Peso,
col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
ggplot(data = new_dataset)+
geom_point(aes(x = N.gravidanze,
y = Peso,
col = Sesso), position = "jitter")+
geom_smooth(aes(x = N.gravidanze,
y = Peso,
col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
L’intero progetto ha avuto come obiettivo la costruzione e la selezione di un modello di regressione lineare multipla in grado di spiegare la variabilità del peso neonatale attraverso variabili materne e antropometriche. Il modello selezionato presenta un coefficiente di determinazione pari a circa 0.73–0.74, indicando che oltre il 70% della variabilità del peso neonatale è spiegata dalle variabili incluse. Tale valore, in ambito biologico e clinico, può essere considerato elevato, soprattutto tenendo conto della fisiologica eterogeneità individuale. La relazione tra variabile risposta e variabili esplicative può essere riassunta nei seguenti punti.
Gestazione mostra un effetto positivo robusto: l’aumento delle settimane di gravidanza è associato a un incremento significativo del peso.
Lunghezza e Cranio risultano essere i predittori più influenti, coerentemente con la loro natura direttamente correlata allo sviluppo fetale.
Sesso evidenzia una differenza sistematica tra neonati maschi e femmine.
N.gravidanze contribuisce in misura più contenuta, ma statisticamente significativa.
Le analisi predittive hanno inoltre mostrato che il modello fornisce stime molto precise per il valore medio atteso, mentre l’intervallo di previsione per il singolo individuo rimane ampio. Questo aspetto è strutturale: una quota di variabilità biologica rimane inevitabilmente non spiegata. I grafici realizzati rafforzano visivamente quanto emerso dall’analisi numerica: la relazione Gestazione–Peso appare chiaramente crescente e quasi lineare; le associazioni Lunghezza–Peso e Cranio–Peso mostrano pendenze ancora più marcate, evidenziando il loro ruolo centrale nel modello; la distinzione per Sesso rende visibile uno scostamento sistematico tra le rette di regressione, coerente con il coefficiente stimato nel modello. Dal presente elaborato dunque si deduce che il peso neonatale è principalmente determinato da fattori legati allo sviluppo fetale diretto (lunghezza e dimensione cranica), con un contributo rilevante della durata della gestazione e una differenza legata al sesso. Il modello finale risulta solido, parsimonioso, biologicamente coerente e dotato di buona capacità esplicativa. Pur non esaurendo la complessità del fenomeno, fornisce una rappresentazione quantitativa efficace delle principali determinanti del peso alla nascita.