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")
| 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.
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
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
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
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")
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.
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.
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.
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.
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.
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.
È 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.
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.
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.
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.
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.
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.
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.
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 <- 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.
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.
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.
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:
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.
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.
nuovo_caso <- data.frame(
Lunghezza = 500,
Cranio = 320,
Sesso = "F",
Gestazione = 39)
previsione_peso <- predict(mod7, newdata = nuovo_caso)
previsione_peso
## 1
## 3077.232