Il presente progetto ha l’obiettivo di costruire un modello statistico per prevedere il peso dei neonati alla nascita, utilizzando variabili cliniche e demografiche raccolte da tre ospedali.
Il peso alla nascita rappresenta un indicatore importante dello stato di salute neonatale. Una previsione accurata può supportare il personale medico nell’identificazione precoce di situazioni potenzialmente critiche e nella pianificazione delle risorse ospedaliere.
Gli obiettivi principali dell’analisi sono:
dati=read.csv("neonati.csv")
n = nrow(dati)
kable(summary(dati)) |>
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE
)
| 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 |
str(dati)
## 'data.frame': 2500 obs. of 10 variables:
## $ Anni.madre : int 26 21 34 28 20 32 26 25 22 23 ...
## $ N.gravidanze: int 0 2 3 1 0 0 1 0 1 0 ...
## $ Fumatrici : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Gestazione : int 42 39 38 41 38 40 39 40 40 41 ...
## $ Peso : int 3380 3150 3640 3690 3700 3200 3100 3580 3670 3700 ...
## $ Lunghezza : int 490 490 500 515 480 495 480 510 500 510 ...
## $ Cranio : int 325 345 375 365 335 340 345 349 335 362 ...
## $ Tipo.parto : chr "Nat" "Nat" "Nat" "Nat" ...
## $ Ospedale : chr "osp3" "osp1" "osp2" "osp2" ...
## $ Sesso : chr "M" "F" "M" "M" ...
colSums(is.na(dati))
## Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza
## 0 0 0 0 0 0
## Cranio Tipo.parto Ospedale Sesso
## 0 0 0 0
In questa sezione vengono controllati i tipi delle variabili e vengono trasformate in fattori le variabili categoriche.
# Esempio di preparazione dei dati.
# Decommentare e adattare i nomi delle variabili al dataset reale.
dati <- dati |>
mutate(
Fumatrici = factor(Fumatrici, levels = c(0, 1), labels = c("No", "Si")),
Tipo.parto = factor(Tipo.parto),
Ospedale = factor(Ospedale),
Sesso = factor(Sesso)
)
Dall’analisi delle variabili quantitative emerge che il peso medio dei neonati è pari a circa 3284 grammi, con una mediana di 3300 grammi. La vicinanza tra media e mediana suggerisce una distribuzione sostanzialmente simmetrica.
La deviazione standard del peso, pari a circa 525 grammi, indica una variabilità moderata all’interno del campione. I quartili (Q1 = 2990, Q3 = 3620) confermano una dispersione contenuta dei dati.
Anche le altre misure antropometriche, come lunghezza e circonferenza cranica, mostrano valori medi rispettivamente pari a circa 495 mm e 340 mm, con distribuzioni equilibrate e senza evidenti asimmetrie.
Per quanto riguarda la durata della gestazione, il valore medio è pari a circa 39 settimane, con una mediana anch’essa pari a 39, indicando che la maggior parte delle nascite avviene a termine.
L’età media delle madri è pari a circa 28 anni, con una dispersione moderata (deviazione standard di circa 5 anni), suggerendo una buona variabilità nel campione.
Infine, il numero medio di gravidanze è pari a circa 1, con una mediana di 1, evidenziando come la maggior parte delle madri si trovi alla prima o seconda gravidanza.
Nel complesso, non emergono valori estremamente anomali dalle statistiche riassuntive, suggerendo una buona qualità del dataset.
L’analisi delle variabili qualitative evidenzia una distribuzione complessivamente equilibrata tra le principali categorie. Per quanto riguarda il sesso del neonato, si osserva una ripartizione pressoché uniforme tra maschi e femmine, con percentuali pari rispettivamente a circa il 49.8% e il 50.2%, indicando un campione bilanciato sotto questo profilo. La distribuzione tra i diversi ospedali risulta anch’essa omogenea, con ciascuna struttura che contribuisce a circa un terzo delle osservazioni. Questo aspetto garantisce una buona rappresentatività del campione rispetto ai centri coinvolti. In relazione al tipo di parto, si rileva una prevalenza di parti naturali (circa 71%) rispetto ai cesarei (circa 29%), dato coerente con quanto generalmente osservato nella pratica clinica. Infine, la variabile relativa al fumo materno evidenzia una netta predominanza di madri non fumatrici (circa 96%), mentre la quota di fumatrici risulta contenuta (circa 4%). Questa distribuzione riflette un comportamento atteso nella popolazione, ma suggerisce anche una possibile limitata variabilità per questa variabile nelle analisi successive. Nel complesso, le variabili categoriali presentano una distribuzione plausibile e coerente, risultando adeguate per le successive analisi inferenziali.
# Tabella descrittiva per variabili quantitative
variabili_num <- c("Peso", "Lunghezza", "Gestazione", "Cranio", "Anni.madre", "N.gravidanze")
stat_num <- dati |>
summarise(across(
all_of(variabili_num),
list(
media = ~mean(.x),
mediana = ~median(.x),
sd = ~sd(.x),
q1 = ~quantile(.x, 0.25),
q3 = ~quantile(.x, 0.75)
)
))
kable(stat_num, digits = 2)|>
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE
)
| Peso_media | Peso_mediana | Peso_sd | Peso_q1 | Peso_q3 | Lunghezza_media | Lunghezza_mediana | Lunghezza_sd | Lunghezza_q1 | Lunghezza_q3 | Gestazione_media | Gestazione_mediana | Gestazione_sd | Gestazione_q1 | Gestazione_q3 | Cranio_media | Cranio_mediana | Cranio_sd | Cranio_q1 | Cranio_q3 | Anni.madre_media | Anni.madre_mediana | Anni.madre_sd | Anni.madre_q1 | Anni.madre_q3 | N.gravidanze_media | N.gravidanze_mediana | N.gravidanze_sd | N.gravidanze_q1 | N.gravidanze_q3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3284.08 | 3300 | 525.04 | 2990 | 3620 | 494.69 | 500 | 26.32 | 480 | 510 | 38.98 | 39 | 1.87 | 38 | 40 | 340.03 | 340 | 16.43 | 330 | 350 | 28.16 | 28 | 5.27 | 25 | 32 | 0.98 | 1 | 1.28 | 0 | 1 |
# Tabella di frequenza per variabili qualitative
variabili_cat <- c("Fumatrici", "Tipo.parto", "Ospedale", "Sesso")
tab_freq <- lapply(variabili_cat, function(v) {
freq_ass <- table(dati[[v]])
freq_rel <- freq_ass / nrow(dati)
data.frame(
Variabile = v,
Categoria = names(freq_ass),
Frequenza = as.vector(freq_ass),
Frequenza_relativa = round(as.vector(freq_rel), 3),
Percentuale = round(as.vector(freq_rel * 100), 2)
)
}) |>
dplyr::bind_rows()
kable(tab_freq)|>
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE
)
| Variabile | Categoria | Frequenza | Frequenza_relativa | Percentuale |
|---|---|---|---|---|
| Fumatrici | No | 2396 | 0.958 | 95.84 |
| Fumatrici | Si | 104 | 0.042 | 4.16 |
| Tipo.parto | Ces | 728 | 0.291 | 29.12 |
| Tipo.parto | Nat | 1772 | 0.709 | 70.88 |
| Ospedale | osp1 | 816 | 0.326 | 32.64 |
| Ospedale | osp2 | 849 | 0.340 | 33.96 |
| Ospedale | osp3 | 835 | 0.334 | 33.40 |
| Sesso | F | 1256 | 0.502 | 50.24 |
| Sesso | M | 1244 | 0.498 | 49.76 |
L’analisi dei boxplot delle principali variabili quantitative evidenzia una distribuzione complessivamente regolare, con una tendenza centrale ben definita e una dispersione contenuta per la maggior parte delle osservazioni. In particolare, il peso alla nascita presenta una distribuzione centrata intorno a valori tipici, con una mediana pari a circa 3300 grammi e un intervallo interquartile compreso tra circa 3000 e 3600 grammi. Analogamente, anche le variabili lunghezza, circonferenza cranica e durata della gestazione mostrano distribuzioni coerenti con il contesto clinico e una variabilità moderata. Tuttavia, in tutte le variabili analizzate si osserva la presenza di valori anomali (outlier), rappresentati dai punti al di fuori dei baffi del boxplot. Tali osservazioni risultano particolarmente evidenti soprattutto nella parte inferiore della distribuzione per alcune variabili, suggerendo la presenza di valori estremi più frequenti tra le osservazioni più basse. L’analisi dei valori minimi e massimi non evidenzia la presenza di dati implausibili o incoerenti. Al contrario, i valori estremi osservati risultano compatibili con la naturale variabilità del fenomeno, potendo essere associati, ad esempio, a nascite premature o a neonati con dimensioni superiori alla media. Pertanto, la presenza di outlier non viene interpretata come indicativa di errori nei dati, ma come espressione della variabilità intrinseca del contesto reale. Di conseguenza, tali osservazioni verranno mantenute nel dataset e considerate nelle successive analisi, in particolare nella costruzione del modello di regressione.
boxplot(dati$Peso, main = "Boxplot Peso")
boxplot(dati$Lunghezza, main = "Boxplot Lunghezza")
boxplot(dati$Gestazione, main = "Boxplot Gestazione")
boxplot(dati$Cranio, main = "Boxplot Cranio")
#istogramma del peso
hist(dati$Peso,
main = "Distribuzione del peso alla nascita",
xlab = "Peso (grammi)",
breaks = 30)
#Boxplot peso per sesso
boxplot(Peso ~ Sesso, data = dati,
main = "Peso per sesso",
xlab = "Sesso",
ylab = "Peso")
#Boxplot peso per fumo
boxplot(Peso~Fumatrici,data=dati,
main="Peso per fumatrici",
xlab="Fumatrici",
ylab="Peso")
Si vuole verificare se il tipo di parto sia indipendente dall’ospedale di nascita.
analizziamo i risultati ottenuti: Il valore del p-value è pari a 0.5778, superiore al livello di significatività del 5%.
Pertanto, non si rifiuta l’ipotesi nulla di indipendenza tra ospedale di nascita e tipo di parto.
Non emergono evidenze statisticamente significative per affermare che la distribuzione tra parti naturali e cesarei differisca tra i diversi ospedali. I dati suggeriscono quindi che il tipo di parto sia sostanzialmente indipendente dalla struttura ospedaliera considerata.
tabella_parti=table(dati$Ospedale, dati$Tipo.parto)
test_chi=chisq.test(tabella_parti)
test_chi
##
## Pearson's Chi-squared test
##
## data: tabella_parti
## X-squared = 1.0972, df = 2, p-value = 0.5778
test per il peso le mie ipotesi sono: H₀: μ = 3300 H₁: μ ≠ 3300 Il valore del p-value risulta pari a 0.1296, superiore al livello di significatività del 5%. Pertanto, non si rifiuta l’ipotesi nulla. Non emergono evidenze statisticamente significative per affermare che la media del peso nel campione sia diversa da 3300 grammi. Questo risultato è coerente anche con l’intervallo di confidenza al 95% ([3263.49 ; 3304.67]), che include il valore di riferimento della popolazione. Si può quindi concludere che la media osservata nel campione è compatibile con quella della popolazione, considerando la variabilità campionaria.
test per la lunghezza le mie ipotesi sono: H₀: μ = 500 H₁: μ ≠ 500
Il valore del p-value risulta estremamente inferiore al livello di significatività del 5% (p-value < 2.2e-16), pertanto si rifiuta l’ipotesi nulla.
Si conclude che la lunghezza media nel campione è statisticamente diversa da 500 mm.
Questo risultato è coerente anche con l’intervallo di confidenza al 95% ([493.66 ; 495.72]), che non include il valore di riferimento.
La lunghezza media osservata nel campione (circa 494.7 mm) risulta quindi significativamente inferiore al valore ipotizzato.
#test per il peso
media_popolazione_peso=3300
t.test(dati$Peso,
mu=3300,
conf.level=0.95,
alternative = "two.sided")
##
## 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 per la lunghezza
media_popolazione_lunghezza=500
t.test(dati$Lunghezza,
mu=500,
conf.level=0.95,
alternative = "two.sided")
##
## 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
Le misure antropometriche sono significativamente diverse tra i due sessi Per verificare se le misure antropometriche differiscono tra i due sessi, sono stati effettuati t-test per campioni indipendenti. Poiché sono stati eseguiti più test, è stata considerata una correzione per confronti multipli tramite il metodo di Bonferroni. Per quanto riguarda il peso alla nascita, il test evidenzia un valore del p-value estremamente inferiore al livello di significatività del 5% (p-value < 2.2e-16). Anche dopo correzione, il risultato rimane altamente significativo. Si rifiuta quindi l’ipotesi nulla e si conclude che esiste una differenza statisticamente significativa tra maschi e femmine. In particolare, il peso medio è pari a circa 3161 g per le femmine e 3408 g per i maschi. Analogamente, per la lunghezza, il test mostra una differenza significativa (p-value < 2.2e-16), che rimane tale anche dopo correzione. I maschi presentano una lunghezza media maggiore (circa 500 mm) rispetto alle femmine (circa 490 mm). Anche per la circonferenza cranica, il test evidenzia una differenza significativa (p-value = 1.7e-13), che permane dopo l’applicazione della correzione di Bonferroni. I valori medi risultano pari a circa 337.6 mm per le femmine e 342.4 mm per i maschi. Nel complesso, i risultati indicano che le misure antropometriche differiscono significativamente tra i due sessi, e tali differenze risultano robuste anche considerando la correzione per confronti multipli.
#test per il peso dato il sesso
t.test(Peso ~ Sesso, data = dati)
##
## 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
#test per la lunghezza dato il sesso
t.test(Lunghezza~Sesso,data=dati)
##
## 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
#test per il diametro del cranio dato il sesso
t.test(Cranio~Sesso,data=dati)
##
## 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
# Poiché sono stati effettuati più test statistici sulle diverse misure antropometriche,
# si applica la correzione di Bonferroni ai p-value per controllare l’inflazione del rischio
# di errore di tipo I (falsi positivi) e garantire una maggiore accuratezza nell’interpretazione dei risultati.
p_values <- c(
t.test(Peso ~ Sesso, data = dati)$p.value,
t.test(Lunghezza ~ Sesso, data = dati)$p.value,
t.test(Cranio ~ Sesso, data = dati)$p.value
)
p.adjust(p_values, method = "bonferroni")
## [1] 2.408923e-32 6.711728e-21 5.153084e-13
L’obiettivo è prevedere il peso alla nascita del neonato utilizzando le variabili cliniche e demografiche disponibili.
È stato stimato un modello di regressione lineare multipla al fine di analizzare l’impatto delle diverse variabili sul peso alla nascita.
Il modello risulta complessivamente significativo (p-value < 2.2e-16) e presenta un coefficiente di determinazione R² pari a 0.73, indicando che circa il 73% della variabilità del peso è spiegata dalle variabili incluse.
Dall’analisi dei coefficienti emerge che alcune variabili risultano statisticamente significative, mentre altre non mostrano un effetto rilevante.
In particolare, la durata della gestazione risulta altamente significativa (p-value < 2e-16) e presenta un coefficiente positivo: un aumento di una settimana di gestazione è associato, in media, a un incremento del peso di circa 32.6 grammi, coerentemente con le aspettative cliniche.
Anche la lunghezza e la circonferenza cranica risultano fortemente significative (p-value < 2e-16), indicando che neonati con dimensioni maggiori tendono ad avere un peso più elevato.
Il sesso del neonato risulta anch’esso significativo (p-value < 0.001), con un coefficiente positivo per i maschi: a parità delle altre condizioni, i neonati maschi pesano in media circa 77.5 grammi in più rispetto alle femmine.
Tra le variabili con significatività più moderata, si osserva che il numero di gravidanze e il tipo di parto risultano significativi, mentre per quanto riguarda l’ospedale, solo una delle strutture mostra un effetto statisticamente rilevante rispetto alla categoria di riferimento.
Al contrario, l’età della madre e il fumo materno non risultano statisticamente significativi, suggerendo che, una volta controllato per le altre variabili, non emergono evidenze di un loro effetto diretto sul peso alla nascita.
Nel complesso, il modello evidenzia come le principali determinanti del peso alla nascita siano le caratteristiche fisiche del neonato, la durata della gestazione e il sesso, mentre altri fattori mostrano un impatto più limitato o non significativo.
Alla luce dei risultati ottenuti, si procederà all’applicazione di opportune tecniche di selezione e miglioramento del modello, con l’obiettivo di ottenere una specificazione più parsimoniosa, mantenendo solo le variabili statisticamente rilevanti e verificando la bontà complessiva del modello attraverso adeguate analisi diagnostiche.
#controlliamo se il peso segue una distribuzione normale
shapiro.test(dati$Peso)
##
## Shapiro-Wilk normality test
##
## data: dati$Peso
## W = 0.97066, p-value < 2.2e-16
#Il test di Shapiro-Will evidenzia un p-value estremamente ridotto, portando al rifiuto #dell’ipotesi di normalità. Tuttavia, data l’elevata numerosità del campione (n = 2500), il test #risulta particolarmente sensibile anche a minime deviazioni dalla normalità. Pertanto, tale #risultato non viene considerato problematico ai fini dell’analisi, anche alla luce del Teorema #del Limite Centrale, che garantisce la robustezza dei metodi statistici utilizzati.
mod_1 <- lm(Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione +
Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
summary(mod_1)
##
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione +
## Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1124.40 -181.66 -14.42 160.91 2611.89
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6738.4762 141.3087 -47.686 < 2e-16 ***
## Anni.madre 0.8921 1.1323 0.788 0.4308
## N.gravidanze 11.2665 4.6608 2.417 0.0157 *
## FumatriciSi -30.1631 27.5386 -1.095 0.2735
## Gestazione 32.5696 3.8187 8.529 < 2e-16 ***
## Lunghezza 10.2945 0.3007 34.236 < 2e-16 ***
## Cranio 10.4707 0.4260 24.578 < 2e-16 ***
## Tipo.partoNat 29.5254 12.0844 2.443 0.0146 *
## Ospedaleosp2 -11.2095 13.4379 -0.834 0.4043
## Ospedaleosp3 28.0958 13.4957 2.082 0.0375 *
## SessoM 77.5409 11.1776 6.937 5.08e-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.2 on 10 and 2489 DF, p-value: < 2.2e-16
Al fine di individuare un modello più parsimonioso, è stata applicata una procedura di selezione stepwise basata sul criterio di informazione bayesiano (BIC), che penalizza maggiormente la complessità del modello rispetto ad altri criteri.
La procedura ha portato all’eliminazione delle variabili non rilevanti, quali età della madre, fumo materno, tipo di parto e ospedale, suggerendo che queste non contribuiscono in modo significativo alla spiegazione del peso alla nascita una volta considerate le altre variabili.
Il modello finale include le variabili numero di gravidanze, durata della gestazione, lunghezza, circonferenza cranica e sesso del neonato, che risultano le principali determinanti del peso.
Questo risultato è coerente con l’analisi precedente, confermando il ruolo centrale delle caratteristiche fisiche del neonato e della gestazione, mentre altri fattori mostrano un impatto più limitato.
Rispetto al modello completo, si osserva che il valore di R² rimane sostanzialmente invariato (da circa 0.729 a 0.727), indicando una perdita minima di capacità esplicativa.
Tuttavia, il modello BIC risulta significativamente più parsimonioso, avendo eliminato variabili non significative come età della madre, fumo materno, tipo di parto e ospedale.
Pertanto, il modello selezionato rappresenta un buon compromesso tra accuratezza e semplicità, migliorando l’interpretabilità e riducendo il rischio di overfitting
#vediamo prima la correlazione tra le varibiali numeriche a livello grafico
vars_num <- dati[, c("Peso", "Lunghezza", "Cranio",
"Gestazione", "Anni.madre", "N.gravidanze")]
panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r <- (cor(x, y))
txt <- format(c(r, 1), digits = digits)[1]
txt <- paste0(prefix, txt)
if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = 1.5)
}
#correlazioni
pairs(vars_num,lower.panel=panel.cor, upper.panel=panel.smooth)
stepwise.mod=MASS::stepAIC(mod_1,
direction="both",
k=log(n))
## Start: AIC=28139.32
## Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza +
## Cranio + Tipo.parto + Ospedale + Sesso
##
## Df Sum of Sq RSS AIC
## - Anni.madre 1 46578 186809099 28132
## - Fumatrici 1 90019 186852540 28133
## - Ospedale 2 685979 187448501 28133
## - N.gravidanze 1 438452 187200974 28137
## - Tipo.parto 1 447929 187210450 28138
## <none> 186762521 28139
## - Sesso 1 3611021 190373542 28179
## - Gestazione 1 5458403 192220925 28204
## - Cranio 1 45326172 232088693 28675
## - Lunghezza 1 87951062 274713583 29096
##
## Step: AIC=28132.12
## Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio +
## Tipo.parto + Ospedale + Sesso
##
## Df Sum of Sq RSS AIC
## - Fumatrici 1 90897 186899996 28126
## - Ospedale 2 692738 187501837 28126
## - Tipo.parto 1 448222 187257321 28130
## <none> 186809099 28132
## - N.gravidanze 1 633756 187442855 28133
## + Anni.madre 1 46578 186762521 28139
## - Sesso 1 3618736 190427835 28172
## - Gestazione 1 5412879 192221978 28196
## - Cranio 1 45588236 232397335 28670
## - Lunghezza 1 87950050 274759149 29089
##
## Step: AIC=28125.51
## Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Tipo.parto +
## Ospedale + Sesso
##
## Df Sum of Sq RSS AIC
## - Ospedale 2 701680 187601677 28119
## - Tipo.parto 1 440684 187340680 28124
## <none> 186899996 28126
## - N.gravidanze 1 610840 187510837 28126
## + Fumatrici 1 90897 186809099 28132
## + Anni.madre 1 47456 186852540 28133
## - Sesso 1 3602797 190502794 28165
## - Gestazione 1 5346781 192246777 28188
## - Cranio 1 45632149 232532146 28664
## - Lunghezza 1 88355030 275255027 29086
##
## Step: AIC=28119.23
## Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Tipo.parto +
## Sesso
##
## Df Sum of Sq RSS AIC
## - Tipo.parto 1 463870 188065546 28118
## <none> 187601677 28119
## - N.gravidanze 1 651066 188252743 28120
## + Ospedale 2 701680 186899996 28126
## + Fumatrici 1 99840 187501837 28126
## + Anni.madre 1 54392 187547285 28126
## - Sesso 1 3649259 191250936 28160
## - Gestazione 1 5444109 193045786 28183
## - Cranio 1 45758101 233359778 28657
## - Lunghezza 1 88054432 275656108 29074
##
## Step: AIC=28117.58
## Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Sesso
##
## Df Sum of Sq RSS AIC
## <none> 188065546 28118
## - N.gravidanze 1 623141 188688687 28118
## + Tipo.parto 1 463870 187601677 28119
## + Ospedale 2 724866 187340680 28124
## + Fumatrici 1 91892 187973654 28124
## + Anni.madre 1 54816 188010731 28125
## - Sesso 1 3655292 191720838 28158
## - Gestazione 1 5464853 193530399 28181
## - Cranio 1 46108583 234174130 28658
## - Lunghezza 1 87632762 275698308 29066
#vediamo i dettagli del modello migliore trovato
mod_2=lm(Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Sesso,data=dati)
summary(mod_2)
##
## 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
analisi grafica dei resuidi
Il grafico Residuals vs Fitted non evidenzia pattern sistematici rilevanti, suggerendo che l’ipotesi di linearità è complessivamente soddisfatta, sebbene si osservi una lieve curvatura.
Il Q-Q plot mostra una distribuzione dei residui approssimativamente normale, con alcune deviazioni nelle code, riconducibili alla presenza di valori estremi.
Il grafico Scale-Location evidenzia una leggera eteroschedasticità, indicando una variabilità dei residui moderatamente crescente al variare dei valori stimati.
Infine, l’analisi dei valori influenti tramite il grafico Residuals vs Leverage non evidenzia osservazioni particolarmente critiche, suggerendo che il modello non è influenzato in modo significativo da singoli punti.
Nel complesso, le ipotesi del modello risultano ragionevolmente soddisfatte, rendendo il modello adeguato per fini descrittivi e predittivi.
##ANALISI DEL LEVERAGE L’analisi del leverage evidenzia la presenza di diverse osservazioni con valori superiori alla soglia teorica. Tuttavia, tali valori risultano complessivamente contenuti e distribuiti su un numero elevato di osservazioni, caratteristica tipica di dataset di grandi dimensioni. Non si osservano punti con leverage estremamente elevato tali da destare particolare preoccupazione. Pertanto, non emergono criticità rilevanti in termini di leverage, e il modello risulta stabile rispetto alla presenza di tali osservazioni.
##ANALISI DEGLI OUTLIER Il grafico dei residui studentizzati mostra che la maggior parte delle osservazioni si colloca all’interno dell’intervallo [-2 ; 2], indicando un comportamento coerente con le ipotesi del modello. Sono presenti alcune osservazioni che si discostano da tale intervallo, identificabili come possibili outlier, tra cui un caso particolarmente estremo. Tuttavia, il numero di tali osservazioni è molto limitato rispetto alla dimensione complessiva del campione. Pertanto, la presenza di questi outlier non appare tale da compromettere la validità complessiva del modello.
##ANALISI DELLA DISTANZA DI COOK L’analisi della Cook’s distance evidenzia un valore massimo pari a circa 0.83, inferiore alla soglia critica di 1. Ciò indica la presenza di alcune osservazioni con una certa influenza sulle stime del modello, ma non tale da comprometterne la stabilità complessiva. In particolare, tale valore risulta coerente con la presenza di un numero limitato di outlier precedentemente individuati. Nel complesso, non emergono osservazioni fortemente influenti in grado di alterare in modo significativo i risultati del modello.
##TEST SUI RESIDUI Nel complesso, l’analisi diagnostica evidenzia alcune deviazioni dalle ipotesi teoriche del modello, in particolare una lieve eteroschedasticità e una non perfetta normalità dei residui. Tuttavia, tali criticità risultano contenute e non compromettono in modo significativo la validità del modello, anche alla luce della numerosità elevata del campione. Inoltre, non si rilevano problemi di autocorrelazione né la presenza di osservazioni fortemente influenti. Pertanto, il modello può essere considerato adeguato e robusto sia dal punto di vista descrittivo che predittivo.
#calcoliamo il RMSE
rmse <- sqrt(mean(residuals(mod_2)^2))
rmse
## [1] 274.274
#analisi dei resudui graficamente
par(mfrow=c(2,2))
plot(mod_2)
#LEVERAGE
lev=hatvalues(mod_2)
plot(lev)
p=sum(lev)
soglia=2*p/n
abline(h=soglia,col=2)
lev[lev>soglia]
## 13 15 34 67 89 96
## 0.005630918 0.007050422 0.006744143 0.005891590 0.012816470 0.005351586
## 101 106 131 134 151 155
## 0.007526751 0.014479871 0.007229339 0.007552819 0.010883937 0.007207682
## 161 189 190 204 205 206
## 0.020335483 0.004893297 0.005366557 0.014490604 0.005351634 0.009476652
## 220 294 305 310 312 315
## 0.007393997 0.005912765 0.005442061 0.028812123 0.013169272 0.005385800
## 378 440 442 445 486 492
## 0.015934061 0.005404736 0.007723662 0.007509382 0.005164446 0.008274018
## 497 516 582 587 592 614
## 0.005166306 0.013079851 0.011665555 0.008412325 0.006384116 0.005299262
## 638 656 657 684 697 702
## 0.006688287 0.005927777 0.005322685 0.008818987 0.005863826 0.005202259
## 729 748 750 757 765 805
## 0.005023115 0.008565543 0.006942097 0.008145491 0.006070298 0.014356657
## 828 893 895 913 928 946
## 0.007179817 0.005075205 0.005295896 0.005571144 0.022742332 0.006909044
## 947 956 985 1008 1014 1049
## 0.008409465 0.007784123 0.007039416 0.005343037 0.008470133 0.004956169
## 1067 1091 1106 1130 1166 1181
## 0.008465430 0.008933360 0.005967317 0.031728597 0.005513559 0.005677676
## 1188 1200 1219 1238 1248 1273
## 0.006477203 0.005492370 0.030694311 0.005908078 0.014622914 0.007085831
## 1291 1293 1311 1321 1325 1356
## 0.006117497 0.006073639 0.009625908 0.009293111 0.004857169 0.005303442
## 1357 1385 1395 1400 1402 1411
## 0.006965051 0.012636943 0.005126697 0.005925069 0.004811441 0.008048184
## 1420 1428 1429 1450 1505 1551
## 0.005155654 0.008192811 0.021757172 0.015104831 0.013330439 0.048769569
## 1553 1556 1573 1593 1606 1610
## 0.008504889 0.005919673 0.005047204 0.005623758 0.005001812 0.008722184
## 1617 1619 1628 1686 1693 1701
## 0.004866796 0.015067498 0.005069731 0.009349313 0.005077858 0.010842957
## 1712 1718 1727 1735 1780 1781
## 0.006992084 0.006958857 0.013300523 0.004884846 0.025538678 0.016832361
## 1809 1827 1868 1892 1962 1967
## 0.008707504 0.006065698 0.005205637 0.005332812 0.005540442 0.005337356
## 1977 2037 2040 2046 2086 2089
## 0.006927281 0.004889127 0.011494872 0.005471670 0.013193090 0.006293550
## 2098 2114 2115 2120 2140 2146
## 0.005094455 0.013316875 0.011772090 0.018659995 0.006244232 0.005802168
## 2148 2149 2157 2175 2200 2215
## 0.007926839 0.013583436 0.005907225 0.032527273 0.011670024 0.004892265
## 2216 2220 2221 2224 2225 2244
## 0.008117864 0.005414040 0.021628717 0.005838076 0.005591261 0.006929217
## 2257 2307 2317 2318 2337 2359
## 0.006170254 0.013965608 0.007673614 0.004831118 0.005230450 0.010067364
## 2408 2422 2436 2437 2452 2458
## 0.009696691 0.021532808 0.004986522 0.023943328 0.023838489 0.008506087
## 2471 2478
## 0.020903740 0.005775173
#vediamo i valori outliers
plot(rstudent(mod_2))
abline(h=c(-2,2),col=2)
outlierTest(mod_2)
## rstudent unadjusted p-value Bonferroni p
## 1551 10.051908 2.4906e-23 6.2265e-20
## 155 5.027798 5.3138e-07 1.3285e-03
## 1306 4.827238 1.4681e-06 3.6702e-03
#distnza di cook
cook=cooks.distance(mod_2)
plot(cook)
max(cook)
## [1] 0.8300965
#effetuiamo i test sui resuidi
bptest(mod_2)
##
## studentized Breusch-Pagan test
##
## data: mod_2
## BP = 90.253, df = 5, p-value < 2.2e-16
dwtest(mod_2)
##
## Durbin-Watson test
##
## data: mod_2
## DW = 1.9535, p-value = 0.1224
## alternative hypothesis: true autocorrelation is greater than 0
shapiro.test(residuals(mod_2))
##
## Shapiro-Wilk normality test
##
## data: residuals(mod_2)
## W = 0.97408, p-value < 2.2e-16
Una volta validato il modello, è stato utilizzato per effettuare una previsione del peso alla nascita.
In particolare, si è considerato il caso di una neonata alla terza gravidanza, con una durata della gestazione pari a 39 settimane.
Poiché alcune variabili incluse nel modello, come la lunghezza e la circonferenza cranica, non sono note a priori, sono stati utilizzati i rispettivi valori medi campionari.
La stima ottenuta attraverso il modello fornisce un valore previsto del peso pari a circa 3271 grammi.
Tale valore risulta coerente con la media osservata nel campione, suggerendo che il modello produce previsioni realistiche.
Questo esempio evidenzia come il modello possa essere utilizzato per effettuare previsioni pratiche, fornendo un supporto utile nella pianificazione clinica e nella valutazione dei casi.
mean_lunghezza <- mean(dati$Lunghezza)
mean_cranio <- mean(dati$Cranio)
#creaione di un nuovo dataset con le varibaili di interesse
nuovo <- data.frame(
N.gravidanze = 3,
Gestazione = 39,
Lunghezza = mean_lunghezza,
Cranio = mean_cranio,
Sesso = "F"
)
predict(mod_2, newdata = nuovo)
## 1
## 3271.09
analisi Grafica I grafici mostrano l’andamento del peso previsto alla nascita in funzione delle settimane di gestazione, mantenendo costanti le altre variabili del modello. Si osserva una chiara relazione positiva tra la durata della gravidanza e il peso previsto: all’aumentare delle settimane di gestazione aumenta il peso stimato dal modello. Tale risultato conferma quanto emerso dall’analisi di regressione, evidenziando l’importanza della gestazione come principale determinante del peso alla nascita. Inoltre, distinguendo i neonati per sesso, emerge che i maschi presentano valori di peso previsto sistematicamente superiori rispetto alle femmine, a parità delle altre condizioni considerate. Questo risultato risulta coerente con la significatività della variabile Sesso nel modello finale. Le curve appaiono pressoché parallele, suggerendo che l’effetto della gestazione sul peso alla nascita sia simile per entrambi i sessi, mentre la differenza tra maschi e femmine tende a mantenersi relativamente costante. Nel complesso, le visualizzazioni confermano i risultati ottenuti tramite il modello di regressione e consentono di rappresentare in modo immediato e intuitivo le principali relazioni tra le variabili considerate.
gest_seq <- seq(37, 42, by = 0.5)
nuovi_dati <- data.frame(
N.gravidanze = 3,
Gestazione = gest_seq,
Lunghezza = mean_lunghezza,
Cranio = mean_cranio,
Sesso = "F"
)
nuovi_dati$Peso_previsto <- predict(mod_2, newdata = nuovi_dati)
#grafico
ggplot(nuovi_dati,
aes(x = Gestazione,
y = Peso_previsto)) +
geom_line(linewidth = 1.2, color = "blue") +
geom_point(size = 2) +
labs(
title = "Peso previsto in funzione della gestazione",
x = "Settimane di gestazione",
y = "Peso previsto (grammi)"
) +
theme_minimal()
#differenza tra maschi e femmine
nuovi_dati2 <- expand.grid(
Gestazione = gest_seq,
Sesso = c("F", "M")
)
nuovi_dati2$N.gravidanze <- 3
nuovi_dati2$Lunghezza <- mean_lunghezza
nuovi_dati2$Cranio <- mean_cranio
nuovi_dati2$Peso_previsto <- predict(mod_2, newdata = nuovi_dati2)
ggplot(nuovi_dati2,
aes(x = Gestazione,
y = Peso_previsto,
color = Sesso,
group = Sesso)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2) +
labs(
title = "Peso previsto per sesso e settimane di gestazione",
x = "Settimane di gestazione",
y = "Peso previsto (grammi)"
) +
theme_minimal()
## CONCLUSIONI # Conclusioni
Nel presente progetto è stato sviluppato un modello statistico per la previsione del peso neonatale alla nascita, utilizzando informazioni cliniche e demografiche raccolte da tre ospedali.
L’analisi descrittiva iniziale ha evidenziato un dataset complessivamente coerente e privo di anomalie rilevanti, con distribuzioni plausibili sia per le variabili quantitative sia per quelle qualitative. La presenza di alcuni outlier è risultata compatibile con la naturale variabilità del fenomeno osservato e non è stata interpretata come indicativa di errori nei dati. Successivamente, sono state verificate diverse ipotesi statistiche tramite opportuni test inferenziali. In particolare, non sono emerse differenze significative nella frequenza dei parti cesarei tra i diversi ospedali, mentre sono state riscontrate differenze significative tra maschi e femmine nelle principali misure antropometriche. Inoltre, il peso medio del campione è risultato compatibile con il valore di riferimento della popolazione, mentre la lunghezza media è risultata significativamente inferiore rispetto al valore ipotizzato. È stato quindi costruito un modello di regressione lineare multipla per spiegare il peso alla nascita in funzione delle variabili disponibili. Il modello completo ha evidenziato come le principali determinanti del peso siano la durata della gestazione, la lunghezza, la circonferenza cranica e il sesso del neonato. Attraverso una procedura di selezione basata sul criterio BIC, è stato individuato un modello più parsimonioso che mantiene un’elevata capacità esplicativa, con un coefficiente di determinazione R² pari a circa 0.73. Tale risultato indica che il modello è in grado di spiegare una quota elevata della variabilità del peso neonatale. L’analisi diagnostica dei residui ha mostrato una situazione complessivamente soddisfacente: non sono emersi problemi rilevanti di osservazioni influenti o autocorrelazione, mentre le lievi deviazioni dalla normalità e dall’omoschedasticità non risultano tali da compromettere la validità del modello, anche considerando la numerosità elevata del campione. Infine, il modello è stato utilizzato per effettuare previsioni pratiche su nuovi casi clinici e le visualizzazioni grafiche hanno consentito di rappresentare in modo intuitivo le principali relazioni tra le variabili, evidenziando in particolare l’effetto positivo della durata della gestazione sul peso previsto alla nascita. Nel complesso, il progetto mostra come l’utilizzo di strumenti statistici e modelli predittivi possa fornire un valido supporto nell’ambito della salute neonatale, contribuendo a migliorare la pianificazione clinica, l’identificazione precoce dei fattori di rischio e l’ottimizzazione delle risorse ospedaliere.