kable(summary(dati), align = "c", digits = 2)
| Anni.madre | N.gravidanze | Fumatrici | Gestazione | Peso | Lunghezza | Cranio | Tipo.parto | Ospedale | Sesso | |
|---|---|---|---|---|---|---|---|---|---|---|
| Min. : 0.00 | Min. : 0.0000 | Min. :0.0000 | Min. :25.00 | Min. : 830 | Min. :310.0 | Min. :235 | Length:2500 | Length:2500 | Length:2500 | |
| 1st Qu.:25.00 | 1st Qu.: 0.0000 | 1st Qu.:0.0000 | 1st Qu.:38.00 | 1st Qu.:2990 | 1st Qu.:480.0 | 1st Qu.:330 | Class :character | Class :character | Class :character | |
| Median :28.00 | Median : 1.0000 | Median :0.0000 | Median :39.00 | Median :3300 | Median :500.0 | Median :340 | Mode :character | Mode :character | Mode :character | |
| Mean :28.16 | Mean : 0.9812 | Mean :0.0416 | Mean :38.98 | Mean :3284 | Mean :494.7 | Mean :340 | NA | NA | NA | |
| 3rd Qu.:32.00 | 3rd Qu.: 1.0000 | 3rd Qu.:0.0000 | 3rd Qu.:40.00 | 3rd Qu.:3620 | 3rd Qu.:510.0 | 3rd Qu.:350 | NA | NA | NA | |
| Max. :46.00 | Max. :12.0000 | Max. :1.0000 | Max. :43.00 | Max. :4930 | Max. :565.0 | Max. :390 | NA | NA | NA |
Il dataset analizzato contiene 2500 osservazioni relative a neonati nati in tre diversi ospedali. Per ciascun neonato sono disponibili informazioni di natura materna, clinica e antropometrica, oltre alla variabile risposta di interesse, ovvero il peso alla nascita (espresso in grammi).
Le variabili considerate sono:
Peso: peso del neonato alla nascita (variabile risposta).
Lunghezza: lunghezza del neonato alla nascita (in millimetri).
Cranio: circonferenza cranica del neonato (in millimetri).
Gestazione: durata della gravidanza espressa in settimane.
Sesso: sesso del neonato (Maschio/Femmina).
Anni madre: età della madre al momento del parto.
N.gravidanze: numero di gravidanze precedenti della madre.
Fumatrici: indicatore della condizione di madre fumatrice (Sì/No).
Tipo.parto: modalità del parto (Naturale o Cesareo).
Ospedale: struttura ospedaliera presso cui è avvenuto il parto.
L’analisi esplorativa preliminare ha evidenziato la presenza di valori non plausibili nella variabile “anni madre”. E’ stato perciò necessario una verifica dei valori per capire quali e quanti di questi fossero biologicamente irrealistici. Le età scelte come limiti per queste verifiche sono tratti da ricerche sul web (fonte: https://www.juanacrespo.es/it/limite-eta-per-essere-madre/)
kable(dati %>% filter(Anni.madre < 12))
| Anni.madre | N.gravidanze | Fumatrici | Gestazione | Peso | Lunghezza | Cranio | Tipo.parto | Ospedale | Sesso |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 41 | 3250 | 490 | 350 | Nat | osp2 | F |
| 0 | 0 | 0 | 39 | 3060 | 490 | 330 | Nat | osp3 | M |
Poiché i casi anomali rappresentano una quota trascurabile del campione (2 su 2500), si è scelto di procedere con una sostituzione tramite imputazione della media, al fine di preservare la numerosità del dataset senza introdurre distorsioni significative.
media_eta <- mean(dati$Anni.madre[dati$Anni.madre >= 12])
dati <- dati %>% mutate(
Anni.madre = ifelse(
Anni.madre < 12, media_eta, Anni.madre))
Le variabili categoriche sono state convertite in fattori, così da consentirne un corretto utilizzo nelle analisi descrittive e nei modelli di regressione.
dati$Fumatrici <- factor(
dati$Fumatrici,
levels = c(0, 1),
labels = c("No", "Si")
)
dati$Tipo.parto <- factor(dati$Tipo.parto)
dati$Ospedale <- factor(dati$Ospedale)
dati$Sesso <- factor(dati$Sesso)
ggplot(dati, aes(x = Peso)) + geom_histogram(bins = 30, fill = "steelblue", color = "black") +
labs(title = "Distribuzione del peso neonatale", x = "Peso alla nascita (grammi)", y = "Frequenza") +
theme_minimal()
La distribuzione del peso alla nascita appare approssimativamente simmetrica, senza evidenti asimmetrie o accumuli anomali, suggerendo l’adeguatezza dell’ipotesi di normalità.
tab_parto_osp <- table(dati$Tipo.parto, dati$Ospedale)
kable(tab_parto_osp, caption = "Distribuzione dei tipi di parto per ospedale")
| osp1 | osp2 | osp3 | |
|---|---|---|---|
| Ces | 242 | 254 | 232 |
| Nat | 574 | 595 | 603 |
tab_parto_percentuali <- prop.table(tab_parto_osp, margin = 2) * 100
kable(round(tab_parto_percentuali, 2), caption = "Percentuale di parti per ospedale (%)")
| osp1 | osp2 | osp3 | |
|---|---|---|---|
| Ces | 29.66 | 29.92 | 27.78 |
| Nat | 70.34 | 70.08 | 72.22 |
kable(chisq.test(tab_parto_osp)$expected)
| osp1 | osp2 | osp3 | |
|---|---|---|---|
| Ces | 237.6192 | 247.2288 | 243.152 |
| Nat | 578.3808 | 601.7712 | 591.848 |
test_cesari <- chisq.test(tab_parto_osp)
test_cesari
##
## Pearson's Chi-squared test
##
## data: tab_parto_osp
## X-squared = 1.0972, df = 2, p-value = 0.5778
Le tabelle mostrano fin da subito che i numeri dei cesari rispetto ai naturali sono molto omogenei fra loro e anche con i valori del test effetuato non possiamo dire che esistano differenze significative nella frequenza dei parti cesarei tra i tre ospedali (p-value molto maggiore di 0)
kable(table(dati$Sesso), caption = "Numero di nascite per sesso")
| Var1 | Freq |
|---|---|
| F | 1256 |
| M | 1244 |
tab_sesso <- dati %>% group_by(Sesso) %>% summarise(N = n(), Peso_medio = mean(Peso), Peso_sd = sd(Peso), Lunghezza_media = mean(Lunghezza), Lunghezza_sd = sd(Lunghezza))
kable(tab_sesso, digits = 2, caption = "Statistiche descrittive per sesso")
| Sesso | N | Peso_medio | Peso_sd | Lunghezza_media | Lunghezza_sd |
|---|---|---|---|---|---|
| F | 1256 | 3161.13 | 526.31 | 489.76 | 27.53 |
| M | 1244 | 3408.22 | 493.80 | 499.67 | 24.04 |
ggplot(dati, aes(x = Sesso, y = Peso, fill = Sesso)) +
geom_boxplot() +labs(title = "Distribuzione del peso neonatale per sesso", x = "Sesso", y = "Peso alla nascita (grammi)") + theme(legend.position = "none")
t_test_peso <- t.test(Peso ~ Sesso, data = dati)
t_test_peso
##
## 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 <- t.test(Lunghezza ~ Sesso, data = dati)
t_test_lunghezza
##
## 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
Il dataset risulta molto bilancato, con quasi lo stesso numero di bambini maschi e femmine. Il peso medio e la lunghezza dei bambini maschi risulta subito visibilmente più alto, con una differenza di peso 247 grammi e di 10 mm di lunghezza. Con i risultati del t-test si può dire che ci sono differenze statisticamente significative tra neonati maschi e femmine sia per il peso che per la lunghezza alla nascita (p-value praticamente 0)
pairs(dati[, c("Peso", "Gestazione", "Lunghezza", "Cranio", "Anni.madre")],
main = "Matrice di dispersione delle principali variabili quantitative")
La matrice di dispersione mostra relazioni lineari evidenti tra il peso neonatale e le variabili antropometriche (lunghezza e circonferenza cranica) oltre che con la durata della gestazione. Non emergono invece relazioni forti tra il peso e l’età materna, suggerendo un effetto marginale o indiretto. Nel complesso, l’analisi esplorativa ci dice che le variabili antropometriche e la gestazione sono tra i principali candidati per spiegare la variabilità del peso neonatale, mentre le variabili materne mostrano un’influenza più limitata.
t_test_peso_pop <- t.test(dati$Peso, mu = 3300)
t_test_peso_pop
##
## One Sample t-test
##
## data: dati$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
t_test_lunghezza_pop <- t.test(dati$Lunghezza, mu = 500)
t_test_lunghezza_pop
##
## One Sample t-test
##
## data: dati$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
tab_ttest_pop <- data.frame(
Variabile = c("Peso", "Lunghezza"),
Media_campione = c(mean(dati$Peso), mean(dati$Lunghezza)),
Media_popolazione = c(3300, 500),
p_value = c(
t_test_peso_pop$p.value,
t_test_lunghezza_pop$p.value))
kable(tab_ttest_pop, digits = 4, caption = "Confronto tra campione e valori medi di riferimento")
| Variabile | Media_campione | Media_popolazione | p_value |
|---|---|---|---|
| Peso | 3284.081 | 3300 | 0.1296 |
| Lunghezza | 494.692 | 500 | 0.0000 |
Effettuando dei t-test con dei valori statistici medi emerge che i valori del peso sono omogenei con quelli del resto della popolazione, ma la lunghezza risulta avere delle differenze numeriche notabili. Probabilmente andrebbero studiate in maniera più approfondita altre caratteristiche, come la geografia degli opsedali, poichè sarebbe più opportuno comparare i loro valori con altri più più affini rispetto ad una media statistica generale. I dati utilizzati della popolazione per la verifica dei pesi medi sono stati raccolti da ricerche nel web (Fonti: https://www.ospedalebambinogesu.it/da-0-a-30-giorni-come-si-presenta-e-come-cresce-80012/, https://www.my-personaltrainer.it/salute/lunghezza-neonato.html)
Sulla base dell’analisi esplorativa svolta fin ora, è stato deciso di sviluppare un modello di regressione lineare multipla completo, includendo sia variabili materne, sia variabili cliniche, sia antropometriche del neonato.
modello_completo <- lm(Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
summary(modello_completo)
##
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione +
## Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1123.3 -181.2 -14.6 160.7 2612.6
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6735.1400 141.3974 -47.633 < 2e-16 ***
## Anni.madre 0.7975 1.1463 0.696 0.4867
## N.gravidanze 11.4130 4.6665 2.446 0.0145 *
## FumatriciSi -30.1567 27.5396 -1.095 0.2736
## Gestazione 32.5262 3.8179 8.519 < 2e-16 ***
## Lunghezza 10.2951 0.3007 34.237 < 2e-16 ***
## Cranio 10.4725 0.4261 24.580 < 2e-16 ***
## Tipo.partoNat 29.5025 12.0848 2.441 0.0147 *
## Ospedaleosp2 -11.2217 13.4388 -0.835 0.4038
## Ospedaleosp3 28.0985 13.4972 2.082 0.0375 *
## SessoM 77.5473 11.1779 6.938 5.07e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 273.9 on 2489 degrees of freedom
## Multiple R-squared: 0.7289, Adjusted R-squared: 0.7278
## F-statistic: 669.1 on 10 and 2489 DF, p-value: < 2.2e-16
Il modello presenta un R² pari a circa 0.73, indicando che circa il 73% della variabilità del peso alla nascita è spiegata dalle variabili incluse.
Interpretazione dei coefficienti:
Gestazione: il coefficiente stimato indica che ogni settimana aggiuntiva di gestazione è associata, in media, a un incremento di circa 32 grammi del peso alla nascita, a parità delle altre caratteristiche.
Lunghezza: la lunghezza del neonato risulta uno dei predittori più rilevanti, un aumento di 1 mm è associato a un incremento medio di circa 10 grammi di peso.
Cranio: come per la lunghezza anche la circonferenza cranica mostra un effetto positivo e significativo, un aumento di 1 mm del diametro cranico è associato a un incremento medio di circa 10 grammi di peso.
Sesso: a parità delle altre variabili, i neonati di sesso maschile presentano un peso medio superiore di circa 75–80 grammi rispetto alle femmine.
Numero di gravidanze: il numero di gravidanze precedenti mostra un effetto positivo ma di entità contenuta, suggerendo un lieve incremento del peso alla nascita all’aumentare delle gravidanze.
Età della madre e fumo: le variabili “Anni madre” e “Fumatrici” non risultano statisticamente significative nel modello completo, suggerendo che il loro effetto sul peso sia indiretto o mediato da altre variabili, come la durata della gestazione o le caratteristiche fisiche del neonato.
Tipo di parto e ospedale: queste variabili mostrano effetti deboli o inconsistenti, coerentemente con il fatto che non rappresentano determinanti biologici diretti del peso alla nascita.
Il modello completo, nonostante le buone prestazioni, contiene alcune variabili che non rappresentano determinanti biologici diretti del peso alla nascita. In particolare la variabile “Ospedale” è una variabile logicamente non inerente al peso del neonato, come anche la variabile “Tipo di parto” che è una variabile conseguente a determinate condizioni cliniche che si riconduce al momento del parto stesso e perciò non informativo nell’ottica di previsioni alla nascita. Tutto ciò rimane coerente con le interpretazioni svolte precedentemente dallo stesso modello completo. Tali informazioni, poichè non sarebbero disponibili o rilevanti in un contesto predittivo e non rappresentano cause biologiche del peso neonatale, si è scelto di escluderle dal modello. Questa scelta consente di costruire un modello predittivo più coerente con l’obiettivo dello studio.
modello_pred <- lm(Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + Sesso, data = dati)
summary(modello_completo)
##
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione +
## Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1123.3 -181.2 -14.6 160.7 2612.6
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6735.1400 141.3974 -47.633 < 2e-16 ***
## Anni.madre 0.7975 1.1463 0.696 0.4867
## N.gravidanze 11.4130 4.6665 2.446 0.0145 *
## FumatriciSi -30.1567 27.5396 -1.095 0.2736
## Gestazione 32.5262 3.8179 8.519 < 2e-16 ***
## Lunghezza 10.2951 0.3007 34.237 < 2e-16 ***
## Cranio 10.4725 0.4261 24.580 < 2e-16 ***
## Tipo.partoNat 29.5025 12.0848 2.441 0.0147 *
## Ospedaleosp2 -11.2217 13.4388 -0.835 0.4038
## Ospedaleosp3 28.0985 13.4972 2.082 0.0375 *
## SessoM 77.5473 11.1779 6.938 5.07e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 273.9 on 2489 degrees of freedom
## Multiple R-squared: 0.7289, Adjusted R-squared: 0.7278
## F-statistic: 669.1 on 10 and 2489 DF, p-value: < 2.2e-16
Il modello predittivo, pur mostrando anche questo buone prestazioni, include variabili che risultano debolmente informative o non significative. Per ottenere una specificazione più parsimoniosa, è stato applicato il criterio di informazione di Akaike (AIC) così da bilanciare sia la qualità dell’adattamento del modello sia la sua complessità. È stata adottata una procedura di backward elimination, partendo dal modello predittivo e rimuovendo le variabili che non contribuiscono in modo sostanziale alla riduzione dell’AIC.
modello_aic <- step(modello_pred, direction = "backward", trace = TRUE)
## Start: AIC=28084.83
## Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza +
## Cranio + Sesso
##
## Df Sum of Sq RSS AIC
## - Anni.madre 1 43901 187973654 28083
## - Fumatrici 1 90821 188020574 28084
## <none> 187929753 28085
## - N.gravidanze 1 448843 188378597 28089
## - Sesso 1 3663301 191593055 28131
## - Gestazione 1 5574395 193504148 28156
## - Cranio 1 45800466 233730219 28628
## - Lunghezza 1 87230786 275160539 29036
##
## Step: AIC=28083.42
## Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio +
## Sesso
##
## Df Sum of Sq RSS AIC
## - Fumatrici 1 91892 188065546 28083
## <none> 187973654 28083
## - N.gravidanze 1 646039 188619694 28090
## - Sesso 1 3671289 191644943 28130
## - Gestazione 1 5531705 193505359 28154
## - Cranio 1 46066755 234040410 28629
## - Lunghezza 1 87218857 275192512 29034
##
## Step: AIC=28082.64
## Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Sesso
##
## Df Sum of Sq RSS AIC
## <none> 188065546 28083
## - N.gravidanze 1 623141 188688687 28089
## - Sesso 1 3655292 191720838 28129
## - Gestazione 1 5464853 193530399 28152
## - Cranio 1 46108583 234174130 28629
## - Lunghezza 1 87632762 275698308 29037
summary(modello_aic)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Sesso, 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 ***
## N.gravidanze 12.4750 4.3396 2.875 0.00408 **
## Gestazione 32.3321 3.7980 8.513 < 2e-16 ***
## Lunghezza 10.2486 0.3006 34.090 < 2e-16 ***
## Cranio 10.5402 0.4262 24.728 < 2e-16 ***
## SessoM 77.9927 11.2021 6.962 4.26e-12 ***
## ---
## 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
coef_modello <- summary(modello_aic)$coefficients
kable(coef_modello, digits = 3, caption = "Coefficienti del modello di regressioneo (AIC)")
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | -6681.144 | 135.723 | -49.226 | 0.000 |
| N.gravidanze | 12.475 | 4.340 | 2.875 | 0.004 |
| Gestazione | 32.332 | 3.798 | 8.513 | 0.000 |
| Lunghezza | 10.249 | 0.301 | 34.090 | 0.000 |
| Cranio | 10.540 | 0.426 | 24.728 | 0.000 |
| SessoM | 77.993 | 11.202 | 6.962 | 0.000 |
Il modello finale include le seguenti variabili: numero di gravidanze, durata della gestazione, lunghezza del neonato, circonferenza cranica e sesso. Le variabili età della madre e fumo vengono eliminate poichè la loro rimozione comporta una riduzione dell’AIC, indicando che il loro contributo informativo risulta limitato. Il modello selezionato tramite AIC mantiene un valore di R² sostanzialmente invariato rispetto al modello di riferimento, confermando che la rimozione delle variabili non informative non ne compromette la qualità.
Per poter escludere la possibilità che non ci fossero problemi di linearità tra le variabili in realzione con il peso neonatale sono stati introdotti termini quadratici per la durata della gestazione e per la lunghezza del neonato, ipotizzando che tali variabili potessero mostrare andamenti non lineari sul peso alla nascita.
Per ridurre problemi di collinearità tra i termini lineari e quadratici, le variabili sono state preventivamente centrate rispetto alla loro media.
dati <- dati %>%
mutate(
Gestazione_c = scale(Gestazione, center = TRUE, scale = FALSE),
Lunghezza_c = scale(Lunghezza, center = TRUE, scale = FALSE)
)
modello_quad <- lm(
Peso ~ N.gravidanze +
Gestazione_c + I(Gestazione_c^2) +
Lunghezza_c + I(Lunghezza_c^2) +
Cranio +
Sesso,
data = dati
)
summary(modello_quad)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione_c + I(Gestazione_c^2) +
## Lunghezza_c + I(Lunghezza_c^2) + Cranio + Sesso, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1191.07 -182.28 -13.74 163.34 1403.53
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -335.11434 142.30337 -2.355 0.01860 *
## N.gravidanze 14.48219 4.24706 3.410 0.00066 ***
## Gestazione_c 34.54518 4.21319 8.199 3.83e-16 ***
## I(Gestazione_c^2) -3.87341 0.82446 -4.698 2.77e-06 ***
## Lunghezza_c 11.09386 0.30550 36.313 < 2e-16 ***
## I(Lunghezza_c^2) 0.04370 0.00414 10.556 < 2e-16 ***
## Cranio 10.44650 0.41917 24.922 < 2e-16 ***
## SessoM 72.60787 10.99724 6.602 4.93e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 268.5 on 2492 degrees of freedom
## Multiple R-squared: 0.7392, Adjusted R-squared: 0.7385
## F-statistic: 1009 on 7 and 2492 DF, p-value: < 2.2e-16
Interpretazione dei coefficienti:
- durata della gestazione: il coefficiente positivo del termine lineare
indica che il peso alla nascita aumenta all’aumentare delle settimane di
gestazione; tuttavia, il coefficiente negativo del termine quadratico
suggerisce che tale incremento tende a ridursi per gestazioni
particolarmente lunghe.
- lunghezza del neonato: sia il termine lineare sia quello quadratico
positivo indicano che, per valori più elevati di lunghezza, l’incremento
medio del peso risulta più che proporzionale.
Le altre variabili incluse nel modello (numero di gravidanze, diametro craniale e sesso del neonato) mantengono segno e significatività coerenti con quanto osservato nei modelli precedenti, confermando la stabilità delle stime.
Il confronto tra il modello selezionato tramite AIC e il modello con termini quadratici mostra un netto miglioramento della qualità del modello, come evidenziato dalla riduzione dell’errore standard dei residui, dall’aumento del coefficiente di determinazione e da un forte miglioramento del criterio AIC. Si può dedurre perciò che il modello con termini quadratici risulta preferibile nella relazione tra le variabili cliniche e il peso neonatale.
Normalità dei residuei
La normalità dei residui è stata valutata tramite il QQ-plot e l’analisi
visiva della distribuzione dei residui.
qqnorm(residuals(modello_quad))
qqline(residuals(modello_quad), col = "red")
I residui risultano distribuiti in modo sostanzialmente simmetrico lungo
la retta teorica, con leggere deviazioni alle estremità, fenomeno atteso
in presenza di un campione numeroso. Non emergono evidenze di violazioni
gravi dell’ipotesi di normalità.
Omoschedasticità
L’ipotesi di varianza costante dei residui è stata verificata tramite il
grafico dei residui rispetto ai valori predetti.
plot(fitted(modello_quad), residuals(modello_quad),
xlab = "Valori predetti",
ylab = "Residui")
abline(h = 0, col = "red")
I residui appaiono distribuiti casualmente attorno allo zero, senza
pattern sistematici o strutture a imbuto. La varianza risulta quindi
approssimativamente costante lungo l’intero intervallo dei valori
predetti.
Leverage
L’analisi congiunta di leverage e residui standardizzati è stata effettuata per individuare osservazioni potenzialmente problematiche.
plot(modello_quad, which = 5)
Non emergono osservazioni caratterizzate contemporaneamente da elevato
leverage e residui estremi. Le osservazioni più influenti risultano
coerenti con la struttura del dataset e non indicano la presenza di
outlier anomali.
Multicollinearità
Considerata la presenza di termini quadratici nel modello, è stata verificata la multicollinearità tramite il Variance Inflation Factor (VIF).
library(car)
vif(modello_quad)
## N.gravidanze Gestazione_c I(Gestazione_c^2) Lunghezza_c
## 1.025434 2.148753 2.946089 2.241147
## I(Lunghezza_c^2) Cranio Sesso
## 2.418770 1.643288 1.048541
I valori di VIF risultano contenuti e ampiamente al di sotto delle soglie critiche. Non si osservano quindi problemi di multicollinearità.
Valutazione complessiva
Nel complesso, le analisi diagnostiche indicano che il modello soddisfa adeguatamente le principali assunzioni della regressione lineare. Il modello può pertanto essere considerato statisticamente solido e appropriato sia per l’interpretazione dei risultati sia per la previsione del peso neonatale.
nuovo_neonato <- data.frame(
N.gravidanze = 3,
Gestazione = 39,
Lunghezza = 500,
Cranio = 340,
Sesso = factor("F", levels = levels(dati$Sesso))
)
pred_peso <- predict(modello_aic, newdata = nuovo_neonato)
kable(as.data.frame(pred_peso), digits = 1, caption = "Predizione del peso neonatale con intervallo di confidenza 95%")
| pred_peso |
|---|
| 3325.2 |
Utilizzando i dati forniti per un caso esempio il peso predetto risulta essere 3328gr, probabilisticamente tra i 3298gr e i 3357gr,
gest_seq <- seq(35, 42, by = 0.1)
dati_pred <- data.frame(
N.gravidanze = 1,
Gestazione = gest_seq ,
Lunghezza = 500 ,
Cranio = 340,
Tipo.parto = factor("Nat", levels = levels(dati$Tipo.parto)),
Ospedale = factor("osp1", levels = levels(dati$Ospedale)),
Sesso = factor("F", levels = levels(dati$Sesso))
)
pred <- predict(modello_aic, newdata = dati_pred, interval = "confidence")
dati_pred$fit <- pred[, "fit"]
dati_pred$lwr <- pred[, "lwr"]
dati_pred$upr <- pred[, "upr"]
ggplot(dati_pred, aes(x = Gestazione, y = fit)) +
geom_line(color = "steelblue", linewidth = 1) +
geom_ribbon(aes(ymin = lwr, ymax = upr), alpha = 0.2, fill = "steelblue") +
labs(
title = "Peso neonatale previsto in funzione delle settimane di gestazione",
subtitle = "Predizione dal modello di regressione con IC 95%",
x = "Settimane di gestazione",
y = "Peso alla nascita previsto (grammi)"
) + theme_minimal()
Il presente lavoro ha avuto come obiettivo la costruzione e la valutazione di un modello statistico in grado di prevedere il peso alla nascita dei neonati sulla base di caratteristiche materne, cliniche e antropometriche. Attraverso un approccio progressivo è stato possibile identificare i principali fattori associati al peso neonatale e valutarne l’impatto in modo quantitativo.
I risultati mostrano come le variabili antropometriche del neonato (lunghezza e diametro craniale), la durata della gestazione e il sesso rappresentino i predittori più rilevanti del peso alla nascita. Con l’inclusione di termini quadratici per la gestazione e la lunghezza si è evidenziata la presenza di relazioni non lineari statisticamente significative, migliorando con esse la qualità del modello.
Al contrario, alcune variabili di natura materna o logistica, quali l’età della madre, il fumo materno, il tipo di parto e l’ospedale di nascita, non hanno mostrato un contributo predittivo significativo rispetto alle restanti caratteristiche del neonato.
In conclusione, lo studio evidenzia come il peso alla nascita sia principalmente determinato da fattori direttamente legati allo sviluppo fisico del neonato, mentre le caratteristiche materne considerate assumono un ruolo secondario nel contesto del modello analizzato.