Analisi Esplorativa dei Dati

Obiettivo: Esplorare e comprendere la struttura del dataset, verificando la corretta importazione dei dati e identificando le variabili disponibili per l’analisi.

dati <- read.csv("neonati.csv")
dim(dati)
## [1] 2500   10
names(dati)
##  [1] "Anni.madre"   "N.gravidanze" "Fumatrici"    "Gestazione"   "Peso"        
##  [6] "Lunghezza"    "Cranio"       "Tipo.parto"   "Ospedale"     "Sesso"
head(dati)
##   Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio Tipo.parto
## 1         26            0         0         42 3380       490    325        Nat
## 2         21            2         0         39 3150       490    345        Nat
## 3         34            3         0         38 3640       500    375        Nat
## 4         28            1         0         41 3690       515    365        Nat
## 5         20            0         0         38 3700       480    335        Nat
## 6         32            0         0         40 3200       495    340        Nat
##   Ospedale Sesso
## 1     osp3     M
## 2     osp1     F
## 3     osp2     M
## 4     osp2     M
## 5     osp3     F
## 6     osp2     F

Nel dataset in esame, le variabili possono essere classificate come quantitative o qualitative, a seconda della loro natura e del modo in cui possono essere misurate o contate. Di seguito, è riportata una tabella che riassume il nome di ciascuna variabile e il suo tipo:

Nome Variabile Tipo di Variabile
Anni.madre Quantitativa Continua
N.gravidanze Quantitativa Discreta
Fumatrici Qualitativa Nominale (codificata in numeri)
Gestazione Quantitativa Discreta
Peso Quantitativa Continua
Lunghezza Quantitativa Continua
Cranio Quantitativa Continua
Tipo.parto Qualitativa Nominale
Ospedale Qualitativa Nominale
Sesso Qualitativa Nominale

E’ stata eseguita la seguente analisi per riassumere le caratteristiche statistiche descrittive delle variabili numeriche del dataset. Ogni variabile selezionata è stata analizzata attraverso varie misure per comprendere la distribuzione e la forma dei dati.

library(moments)
risultati <- sapply(dati[, c("Anni.madre", "N.gravidanze", "Fumatrici", "Gestazione", "Peso", "Lunghezza","Cranio")], function(x){
  c(Mean = round(mean(x), 2),
    Median = round(median(x), 2),
    SD = round(sd(x), 2),
    IQR = round(IQR(x), 2),
    percentil = round(quantile(x), 2),
    Skewness = round(skewness(x), 2),
    Kurtosis = round(kurtosis(x) - 3, 2))
})

library(knitr)
kable(as.data.frame(t(risultati)), caption = "Tabella di Sintesi degli Indicatori Descrittivi")
Tabella di Sintesi degli Indicatori Descrittivi
Mean Median SD IQR percentil.0% percentil.25% percentil.50% percentil.75% percentil.100% Skewness Kurtosis
Anni.madre 28.16 28 5.27 7 0 25 28 32 46 0.04 0.38
N.gravidanze 0.98 1 1.28 1 0 0 1 1 12 2.51 10.99
Fumatrici 0.04 0 0.20 0 0 0 0 0 1 4.59 19.08
Gestazione 38.98 39 1.87 2 25 38 39 40 43 -2.07 8.26
Peso 3284.08 3300 525.04 630 830 2990 3300 3620 4930 -0.65 2.03
Lunghezza 494.69 500 26.32 30 310 480 500 510 565 -1.51 6.49
Cranio 340.03 340 16.43 20 235 330 340 350 390 -0.79 2.95

È stato eseguito uno studio sulla distribuzione delle frequenze per comprendere meglio come fossero distribuiti i dati all’interno del dataset. L’obiettivo è stato quello di analizzare la frequenza con cui si verificavano determinati valori per ogni variabile e ottenere una visione più chiara della distribuzione complessiva. Attraverso il calcolo delle frequenze assolute e relative, è stato possibile visualizzare la prevalenza di ciascun valore e identificare eventuali pattern o anomalie.

Variabile: Tipo.parto
N <- dim(dati)[1]

freq_ass <- table(dati$Tipo.parto)
freq_rel <- table(dati$Tipo.parto)/N
distr_freq <- as.data.frame(cbind(freq_ass, freq_rel))
distr_freq
##     freq_ass freq_rel
## Ces      728   0.2912
## Nat     1772   0.7088
Variabile: Ospedale
freq_ass <- table(dati$Ospedale)
freq_rel <- table(dati$Ospedale)/N
distr_freq <- as.data.frame(cbind(freq_ass, freq_rel))
distr_freq
##      freq_ass freq_rel
## osp1      816   0.3264
## osp2      849   0.3396
## osp3      835   0.3340
Variabile: Sesso
freq_ass <- table(dati$Sesso)
freq_rel <- table(dati$Sesso)/N
distr_freq <- as.data.frame(cbind(freq_ass, freq_rel))
distr_freq
##   freq_ass freq_rel
## F     1256   0.5024
## M     1244   0.4976
Variabile: Fumatrici
freq_ass <- table(dati$Fumatrici)
freq_rel <- table(dati$Fumatrici)/N
distr_freq <- as.data.frame(cbind(freq_ass, freq_rel))
distr_freq
##   freq_ass freq_rel
## 0     2396   0.9584
## 1      104   0.0416

La variabile Fumatrici è stata convertita da valori numerici in valori testuali (“yes” per fumatrice, “no” per non fumatrice) per facilitare un utilizzo più chiaro e leggibile nelle analisi.

fumatrici <- ifelse(dati$Fumatrici==1,"yes","no")
Variabile: N.gravidanze
freq_ass <- table(dati$N.gravidanze)
freq_rel <- table(dati$N.gravidanze)/N
freq_ass_cum <- cumsum(freq_ass)
freq_rel_cum <- cumsum(freq_rel)
distr_freq <- as.data.frame(cbind(freq_ass,freq_rel,freq_ass_cum,freq_rel_cum))
distr_freq
##    freq_ass freq_rel freq_ass_cum freq_rel_cum
## 0      1096   0.4384         1096       0.4384
## 1       818   0.3272         1914       0.7656
## 2       340   0.1360         2254       0.9016
## 3       150   0.0600         2404       0.9616
## 4        48   0.0192         2452       0.9808
## 5        21   0.0084         2473       0.9892
## 6        11   0.0044         2484       0.9936
## 7         1   0.0004         2485       0.9940
## 8         8   0.0032         2493       0.9972
## 9         2   0.0008         2495       0.9980
## 10        3   0.0012         2498       0.9992
## 11        1   0.0004         2499       0.9996
## 12        1   0.0004         2500       1.0000

Durante l’analisi della variabile N.gravidanze, è stata visualizzata la distribuzione delle frequenze assolute e cumulative. Si è notato che le ultime categorie presentavano pochissimi valori. Questo ha portato alla decisione di raggruppare i dati in classi, poiché mantenere troppe categorie avrebbe fornito risultati poco informativi. Creando le classi “0”, “1”, “2”, e “>2” gravidanze, si è potuto semplificare l’analisi e renderla più chiara, facilitando lo studio e l’interpretazione delle differenze tra i gruppi con un numero sufficiente di osservazioni.

dati$N.gravidanze <- cut(dati$N.gravidanze,
                         breaks = c(-Inf, 0, 1, 2, Inf),
                         labels = c("0","1","2",">2"))

freq_ass <- table(dati$N.gravidanze)
freq_rel <- table(dati$N.gravidanze)/N
freq_ass_cum <- cumsum(freq_ass)
freq_rel_cum <- cumsum(freq_rel)
distr_freq <- as.data.frame(cbind(freq_ass,freq_rel,freq_ass_cum,freq_rel_cum))
distr_freq
##    freq_ass freq_rel freq_ass_cum freq_rel_cum
## 0      1096   0.4384         1096       0.4384
## 1       818   0.3272         1914       0.7656
## 2       340   0.1360         2254       0.9016
## >2      246   0.0984         2500       1.0000

Per quanto riguarda le successive variabili, essendo variabili quantitative continue, è stata eseguita un’analisi grafica per visualizzare meglio la distribuzione dei dati all’interno del dataset. L’uso di rappresentazioni grafiche come gli istogrammi e curve di densità ha permesso di osservare la distribuzione delle variabili in modo più chiaro e immediato rispetto a una semplice analisi tabellare. Questo approccio ha consentito di individuare facilmente eventuali asimmetrie, dispersioni, o la presenza di outlier, fornendo una visione più dettagliata e comprensibile delle caratteristiche dei dati.

Variabile: Peso
library(ggplot2)
ggplot(dati, aes(x=Peso))+
  geom_histogram(aes(y=..density..), bins = 30, fill="lightblue", color="black")+
  geom_density(color="blue", size=1)+
  labs(title="Istogramma con Curva di densità per peso",
       x="Peso neonato",
       y="Densità")+
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

summary(dati$Peso)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     830    2990    3300    3284    3620    4930
library(moments)
round(skewness(dati$Peso), 2)
## [1] -0.65
round(kurtosis(dati$Peso) - 3, 2)
## [1] 2.03

Il grafico mostra una distribuzione del peso dei neonati che è quasi simmetrica, ma con una leggera coda verso sinistra. Questa osservazione è confermata dai dati descrittivi: l’asimmetria (skewness) di -0.65 indica una lieve inclinazione a sinistra. Anche la vicinanza tra media (3284 g) e mediana (3300 g) conferma che, pur essendoci una certa asimmetria, i dati sono centrati in modo abbastanza uniforme attorno alla media

L’eccesso di curtosi di 2.03 suggerisce che la distribuzione (leptocurtica) è più appuntita rispetto a una normale, con una maggiore concentrazione di pesi attorno alla media. Di conseguenza, ci sono poche osservazioni estreme nelle code, che risultano quindi meno pesanti.

Variabile: Anni.madre
library(ggplot2)
ggplot(dati, aes(x=Anni.madre))+
  geom_histogram(aes(y=..density..), bins = 30, fill = "lightblue", color="black")+
  geom_density(color="blue", size=1)+
  labs(title="Istogramma con Curva di densità per età madre",
       x="Età della madre",
       y="Densità")+
  theme_minimal()

summary(dati$Anni.madre)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   25.00   28.00   28.16   32.00   46.00
library(moments)
round(skewness(dati$Anni.madre), 2)
## [1] 0.04
round(kurtosis(dati$Anni.madre) - 3, 2)
## [1] 0.38

Il grafico mostra che la distribuzione è quasi simmetrica, con un picco attorno ai 25 anni e una coda verso sinistra (madri più giovani). La bassa asimmetria e la moderata curtosi confermano che la distribuzione è vicina alla normale, con solo una lieve tendenza verso valori centrali e pochi valori estremi.

La variabile Anni.madre ha una curtosi di 0.38, che indica una distribuzione leggermente leptocurtica, con una curva un po’ più appuntita rispetto alla normale.

Variabile: Lunghezza
library(ggplot2)

ggplot(dati, aes(x=Lunghezza))+
  geom_histogram(aes(y=..density..), bins=30, fill="lightblue", color="black")+
  geom_density(color="blue", size=1)+
  labs(title="Istogramma con Curva di densità per lunghezza",
       x="Lunghezza (mm)",
       y="Densità")+
  theme_minimal()

summary(dati$Lunghezza)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   310.0   480.0   500.0   494.7   510.0   565.0
library(moments)
round(skewness(dati$Lunghezza), 2)
## [1] -1.51
round(kurtosis(dati$Lunghezza) - 3, 2)
## [1] 6.49

Il valore della skewness pari a -1.51 indica una asimmetria negativa abbastanza marcata, con una coda più lunga verso i valori bassi della variabile Lunghezza. Questo suggerisce che ci sono più valori concentrati sotto la media,

La curtosi di 6.49 suggerisce una distribuzione leptocurtica, con una concentrazione elevata dei dati attorno alla media e code più schiacciate. Questo indica che i valori estremi sono meno frequenti rispetto a una distribuzione normale, ma la distribuzione è comunque molto concentrata al intorno alla media.

Variabile: Cranio
library(ggplot2)

ggplot(dati, aes(x=Cranio))+
  geom_histogram(aes(y=..density..), bins=30, fill="lightblue", color="black")+
  geom_density(color="blue", size=1)+
  labs(title="Istogramma con Curva di densità per cranio",
       x="Cranio (mm)",
       y="Densità")+
  theme_minimal()

summary(dati$Cranio)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     235     330     340     340     350     390
library(moments)
round(skewness(dati$Cranio), 2)
## [1] -0.79
round(kurtosis(dati$Cranio) - 3, 2)
## [1] 2.95

Il valore di -0.79 indica una asimmetria negativa, con una coda più lunga verso sinistra. Questo significa che i valori più bassi di Cranio sono più frequenti rispetto ai valori più alti, e la distribuzione si inclina leggermente verso sinistra.

La curtosi di 2.95 indica una distribuzione leptocurtica, con una curva appuntita al centro e code molto schiacciate. Questo implica che i dati sono fortemente concentrati attorno alla media, e gli outlier ono meno frequenti rispetto a una distribuzione normale.

Variabile: Gestazione
library(ggplot2)

ggplot(dati, aes(x=Gestazione))+
  geom_histogram(binwidth=1, fill="lightblue", color="black")+
  labs(title="Istogramma con Curva di densità per N.gravidanze",
       x="N.gravidanze",
       y="Densità")+
  theme_minimal()

summary(dati$Gestazione)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.00   38.00   39.00   38.98   40.00   43.00
library(moments)
round(skewness(dati$Gestazione), 2)
## [1] -2.07
round(kurtosis(dati$Gestazione) - 3, 2)
## [1] 8.26

a variabile Gestazione presenta un valore di asimmetria (skewness) pari a -2.07, che indica una forte asimmetria negativa. Questo significa che la distribuzione presenta una coda lunga nella direzione dei valori più bassi.

La curtosi di 8.26 indica una distribuzione molto leptocurtica, con una curva centrale molto appuntita e code più schiacciate rispetto a una distribuzione normale. Questo significa che i dati sono fortemente concentrati attorno alla media, con poche osservazioni estreme, ma quelle presenti contribuiscono a una coda lunga verso sinistra.

Correlazioni tra le variabili numeriche

È stata creata una matrice di correlazione tra tutte le variabili esclusivamente numeriche del dataset, con l’obiettivo di analizzare le relazioni tra le diverse variabili. L’attenzione principale è stata posta sulle correlazioni tra ciascuna variabile e la variabile target Peso, al fine di identificare eventuali relazioni significative che potrebbero influenzare il peso del neonato.

numerical_vars <- dati[, c("Anni.madre", "Gestazione", "Lunghezza", "Cranio", "Peso")]
cor_matrix <- cor(numerical_vars)
cor_matrix
##             Anni.madre Gestazione   Lunghezza    Cranio        Peso
## Anni.madre  1.00000000 -0.1356671 -0.06349157 0.0160767 -0.02247017
## Gestazione -0.13566714  1.0000000  0.61892045 0.4608289  0.59176872
## Lunghezza  -0.06349157  0.6189204  1.00000000 0.6033410  0.79603676
## Cranio      0.01607670  0.4608289  0.60334097 1.0000000  0.70480151
## Peso       -0.02247017  0.5917687  0.79603676 0.7048015  1.00000000

La matrice di correlazione mostra relazioni interessanti tra le variabili numeriche del dataset, soprattutto in relazione alla variabile target Peso. La correlazione più forte si osserva tra Lunghezza e Peso, con un valore di 0.796, indicando una forte associazione positiva: all’aumentare della lunghezza del neonato, aumenta anche il suo peso. Anche Cranio ha una correlazione significativa con Peso pari a 0.70, suggerendo che una maggiore circonferenza cranica è associata a un peso maggiore del neonato. Gestazione mostra una correlazione moderata con Peso, pari a 0.59, il che implica che un periodo di gestazione più lungo tende a portare a un neonato più pesante.

D’altra parte, la correlazione tra l’età della madre e il Peso del neonato è molto bassa, -0.02, suggerendo che l’età materna non ha una relazione significativa con il peso del neonato. Le correlazioni tra le altre variabili mostrano che un periodo di gestazione più lungo è moderatamente correlato alla lunghezza del neonato (0.62), mentre la lunghezza e la circonferenza cranica hanno una correlazione di 0.60, indicando una relazione tra la dimensione complessiva del neonato.

Questi risultati suggeriscono che le dimensioni fisiche del neonato (lunghezza e cranio) sono i principali fattori legati al suo peso alla nascita, mentre l’età della madre non sembra avere un impatto rilevante.

Anni.madre vs Peso
library(ggplot2)

ggplot(dati, aes(x=Anni.madre, y=dati$Peso))+
  geom_point(color="blue")+
  labs(title="Scatter Plot Anni Madre vs Peso del neonato",
       x = "Età della madre",
       y = "Peso del neonato (Grammi)")+
  theme_minimal()
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

Come si evince dal grafico, non sembra esserci una correlazione evidente tra l’età della madre e il peso del neonato. I punti sono distribuiti in maniera abbastanza casuale, senza un pattern chiaro che indichi una relazione lineare tra le due variabili. Questo conferma il risultato numerico della matrice di correlazione pari a -0.02.

Lunghezza vs Peso
library(ggplot2)

ggplot(dati, aes(x=Lunghezza, y=dati$Peso))+
  geom_point(color="blue")+
  labs(title="Scatter Plot Lunghezza vs Peso del neonato",
       x = "Lunghezza (mm)",
       y = "Peso del neonato (Grammi)")+
  theme_minimal()
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

Il grafico mostra una correlazione fortemente positiva tra la variabile Lunghezza e il Peso del neonato. Si osserva chiaramente un pattern crescente: all’aumentare della lunghezza del neonato, il suo peso tende ad aumentare. Questo risultato visivo conferma i dati numerici ottenuti nella matrice di correlazione, dove il coefficiente di correlazione tra Lunghezza e Peso è risultato pari a 0.796, indicando una relazione molto forte tra le due variabili. Questo suggerisce che la lunghezza del neonato è uno dei principali fattori che influenzano il peso alla nascita.

Cranio vs Peso
library(ggplot2)

ggplot(dati, aes(x=Cranio, y=dati$Peso))+
  geom_point(color="blue")+
  labs(title="Scatter Plot Cranio vs Peso del neonato",
       x = "Cranio (mm)",
       y = "Peso del neonato (Grammi)")+
  theme_minimal()
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

Il grafico mostra una correlazione positiva tra la variabile Cranio e il Peso del neonato. Si osserva un pattern crescente: all’aumentare della circonferenza cranica del neonato, aumenta anche il suo peso. Questo rispecchia il valore numerico della correlazione ottenuta nella matrice, dove il coefficiente di correlazione tra Cranio e Peso è 0.70, indicando una forte relazione positiva.

Gestazione vs Peso
library(ggplot2)

ggplot(dati, aes(x=Gestazione, y=dati$Peso))+
  geom_point(color="blue")+
  labs(title="Scatter Plot Gestazione vs Peso del neonato",
       x = "Settimane Gestazione",
       y = "Peso del neonato (Grammi)")+
  theme_minimal()
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

Il grafico mostra una chiara correlazione positiva tra la Gestazione (espressa in settimane) e il Peso del neonato. Man mano che aumenta il numero di settimane di gestazione, si osserva un incremento progressivo del peso del neonato. Questo conferma il risultato della matrice di correlazione, dove il coefficiente tra Gestazione e Peso è pari a 0.59, indicando una relazione positiva moderatamente forte. Neonati con periodi di gestazione più lunghi tendono a nascere con un peso maggiore, il che riflette l’importanza della durata della gestazione per il peso alla nascita.

Correlazioni tra le variabili categoriche con la variabile Peso

Per quanto riguarda le variabili categoriche, è stata effettuata un’analisi grafica attraverso l’uso di boxplot, che ha permesso di visualizzare la distribuzione del Peso del neonato in relazione alle diverse categorie. Inoltre, è stato eseguito un test t per verificare l’impatto che queste variabili categoriche avevano sulla variabile target Peso, al fine di determinare se le differenze tra le medie dei gruppi fossero statisticamente significative.

Sesso vs Peso
library(ggplot2)

ggplot(dati, aes(x = dati$Sesso, y = dati$Peso)) +
  geom_boxplot(fill = "lightblue", color = "black") +
  labs(title = "Boxplot Peso del neonato vs Fumatrici",
       x = "Sesso", y = "Peso del neonato (grammi)") +
  theme_minimal()
## Warning: Use of `dati$Sesso` is discouraged.
## ℹ Use `Sesso` instead.
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

t_test_result <- t.test(dati$Peso ~ dati$Sesso)
t_test_result
## 
##  Welch Two Sample t-test
## 
## data:  dati$Peso by dati$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

Il boxplot mostra la distribuzione del Peso del neonato suddiviso per il Sesso. Da un’analisi visiva, possiamo osservare che i neonati di sesso maschile (M) tendono ad avere un peso mediamente superiore rispetto ai neonati di sesso femminile (F), con una leggera dispersione maggiore per i maschi.

Il risultato del test t conferma questa osservazione. Il p-value estremamente basso (< 2.2e-16) indica che la differenza tra i due gruppi è altamente significativa, ovvero è molto improbabile che la differenza osservata nelle medie sia dovuta al caso.

Tipo.parto vs Peso
library(ggplot2)

ggplot(dati, aes(x=dati$Tipo.parto, y=dati$Peso))+
  geom_boxplot(fill="lightblue", color="black")+
  labs(title="Boxplot Peso del neonato vs Tipo Parto",
       x="Tipo Parto",
       y="Peso del neonato (grammi)")+
  theme_minimal()
## Warning: Use of `dati$Tipo.parto` is discouraged.
## ℹ Use `Tipo.parto` instead.
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

t_test_result <- t.test(dati$Peso ~ dati$Tipo.parto)
t_test_result
## 
##  Welch Two Sample t-test
## 
## data:  dati$Peso by dati$Tipo.parto
## t = -0.12968, df = 1493, p-value = 0.8968
## alternative hypothesis: true difference in means between group Ces and group Nat is not equal to 0
## 95 percent confidence interval:
##  -46.27992  40.54037
## sample estimates:
## mean in group Ces mean in group Nat 
##          3282.047          3284.916

Il boxplot mostra il confronto del Peso del neonato tra due gruppi di Tipo di parto: cesareo (Ces) e naturale (Nat). A livello visivo, non si osservano differenze significative tra i due gruppi, poiché le mediane dei pesi sono molto vicine e la distribuzione complessiva del peso è simile per entrambi i tipi di parto.

Il risultato del test t conferma queste osservazioni: il p-value è molto alto (0.8968), indicando che non vi è una differenza statisticamente significativa tra i pesi medi dei neonati nati con parto cesareo e quelli nati con parto naturale.

Fumatrici vs Peso
fumatrici <- ifelse(dati$Fumatrici==1,"yes","no")

library(ggplot2)

ggplot(dati, aes(x=fumatrici, y=dati$Peso))+
  geom_boxplot(fill="lightblue", color="black")+
  labs(title="Boxplot Peso del neonato vs Fumatrici (y/n)",
       x="Fumatrici (y/n)",
       y="Peso del neonato (grammi)")+
  theme_minimal()
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

t_test_result <- t.test(dati$Peso ~ fumatrici)
t_test_result
## 
##  Welch Two Sample t-test
## 
## data:  dati$Peso by fumatrici
## t = 1.034, df = 114.1, p-value = 0.3033
## alternative hypothesis: true difference in means between group no and group yes is not equal to 0
## 95 percent confidence interval:
##  -45.61354 145.22674
## sample estimates:
##  mean in group no mean in group yes 
##          3286.153          3236.346

Il boxplot mostra la distribuzione del Peso del neonato tra i due gruppi di madri Fumatrici (yes) e Non Fumatrici (no). Visivamente, non si osservano differenze significative tra le due categorie: le mediane dei pesi sono molto simili e la distribuzione complessiva non mostra una variazione importante.

Il test t conferma questa osservazione: il p-value è di 0.3033, il che indica che non vi è una differenza statisticamente significativa tra i pesi medi dei neonati nati da madri fumatrici rispetto a quelli nati da madri non fumatrici.

Ospedale vs Peso
library(ggplot2)

ggplot(dati, aes(x=dati$Ospedale, y=dati$Peso))+
  geom_boxplot(fill="lightblue", color="black")+
  labs(title="Boxplot Peso del neonato vs Ospedale",
       x="Ospedale",
       y="Peso del neonato (grammi)")+
  theme_minimal()
## Warning: Use of `dati$Ospedale` is discouraged.
## ℹ Use `Ospedale` instead.
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

t_test_result <- pairwise.t.test(dati$Peso, dati$Ospedale,
                                 paired=F,
                                 pool.sd = T,
                                 p.adjust.method = "none")
t_test_result
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  dati$Peso and dati$Ospedale 
## 
##      osp1 osp2
## osp2 0.99 -   
## osp3 0.11 0.11
## 
## P value adjustment method: none

Il grafico boxplot mostra la distribuzione del Peso del neonato per tre diversi ospedali (osp1, osp2, osp3). Visivamente, le mediane dei pesi sembrano abbastanza simili tra i tre ospedali e le distribuzioni hanno range simili.

Per confrontare le medie tra i tre ospedali, è stato utilizzato il pairwise t-test, un test specifico per confrontare le medie di più gruppi in modo incrociato, poiché qui ci sono tre classi ospedaliere. I risultati mostrano che non ci sono differenze significative tra i gruppi: i p-value sono molto alti (0.99, 0.11, 0.11), indicando che le differenze tra i pesi medi dei neonati negli ospedali non sono statisticamente significative.

N.gravidanze vs Peso
library(ggplot2)

ggplot(dati, aes(x=dati$N.gravidanze, y=dati$Peso))+
  geom_boxplot(fill="lightblue", color="black")+
  labs(title="Boxplot Peso del neonato vs N.gravidanze",
       x="N.gravidanze",
       y="Peso del neonato (grammi)")+
  theme_minimal()
## Warning: Use of `dati$N.gravidanze` is discouraged.
## ℹ Use `N.gravidanze` instead.
## Warning: Use of `dati$Peso` is discouraged.
## ℹ Use `Peso` instead.

t_test_result <- pairwise.t.test(dati$Peso, dati$N.gravidanze,
                                 paired=F,
                                 pool.sd = T,
                                 p.adjust.method = "none")
t_test_result
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  dati$Peso and dati$N.gravidanze 
## 
##    0    1    2   
## 1  0.86 -    -   
## 2  0.22 0.19 -   
## >2 0.78 0.71 0.50
## 
## P value adjustment method: none

Il grafico boxplot mostra la distribuzione del Peso del neonato rispetto al numero di gravidanze. Si nota che le mediane del peso sono abbastanza simili tra le diverse classi di numero di gravidanze (0, 1, 2, >2), senza variazioni visibili particolarmente significative.

Per verificare se ci siano differenze statisticamente significative nel peso medio tra queste classi, è stato utilizzato il pairwise t-test per confrontare le medie a coppie tra i gruppi. I risultati indicano che non ci sono differenze statisticamente significative, poiché tutti i p-value risultano molto alti (superiori a 0.05), il che suggerisce che il numero di gravidanze non ha un impatto significativo sul peso medio del neonato.

Creazione del modello di regressione

mod1 <- lm(Peso~., data=dati)
summary(mod1)
## 
## Call:
## lm(formula = Peso ~ ., data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1144.06  -180.89   -13.95   161.76  2618.65 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -6731.1245   141.3416 -47.623  < 2e-16 ***
## Anni.madre         0.6309     1.1411   0.553  0.58039    
## N.gravidanze1      8.7433    13.0132   0.672  0.50172    
## N.gravidanze2     48.8938    17.7327   2.757  0.00587 ** 
## N.gravidanze>2    45.2901    20.8565   2.172  0.02999 *  
## Fumatrici        -31.3534    27.5607  -1.138  0.25539    
## Gestazione        32.6315     3.8290   8.522  < 2e-16 ***
## Lunghezza         10.2893     0.3004  34.252  < 2e-16 ***
## Cranio            10.4612     0.4270  24.502  < 2e-16 ***
## Tipo.partoNat     30.1564    12.0842   2.496  0.01264 *  
## Ospedaleosp2     -10.3527    13.4399  -0.770  0.44120    
## Ospedaleosp3      27.8711    13.4936   2.066  0.03898 *  
## SessoM            77.3000    11.1727   6.919 5.78e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 273.8 on 2487 degrees of freedom
## Multiple R-squared:  0.7294, Adjusted R-squared:  0.7281 
## F-statistic: 558.5 on 12 and 2487 DF,  p-value: < 2.2e-16

Ecco una sintesi dei risultati principali:

Misura di bontà del modello:

Selezione del modello ottimale

Nella ricerca del modello ottimale, è essenziale semplificare il modello escludendo le variabili che non contribuiscono significativamente alla spiegazione della variabile dipendente. Un primo passo logico è rimuovere la variabile “Anni.madre”, che presenta un p-value pari a 0.58039, un valore ben al di sopra della soglia comunemente accettata di 0.05. Questo indica che “Anni.madre” non ha un effetto statisticamente significativo nel modello, e la sua rimozione potrebbe migliorare la parsimonia del modello senza compromettere la sua capacità predittiva.

mod2 <- update(mod1, ~.-Anni.madre)
summary(mod2)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + 
##     Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1137.02  -181.92   -14.97   160.68  2622.09 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -6709.8444   135.9811 -49.344  < 2e-16 ***
## N.gravidanze1     10.0391    12.7986   0.784  0.43289    
## N.gravidanze2     51.4479    17.1180   3.005  0.00268 ** 
## N.gravidanze>2    49.2739    19.5695   2.518  0.01187 *  
## Fumatrici        -31.5656    27.5541  -1.146  0.25208    
## Gestazione        32.4270     3.8105   8.510  < 2e-16 ***
## Lunghezza         10.2886     0.3004  34.255  < 2e-16 ***
## Cranio            10.4715     0.4265  24.553  < 2e-16 ***
## Tipo.partoNat     30.2021    12.0822   2.500  0.01249 *  
## Ospedaleosp2     -10.2334    13.4363  -0.762  0.44636    
## Ospedaleosp3      28.0361    13.4884   2.079  0.03776 *  
## SessoM            77.3648    11.1705   6.926  5.5e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 273.8 on 2488 degrees of freedom
## Multiple R-squared:  0.7293, Adjusted R-squared:  0.7281 
## F-statistic: 609.5 on 11 and 2488 DF,  p-value: < 2.2e-16
anova(mod2,mod1)
## Analysis of Variance Table
## 
## Model 1: Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Ospedale + Sesso
## Model 2: Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza + 
##     Cranio + Tipo.parto + Ospedale + Sesso
##   Res.Df       RSS Df Sum of Sq      F Pr(>F)
## 1   2488 186460389                           
## 2   2487 186437474  1     22915 0.3057 0.5804
BIC(mod2,mod1)
##      df      BIC
## mod2 13 35245.61
## mod1 14 35253.13

Dopo la rimozione di Anni.madre, i coefficienti delle altre variabili non mostrano cambiamenti sostanziali. Questo suggerisce che Anni.madre non aveva un impatto rilevante sulle relazioni tra le altre variabili indipendenti e il peso del neonato. Per quanto riguarda le metriche di performance del modello, il valore di R-squared rimane pressoché identico (0.7294 in entrambi i modelli), indicando che la capacità del modello di spiegare la variabilità del peso non è stata compromessa dalla rimozione di Anni.madre.

I risultati dell’ANOVA indicano che la differenza tra i due modelli non è statisticamente significativa, con un valore di p pari a 0.5804. Questo significa che aggiungere la variabile Anni.madre al modello non apporta un miglioramento significativo in termini di capacità esplicativa. Il confronto dei criteri di informazione bayesiano (BIC) supporta questa conclusione. Il valore del BIC per il modello con Anni.madre (mod1) è 35253.13, leggermente superiore al BIC del modello senza Anni.madre (mod2), che è 35245.61. Poiché un valore di BIC più basso indica un modello preferibile, possiamo concludere che il modello senza Anni.madre è leggermente migliore, anche se la differenza è minima.

mod3 <- update(mod2, ~.-Ospedale)
summary(mod3)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + 
##     Cranio + Tipo.parto + Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1153.30  -181.64   -16.26   159.98  2640.16 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -6710.0907   136.0170 -49.333  < 2e-16 ***
## N.gravidanze1     10.8766    12.8108   0.849  0.39595    
## N.gravidanze2     53.4801    17.1263   3.123  0.00181 ** 
## N.gravidanze>2    51.2689    19.5815   2.618  0.00889 ** 
## Fumatrici        -33.1047    27.5854  -1.200  0.23022    
## Gestazione        32.7370     3.8143   8.583  < 2e-16 ***
## Lunghezza         10.2669     0.3006  34.152  < 2e-16 ***
## Cranio            10.4813     0.4270  24.545  < 2e-16 ***
## Tipo.partoNat     30.9804    12.0956   2.561  0.01049 *  
## SessoM            77.8263    11.1842   6.959 4.38e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.1 on 2490 degrees of freedom
## Multiple R-squared:  0.7284, Adjusted R-squared:  0.7274 
## F-statistic: 741.9 on 9 and 2490 DF,  p-value: < 2.2e-16
anova(mod3,mod2)
## Analysis of Variance Table
## 
## Model 1: Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Sesso
## Model 2: Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Ospedale + Sesso
##   Res.Df       RSS Df Sum of Sq      F  Pr(>F)  
## 1   2490 187116281                              
## 2   2488 186460389  2    655892 4.3759 0.01267 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
BIC(mod3,mod2)
##      df      BIC
## mod3 11 35238.74
## mod2 13 35245.61

Nel nuovo modello, in cui è stata rimossa la variabile “Ospedale” a causa del suo p-value elevato, possiamo osservare che il coefficiente di determinazione R-squared rimane quasi invariato rispetto al modello precedente, suggerendo che la variabile “Ospedale” non aveva un impatto significativo sulla capacità predittiva del modello. Il test ANOVA mostra un valore di p significativo (p=0.01267), il che suggerisce che la rimozione della variabile ha effettivamente migliorato il modello rispetto a quello con la variabile inclusa. Anche il BIC del nuovo modello è leggermente inferiore rispetto al precedente, indicando che il nuovo modello è preferibile in termini di parsimonia.

mod4 <- update(mod3, ~.-N.gravidanze)
summary(mod4)
## 
## Call:
## lm(formula = Peso ~ Fumatrici + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1118.88  -185.33   -16.16   161.80  2622.90 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -6675.9335   135.7771 -49.168  < 2e-16 ***
## Fumatrici       -27.5245    27.5783  -0.998   0.3184    
## Gestazione       31.4067     3.7882   8.291  < 2e-16 ***
## Lunghezza        10.2276     0.3011  33.969  < 2e-16 ***
## Cranio           10.6379     0.4242  25.075  < 2e-16 ***
## Tipo.partoNat    29.3167    12.1132   2.420   0.0156 *  
## SessoM           79.2477    11.2025   7.074 1.95e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.7 on 2493 degrees of freedom
## Multiple R-squared:  0.7268, Adjusted R-squared:  0.7262 
## F-statistic:  1106 on 6 and 2493 DF,  p-value: < 2.2e-16
anova(mod4,mod3)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Fumatrici + Gestazione + Lunghezza + Cranio + Tipo.parto + 
##     Sesso
## Model 2: Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Sesso
##   Res.Df       RSS Df Sum of Sq      F   Pr(>F)   
## 1   2493 188177555                                
## 2   2490 187116281  3   1061274 4.7075 0.002791 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
BIC(mod4,mod3)
##      df      BIC
## mod4  8 35229.41
## mod3 11 35238.74

Dopo aver rimosso la variabile “N.gravidanze” dal modello, i risultati mostrano una leggera riduzione del valore di R-suared aggiustato, indicando che il modello spiega leggermente meno la varianza del peso del neonato. Tuttavia, la variabile “N.gravidanze” aveva un p-value non significativo, il che giustifica la sua rimozione. Il valore di R-squared del modello rimane comunque alto (0.7268), il che indica una buona capacità esplicativa.

L’ANOVA conferma che la variabile “N.gravidanze” ha avuto un impatto significativo sul modello, ma il BIC è migliorato dopo la sua rimozione, suggerendo che il modello senza “N.gravidanze” è più semplice. Questo supporta la decisione di rimuovere la variabile per ottenere un modello più semplice senza una perdita significativa di capacità predittiva.

mod5 <- update(mod4,~.-Fumatrici)
summary(mod5)
## 
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza + Cranio + Tipo.parto + 
##     Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1118.43  -185.56   -16.07   161.53  2626.18 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -6675.8084   135.7769 -49.167  < 2e-16 ***
## Gestazione       31.1917     3.7821   8.247 2.59e-16 ***
## Lunghezza        10.2412     0.3008  34.049  < 2e-16 ***
## Cranio           10.6397     0.4242  25.080  < 2e-16 ***
## Tipo.partoNat    29.1062    12.1113   2.403   0.0163 *  
## SessoM           79.0670    11.2010   7.059 2.17e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.7 on 2494 degrees of freedom
## Multiple R-squared:  0.7267, Adjusted R-squared:  0.7262 
## F-statistic:  1326 on 5 and 2494 DF,  p-value: < 2.2e-16
anova(mod5,mod4)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Gestazione + Lunghezza + Cranio + Tipo.parto + Sesso
## Model 2: Peso ~ Fumatrici + Gestazione + Lunghezza + Cranio + Tipo.parto + 
##     Sesso
##   Res.Df       RSS Df Sum of Sq      F Pr(>F)
## 1   2494 188252743                           
## 2   2493 188177555  1     75188 0.9961 0.3184
BIC(mod5,mod4)
##      df      BIC
## mod5  7 35222.59
## mod4  8 35229.41

Dopo aver rimosso la variabile “Fumatrici” dal modello, possiamo notare che il modello finale è leggermente più semplice (ha un parametro in meno rispetto al modello precedente). Il valore di R-squared rimane quasi invariato rispetto al modello precedente, suggerendo che la variabile “Fumatrici” non contribuiva significativamente alla spiegazione della varianza del peso del neonato.

Il test ANOVA tra il modello con e senza “Fumatrici” non mostra una differenza significativa, come indicato dal valore p di 0.3184. Questo conferma che la rimozione della variabile “Fumatrici” non ha comportato una perdita significativa di informazione predittiva. Inoltre, confrontando i valori di BIC, il nuovo modello ha un valore leggermente inferiore, indicando che è più parco, ovvero preferibile, poiché utilizza meno parametri mantenendo una capacità predittiva simile

mod6 <- update(mod5,~.+I(Lunghezza^2))
summary(mod6)
## 
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza + Cranio + Tipo.parto + 
##     Sesso + I(Lunghezza^2), data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1138.55  -184.21   -12.76   162.83  1787.08 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     99.573779 724.648815   0.137   0.8907    
## Gestazione      41.049188   3.857813  10.641  < 2e-16 ***
## Lunghezza      -19.727801   3.164324  -6.234 5.31e-10 ***
## Cranio          10.767167   0.417043  25.818  < 2e-16 ***
## Tipo.partoNat   26.657712  11.902522   2.240   0.0252 *  
## SessoM          71.373694  11.034973   6.468 1.19e-10 ***
## I(Lunghezza^2)   0.031082   0.003268   9.512  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 269.9 on 2493 degrees of freedom
## Multiple R-squared:  0.7363, Adjusted R-squared:  0.7357 
## F-statistic:  1160 on 6 and 2493 DF,  p-value: < 2.2e-16
anova(mod6,mod5)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Gestazione + Lunghezza + Cranio + Tipo.parto + Sesso + 
##     I(Lunghezza^2)
## Model 2: Peso ~ Gestazione + Lunghezza + Cranio + Tipo.parto + Sesso
##   Res.Df       RSS Df Sum of Sq      F    Pr(>F)    
## 1   2493 181659161                                  
## 2   2494 188252743 -1  -6593582 90.487 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
BIC(mod6,mod5)
##      df      BIC
## mod6  8 35141.28
## mod5  7 35222.59

Sono stati effettuati diversi tentativi per migliorare il modello di regressione, esplorando l’aggiunta di nuove variabili derivate come Gestazione^2, Cranio^2, e l’interazione tra Cranio e Lunghezza (Cranio*Lunghezza). Tuttavia, nessuna di queste combinazioni ha portato a miglioramenti significativi nel modello. I test condotti hanno dimostrato che l’inclusione di queste variabili non riduceva significativamente il BIC né aumentava il R-squared in maniera rilevante.

L’aggiunta della variabile Lunghezza^2 ha apportato un miglioramento significativo al modello di regressione. Questo viene confermato dai risultati del test ANOVA, dove il p-value è estremamente basso (< 2.2e-16), indicando che l’aggiunta del termine quadratico per la lunghezza è statisticamente significativa e migliora il modello in modo sostanziale. Inoltre, il Multiple R-squared è aumentato dal 72.67% nel modello precedente a 73.63% nel modello attuale, dimostrando una maggiore capacità di spiegare la variabilità dei dati.

Anche il BIC si è ridotto significativamente, il che indica che il nuovo modello è preferibile rispetto al precedente, poiché bilancia meglio la complessità del modello con la qualità dell’adattamento ai dati. Questo rafforza ulteriormente la validità del nuovo modello che incorpora il termine quadratico.

outliers <- abs(rstandard(mod6)) > 3
dati_senza_outliers <- dati[!outliers, ]
mod7 <- lm(Peso ~ Lunghezza + Cranio + Sesso + Gestazione + I(Lunghezza^2), data = dati_senza_outliers)
summary(mod7)
## 
## Call:
## lm(formula = Peso ~ Lunghezza + Cranio + Sesso + Gestazione + 
##     I(Lunghezza^2), data = dati_senza_outliers)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -834.0 -178.1   -8.8  166.0  794.1 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -1.515e+03  7.216e+02  -2.099 0.035924 *  
## Lunghezza      -1.198e+01  3.178e+00  -3.768 0.000168 ***
## Cranio          1.046e+01  4.026e-01  25.990  < 2e-16 ***
## SessoM          7.613e+01  1.035e+01   7.353 2.62e-13 ***
## Gestazione      3.402e+01  3.715e+00   9.158  < 2e-16 ***
## I(Lunghezza^2)  2.362e-02  3.260e-03   7.244 5.79e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 252.1 on 2471 degrees of freedom
## Multiple R-squared:  0.7629, Adjusted R-squared:  0.7624 
## F-statistic:  1590 on 5 and 2471 DF,  p-value: < 2.2e-16

In questi risultati è stato applicato un filtro per rimuovere gli outliers, identificati utilizzando il valore standardizzato dei residui del modello precedente (mod6). Gli outliers sono stati definiti come punti con un valore standardizzato superiore a 3 in valore assoluto. I dati senza questi outliers sono stati poi utilizzati per stimare un nuovo modello lineare (mod7) con la stessa formula, includendo le variabili Lunghezza, Cranio, Sesso, Gestazione e Lunghezza^2.

Inoltre, il R-squared=0.7629 è migliorato, indicando che il modello spiega meglio la variabilità della variabile dipendente Peso dopo aver rimosso gli outliers.

Analisi della qualità del modello

par(mfrow = c(2, 2))
plot(mod6)

shapiro.test(residuals(mod7))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(mod7)
## W = 0.99733, p-value = 0.0002752
lmtest::bptest(mod7)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod7
## BP = 13.96, df = 5, p-value = 0.01587
lmtest::dwtest(mod7)
## 
##  Durbin-Watson test
## 
## data:  mod7
## DW = 1.97, p-value = 0.2273
## alternative hypothesis: true autocorrelation is greater than 0
cook <- cooks.distance(mod7)
plot(cook)

Il grafico che hai mostrato rappresenta la distanza di Cook per ogni osservazione nel modello. Viene utilizzata per identificare potenziali outliers influenti, ossia osservazioni che hanno un effetto sproporzionato sui parametri stimati del modello. La maggior parte dei punti ha valori di distanza di Cook molto piccoli (vicini a 0), il che significa che la maggioranza delle osservazioni non ha un’influenza significativa sul modello. Alcuni punti si trovano significativamente più in alto rispetto agli altri. Queste osservazioni possono essere considerate potenzialmente influenti e dovrebbero essere esaminate più attentamente. Se il loro valore di Cook è alto, potrebbe essere il caso di considerarli outlier influenti o di studiarli ulteriormente per capire perché hanno un impatto così grande sul modello.

Previsioni nuovo caso

nuovo_caso <- data.frame(
  Lunghezza = 500,  
  Cranio = 320,     
  Sesso = "F",      
  Gestazione = 39)

previsione_peso <- predict(mod7, newdata = nuovo_caso)
previsione_peso
##        1 
## 3077.232