Descrizione del dataset

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:

Verifica e pulizia dei dati

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))

Trasformazione delle variabili categoriche

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)

Distribuzione del peso neonatale

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à.

Analisi sui parti cesari

tab_parto_osp <- table(dati$Tipo.parto, dati$Ospedale)
kable(tab_parto_osp, caption = "Distribuzione dei tipi di parto per ospedale")
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 (%)")
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)

Analisi sul sesso dei neonati

kable(table(dati$Sesso), caption = "Numero di nascite per sesso")
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")
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 plot delle variabili quantitative

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.

Valori del dataset rispetto a quelli di popolazione

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")
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)

Modellazione lineare del peso neonatale

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:

Modello predittivo

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

Criterio AIC

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)")
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à.

Verifica di effetti non lineari

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.

Diagnostica dei modelli

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.

Predizioni

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%")
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,

Grafico di previsione

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()

Conclusione

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.