Analisi e Modellizzazione

Analisi Preliminare

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:

  1. in alcuni ospedali si fanno più parti cesarei

  2. La media del peso e della lunghezza di questo campione di neonati sono significativamente uguali a quelle della popolazione

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

Analisi per Variabile:

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.

Analisi Descrittiva

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

Commenti sui Risultati

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.

  • Le distribuzioni mostrano che alcune variabili hanno skewness positiva o negativa.
  • Gli outlier nel peso potrebbero influenzare il modello e necessitano di ulteriori indagini.

Test delle Ipotesi

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

Sample t-test per il Peso

Sample t-test per la Lunghezza

# 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:

Lunghezza:

I risultati dei t-test mostrano che:

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.

Creazione del Modello di Regressione

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

Osservazioni per la matrice di correlazione

Anni.madre e N.gravidanze (0.38)

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.

Gestazione e Peso (0.59), Lunghezza (0.62), Cranio (0.46)

  • 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 e Cranio

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

Fumatrici e altre variabili

  • Le correlazioni della variabile “Fumatrici” con le altre sono tutte molto basse (tra -0.02 e 0.04), indicando che non sembra avere un impatto evidente sul peso, la lunghezza o la circonferenza cranica del neonato in questi dati.

Anni.madre, N.gravidanze e sviluppo del neonato

  • Le correlazioni tra l’età della madre e le misure del neonato (Peso, Lunghezza, Cranio) sono molto basse (~0.02, -0.06, 0.01), quindi l’età materna non sembra avere un impatto diretto sulle dimensioni del bambino.
  • Le variabili più correlate con le misure del neonato sono la durata della gestazione e tra loro stesse (Peso, Lunghezza, Cranio). L’età materna e il numero di gravidanze non influenzano direttamente le misure del neonato. Il fumo non mostra un effetto chiaro in questi dati.

Analisi del grafico matrice di correlazione:

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

Analisi scatter plot

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.

Analisi Box Plot

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.

Osservazioni per costruire il modello adeguato

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 non lineari

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

Selezione del Modello Ottimale

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 dei residui

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.

Analisi degli outlier

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.

3. Previsioni e Risultati

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.