# Caricamento dei dati
dati <- read.csv("C:/Users/AlessandroTorrieri/Desktop/MasterDataScience/StatisticaInferenziale/neonati.csv")
# Statistiche descrittive
variabili <- dati[, c("Anni.madre", "Gestazione", "Peso", "Lunghezza", "Cranio")]
media <- sapply(variabili, mean, na.rm = TRUE)
mediana <- sapply(variabili, median, na.rm = TRUE)
dev_std <- sapply(variabili, sd, na.rm = TRUE)
statistiche <- data.frame(
Variabile = names(media),
Media = round(media, 2),
Mediana = round(mediana, 2),
Deviazione_Std = round(dev_std, 2)
)
print(statistiche, row.names = FALSE)
## Variabile Media Mediana Deviazione_Std
## Anni.madre 28.16 28 5.27
## Gestazione 38.98 39 1.87
## Peso 3284.08 3300 525.04
## Lunghezza 494.69 500 26.32
## Cranio 340.03 340 16.43
# L’analisi descrittiva delle variabili fornisce informazioni preliminari sulla tendenza centrale e sulla dispersione dei dati osservati:
# Anni.madre: la variabile presenta una media aritmetica di 28.16 anni e una deviazione standard pari a 5.27 anni, indicando una moderata variabilità intra-campionaria. La mediana coincide con 28 anni, suggerendo una distribuzione prossima alla simmetria.
# Gestazione: la durata media della gestazione è pari a 38.99 settimane, con una deviazione standard di 1.87 settimane. La mediana di 39 settimane e la bassa dispersione indicano una distribuzione fortemente concentrata attorno alla media.
# Peso: il peso neonatale mostra una media di 3284.08 grammi e una deviazione standard di 525.04 grammi, evidenziando un’elevata variabilità. La mediana (3300 g) è prossima alla media, suggerendo una distribuzione relativamente simmetrica.
# Lunghezza: la lunghezza media alla nascita è pari a 494.69 mm, con una deviazione standard di 26.32 mm. La mediana (500 mm) leggermente superiore alla media potrebbe indicare una lieve asimmetria negativa.
# Cranio: la circonferenza cranica media è pari a 340.03 mm, con una deviazione standard di 16.43 mm. La mediana (340 mm) coincide quasi perfettamente con la media, suggerendo una distribuzione simmetrica e una dispersione contenuta.
# Analisi delle distribuzioni
ggplot(dati, aes(x = Peso)) +
geom_histogram(bins = 30, fill = "skyblue", color = "black") +
labs(title = "Distribuzione del Peso alla nascita", x = "Peso (g)", y = "Frequenza") +
theme_minimal()

# L’istogramma mostra una distribuzione del peso alla nascita approssimativamente simmetrica e simile a una normale, con moda intorno a 3200 g e la maggior parte delle osservazioni comprese tra 2800 e 3600 g; la variabilità si estende da circa 1000 a 5000 g, con pochi casi agli estremi inferiori e superiori.
ggplot(dati, aes(y = Peso)) +
geom_boxplot(fill = "lightgreen") +
labs(title = "Boxplot del Peso", y = "Peso (g)") +
theme_minimal()

# La distribuzione del peso appare abbastanza simmetrica, con una mediana intorno a 3100 g e con la metà dei valori compresi grosso modo tra 3000 e 3600 g; si osservano tuttavia numerosi outlier, sia in basso (circa 1000 g, probabilmente neonati con peso molto ridotto o errori di rilevazione) sia in alto (oltre 4500–5000 g, bambini molto più pesanti della media).
# Analisi delle variabili categoriali
table(dati$Tipo.parto)
##
## Ces Nat
## 728 1772
# I parti naturali rappresentano circa il 71% del totale, mentre i cesarei circa il 29%.Questo indica una prevalenza di parti naturali.
# Nel dettaglio: Cesarei (Ces): 728 casi, Naturali 1772 casi
table(dati$Ospedale)
##
## osp1 osp2 osp3
## 816 849 835
# La distribuzione tra i tre ospedali è molto equilibrata: ciascuno ha un numero simile di osservazioni (tra 27% e 29% del totale).
# Nel dettaglio: osp1: 816 casi, osp2:849 casi, osp3: 835 casi.
table(dati$Sesso)
##
## F M
## 1256 1244
# La distribuzione relativa al sesso dei nascituri è molto bilanciata, con una leggerissima prevalenza di femmine.
# Nel dettaglio: Femmine (F): 1256, Maschi (M): 1244.
ggplot(dati, aes(x = Tipo.parto)) +
geom_bar(fill = "orange") +
labs(title = "Distribuzione del Tipo di Parto", x = "Tipo di Parto", y = "Conteggio") +
theme_minimal()

# ===============================
# Punto 1: Test Chi-quadro
# Variabili: Ospedale × Tipo.parto
# In alcuni ospedali si fanno più parti cesarei
# ===============================
chi2 <- function(df, row_var, col_var, drop_na = TRUE){
x <- df[, c(row_var, col_var)]
if(drop_na) x <- na.omit(x)
x[[row_var]] <- as.factor(x[[row_var]])
x[[col_var]] <- as.factor(x[[col_var]])
# Tabella osservata
tabella <- table(x[[row_var]], x[[col_var]])
n <- sum(tabella)
# Attese
attese <- matrix(0, nrow = nrow(tabella), ncol = ncol(tabella))
for(i in 1:nrow(tabella)){
for(j in 1:ncol(tabella)){
attese[i,j] <- margin.table(tabella,1)[i] * margin.table(tabella,2)[j] / n
}
}
dimnames(attese) <- dimnames(tabella)
# Statistica χ²
X2 <- sum((tabella - attese)^2 / attese)
df_gl <- (nrow(tabella)-1) * (ncol(tabella)-1)
pval <- 1 - pchisq(X2, df_gl)
list(
osservate = tabella,
attese = attese,
X2 = X2,
df = df_gl,
p_value = pval
)
}
# Esecuzione sul dataframe
ris <- chi2(dati, row_var = "Ospedale", col_var = "Tipo.parto")
# Risultati principali
ris$osservate # frequenze osservate
##
## Ces Nat
## osp1 242 574
## osp2 254 595
## osp3 232 603
round(ris$attese,2) # frequenze attese
##
## Ces Nat
## osp1 237.62 578.38
## osp2 247.23 601.77
## osp3 243.15 591.85
ris$X2 # statistica chi-quadro
## [1] 1.097202
ris$df # gradi di libertà
## [1] 2
ris$p_value # p-value
## [1] 0.5777576
# Le frequenze osservate sono molto vicine a quelle attese, non si osservano scostamenti evidenti nei tassi di cesarei fra i 3 ospedali.
# La statistica χ² è bassa (≈ 1.1) rispetto al valore critico (≈ 5.99 per α=0.05 e df=2).
# Il p-value alto (~0.58) indica che non c’è evidenza statistica per rifiutare l’ipotesi nulla: il modo di parto (cesareo/naturale) risulta indipendente dall’ospedale.
# ===============================
# Punto 2: Confronto con la popolazione
# Variabili: Peso (g) e Lunghezza (cm)
# La media del peso e della lunghezza di questo campione di neonati sono significativamente uguali a quelle della popolazione
# ===============================
# Poiché il dataset non contiene valori di popolazione, sono stati adottati come riferimento i valori del **50° percentile** tratti dagli **WHO Child Growth Standards**, sviluppati a # partire dal *WHO Multicentre Growth Reference Study (MGRS)* (OMS, 2006)
# Fonte: [WHO Child Growth Standards](https://www.who.int/publications/i/item/924154693X)
# Peso medio di riferimento**: circa 3 300 g
# Lunghezza media di riferimento**: circa 50 cm
# Questi valori rappresentano le medie fisiologiche attese per neonati a termine e sono utilizzati come popolazione nei test di ipotesi.
# Valori di popolazione (OMS, 50° percentile)
mu_peso <- 3300
mu_lunghezza <- 50
# Test t a un campione
test_peso <- t.test(dati$Peso, mu = mu_peso)
test_lung <- t.test(dati$Lunghezza, mu = mu_lunghezza)
test_peso
##
## 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
test_lung
##
## One Sample t-test
##
## data: dati$Lunghezza
## t = 844.82, df = 2499, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 50
## 95 percent confidence interval:
## 493.6598 495.7242
## sample estimates:
## mean of x
## 494.692
# Per il peso neonatale, il test t a un campione non ha evidenziato differenze significative rispetto al valore di riferimento OMS (𝑝=0.13>0.05p=0.13>0.05); pertanto non rifiutiamo l’ipotesi nulla e consideriamo la media del campione compatibile con quella della popolazione.
# Al contrario, per la lunghezza neonatale, il test t ha restituito un risultato altamente significativo (𝑝<0.001 p<0.001); di conseguenza rifiutiamo l’ipotesi nulla, concludendo che la media del campione è significativamente inferiore rispetto al valore di popolazione.
# ===============================
# Punto 3: Confronto tra i sessi: Peso e Lunghezza
# Variabili: Peso (g) e Lunghezza (cm)
# Le misure antropometriche sono significativamente diverse tra i due sessi
# ===============================
# H₀: le medie di maschi e femmine sono uguali
# H₁: le medie di maschi e femmine sono diverse
# Test t a due campioni indipendenti (Welch di default in R)
t_peso <- t.test(Peso ~ Sesso, data = dati) # Peso maschi vs femmine
t_lung <- t.test(Lunghezza ~ Sesso, data = dati) # Lunghezza maschi vs femmine
t_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_lung
##
## 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
# Le misure antropometriche (peso e lunghezza) sono significativamente diverse tra i due sessi.
# I maschi presentano mediamente un peso maggiore (~250 g in più) e una lunghezza maggiore (~1 cm in più) rispetto alle femmine.
# Creazione del Modello di Regressione
# Vogliamo stimare l’effetto di variabili materne e neonatali sul peso alla nascita.
# La variabile dipendente è **Peso (g)**, mentre le indipendenti includono caratteristiche materne, ostetriche e neonatali.
# Regressione lineare multipla
modello <- lm(Peso ~ Gestazione + Anni.madre + N.gravidanze +
Fumatrici + Sesso + Tipo.parto + Ospedale,
data = dati)
summary(modello)
##
## Call:
## lm(formula = Peso ~ Gestazione + Anni.madre + N.gravidanze +
## Fumatrici + Sesso + Tipo.parto + Ospedale, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1488.2 -270.1 -13.6 262.7 1905.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3306.932 187.373 -17.649 < 2e-16 ***
## Gestazione 163.461 4.520 36.163 < 2e-16 ***
## Anni.madre 3.742 1.706 2.193 0.02838 *
## N.gravidanze 18.437 7.010 2.630 0.00859 **
## Fumatrici -110.330 41.498 -2.659 0.00790 **
## SessoM 164.712 16.699 9.863 < 2e-16 ***
## Tipo.partoNat 15.329 18.213 0.842 0.40007
## Ospedaleosp2 -1.426 20.273 -0.070 0.94395
## Ospedaleosp3 23.949 20.366 1.176 0.23974
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 413.4 on 2491 degrees of freedom
## Multiple R-squared: 0.3821, Adjusted R-squared: 0.3801
## F-statistic: 192.6 on 8 and 2491 DF, p-value: < 2.2e-16
# Il modello di regressione lineare multipla mostra che il peso alla nascita è influenzato in maniera significativa da alcune caratteristiche materne e neonatali.
# In particolare, la durata della gestazione risulta il predittore più rilevante: a ogni settimana in più corrisponde in media un incremento di circa 160 grammi nel peso del neonato. Anche l’età della madre e il numero di gravidanze precedenti hanno un effetto positivo, seppur di entità più contenuta.
# Al contrario, il fumo materno si associa a una riduzione del peso medio di circa 100 grammi, mentre i maschi nascono in media più pesanti delle femmine (circa 160 grammi in più). Non emergono invece effetti significativi né per il tipo di parto né per l’ospedale in cui avviene la nascita, suggerendo che queste variabili non incidano in modo sistematico sul peso.
# Nel complesso, il modello spiega circa il 38% della variabilità del peso neonatale, indicando una capacità predittiva discreta: accanto ai fattori considerati, vi sono altre componenti biologiche e ambientali non incluse che contribuiscono alle differenze individuali.
# Selezione del Modello Ottimale
# Per individuare il modello più parsimonioso, si applicano procedure di selezione automatica basate sui criteri di informazione AIC e BIC.
# Si parte dal modello completo e si eliminano progressivamente le variabili non significative.
# Pacchetto necessario
if(!requireNamespace("MASS", quietly = TRUE)) install.packages("MASS")
library(MASS)
##
## Caricamento pacchetto: 'MASS'
## Il seguente oggetto è mascherato da 'package:dplyr':
##
## select
# Modello completo
mod_full <- lm(Peso ~ Gestazione + Anni.madre + N.gravidanze +
Fumatrici + Sesso + Tipo.parto + Ospedale,
data = dati)
# Selezione stepwise con AIC (default)
mod_aic <- stepAIC(mod_full, direction = "both", trace = FALSE)
# Selezione stepwise con BIC (k = log(n))
n <- nrow(dati)
mod_bic <- stepAIC(mod_full, direction = "both", k = log(n), trace = FALSE)
summary(mod_aic)
##
## Call:
## lm(formula = Peso ~ Gestazione + Anni.madre + N.gravidanze +
## Fumatrici + Sesso, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1466.6 -271.3 -12.0 261.1 1901.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3292.719 186.469 -17.658 <2e-16 ***
## Gestazione 163.525 4.518 36.193 <2e-16 ***
## Anni.madre 3.797 1.705 2.226 0.0261 *
## N.gravidanze 18.477 7.005 2.638 0.0084 **
## Fumatrici -110.625 41.480 -2.667 0.0077 **
## SessoM 164.913 16.697 9.877 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 413.4 on 2494 degrees of freedom
## Multiple R-squared: 0.3814, Adjusted R-squared: 0.3802
## F-statistic: 307.6 on 5 and 2494 DF, p-value: < 2.2e-16
# Qualità del modello
# R² = 0.3814 (Adj. R² = 0.3802) molto simile al modello completo (≈ 38%), quindi non abbiamo perso capacità esplicativa.
# F-statistic p < 2.2e-16 il modello è globalmente significativo.
# Errore standard residuo ≈ 413 g scarto medio delle predizioni, simile al modello iniziale.
summary(mod_bic)
##
## Call:
## lm(formula = Peso ~ Gestazione + N.gravidanze + Sesso, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1494.15 -272.82 -14.43 267.31 1892.39
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3136.835 175.410 -17.883 < 2e-16 ***
## Gestazione 162.025 4.499 36.014 < 2e-16 ***
## N.gravidanze 23.395 6.509 3.595 0.000331 ***
## SessoM 165.144 16.729 9.872 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 414.2 on 2496 degrees of freedom
## Multiple R-squared: 0.3784, Adjusted R-squared: 0.3777
## F-statistic: 506.5 on 3 and 2496 DF, p-value: < 2.2e-16
# Qualità del modello
# R² = 0.378 (Adj. R² = 0.378) leggermente inferiore al modello AIC (0.381), ma molto simile: spiegano entrambi circa il 38% della variabilità del peso.
# F-statistic p < 2.2e-16 il modello è complessivamente significativo.
# Errore standard residuo ≈ 414 g, praticamente uguale agli altri modelli.
# Confronto tra modelli
AIC(mod_full, mod_aic, mod_bic)
## df AIC
## mod_full 10 37227.47
## mod_aic 7 37224.22
## mod_bic 5 37232.40
BIC(mod_full, mod_aic, mod_bic)
## df BIC
## mod_full 10 37285.71
## mod_aic 7 37264.99
## mod_bic 5 37261.52
# Attraverso le procedure di selezione basate sui criteri di informazione, sono stati ottenuti due modelli alternativi. Il modello selezionato con AIC mantiene come variabili significative la gestazione, l’età della madre, il numero di gravidanze, il fumo materno e il sesso del neonato. Questo modello spiega circa il 38% della variabilità del peso neonatale e consente di cogliere anche effetti di entità più ridotta, come quelli legati all’età materna e al fumo.
# Il modello selezionato con BIC, più parsimonioso, riduce ulteriormente le variabili mantenendo soltanto la gestazione, il numero di gravidanze e il sesso. Anche in questo caso la capacità esplicativa si mantiene pressoché invariata (R² ≈ 38%), ma con una struttura più semplice e facilmente interpretabile.
# In conclusione, la scelta tra i due modelli dipende dall’obiettivo dell’analisi: se privilegiare la parsimonia e la facilità di lettura, è preferibile il modello BIC; se invece si intende includere anche effetti più deboli ma comunque significativi, il modello AIC offre una rappresentazione più completa.
# Analisi della Qualità del Modello
# Una volta selezionato il modello finale, ne valutiamo la capacità predittiva e la bontà dell’adattamento.
# Supponiamo di usare il modello AIC come "finale"
mod_final <- mod_aic
# R² e R² aggiustato
summary(mod_final)$r.squared
## [1] 0.3814224
summary(mod_final)$adj.r.squared
## [1] 0.3801823
# RMSE (Root Mean Squared Error)
rmse <- sqrt(mean(residuals(mod_final)^2))
rmse
## [1] 412.8588
# Il modello finale presenta un R² aggiustato di circa 0.38, il che significa che spiega quasi il 38% della variabilità del peso neonatale. Si tratta di una capacità esplicativa discreta: il modello coglie i principali fattori predittivi, ma rimane una quota rilevante di variabilità non spiegata, riconducibile a fattori biologici e ambientali non osservati.
# Il valore dell’RMSE, pari a circa 413 grammi, indica che l’errore medio delle previsioni si colloca attorno a ±400 g rispetto al peso effettivo. Considerando che il peso medio dei neonati è circa 3.200–3.300 g, l’incertezza predittiva corrisponde a circa il 12–13% del valore medio.
# Nel complesso, il modello risulta quindi statisticamente significativo e predittivamente utile, pur con un margine di errore non trascurabile, che riflette la complessità multifattoriale del fenomeno.
#Previsioni e Risultati
# Una volta validato il modello, possiamo utilizzarlo per produrre previsioni pratiche.
# Esempio: stimiamo il peso di una neonata (sesso = F), con madre alla terza gravidanza, che partorisce alla 39ª settimana di gestazione.
# Supponiamo inoltre: madre non fumatrice, età media (30 anni), parto naturale, ospedale di riferimento osp1.
# Creiamo un nuovo dataset
nuovo_caso <- data.frame(
Gestazione = 39,
Anni.madre = 30,
N.gravidanze = 3,
Fumatrici = 0,
Sesso = "F",
Tipo.parto = "Nat",
Ospedale = "osp1"
)
# Predizione con intervallo di confidenza e predizione
predict(mod_final, newdata = nuovo_caso, interval = "prediction")
## fit lwr upr
## 1 3254.099 2442.768 4065.431
# Utilizzando il modello finale stimato, abbiamo effettuato una previsione pratica del peso neonatale. In particolare, abbiamo considerato il caso di una neonata, figlia di una madre di 30 anni alla terza gravidanza, non fumatrice, che partorisce alla 39ª settimana di gestazione con parto naturale presso l’ospedale di riferimento.
# Il modello stima per questa neonata un peso medio atteso pari a 3254 g. L’intervallo di predizione al 95% risulta compreso tra 2443 g e 4065 g, indicando il range plausibile entro cui potrebbe collocarsi il peso del singolo neonato, tenuto conto della variabilità individuale.
# Questa previsione è coerente con i valori medi riportati in letteratura (peso medio neonatale intorno ai 3200–3300 g secondo l’OMS), confermando la bontà del modello nel catturare le tendenze generali. Tuttavia, l’ampiezza dell’intervallo di predizione mette in evidenza che, pur essendo utile per stime medie, il modello mantiene un grado di incertezza non trascurabile nelle applicazioni individuali.
# Visualizzazioni
# Per comunicare i risultati in maniera intuitiva, presentiamo alcune visualizzazioni basate sul modello finale.
# In particolare, analizziamo l’effetto della gestazione e del fumo materno sul peso previsto.
# Visualizzazione: effetto Gestazione e Fumo (robusto ai tipi/livelli)
library(ggplot2)
mod_final <- mod_aic
pred_vars <- all.vars(formula(mod_final))[-1]
grid_base <- list(
Gestazione = 35:42,
Anni.madre = 30,
N.gravidanze = 2,
Fumatrici = c(0,1),
Sesso = "F",
Tipo.parto = "Nat",
Ospedale = "osp1"
)
grid_base <- grid_base[names(grid_base) %in% pred_vars]
nuovi_dati <- do.call(expand.grid, grid_base, quote = TRUE)
if(length(mod_final$xlevels)){
for(v in names(mod_final$xlevels)){
if(v %in% names(nuovi_dati)){
nuovi_dati[[v]] <- factor(nuovi_dati[[v]], levels = mod_final$xlevels[[v]])
}
}
}
num_vars <- setdiff(pred_vars, names(mod_final$xlevels))
for(v in num_vars){
if(v %in% names(nuovi_dati)) nuovi_dati[[v]] <- as.numeric(nuovi_dati[[v]])
}
pred <- predict(mod_final, newdata = nuovi_dati, interval = "confidence")
nuovi_dati$fit <- pred[, "fit"]
nuovi_dati$lwr <- pred[, "lwr"]
nuovi_dati$upr <- pred[, "upr"]
if("Fumatrici" %in% names(nuovi_dati)){
if(!("Fumatrici" %in% names(mod_final$xlevels))){
nuovi_dati$Fumo_lab <- factor(nuovi_dati$Fumatrici, levels = c(0,1), labels = c("No","Si"))
} else {
nuovi_dati$Fumo_lab <- nuovi_dati$Fumatrici
}
} else {
nuovi_dati$Fumo_lab <- factor("Non usata nel modello")
}
ggplot(nuovi_dati, aes(x = Gestazione, y = fit, color = Fumo_lab, group = Fumo_lab)) +
geom_line(linewidth = 1.2, na.rm = TRUE) +
geom_ribbon(aes(ymin = lwr, ymax = upr, fill = Fumo_lab), alpha = 0.20, color = NA, na.rm = TRUE) +
labs(
title = "Peso previsto in funzione della gestazione",
subtitle = "Confronto tra madri fumatrici e non fumatrici (se usata nel modello)",
x = "Settimane di gestazione",
y = "Peso previsto (g)",
color = "Fumatrici",
fill = "Fumatrici"
) +
theme_minimal(base_size = 14)

# Il grafico mostra l’andamento del peso previsto del neonato in funzione delle settimane di gestazione, distinguendo tra madri fumatrici e non fumatrici.
# Si osserva una chiara relazione positiva: all’aumentare della durata della gestazione, il peso stimato del neonato cresce in maniera quasi lineare. Tuttavia, a parità di settimane, i neonati di madri fumatrici presentano in media un peso inferiore rispetto a quelli di madri non fumatrici.
# Le bande di confidenza al 95% attorno alle curve indicano la variabilità della stima. L’assenza di una completa sovrapposizione tra le due aree conferma che l’effetto del fumo risulta statisticamente significativo, coerentemente con quanto emerso dalle analisi del modello.
# In sintesi, la visualizzazione rende evidente come:
# la gestazione sia un predittore fondamentale del peso neonatale,
# il fumo materno comporti una riduzione sistematica del peso previsto, con potenziali implicazioni cliniche e di salute pubblica.