Nella prima fase, esploreremo le variabili attraverso un’analisi descrittiva per comprenderne la distribuzione e identificare eventuali outlier o anomalie.
Inoltre si saggeranno le seguenti ipotesi con i test adatti:
in alcuni ospedali si fanno più parti cesarei
La media del peso e della lunghezza di questo campione di neonati sono significativamente uguali a quelle della popolazione
Le misure antropometriche sono significativamente diverse tra i due sessi.
# Introduzione
# Questo documento descrive il processo di creazione di un modello statistico per prevedere il peso dei neonati alla nascita, utilizzando dati raccolti da tre ospedali.
## Caricamento dei Dati
# Caricamento delle librerie necessarie
#install.packages("car")
library(ggplot2)
## Warning: il pacchetto 'ggplot2' è stato creato con R versione 4.4.2
library(car)
## Warning: il pacchetto 'car' è stato creato con R versione 4.4.2
## Caricamento del pacchetto richiesto: carData
## Warning: il pacchetto 'carData' è stato creato con R versione 4.4.2
library(dplyr)
## Warning: il pacchetto 'dplyr' è stato creato con R versione 4.4.2
##
## Caricamento pacchetto: 'dplyr'
## Il seguente oggetto è mascherato da 'package:car':
##
## recode
## I seguenti oggetti sono mascherati da 'package:stats':
##
## filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
##
## intersect, setdiff, setequal, union
# Caricamento dei dati
data <- read.csv("neonati.csv")
# Esplora il dataset
str(data)
## '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" ...
summary(data)
## Anni.madre N.gravidanze Fumatrici Gestazione
## Min. : 0.00 Min. : 0.0000 Min. :0.0000 Min. :25.00
## 1st Qu.:25.00 1st Qu.: 0.0000 1st Qu.:0.0000 1st Qu.:38.00
## Median :28.00 Median : 1.0000 Median :0.0000 Median :39.00
## Mean :28.16 Mean : 0.9812 Mean :0.0416 Mean :38.98
## 3rd Qu.:32.00 3rd Qu.: 1.0000 3rd Qu.:0.0000 3rd Qu.:40.00
## Max. :46.00 Max. :12.0000 Max. :1.0000 Max. :43.00
## Peso Lunghezza Cranio Tipo.parto
## Min. : 830 Min. :310.0 Min. :235 Length:2500
## 1st Qu.:2990 1st Qu.:480.0 1st Qu.:330 Class :character
## Median :3300 Median :500.0 Median :340 Mode :character
## Mean :3284 Mean :494.7 Mean :340
## 3rd Qu.:3620 3rd Qu.:510.0 3rd Qu.:350
## Max. :4930 Max. :565.0 Max. :390
## Ospedale Sesso
## Length:2500 Length:2500
## Class :character Class :character
## Mode :character Mode :character
##
##
##
Il summary() fornisce statistiche descrittive di base per ciascuna colonna del dataset data. Queste statistiche includono:
Min. (Valore minimo) 1st Qu. (Primo quartile, 25° percentile) Median (Mediana, 50° percentile) Mean (Media) 3rd Qu. (Terzo quartile, 75° percentile) Max. (Valore massimo) Length, Class, Mode per le variabili non numeriche.
Anni.madre (Età della Madre): Min.: 0.00: questo è un dato anomalo e richiede indagine. Un’età di 0 anni è impossibile. 1st Qu.: 25.00, Median: 28.00, Mean: 28.16: la maggior parte delle madri ha un’età compresa tra i 25 e i 32 anni. Max.: 46.00: l’età massima è di 46 anni, un dato plausibile.
N.gravidanze (Numero di Gravidanze): Min.: 0.0000: anche questo è un dato anomalo, forse indica delle madri primipare, o un errore di inserimento. Mean: 0.9812: il numero medio di gravidanze è quasi 1, il che suggerisce che molte madri sono alla prima o seconda gravidanza. Max.: 12.0000: un massimo di 12 gravidanze è possibile, ma indica un valore estremo.
Fumatrici (Madri Fumatrici): Min.: 0.0000, 1st Qu.: 0.0000, Median: 0.0000, 3rd Qu.: 0.0000: la maggior parte delle madri non fuma. Mean: 0.0416: solo circa il 4.16% delle madri fuma. Max.: 1.0000: 1 indica che la madre è fumatrice. Osservazione: La variabile è binaria (0 o 1).
Gestazione (Settimane di Gestazione): Min.: 25.00: una gestazione di 25 settimane è un parto prematuro e richiede attenzione. Mean: 38.98, Median: 39.00: la durata media della gestazione è di circa 39 settimane, un dato normale. Max.: 43.00: una gestazione di 43 settimane è post-termine, ma possibile. Osservazione: la distribuzione sembra abbastanza normale, ma il valore minimo indica parti fortemente prematuri.
Peso (Peso del Neonato in Grammi): Min.: 830: un peso di 830 grammi indica un neonato con basso peso alla nascita. Mean: 3284, Median: 3300: il peso medio è di circa 3300 grammi, un dato tipico. Max.: 4930: un peso di 4930 grammi indica un neonato con peso elevato. Osservazione: la distribuzione sembra ragionevole, con alcuni valori estremi.
Lunghezza (Lunghezza del Neonato in Millimetri): Min.: 310.0: una lunghezza di 310 mm è un valore basso. Mean: 494.7, Median: 500.0: la lunghezza media è di circa 495 mm, un dato normale. Max.: 565.0: una lunghezza di 565 mm è un valore elevato. Osservazione: la distribuzione sembra ragionevole, con alcuni valori estremi.
Cranio (Circonferenza Cranica in Millimetri): Min.: 235: una circonferenza cranica di 235 mm è bassa. Mean: 340, Median: 340: la circonferenza cranica media è di circa 340 mm, un dato normale. Max.: 390: una circonferenza cranica di 390 mm è alta. Osservazione: la distribuzione sembra ragionevole, con alcuni valori estremi.
Tipo.parto (Tipo di Parto): Length: 2500, Class: character, Mode: character: indica che è una variabile categorica.
Ospedale (Ospedale): Length: 2500, Class: character, Mode: character: indica che è una variabile categorica.
Sesso (Sesso del Neonato): Length: 2500, Class: character, Mode: character: indica che è una variabile categorica.
# Controllo anomalie nei dati: cerchiamo valori anomali per l'età della madre
data %>% filter(Anni.madre <= 1) # Identifica madri con età irrealisticamente bassa
## Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio Tipo.parto
## 1 1 1 0 41 3250 490 350 Nat
## 2 0 0 0 39 3060 490 330 Nat
## Ospedale Sesso
## 1 osp2 F
## 2 osp3 M
summary(data) # Riassunto statistico per evidenziare altre anomalie
## Anni.madre N.gravidanze Fumatrici Gestazione
## Min. : 0.00 Min. : 0.0000 Min. :0.0000 Min. :25.00
## 1st Qu.:25.00 1st Qu.: 0.0000 1st Qu.:0.0000 1st Qu.:38.00
## Median :28.00 Median : 1.0000 Median :0.0000 Median :39.00
## Mean :28.16 Mean : 0.9812 Mean :0.0416 Mean :38.98
## 3rd Qu.:32.00 3rd Qu.: 1.0000 3rd Qu.:0.0000 3rd Qu.:40.00
## Max. :46.00 Max. :12.0000 Max. :1.0000 Max. :43.00
## Peso Lunghezza Cranio Tipo.parto
## Min. : 830 Min. :310.0 Min. :235 Length:2500
## 1st Qu.:2990 1st Qu.:480.0 1st Qu.:330 Class :character
## Median :3300 Median :500.0 Median :340 Mode :character
## Mean :3284 Mean :494.7 Mean :340
## 3rd Qu.:3620 3rd Qu.:510.0 3rd Qu.:350
## Max. :4930 Max. :565.0 Max. :390
## Ospedale Sesso
## Length:2500 Length:2500
## Class :character Class :character
## Mode :character Mode :character
##
##
##
Dall’analisi dei dati emergono alcune anomalie che meritano attenzione. In particolare, sono stati rilevati due casi in cui l’età della madre risulta pari o inferiore a 1 anno, il che non è realistico. Questi valori potrebbero derivare da errori di inserimento o da dati mancanti codificati in modo errato.
L’analisi descrittiva dei dati evidenzia inoltre una distribuzione plausibile delle variabili principali, con età media delle madri intorno ai 28 anni e un massimo di 46 anni. Il numero di gravidanze varia da 0 a 12, suggerendo la possibile presenza di valori estremi che potrebbero influenzare l’analisi.
Per quanto riguarda le misure neonatali, il peso alla nascita varia tra 830 g e 4930 g, la lunghezza tra 310 mm e 565 mm, e la circonferenza cranica tra 235 mm e 390 mm. Sebbene questi intervalli siano in gran parte compatibili con la letteratura, alcuni valori particolarmente bassi o alti potrebbero rappresentare outlier e richiedere un ulteriore controllo.
# Distribuzione delle variabili (solo numeriche)
par(mfrow = c(2, 2))
for (col in names(data)[-which(names(data) %in% c("Peso", "Lunghezza", "Sesso", "Gestazione", "Ospedale"))]) {
if (is.numeric(data[[col]])) {
hist(data[[col]], main = paste("Distribuzione di", col), xlab = col, col = "steelblue", border = "black")
} else {
cat("La colonna", col, "non è numerica e non verrà visualizzata.\n")
}
}
## La colonna Tipo.parto non è numerica e non verrà visualizzata.
# Outlier nei dati
boxplot(data$Peso, main = "Boxplot del Peso Neonatale", col = "orange", border = "brown")
L’analisi descrittiva fornisce una panoramica delle variabili nel dataset. L’istogramma mostra la distribuzione del peso neonatale, permettendo di identificare eventuali asimmetrie o anomalie.
# Test delle ipotesi per i parti cesarei per ospedali
# Creazione della tabella di contingenza per il tipo di parto e l'ospedale
table_parto_ospedale <- table(data[["Tipo.parto"]], data[["Ospedale"]])
# Visualizzazione della tabella di contingenza
print(table_parto_ospedale)
##
## osp1 osp2 osp3
## Ces 242 254 232
## Nat 574 595 603
# Test del chi-quadrato per la proporzione di parti cesarei tra gli ospedali
chi_squared_test <- chisq.test(table_parto_ospedale)
chi_squared_test
##
## Pearson's Chi-squared test
##
## data: table_parto_ospedale
## X-squared = 1.0972, df = 2, p-value = 0.5778
# Questo test verifica se ci sono differenze significative nella proporzione di parti cesarei tra i diversi ospedali. Un risultato significativo suggerirebbe che le pratiche di parto variano tra le strutture.
Il valore del chi-quadro calcolato è 1.0972. Questo valore rappresenta la misura della discrepanza tra le frequenze osservate (i dati reali) e le frequenze attese (ciò che ci si aspetterebbe se non ci fosse alcuna differenza tra i gruppi).
Il p-value è 0.5778. Questo valore indica la probabilità di osservare una statistica del chi-quadro così estrema (o più) se l’ipotesi nulla fosse vera (cioè, se non ci fosse alcuna differenza nelle proporzioni di parti cesarei tra gli ospedali).
Poiché il p-value (0.5778) è molto superiore al livello di significatività comune (ad esempio, 0.05 o 0.01), non possiamo rifiutare l’ipotesi nulla. Questo suggerisce che non ci sono differenze significative nelle proporzioni di parti cesarei tra i tre ospedali.
I risultati indicano che le pratiche di parto (cesareo vs naturale) non variano in modo significativo tra gli ospedali analizzati. In altre parole, non ci sono prove sufficienti per affermare che uno degli ospedali abbia una proporzione di parti cesarei significativamente diversa rispetto agli altri.
# Media del peso e della lunghezza
# Test statistici con valori di riferimento da letteratura
peso_medio_popolazione <- 3300 # Valore medio di peso neonatale da letteratura
t.test(data$Peso, mu = peso_medio_popolazione) # Confronto media campione con media di riferimento
##
## One Sample t-test
##
## data: data$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
lunghezza_media_popolazione <- 50 # Valore medio di lunghezza neonatale
t.test(data$Lunghezza, mu = lunghezza_media_popolazione) # Test t per la lunghezza
##
## One Sample t-test
##
## data: data$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.692Sample t-test per il Peso
t-value: -1.516 indica che la media del campione (3284.081) è inferiore alla media ipotizzata (3300). Un valore negativo suggerisce che il campione è sotto la media attesa.
p-value: 0.1296 questo valore è superiore al livello di significatività comune di 0.05, il che significa che non ci sono prove sufficienti per rifiutare l’ipotesi. nulla. Non possiamo affermare che la media del peso sia significativamente diversa da 3300 grammi. Intervallo di confidenza al 95%: [3263.490, 3304.672] Questo intervallo indica che siamo fiduciosi al 95% che la vera media della popolazione si trovi all’interno di questo range. Poiché l’intervallo include 3300, supporta ulteriormente l’idea che non ci sia una differenza significativa.
Sample t-test per la Lunghezza
t-value: 844.82 un valore molto alto indica che la media del campione (494.692) è significativamente superiore alla media ipotizzata (50). Questo suggerisce una differenza sostanziale tra il campione e l’ipotesi.
p-value: < 2.2e-16 questo valore è estremamente basso, ben al di sotto di 0.05, suggerendo che c’è una forte evidenza per rifiutare l’ipotesi nulla. La media della lunghezza è significativamente diversa da 50.
Intervallo di confidenza al 95%: [493.6598, 495.7242] questo intervallo indica che siamo fiduciosi al 95% che la vera media della lunghezza della popolazione si trovi all’interno di questo range. Poiché l’intervallo non include 50, supporta l’idea che ci sia una differenza significativa.
# Differenze nelle misure antropometriche tra i sessi
# Confronto tra i sessi per peso e lunghezza
# T-test per il Peso tra i sessi
t_test_peso <- t.test(Peso ~ Sesso, data = data)
# T-test per la Lunghezza tra i sessi
t_test_lunghezza <- t.test(Lunghezza ~ Sesso, data = data)
# Stampa dei risultati
cat("Risultati del T-test per il Peso:\n")
## Risultati del T-test per il Peso:
print(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
cat("Risultati del T-test per la Lunghezza:\n")
## Risultati del T-test per la Lunghezza:
print(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
Peso:
t = -12.106: questo valore negativo indica che la media del peso delle femmine è inferiore a quella dei maschi. La grandezza della statistica t suggerisce una differenza molto significativa.
p-value < 2.2e-16: un p-value così basso indica che c’è una probabilità estremamente bassa di osservare una differenza così grande tra le medie se l’ipotesi nulla fosse vera. Questo suggerisce che la differenza è statisticamente significativa.
Intervallo di confidenza al 95%, -287.1051 a -207.0615: questo intervallo indica che siamo fiduciosi al 95% che la vera differenza di peso tra le femmine e i maschi si trovi all’interno di questo intervallo. Poiché l’intervallo è completamente negativo, conferma che le femmine pesano in media meno dei maschi.
I risultati indicano che i maschi hanno un peso medio significativamente maggiore rispetto alle femmine. La differenza media di peso è compresa tra 207.0615 e 287.1051 grammi, con i maschi che pesano di più.
Lunghezza:
t = -9.582: anche in questo caso, il valore negativo indica che la media della lunghezza delle femmine è inferiore a quella dei maschi.
p-value < 2.2e-16: un p-value molto basso, simile a quello del test sul peso, indica che la differenza è statisticamente significativa.
Intervallo di confidenza al 95%, -11.929470 a -7.876273: questo intervallo indica che siamo fiduciosi al 95% che la vera differenza di lunghezza tra le femmine e i maschi si trovi all’interno di questo intervallo. Poiché l’intervallo è completamente negativo, conferma che le femmine sono più corte in media rispetto ai maschi.
I risultati indicano che i maschi hanno una lunghezza media significativamente maggiore rispetto alle femmine. La differenza media di lunghezza è compresa tra 7.876273 e 11.929470 centimetri, con i maschi che sono più lunghi.
I risultati dei t-test mostrano che:
I maschi pesano in media significativamente di più delle femmine (differenza media di peso tra 207.0615 e 287.1051 grammi).
I maschi sono significativamente più lunghi delle femmine (differenza media di lunghezza tra 7.876273 e 11.929470 centimetri).
Questi risultati suggeriscono che ci sono differenze significative nel peso e nella lunghezza dei neonati in base al sesso, con i maschi che tendono ad avere valori medi più elevati in entrambi i casi.
Verrà sviluppato un modello di regressione lineare multipla che includa tutte le variabili rilevanti. In questo modo, potremo quantificare l’impatto di ciascuna variabile indipendente sul peso del neonato ed eventuali interazioni. Ad esempio, ci aspettiamo che una maggiore durata della gestazione aumenterebbe in media il peso del neonato.
# Matrice di correlazione
correlation_matrix <- cor(data[, sapply(data, is.numeric)], use = "complete.obs")
print(correlation_matrix)
## Anni.madre N.gravidanze Fumatrici Gestazione Peso
## Anni.madre 1.000000000 0.38063184 0.006057852 -0.13566714 -0.02247017
## N.gravidanze 0.380631844 1.00000000 0.046869466 -0.10149194 0.00240730
## Fumatrici 0.006057852 0.04686947 1.000000000 0.03220907 -0.01894534
## Gestazione -0.135667143 -0.10149194 0.032209066 1.00000000 0.59176872
## Peso -0.022470167 0.00240730 -0.018945344 0.59176872 1.00000000
## Lunghezza -0.063491571 -0.06040371 -0.020781411 0.61892045 0.79603676
## Cranio 0.016076703 0.03900707 -0.008665549 0.46082894 0.70480151
## Lunghezza Cranio
## Anni.madre -0.06349157 0.016076703
## N.gravidanze -0.06040371 0.039007074
## Fumatrici -0.02078141 -0.008665549
## Gestazione 0.61892045 0.460828941
## Peso 0.79603676 0.704801507
## Lunghezza 1.00000000 0.603340974
## Cranio 0.60334097 1.000000000
# Visualizzazione della matrice di correlazione
#install.packages("corrplot")
library(corrplot)
## Warning: il pacchetto 'corrplot' è stato creato con R versione 4.4.3
## corrplot 0.95 loaded
corrplot(correlation_matrix, method = "circle")
# Grafici di dispersione (scatterplot) per le variabili più correlate con Peso
ggplot(data, aes(x = Gestazione, y = Peso)) + geom_point() + theme_minimal()
ggplot(data, aes(x = Lunghezza, y = Peso)) + geom_point() + theme_minimal()
ggplot(data, aes(x = Cranio, y = Peso)) + geom_point() + theme_minimal()
# Boxplot per variabili categoriche
ggplot(data, aes(x = Sesso, y = Peso)) + geom_boxplot() + theme_minimal()
ggplot(data, aes(x = Tipo.parto, y = Peso)) + geom_boxplot() + theme_minimal()
C’è una correlazione positiva moderata: all’aumentare dell’età della madre, aumenta il numero di gravidanze. Questo è intuitivo: più una donna è grande, più gravidanze potrebbe aver avuto.
La durata della gestazione ha una correlazione positiva moderata-forte con il peso, la lunghezza e la circonferenza cranica del neonato.
Questo è sensato: più a lungo dura la gravidanza, maggiore è lo sviluppo del bambino.
Peso-Lunghezza (0.80) → correlazione molto forte: bambini più pesanti tendono ad essere più lunghi.
Peso-Cranio (0.70) → correlazione forte: più peso, maggiore la circonferenza cranica.
Lunghezza-Cranio (0.60) → anche qui una buona correlazione: bambini più lunghi tendono ad avere una circonferenza cranica maggiore.
Il peso, la lunghezza e la circonferenza cranica sembrano essere fortemente correlate tra loro (cerchi blu scuri). Ha senso perché più un neonato pesa, più è probabile che sia lungo e abbia una testa più grande.
La variabile “Gestazione” sembra avere una correlazione negativa con alcune altre variabili, suggerendo che il tempo di gestazione potrebbe influenzare in modo diverso alcune misure.
La variabile “Fumatrici” sembra essere meno correlata con le altre variabili legate alle misure del neonato, il che potrebbe indicare che il fumo ha un impatto meno evidente nei dati (o che servirebbe un’analisi più approfondita).
Anni.madre e Numero di gravidanze hanno una correlazione positiva, il che è intuitivo: più una madre è grande, più è probabile che abbia avuto più gravidanze.
Primo grafico: Peso vs Durata della Gestazione mostra una chiara tendenza positiva: più lunga è la gestazione, maggiore è il peso alla nascita. Per gestazioni molto brevi (sotto le 30 settimane), il peso è generalmente molto basso (sotto i 2000g), il che indica possibili casi di prematurità. Per gestazioni sopra le 37 settimane, il peso si distribuisce tra i 2500 e i 4000g.
Secondo grafico: Peso vs Lunghezza del neonato anche qui si vede una forte relazione positiva: bambini più lunghi tendono a pesare di più. C’è una distribuzione più uniforme lungo tutta la scala, con una chiara correlazione lineare.
Terzo grafico: Peso vs Cranio la correlazione positiva tra circonferenza cranica e peso potrebbe essere dovuta a diversi fattori, come la crescita generale del neonato, la genetica o la nutrizione. Questo grafico potrebbe essere utile per identificare neonati che si discostano dalla norma, ad esempio neonati con circonferenze craniche o pesi insolitamente bassi o alti.
La mediana del peso per i neonati nati da parto cesareo (“Ces”) è leggermente superiore rispetto a quella dei neonati nati da parto naturale (“Nat”). Questo suggerisce che, in media, i neonati nati da parto cesareo tendono ad essere leggermente più pesanti. La scatola rappresenta il 50% centrale dei dati (dal 25° al 75° percentile). Le scatole per entrambi i gruppi (cesareo e naturale) si sovrappongono in modo significativo, il che indica che c’è una notevole variabilità nel peso all’interno di ciascun gruppo e che le distribuzioni si sovrappongono. I baffi mostrano la variabilità dei dati al di fuori del 50% centrale. I baffi per il gruppo “Ces” sono leggermente più corti rispetto a quelli del gruppo “Nat”, suggerendo una minore variabilità nel peso dei neonati nati da parto cesareo. Entrambi i gruppi mostrano la presenza di outlier, ovvero neonati con pesi che si discostano notevolmente dalla distribuzione tipica. Il gruppo “Nat” ha un numero maggiore di outlier, in particolare nella parte inferiore della distribuzione (pesi molto bassi). Sebbene ci sia una leggera differenza nella mediana del peso tra i due gruppi, la sovrapposizione delle scatole e la presenza di outlier suggeriscono che il tipo di parto non è un forte predittore del peso del neonato. Altri fattori, come la durata della gestazione, la genetica o la salute della madre, potrebbero avere un impatto maggiore sul peso del neonato. La maggiore variabilità nel gruppo “Nat” potrebbe essere dovuta a una maggiore eterogeneità nei parti naturali rispetto ai parti cesarei, che sono spesso pianificati e controllati.
Le variabili Tipo.parto e Ospedale non hanno molto senso in un contesto predittivo per il peso del neonato, per i seguenti motivi:
Tipo.parto: il tipo di parto (naturale o cesareo) è una decisione medica che dipende da molteplici fattori (ad esempio, condizioni della madre o del feto) e non è una causa diretta del peso del neonato. Inoltre, è difficile immaginare come questa informazione possa essere utilizzata per fare previsioni su nuovi dati.
Ospedale: l’ospedale in cui avviene il parto è una variabile contestuale che non ha un legame causale diretto con il peso del neonato. A meno che non ci siano prove che specifici ospedali abbiano pratiche che influenzano il peso (ad esempio, politiche nutrizionali per le madri), questa variabile non è rilevante per la previsione.
# Esclusione di variabili non rilevanti
#data <- data %>% select(-Tipo.parto, -Ospedale)
# Modello iniziale
mod1 <- lm(Peso ~ Gestazione + Lunghezza + Cranio + Sesso, data = data)
summary(mod1)
##
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza + Cranio + Sesso,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1138.2 -184.3 -17.6 163.3 2627.3
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6651.1188 135.5172 -49.080 < 2e-16 ***
## Gestazione 31.2737 3.7856 8.261 2.31e-16 ***
## Lunghezza 10.2054 0.3007 33.939 < 2e-16 ***
## Cranio 10.6704 0.4245 25.139 < 2e-16 ***
## SessoM 79.1049 11.2117 7.056 2.22e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 275 on 2495 degrees of freedom
## Multiple R-squared: 0.7261, Adjusted R-squared: 0.7257
## F-statistic: 1654 on 4 and 2495 DF, p-value: < 2.2e-16
# Creazione di un altro modello di regressione lineare multipla, tolto nr gravidanze, fumatore, tipo parto, cranio e ospedale
mod2 <- lm(Peso ~ Anni.madre + Gestazione + Lunghezza + Sesso, data = data)
# Sommario del modello
summary(mod2)
##
## Call:
## lm(formula = Peso ~ Anni.madre + Gestazione + Lunghezza + Sesso,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1193.3 -193.1 -20.4 188.0 3586.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5402.822 146.189 -36.958 < 2e-16 ***
## Anni.madre 4.215 1.177 3.583 0.000346 ***
## Gestazione 46.349 4.218 10.987 < 2e-16 ***
## Lunghezza 13.578 0.300 45.258 < 2e-16 ***
## SessoM 89.189 12.513 7.128 1.33e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 307.1 on 2495 degrees of freedom
## Multiple R-squared: 0.6585, Adjusted R-squared: 0.6579
## F-statistic: 1203 on 4 and 2495 DF, p-value: < 2.2e-16
# Aggiunta di interazioni
mod3 <- lm(Peso ~ Gestazione * Sesso + Lunghezza + Cranio, data = data)
summary(mod3)
##
## Call:
## lm(formula = Peso ~ Gestazione * Sesso + Lunghezza + Cranio,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1133.41 -183.10 -17.12 162.35 2625.80
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6539.1643 166.8151 -39.200 < 2e-16 ***
## Gestazione 28.3239 4.5716 6.196 6.77e-10 ***
## SessoM -191.1270 235.0952 -0.813 0.416
## Lunghezza 10.2095 0.3007 33.953 < 2e-16 ***
## Cranio 10.6713 0.4244 25.143 < 2e-16 ***
## Gestazione:SessoM 6.9246 6.0174 1.151 0.250
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 275 on 2494 degrees of freedom
## Multiple R-squared: 0.7262, Adjusted R-squared: 0.7257
## F-statistic: 1323 on 5 and 2494 DF, p-value: < 2.2e-16
Modello 1: Peso ~ Gestazione + Lunghezza + Cranio + Sesso R² = 0.7261 (72.6% della variabilità spiegata) tutte le variabili sono altamente significative (𝑝<0.001) Lunghezza ha il coefficiente più alto (10.20), seguita da Cranio (10.67), Gestazione (31.27) e Sesso (79.10 per maschi). Modello solido, con residui ben distribuiti.
Modello 2 (con Anni.madre, senza Cranio): Peso ~ Anni.madre + Gestazione + Lunghezza + Sesso R² = 0.6585 meno spiegazione della variabilità rispetto ai primi due modelli. Gestazione (46.35) e Lunghezza (13.57) hanno coefficienti più alti rispetto al primo modello. Anni.madre è significativo (p=0.0003), ma ha un effetto molto piccolo (4.215). R² più basso indica che togliere Cranio riduce il potere predittivo del modello.
Modello 3 (con interazione SessoGestazione): Peso ~ Gestazione Sesso + Lunghezza + Cranio R² = 0.7262, quasi uguale al Modello 1. L’interazione Gestazione*SessoM NON è significativa (𝑝=0.25), quindi aggiungerla non migliora la spiegazione del peso del neonato. SessoM da solo non è significativo (p=0.416), quindi il suo effetto potrebbe dipendere da altre variabili. Non aggiunge molto valore rispetto al primo modello.
# Modello con interazione Lunghezza * Gestazione
mod_inter1 <- lm(Peso ~ Gestazione * Lunghezza + Cranio, data = data)
summary(mod_inter1)
##
## Call:
## lm(formula = Peso ~ Gestazione * Lunghezza + Cranio, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1137.51 -179.78 -7.61 164.56 2638.57
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.559e+03 9.265e+02 -1.682 0.0926 .
## Gestazione -1.086e+02 2.493e+01 -4.355 1.38e-05 ***
## Lunghezza -1.061e+00 2.040e+00 -0.520 0.6030
## Cranio 1.103e+01 4.277e-01 25.791 < 2e-16 ***
## Gestazione:Lunghezza 3.029e-01 5.321e-02 5.693 1.40e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 275.9 on 2495 degrees of freedom
## Multiple R-squared: 0.7242, Adjusted R-squared: 0.7238
## F-statistic: 1638 on 4 and 2495 DF, p-value: < 2.2e-16
# Modello con interazione Anni.madre * Gestazione
mod_inter2 <- lm(Peso ~ Gestazione * Anni.madre + Lunghezza , data = data)
summary(mod_inter2)
##
## Call:
## lm(formula = Peso ~ Gestazione * Anni.madre + Lunghezza, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1145.1 -201.6 -15.6 192.9 3592.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3942.0884 700.2302 -5.630 2.01e-08 ***
## Gestazione 6.5083 17.9426 0.363 0.7168
## Anni.madre -50.2474 23.5193 -2.136 0.0327 *
## Lunghezza 13.8341 0.3003 46.068 < 2e-16 ***
## Gestazione:Anni.madre 1.4081 0.6050 2.327 0.0200 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 309.9 on 2495 degrees of freedom
## Multiple R-squared: 0.6523, Adjusted R-squared: 0.6517
## F-statistic: 1170 on 4 and 2495 DF, p-value: < 2.2e-16
Modello con interazione Gestazione * Lunghezza
Interpretazione dei coefficienti Intercept (-1559.0): valore atteso del peso quando tutte le variabili predittive sono pari a zero (non ha un significato pratico in questo contesto).
Gestazione (-108.6, p < 0.001): in assenza di interazione, un aumento della gestazione ridurrebbe il peso del neonato, ma l’interazione modifica questa relazione.
Lunghezza (-1.06, p = 0.603): non è statisticamente significativa, quindi la lunghezza da sola non ha un effetto significativo sul peso del neonato.
Cranio (11.03, p < 0.001): l’aumento della circonferenza cranica è associato a un aumento significativo del peso.
Interazione Gestazione: Lunghezza (0.3029, p < 0.001): questa interazione è significativa, suggerendo che l’effetto della durata della gestazione sul peso dipende dalla lunghezza del neonato.
La relazione tra il peso e la lunghezza del neonato dipende dalla durata della gestazione. Maggiore è la durata della gestazione, maggiore è l’impatto della lunghezza del neonato sul peso. Questo suggerisce che i bambini nati prematuri possono essere più piccoli, ma la loro lunghezza influisce meno sul peso rispetto ai neonati a termine. Il cranio è una delle variabili più importanti nel determinare il peso. Qualità del Modello R² = 0.7242 (72.4%): il modello spiega il 72.4% della variabilità del peso del neonato.
Modello con interazione Gestazione * Anni.madre
Interpretazione dei coefficienti Intercept (-3942.08, p < 0.001): valore atteso del peso quando tutte le altre variabili sono zero.
Gestazione (6.51, p = 0.716): da sola, la durata della gestazione non ha un effetto significativo sul peso del neonato.
Anni.madre (-50.25, p = 0.0327): maggiore è l’età della madre, leggermente minore è il peso del neonato. Questo effetto è significativo ma piccolo.
Lunghezza (13.83, p < 0.001): la lunghezza del neonato ha un forte impatto positivo sul peso. Interazione Gestazione: Anni.madre (1.41, p = 0.02): l’effetto della gestazione sul peso del neonato dipende dall’età della madre. L’effetto della durata della gestazione sul peso cambia in base all’età della madre.
Nei bambini di madri più giovani, la durata della gestazione ha un impatto minore sul peso, mentre nei bambini di madri più anziane l’aumento della gestazione sembra essere associato a un maggiore peso alla nascita. L’età materna ha un effetto negativo moderato, il che significa che, a parità di condizioni, neonati di madri più anziane tendono a pesare leggermente di meno.
R² = 0.6523 (65.2%): questo modello spiega meno variabilità rispetto al primo modello, quindi è leggermente peggiore.
# Modello con effetti quadratici di Lunghezza e Gestazione
mod_quad <- lm(Peso ~ Gestazione * Lunghezza + I(Gestazione^2) + I(Lunghezza^2) + Cranio, data = data)
summary(mod_quad)
##
## Call:
## lm(formula = Peso ~ Gestazione * Lunghezza + I(Gestazione^2) +
## I(Lunghezza^2) + Cranio, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1161.08 -178.65 -6.89 162.68 1269.58
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.235e+03 9.270e+02 -2.411 0.0160 *
## Gestazione 2.846e+02 6.512e+01 4.371 1.29e-05 ***
## Lunghezza -2.892e+01 4.492e+00 -6.438 1.45e-10 ***
## I(Gestazione^2) -1.365e+00 1.540e+00 -0.886 0.3757
## I(Lunghezza^2) 5.208e-02 6.465e-03 8.056 1.21e-15 ***
## Cranio 1.066e+01 4.226e-01 25.236 < 2e-16 ***
## Gestazione:Lunghezza -2.899e-01 1.731e-01 -1.675 0.0941 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 271.3 on 2493 degrees of freedom
## Multiple R-squared: 0.7336, Adjusted R-squared: 0.7329
## F-statistic: 1144 on 6 and 2493 DF, p-value: < 2.2e-16
Il modello analizzato cerca di spiegare il peso alla nascita in funzione della durata della gestazione, della lunghezza del bambino e della circonferenza cranica, includendo anche effetti quadratici per gestazione e lunghezza. L’obiettivo è verificare se la relazione tra queste variabili e il peso è lineare o se invece segue un andamento curvilineo.
Dai risultati emerge che la durata della gestazione ha un effetto positivo e significativo sul peso alla nascita, confermando che più lunga è la gravidanza, maggiore sarà il peso del neonato. Tuttavia, il termine quadratico della gestazione non è significativo, suggerendo che l’effetto della durata della gravidanza sul peso è sostanzialmente lineare e non presenta una curvatura evidente.
La lunghezza del bambino, invece, mostra un comportamento più complesso. Il coefficiente lineare della lunghezza risulta negativo, ma questo deve essere interpretato insieme al termine quadratico, che è invece altamente significativo. Questo indica che l’effetto della lunghezza sul peso non è semplicemente proporzionale, ma segue una curva: a valori più bassi di lunghezza, l’aumento potrebbe non avere un impatto così forte sul peso, mentre a valori più elevati l’influenza diventa più marcata.
La circonferenza cranica si conferma come un forte predittore del peso alla nascita, con un effetto positivo altamente significativo. Questo significa che neonati con una maggiore circonferenza cranica tendono ad avere anche un peso più elevato.
L’interazione tra lunghezza e gestazione non è risultata statisticamente significativa, suggerendo che la combinazione di queste due variabili non produce un effetto congiunto rilevante sul peso del bambino. In altre parole, la relazione tra gestazione e peso non cambia in modo sostanziale a seconda della lunghezza del neonato.
Dal punto di vista della qualità del modello, la percentuale di variabilità del peso spiegata dai fattori considerati è circa il 73%, un valore piuttosto elevato che suggerisce che il modello fornisce una buona rappresentazione della realtà. Inoltre, l’errore residuo è leggermente inferiore rispetto ai modelli precedenti, indicando un miglioramento nella precisione delle stime.
Per tanto il modello evidenzia che la durata della gravidanza e la circonferenza cranica sono fattori importanti per determinare il peso alla nascita, mentre la lunghezza ha un effetto più complesso che segue un andamento curvilineo. L’interazione tra gestazione e lunghezza, invece, non sembra giocare un ruolo rilevante.
Attraverso tecniche di selezione del modello, come la minimizzazione del criterio di informazione di Akaike (AIC) o di Bayes (BIC), selezioneremo il modello più parsimonioso, eliminando le variabili non significative. Verranno considerati anche modelli con interazioni tra le variabili e possibili effetti non lineari.
#install.packages("ggplot2")
library(ggplot2)
# Calcolo AIC e BIC per ciascun modello
aic_values <- c(
AIC(mod1),
AIC(mod2),
AIC(mod3),
AIC(mod_inter1),
AIC(mod_inter2)
)
bic_values <- c(
BIC(mod1),
BIC(mod2),
BIC(mod3),
BIC(mod_inter1),
BIC(mod_inter2)
)
# Creazione di un dataframe per visualizzare i risultati
modelli <- c("mod1", "mod2", "mod3", "mod_inter1", "mod_inter2")
risultati <- data.frame(Modello = modelli, AIC = aic_values, BIC = bic_values)
predizioni <- predict(mod1, newdata = data)
# Stampa dei risultati
print(risultati)
## Modello AIC BIC
## 1 mod1 35185.60 35220.54
## 2 mod2 35737.21 35772.15
## 3 mod3 35186.27 35227.04
## 4 mod_inter1 35202.73 35237.67
## 5 mod_inter2 35782.18 35817.13
# Selezione del modello con il valore AIC più basso
modello_migliore_aic <- risultati[which.min(risultati$AIC), ]
cat("Il modello con il valore AIC più basso è:", modello_migliore_aic$Modello, "con AIC =", modello_migliore_aic$AIC, "\n")
## Il modello con il valore AIC più basso è: mod1 con AIC = 35185.6
# Selezione del modello con il valore BIC più basso
modello_migliore_bic <- risultati[which.min(risultati$BIC), ]
cat("Il modello con il valore BIC più basso è:", modello_migliore_bic$Modello, "con BIC =", modello_migliore_bic$BIC, "\n")
## Il modello con il valore BIC più basso è: mod1 con BIC = 35220.54
vif(mod1)
## Gestazione Lunghezza Cranio Sesso
## 1.653502 2.069517 1.606131 1.038813
n <- nrow(data)
stepwise.mod <- MASS::stepAIC(mod1,
direction = "both",
k=log(n))
## Start: AIC=28118.03
## Peso ~ Gestazione + Lunghezza + Cranio + Sesso
##
## Df Sum of Sq RSS AIC
## <none> 188688687 28118
## - Sesso 1 3764780 192453468 28160
## - Gestazione 1 5161426 193850113 28178
## - Cranio 1 47793937 236482624 28675
## - Lunghezza 1 87113576 275802264 29059
BIC(mod1, stepwise.mod)
## df BIC
## mod1 6 35220.54
## stepwise.mod 6 35220.54
Il modello migliore è mod1, quello con la seguente formula:
mod1 <- lm(Peso ~ Gestazione + Lunghezza + Cranio + Sesso, data = data)
Non solo ha il miglior equilibrio tra bontà dell’adattamento e semplicità del modello, ma risulta anche il più parsimonioso, senza interazioni o termini quadrati che non migliorano significativamente il modello. Il modello di regressione lineare selezionato si è rivelato il migliore tra quelli testati, in quanto combina semplicità, efficacia e chiarezza interpretativa. Le variabili considerate (durata della gestazione, lunghezza alla nascita, circonferenza cranica e sesso del neonato) risultano tutte significativamente associate al peso alla nascita, confermando l’importanza di questi fattori nel determinare la crescita fetale. Nello specifico, l’analisi mostra che un prolungamento della gestazione incrementa positivamente il peso del neonato: ogni giorno/settimana in più di gestazione contribuisce in media a un aumento di circa 31 grammi. Allo stesso modo, sia la lunghezza che la circonferenza cranica del neonato presentano un effetto positivo, suggerendo che uno sviluppo corporeo più marcato si traduce naturalmente in un peso maggiore. Infine, il sesso maschile è associato a un peso mediamente più alto rispetto al sesso femminile, con una differenza significativa di circa 79 grammi. I valori di R-squared (72.6%) e l’Adjusted R-squared confermano che il modello spiega bene la variabilità osservata nel peso neonatale, mentre gli indici AIC e BIC, inferiori rispetto agli altri modelli analizzati, sottolineano che l’aggiunta di termini di interazione o quadrati non porta benefici significativi in termini di miglioramento del modello.
Per valutare la presenza di multicollinearità tra le variabili indipendenti incluse nel modello, è stato calcolato il Variance Inflation Factor (VIF). I valori ottenuti risultano tutti inferiori a 2.1: nello specifico, Gestazione presenta un VIF pari a 1.65, Lunghezza 2.06, Cranio 1.60 e Sesso 1.03. Tali valori indicano un basso livello di collinearità tra le variabili predittive, ampiamente al di sotto delle soglie comunemente considerate critiche (VIF > 5). Pertanto, si può concludere che non vi sono problematiche di multicollinearità rilevanti che possano compromettere la stabilità o l’interpretazione dei coefficienti del modello.
Per selezionare il modello più parsimonioso, è stata applicata una
procedura di selezione automatica tramite il criterio BIC (Bayesian
Information Criterion) utilizzando la funzione stepAIC con
direzione “both”. Il modello di partenza includeva le variabili
Gestazione, Lunghezza,
Cranio e Sesso come predittori del
peso. I risultati hanno mostrato che la rimozione di qualsiasi variabile
avrebbe comportato un aumento significativo del BIC, segnalando un
peggioramento della qualità del modello. In particolare, le variabili
Lunghezza e Cranio risultano
fondamentali, avendo un impatto consistente sulla devianza residua.
Anche le variabili Gestazione e Sesso
contribuiscono positivamente alla spiegazione della variabilità del
peso. Pertanto, il modello ottimale selezionato mantiene tutte le
variabili iniziali, risultando il più adeguato secondo il criterio di
penalizzazione adottato.
La procedura automatica e quella manuale hanno restituito lo stesso valore BIC e questo msotra la correttezza della procedura automatica.
analisi_residui <- function(mod1) {
# Controlla se il pacchetto lmtest è installato
if (!requireNamespace("lmtest", quietly = TRUE)) {
stop("Il pacchetto 'lmtest' non è installato. Installalo usando install.packages('lmtest').")
}
# Imposta il layout per i grafici
par(mfrow = c(2, 2))
# Plotta i grafici del modello
plot(mod1)
# Esegui i test sui residui
bptest_result <- lmtest::bptest(mod1)
dwtest_result <- lmtest::dwtest(mod1)
shapiro_result <- shapiro.test(mod1$residuals)
# Plotta la densità dei residui
plot(density(residuals(mod1)), main = "Densità dei Residui", xlab = "Residui")
# Restituisce i risultati dei test
return(list(
bptest = bptest_result,
dwtest = dwtest_result,
shapiro = shapiro_result
))
}
# Esegui l'analisi dei residui
risultati <- analisi_residui(mod1)
L’analisi dei residui per il modello mod1 mostra che le principali assunzioni della regressione lineare risultano soddisfatte in maniera soddisfacente. I grafici dei residui rispetto ai valori predetti evidenziano una distribuzione abbastanza casuale attorno allo zero, senza pattern sistematici, indicando una buona specificazione del modello. Anche il grafico Scale-Location conferma un’assenza significativa di eteroscedasticità, con una dispersione dei residui tendenzialmente costante lungo l’intervallo dei valori predetti. Il Q-Q plot suggerisce che la distribuzione dei residui si avvicina alla normalità, pur mostrando leggere deviazioni nelle code, dovute alla presenza di alcuni outlier. Tale osservazione è confermata anche dalla curva di densità dei residui, che appare simmetrica e centrata attorno allo zero, ma con code leggermente pronunciate. Infine, il grafico dei residui standardizzati rispetto alla leva evidenzia la presenza di poche osservazioni potenzialmente influenti, in particolare il caso identificato con l’indice 1551. Tali punti non compromettano la validità generale del modello. Nel complesso, il modello risulta ben calibrato, con un buon adattamento ai dati e senza evidenti violazioni delle assunzioni, pur mantenendo attenzione ai pochi casi anomali riscontrati.
residui_studentizzati <- rstudent(mod1)[0:10]
cooksD <- cooks.distance(mod1)
plot(cooksD, type = "h", main = "Distanza di Cook")
abline(h = 4 / nrow(data), col = "red", lty = 2)
hat_values <- hatvalues(mod1)
plot(hatvalues(mod1), main = "Leverage")
abline(h = 2*length(coef(mod1))/nrow(data), col = "red", lty = 2)
m <- influence.measures(mod1)[0:10]
plot(mod1, which = 4) # Residuals vs Leverage con Cook's Distance
plot(mod1, which = 5) # Residuals vs Leverage plot
which.max(cooks.distance(mod1)) # Osservazione con massima distanza di Cook
## 1551
## 1551
#leverage
lev<-hatvalues(mod1)
plot(lev)
p<-sum(lev)
n<-length(lev)
soglia=2*p/n
abline(h=soglia,col=2)
lev[lev>soglia]
## 15 34 42 61 67 96
## 0.006144457 0.006237758 0.004252678 0.004587185 0.005345322 0.004801899
## 101 106 117 131 151 155
## 0.007185969 0.012812305 0.004746840 0.006964953 0.010847336 0.006670119
## 190 205 206 220 249 295
## 0.005288500 0.005297016 0.009402903 0.007376867 0.004655679 0.004008437
## 304 305 310 312 315 348
## 0.004419003 0.005382162 0.028757757 0.013126063 0.005342858 0.004187962
## 378 383 445 471 486 492
## 0.015366923 0.004305772 0.007094099 0.004289364 0.004740595 0.008175223
## 565 587 592 615 629 638
## 0.004635950 0.008375235 0.006313937 0.004575867 0.004041054 0.006216787
## 656 666 684 697 702 726
## 0.004735898 0.004345904 0.008750225 0.005809934 0.004719868 0.004038656
## 748 750 765 805 821 895
## 0.008236046 0.006712718 0.006049647 0.014303716 0.004039952 0.005203974
## 928 947 956 964 968 991
## 0.022095348 0.007803378 0.007670034 0.004618460 0.004075295 0.004259145
## 1014 1067 1091 1096 1130 1157
## 0.008221844 0.007868942 0.008927908 0.004268008 0.006561457 0.004080725
## 1166 1181 1188 1200 1238 1248
## 0.004020427 0.005586402 0.006404596 0.005445729 0.005374725 0.014573080
## 1273 1283 1293 1294 1356 1357
## 0.007080183 0.004055883 0.005555616 0.004735838 0.005285646 0.006526609
## 1361 1385 1395 1400 1402 1420
## 0.004080786 0.012017154 0.004646054 0.005559147 0.004788164 0.005130876
## 1428 1429 1551 1553 1556 1560
## 0.008191659 0.021037040 0.048521821 0.006810651 0.005868384 0.004588261
## 1593 1606 1610 1619 1628 1634
## 0.004855489 0.004746852 0.007761683 0.014504316 0.004663751 0.004527422
## 1686 1692 1693 1701 1712 1735
## 0.008715871 0.004260736 0.005041490 0.010197488 0.006945920 0.004370535
## 1780 1802 1806 1809 1827 1858
## 0.025528862 0.004005956 0.004090967 0.008388773 0.006008547 0.004328741
## 1868 1893 1911 1920 1977 2037
## 0.004746360 0.004245302 0.004481835 0.004131544 0.005384125 0.004234559
## 2040 2066 2089 2114 2115 2120
## 0.011429685 0.004013637 0.006252340 0.012850646 0.011763363 0.018002540
## 2140 2149 2175 2200 2215 2216
## 0.006090376 0.013033782 0.021167345 0.011030260 0.004833388 0.007548562
## 2220 2224 2225 2257 2307 2318
## 0.004023907 0.005780067 0.005408611 0.005767952 0.013898144 0.004770755
## 2337 2359 2391 2408 2437 2452
## 0.004700477 0.004750437 0.004386621 0.009632048 0.023757012 0.023227398
## 2458 2476 2478
## 0.008002531 0.004070348 0.005745434
#outliers
plot(rstudent(mod1))
abline(h=c(-2,2))
car::outlierTest(mod1)
## rstudent unadjusted p-value Bonferroni p
## 1551 9.986149 4.7193e-23 1.1798e-19
## 155 4.951276 7.8654e-07 1.9663e-03
## 1306 4.781188 1.8440e-06 4.6100e-03
#distanza di cook
cook<-cooks.distance(mod1)
plot(cook,ylim = c(0,1))
max(cook)
## [1] 0.9783883
L’analisi dei valori di leverage ha permesso di individuare eventuali osservazioni potenzialmente influenti sul modello di regressione. Dall’osservazione del grafico, si nota che la maggior parte dei punti presenta valori di leverage relativamente bassi e distribuiti in modo uniforme. Tuttavia, alcune osservazioni mostrano valori di leverage più elevati rispetto alla media, indicando che tali punti si collocano lontano dal centroide delle variabili indipendenti e potrebbero avere un impatto significativo sulla stima dei coefficienti. Nonostante ciò, non si rilevano valori eccessivamente anomali o critici che richiedano necessariamente l’esclusione di osservazioni. Per completezza, è stata condotta anche un’analisi della distanza di Cook al fine di valutare l’effettiva influenza di questi punti sul modello. Complessivamente, i leverage risultano coerenti con la bontà del modello stimato, ma si suggerisce comunque di tenere sotto controllo le osservazioni più influenti in eventuali successive analisi.
Dall’analisi del grafico dei residui studentizzati (rstudent) in funzione dell’indice delle osservazioni, si osserva che la maggior parte dei punti presenta valori compresi tra -2 e +2, indicando che la maggior parte delle osservazioni non mostra deviazioni anomale rispetto alle previsioni del modello. Tuttavia, sono presenti alcune osservazioni che superano tali soglie, raggiungendo valori superiori a +4 o inferiori a -4. Questi punti rappresentano potenziali outlier, ovvero osservazioni che potrebbero esercitare un’influenza significativa sul modello o indicare anomalie nei dati. È quindi opportuno esaminare più nel dettaglio tali casi, al fine di verificare se siano dovuti a errori di rilevazione, a particolari condizioni specifiche non spiegate dalle variabili incluse nel modello, o se rappresentino semplicemente valori estremi naturali.
Il grafico della distanza di Cook mostra la misura dell’influenza di ciascuna osservazione sui parametri stimati del modello. La maggior parte dei punti presenta valori molto bassi, prossimi allo zero, il che indica che la maggior parte delle osservazioni non esercita un’influenza significativa sul modello. Tuttavia, si osservano alcune osservazioni isolate che raggiungono valori sensibilmente più alti rispetto alla media, con un picco evidente intorno all’indice 1500. Questo suggerisce la presenza di alcune osservazioni influenti che potrebbero alterare in modo rilevante i coefficienti stimati. È consigliabile esaminare più approfonditamente questi casi per verificare la loro natura e valutare l’eventuale necessità di intervenire sui dati, ad esempio escludendo tali osservazioni o applicando modelli più robusti.
Una volta validato il modello, lo useremo per fare previsioni pratiche. Ad esempio, potremo stimare il peso di una neonata considerando una madre alla terza gravidanza che partorirà alla 39esima settimana.
nuova_osservazione <- data.frame(
Gestazione = 39,
Lunghezza = 497, # prendi dal tuo dataset!
Cranio = 340, # prendi dal tuo dataset!
Sesso = "F",
Fumatrici = 1
)
#Gestazione + Lunghezza + Cranio + Fumatrici + Sesso
predict(mod1, nuova_osservazione)
## 1
## 3268.574
summary(data$Peso)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 830 2990 3300 3284 3620 4930
L’analisi predittiva effettuata utilizzando il modello mod1 ha stimato un peso alla nascita di 3268.574 grammi per un neonato con le caratteristiche specificate. Questo valore risulta coerente con i dati riportati in letteratura, che indicano un peso medio alla nascita per neonati a 39 settimane compreso tra 3000 e 3500 grammi, con una leggera differenza tra maschi e femmine.
La previsione risulta plausibile anche rispetto ai dati osservati nel dataset utilizzato per la costruzione del modello. Questo conferma la validità del modello mod1 nel fornire stime attendibili per il peso alla nascita, rafforzando la sua applicabilità in contesti predittivi.
# Creazione di un dataframe per le previsioni con sesso variabile
nuove_osservazioni_sesso <- expand.grid(
Anni.madre = 30,
N.gravidanze = 3,
Fumatrici = 0,
Gestazione = 30:42,
Lunghezza = 500, #da letteratura
Cranio = 35, #da letteratura
Tipo.parto = "Ces",
Ospedale = "osp1",
Sesso = c("M", "F") # Maschio e femmina
)
# Previsione del peso per le nuove osservazioni
nuove_osservazioni_sesso$Peso_Previsto <- predict(mod1, newdata = nuove_osservazioni_sesso)
# Creazione di un grafico per visualizzare l'impatto del sesso
ggplot(nuove_osservazioni_sesso, aes(x = Gestazione, y = Peso_Previsto, color = Sesso)) +
geom_line() +
geom_point() +
labs(title = "Impatto del Sesso del Neonato sul Peso Previsto",
x = "Settimane di Gestazione",
y = "Peso Previsto (grammi)",
color = "Sesso") +
theme_minimal()
Il grafico mostra la relazione tra il sesso del neonato (maschio o femmina) e il peso previsto, tenendo conto delle altre variabili del modello (come la gestazione, l’età della madre, il fumo, ecc). Il grafico mostra due linee distinte (una per i maschi e una per le femmine), c’è una differenza significativa nel peso previsto tra i due sessi. Maschi: in genere, i neonati maschi tendono a pesare leggermente di più rispetto alle femmine. Questo è un fenomeno osservato in molti studi demografici e biologici. Femmine: le neonate femmine tendono ad avere un peso leggermente inferiore rispetto ai maschi. L’asse x rappresenta le settimane di gestazione, il grafico mostra come il peso previsto aumenti all’aumentare della gestazione, sia per i maschi sia per le femmine. Entrambe le linee (maschi e femmine) mostrano un andamento crescente, poiché il peso del neonato aumenta con l’avanzare della gestazione. La distanza verticale tra le due linee indica la differenza media di peso tra maschi e femmine a parità di settimane di gestazione.
nuove_osservazioni_morfologia <- expand.grid(
Gestazione = 39,
Lunghezza = seq(480, 520, by = 5), # Variazione della lunghezza
Cranio = seq(330, 350, by = 5), # Variazione della circonferenza cranica
Sesso = "M"
)
nuove_osservazioni_morfologia$Peso_Previsto <- predict(mod1, newdata = nuove_osservazioni_morfologia)
ggplot(nuove_osservazioni_morfologia, aes(x = Lunghezza, y = Peso_Previsto, color = factor(Cranio))) +
geom_line() +
geom_point() +
labs(title = "Effetto di Lunghezza e Circonferenza Cranica sul Peso Previsto",
x = "Lunghezza (mm)",
y = "Peso Previsto (g)",
color = "Cranio (mm)") +
theme_minimal()
Il grafico presentato analizza l’effetto congiunto della lunghezza e della circonferenza cranica sul peso previsto dei neonati. Attraverso una rappresentazione visiva di diverse curve, ognuna corrispondente a un valore specifico di circonferenza cranica (da 330 mm a 350 mm), è possibile osservare come il peso stimato vari in funzione della lunghezza (da 480 mm a 520 mm).
L’analisi del grafico evidenzia una chiara relazione positiva tra entrambe le variabili indipendenti e il peso previsto. In primo luogo, mantenendo costante la circonferenza cranica, si osserva un incremento del peso previsto all’aumentare della lunghezza del neonato. Tale tendenza è in linea con le aspettative biologiche, suggerendo che una maggiore dimensione lineare complessiva è associata a una massa corporea più elevata.
In secondo luogo, confrontando le diverse curve a una data lunghezza, si nota che circonferenze craniche maggiori sono associate a un peso previsto superiore. Questo indica che lo sviluppo della struttura cranica, presumibilmente correlato alla crescita cerebrale e alla massa corporea complessiva, contribuisce significativamente al peso del neonato.
L’interazione tra le due variabili è implicitamente rappresentata dalla disposizione delle curve: per ogni incremento unitario di lunghezza, l’aumento del peso previsto è più marcato per i neonati con circonferenze craniche maggiori, suggerendo un effetto sinergico.