Raccolta dei Dati e Struttura del Dataset

dataset = read.csv("neonati.csv", header = TRUE, stringsAsFactors = FALSE)
head(dataset, 10)
##    Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio
## 1          26            0         0         42 3380       490    325
## 2          21            2         0         39 3150       490    345
## 3          34            3         0         38 3640       500    375
## 4          28            1         0         41 3690       515    365
## 5          20            0         0         38 3700       480    335
## 6          32            0         0         40 3200       495    340
## 7          26            1         0         39 3100       480    345
## 8          25            0         0         40 3580       510    349
## 9          22            1         0         40 3670       500    335
## 10         23            0         0         41 3700       510    362
##    Tipo.parto Ospedale Sesso
## 1         Nat     osp3     M
## 2         Nat     osp1     F
## 3         Nat     osp2     M
## 4         Nat     osp2     M
## 5         Nat     osp3     F
## 6         Nat     osp2     F
## 7         Nat     osp3     F
## 8         Nat     osp1     M
## 9         Ces     osp2     F
## 10        Ces     osp2     F

Classificazione e Valutazione Preliminare delle Variabili

Variabile risposta: il peso del neonato è la variabile risposta; si tratta di una variabile di tipo quantitativo (continua), la cui unità di misura si esprime in grammi. La variabile risposta è la variabile statisticamente dipendente dalle variabili esplicative, e che il modello dovrà stimare.

Variabili esplicative:

  1. età della madre, variabile quantitativa discreta caratterizzata da una potenziale relazione con la variabile risposta;

  2. numero di gravidanze: variabile quantitativa discreta con una possibile associazione al peso neonatale;

  3. fumo materno: variabile categorica nominale binaria, la cui relazione con il peso del neonato è molto probabile;

  4. durata della gravidanza: variabile quantitativa continua, probabilmente il principale predittore del peso;

  5. lunghezza del neonato: variabile quantitativa continua, con una considerabile significatività predittiva;

  6. diametro del craneo: variabile quantitativa continua, simile alla variabile lunghezza (in termini di dipendenza);

  7. tipo di parto: variabile categorica nominale, la cui relazione con la variabile risposta è probabilmente inversa (il tipo di parto potrebbe essere conseguenza del peso, e non il contrario);

  8. ospedale: variabile categorica nominale, il cui legame al peso neonatale è plausibile in termini di differenze strutturali e protocolli ospedalieri (utile soprattutto per valutare gli effetti sistematici, e non casuali);

  9. sesso del neonato: variabile categorica binaria, con probabile relazione alla variabile risposta.

Analisi e Modellizzazione

Analisi Preliminare

Indici di Posizione

summary(dataset[, c("Anni.madre",
                    "N.gravidanze",
                    "Gestazione",
                    "Peso",
                    "Lunghezza",
                    "Cranio")])
##    Anni.madre     N.gravidanze       Gestazione         Peso     
##  Min.   : 0.00   Min.   : 0.0000   Min.   :25.00   Min.   : 830  
##  1st Qu.:25.00   1st Qu.: 0.0000   1st Qu.:38.00   1st Qu.:2990  
##  Median :28.00   Median : 1.0000   Median :39.00   Median :3300  
##  Mean   :28.16   Mean   : 0.9812   Mean   :38.98   Mean   :3284  
##  3rd Qu.:32.00   3rd Qu.: 1.0000   3rd Qu.:40.00   3rd Qu.:3620  
##  Max.   :46.00   Max.   :12.0000   Max.   :43.00   Max.   :4930  
##    Lunghezza         Cranio   
##  Min.   :310.0   Min.   :235  
##  1st Qu.:480.0   1st Qu.:330  
##  Median :500.0   Median :340  
##  Mean   :494.7   Mean   :340  
##  3rd Qu.:510.0   3rd Qu.:350  
##  Max.   :565.0   Max.   :390

Da un’analisi preliminare degli indici di posizione è possibile notare alcune enomalie nei dati raccolti. Nel caso della variabile Anni.madre si rileva che il valore minimo corrisponde a 0 anni (valore logicamente impossibile), seguito dal valore 1 anno (rilevabile ordinando il dataset in funzione dell’età). Entrambi sono probabilmente associabili a un errore commesso durante la raccolta dati. Le altre variabili non sembrano mostrare ulteriori incoerenze nei dati.

Indici di Variabilità

sapply(dataset[, c("Anni.madre",
                    "N.gravidanze",
                    "Gestazione",
                    "Peso",
                    "Lunghezza",
                    "Cranio")], sd)
##   Anni.madre N.gravidanze   Gestazione         Peso    Lunghezza       Cranio 
##     5.273578     1.280587     1.868639   525.038744    26.318644    16.425330
sapply(dataset[, c("Anni.madre",
                    "N.gravidanze",
                    "Gestazione",
                    "Peso",
                    "Lunghezza",
                    "Cranio")], function(x){(sd(x)/mean(x))*100})
##   Anni.madre N.gravidanze   Gestazione         Peso    Lunghezza       Cranio 
##    18.724536   130.512310     4.793792    15.987388     5.320208     4.830565

La variabilità delle variabili quantitative considerate risulta essere piuttosto ridotta, ad eccezione del numero di gravidanze (il cui coefficiente di variazione supera il 100%). Questo dato è legato al fatto che la deviazione standard appare maggiore del valor medio (come conseguenza della presenza di valori pari a zero).

Indici di Forma

library(moments)

sapply(dataset[, c("Anni.madre",
                    "N.gravidanze",
                    "Gestazione",
                    "Peso",
                    "Lunghezza",
                    "Cranio")], skewness)
##   Anni.madre N.gravidanze   Gestazione         Peso    Lunghezza       Cranio 
##    0.0428115    2.5142541   -2.0653133   -0.6470308   -1.5146991   -0.7850527
sapply(dataset[, c("Anni.madre",
                    "N.gravidanze",
                    "Gestazione",
                    "Peso",
                    "Lunghezza",
                    "Cranio")], kurtosis)
##   Anni.madre N.gravidanze   Gestazione         Peso    Lunghezza       Cranio 
##     3.380417    13.989406    11.258150     5.031532     9.487174     5.946206

Le distribuzioni appaiono quasi tutte asimmetriche (fatta eccezzione per l’età della madre), e leptocurtiche (ovvero più allungate). I risultati di asimmetria e curtosi più emblematici sono quelli relativi al numero di gravidanze, infatti si osserva una distribuzione fortemente asimmetrica e positiva (con valori e modalità basse più frequenti) e leptocurtica (più allungata rispetto alle altre distribuzioni).

Distribuzioni di Frequenze

Distribuzioni_frequenze = function(x) {
  n = table(x)
  f = prop.table(n)
  data_file_out = data.frame(
    Modalità = names(n),
    Frequenza_assoluta = as.vector(n),
    Frequenza_relativa = as.vector(f)
    )
  data_file_out$Frequenza_cumulata = cumsum(data_file_out$Frequenza_assoluta)
  data_file_out$Frequenza_relativa_cumulata = cumsum(data_file_out$Frequenza_relativa)
  return(data_file_out)
}

Distribuzioni_frequenze(dataset$Fumatrici)
##   Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1        0               2396             0.9584               2396
## 2        1                104             0.0416               2500
##   Frequenza_relativa_cumulata
## 1                      0.9584
## 2                      1.0000
Distribuzioni_frequenze(dataset$Tipo.parto)
##   Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1      Ces                728             0.2912                728
## 2      Nat               1772             0.7088               2500
##   Frequenza_relativa_cumulata
## 1                      0.2912
## 2                      1.0000
Distribuzioni_frequenze(dataset$Ospedale)
##   Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1     osp1                816             0.3264                816
## 2     osp2                849             0.3396               1665
## 3     osp3                835             0.3340               2500
##   Frequenza_relativa_cumulata
## 1                      0.3264
## 2                      0.6660
## 3                      1.0000
Distribuzioni_frequenze(dataset$Sesso)
##   Modalità Frequenza_assoluta Frequenza_relativa Frequenza_cumulata
## 1        F               1256             0.5024               1256
## 2        M               1244             0.4976               2500
##   Frequenza_relativa_cumulata
## 1                      0.5024
## 2                      1.0000

In prima istanza, dalle distribuzioni di frequenza delle variabili qualitative, si possono fare alcune considerazioni. All’interno del campione preso in esame, la maggior parte delle madri risulta essere non fumatrice (95% circa), mentre la modalità di parto più frequente è il parto naturale (circa il 70%). La distribuzione delle unità statistiche tra i tre ospedali presi in esame è piuttosto omegenea, e lo stesso vale per il sesso dei neonati. Tra queste, la variabile di maggiore interessante è il fumo materno, il quale potrebbe avere una forte relazione con la variabile risposta. Tuttavia è possibile che lo sbilanciamento tra le frequenze dei due valori assumibili da tale variabile, renda la stessa poco informativa per un modello predittivo.

Visualizzazioni Grafiche

library(ggplot2)

ggplot(dataset, aes(x = Peso)) +
  geom_histogram(binwidth = 1,
                 color = "steelblue") +
  scale_y_continuous(breaks = seq(0, 60, by=20), limits = c(0, 60)) +
  labs(title = "Profilo del Peso Neonatale",
       x = "Peso (grammi)",
       y = "Frequenza Assoluta") +
  theme_classic(base_size = 14)

ggplot(dataset, aes(x = Peso)) +
  geom_density(fill = "steelblue", alpha = 0.4) +
  labs(title = "Distribuzione del Peso Neonatale",
       x = "Peso (grammi)",
       y = "Densità") +
  theme_classic(base_size = 14)

ggplot(dataset, aes(x = Sesso, y = Peso)) +
  geom_boxplot(fill = "gray") +
  labs(title = "Peso alla Nascita per Sesso del Neonato",
       x = "Sesso",
       y = "Peso (grammi)") +
  theme_classic()

ggplot(dataset, aes(x = Ospedale, y = Peso)) +
  geom_boxplot(fill = "gray") +
  labs(title = "Peso alla Nascita per Ospedale",
       x = "Ospedale",
       y = "Peso (grammi)") +
  theme_classic()

ggplot(dataset, aes(x = Tipo.parto, y = Peso)) +
  geom_boxplot(fill = "gray") +
  labs(title = "Peso alla Nascita per Tipo di Parto",
       x = "Tipo di Parto",
       y = "Peso (grammi)") +
  theme_classic()

dataset$Fumatrici = factor(dataset$Fumatrici,
                           levels = c(0,1),
                           labels = c("Non Fumatrice", "Fumatrice"))

ggplot(dataset, aes(x = Fumatrici, y = Peso)) +
  geom_boxplot(fill = "gray") +
  labs(title = "Peso alla Nascita per Fumo Materno",
       x = "Fumo",
       y = "Peso (grammi)") +
  theme_classic()

La distribuzione del peso neonatale appare approssimativamente simmetrica, caratterizzata da una leggera coda a sinistra (valori più bassi), coerente con la presenza di alcuni neonati sottopeso. Non emergono evidenti multimodalità (è presente un solo picco) tali da suggerire la presenza di sottogruppi distinti. Inoltre la maggior parte dei pesi si concentra in un intervallo compreso tra i 3000 e i 4000 grammi circa. Dai boxplot invece si osserva la presenza di numerosi outlier, in particolare nella coda inferiore della distribuzione. Tali osservazioni rappresentano probabilmente neonati sottopeso e non necessariamente errori di rilevazione. Inoltre non sono visibili differenze significative tra le mediane (e più in generale tra le ditribuzioni) delle varie categorie. Nel confronto tra i sessi si nota una mediana del peso leggermente superiore per i maschi rispetto alle femmine. Tuttavia, la sovrapposizione degli intervalli interquartili suggerisce che la differenza, pur visibile a livello descrittivo, potrebbe non essere marcata. Il boxplot relativo al fumo materno mostra una mediana del peso inferiore per i neonati di madri fumatrici. Ciononostante, l’elevato sbilanciamento tra le frequenze delle due modalità potrebbe limitare l’affidabilità del confronto descrittivo. I boxplot relativi ai diversi ospedali non evidenziano differenze sostanziali né in termini di mediana, né di dispersione, suggerendo un’assenza di marcate eterogeneità strutturali tra le strutture considerate.

Controllo Rapido delle Correlazioni

cor(dataset[, c("Anni.madre",
                "N.gravidanze",
                "Gestazione",
                "Peso",
                "Lunghezza",
                "Cranio")])
##               Anni.madre N.gravidanze Gestazione        Peso   Lunghezza
## Anni.madre    1.00000000   0.38063184 -0.1356671 -0.02247017 -0.06349157
## N.gravidanze  0.38063184   1.00000000 -0.1014919  0.00240730 -0.06040371
## Gestazione   -0.13566714  -0.10149194  1.0000000  0.59176872  0.61892045
## Peso         -0.02247017   0.00240730  0.5917687  1.00000000  0.79603676
## Lunghezza    -0.06349157  -0.06040371  0.6189204  0.79603676  1.00000000
## Cranio        0.01607670   0.03900707  0.4608289  0.70480151  0.60334097
##                  Cranio
## Anni.madre   0.01607670
## N.gravidanze 0.03900707
## Gestazione   0.46082894
## Peso         0.70480151
## Lunghezza    0.60334097
## Cranio       1.00000000
plot(dataset$Anni.madre, dataset$Peso, pch = 20)

plot(dataset$N.gravidanze, dataset$Peso, pch = 20)

plot(dataset$Lunghezza, dataset$Cranio, pch = 20)

La durata della gravidanza mostra una forte plausibilità di associazione con il peso, e nel contempo anche le variabili antropometriche (lunghezza e diametro cranico) risultano fortemente correlate tra loro e con la variabile risposta, suggerendo una possibile futura attenzione alla multicollinearità nel modello. Al contrario, l’età della madre e il numero di gravidanze non sembrano mostrare alcun tipo di relazione lineare con la variabile risposta, per cui potrebbe essere ragionevole escluderle dal modello predittivo.

Ipotesi e Test

  1. In alcuni ospedali si effettuano più parti cesarei?

H(0): ospedale e tipologia di parto sono indipendenti

H(1): esiste un’associazione tra ospedale e tipologia di parto

tabella_contingenza = table(dataset$Ospedale, dataset$Tipo.parto)

tabella_contingenza
##       
##        Ces Nat
##   osp1 242 574
##   osp2 254 595
##   osp3 232 603
test_chi = chisq.test(tabella_contingenza)

test_chi
## 
##  Pearson's Chi-squared test
## 
## data:  tabella_contingenza
## X-squared = 1.0972, df = 2, p-value = 0.5778
test_chi$expected
##       
##             Ces      Nat
##   osp1 237.6192 578.3808
##   osp2 247.2288 601.7712
##   osp3 243.1520 591.8480
fisher.test(tabella_contingenza)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  tabella_contingenza
## p-value = 0.5782
## alternative hypothesis: two.sided

Il test Chi-quadrato di indipendenza non evidenzia una relazione statisticamente significativa tra ospedale e tipo di parto (X-squared = 1.0972; p-value = 0.5778 >> 0.05). Le frequenze osservate risultano molto vicine a quelle attese sotto ipotesi di indipendenza. Pertanto, non vi è evidenza che in uno specifico ospedale si effettuino proporzionalmente più parti cesarei rispetto agli altri (non si rifiuta l’ipotesi nulla). Le eventuali differenze osservate appaiono attribuibili alla variabilità campionaria.

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

H(0): media del peso e della lunghezza del campione coincidono con le medie della popolazione

H(1): media del peso e della lunghezza del campione noon sono significativamente uguali alle medie della popolazione

mu_peso_pop = 3300
mu_lunghezza_pop = 500

test_peso = t.test(dataset$Peso, mu = mu_peso_pop)

test_peso
## 
##  One Sample t-test
## 
## data:  dataset$Peso
## t = -1.516, df = 2499, p-value = 0.1296
## alternative hypothesis: true mean is not equal to 3300
## 95 percent confidence interval:
##  3263.490 3304.672
## sample estimates:
## mean of x 
##  3284.081
test_lunghezza = t.test(dataset$Lunghezza, mu = mu_lunghezza_pop)

test_lunghezza
## 
##  One Sample t-test
## 
## data:  dataset$Lunghezza
## t = -10.084, df = 2499, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 500
## 95 percent confidence interval:
##  493.6598 495.7242
## sample estimates:
## mean of x 
##   494.692
shapiro.test(dataset$Peso)
## 
##  Shapiro-Wilk normality test
## 
## data:  dataset$Peso
## W = 0.97066, p-value < 2.2e-16

Il test t non evidenzia una differenza statisticamente significativa tra la media del peso campionario (3284 g) e il valore di riferimento pari a 3300 g (t = -1.516; p-value = 0.1296 > 0.05). L’intervallo di confidenza al 95% include il valore ipotizzato, confermando la compatibilità tra campione e popolazione (ipotesi nulla non rifiutata). Sebbene il test di Shapiro-Wilk segnali una deviazione dalla normalità, l’elevata numerosità campionaria (n = 2500) rende il test t robusto a tali violazioni. Parallelamente, il test evidenzia che la lunghezza media del campione (494.69 mm) è statisticamente inferiore al valore di riferimento pari a 500 mm (t = -10.084; p-value < 2.2e-16 << 0.05). L’intervallo di confidenza al 95% non include il valore ipotizzato, confermando il rigetto dell’ipotesi nulla. Ciononostante, la differenza osservata è pari a circa 5 millimetri, entità relativamente contenuta dal punto di vista clinico.

  1. Le misure antropometriche sono significativamente diverse tra i due sessi?

H(0): le medie delle misure antropometriche non sono significativamente diverse tra maschi e femmine

H(1): le medie delle misure antropometriche sono significativamente diverse tra maschi e femmine

t_peso_sesso = t.test(Peso ~ Sesso, data = dataset)

t_peso_sesso
## 
##  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
t_lunghezza_sesso = t.test(Lunghezza ~ Sesso, data = dataset)

t_lunghezza_sesso
## 
##  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
t_cranio_sesso = t.test(Cranio ~ Sesso, data = dataset)

t_cranio_sesso
## 
##  Welch Two Sample t-test
## 
## data:  Cranio by Sesso
## t = -7.4102, df = 2491.4, p-value = 1.718e-13
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
##  -6.089912 -3.541270
## sample estimates:
## mean in group F mean in group M 
##        337.6330        342.4486

Il confronto tra maschi e femmine evidenzia differenze statisticamente significative per tutte le misure antropometriche considerate. In particolare, i maschi presentano un peso medio superiore di circa 247 grammi rispetto alle femmine (p-value < 2.2e-16). Analogamente, risultano maggiori sia la lunghezza media (circa 10 mm di differenza) sia la circonferenza cranica (circa 4.8 mm). Tali risultati sono coerenti con l’evidenza biologica secondo cui i neonati maschi tendono ad avere dimensioni superiori rispetto alle femmine.

Creazione del Modello di Regressione

Rimozione di outlier associati ad errori in fase di campionamento

dataset <- subset(dataset, !(Anni.madre %in% c(0, 1)))

L’eliminazione di alcuni dati presenti nel dataset è ragionevole dal momento in cui la numerosità campionaria risulta essere piuttosto elevata; a maggior ragione se tali unità statistiche sono soggette a errori di imputazione.

Modello di Regressione Lineare Multipla (solo variabili quantitative)

mod_1 = lm(Peso ~ Anni.madre
          + N.gravidanze
          + Gestazione
          + Lunghezza
          + Cranio,
          data = dataset)

summary(mod_1)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Gestazione + 
##     Lunghezza + Cranio, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1129.74  -183.13   -12.59   167.92  2630.94 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -6841.5343   141.4286 -48.374   <2e-16 ***
## Anni.madre       0.9652     1.1599   0.832   0.4054    
## N.gravidanze    12.0612     4.7131   2.559   0.0106 *  
## Gestazione      33.2285     3.8572   8.615   <2e-16 ***
## Lunghezza       10.4648     0.3020  34.650   <2e-16 ***
## Cranio          10.6301     0.4308  24.674   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 277.3 on 2492 degrees of freedom
## Multiple R-squared:  0.7218, Adjusted R-squared:  0.7212 
## F-statistic:  1293 on 5 and 2492 DF,  p-value: < 2.2e-16
mod_2 = update(mod_1, ~. - Anni.madre)

summary(mod_2)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio, 
##     data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1118.36  -181.20   -12.15   167.93  2636.44 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -6808.8062   135.8418 -50.123  < 2e-16 ***
## N.gravidanze    13.5089     4.3800   3.084  0.00206 ** 
## Gestazione      32.8947     3.8360   8.575  < 2e-16 ***
## Lunghezza       10.4643     0.3020  34.651  < 2e-16 ***
## Cranio          10.6486     0.4302  24.752  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 277.3 on 2493 degrees of freedom
## Multiple R-squared:  0.7217, Adjusted R-squared:  0.7213 
## F-statistic:  1616 on 4 and 2493 DF,  p-value: < 2.2e-16
mod_3 = update(mod_2, ~. - N.gravidanze)

summary(mod_3)
## 
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza + Cranio, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1105.68  -183.52   -12.69   166.41  2622.95 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -6778.1583   135.7089 -49.946   <2e-16 ***
## Gestazione     31.7554     3.8247   8.303   <2e-16 ***
## Lunghezza      10.4210     0.3022  34.486   <2e-16 ***
## Cranio         10.7911     0.4285  25.186   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 277.8 on 2494 degrees of freedom
## Multiple R-squared:  0.7207, Adjusted R-squared:  0.7203 
## F-statistic:  2145 on 3 and 2494 DF,  p-value: < 2.2e-16
mod_4 = lm(Peso ~ Gestazione
           + Lunghezza,
           data = dataset)

summary(mod_4)
## 
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza, data = dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1152.7  -199.8   -19.6   192.2  3627.0 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -5350.0450   138.0593  -38.75   <2e-16 ***
## Gestazione     45.1583     4.2411   10.65   <2e-16 ***
## Lunghezza      13.8954     0.3011   46.16   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 311 on 2495 degrees of freedom
## Multiple R-squared:  0.6496, Adjusted R-squared:  0.6493 
## F-statistic:  2313 on 2 and 2495 DF,  p-value: < 2.2e-16
mod_5 = lm(Peso ~ Gestazione
           + Cranio,
           data = dataset)

summary(mod_5)
## 
## Call:
## lm(formula = Peso ~ Gestazione + Cranio, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1360.91  -225.64    -8.12   224.37  1469.02 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -6394.6522   164.3339  -38.91   <2e-16 ***
## Gestazione     95.3298     4.0717   23.41   <2e-16 ***
## Cranio         17.5365     0.4632   37.86   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 337.5 on 2495 degrees of freedom
## Multiple R-squared:  0.5874, Adjusted R-squared:  0.5871 
## F-statistic:  1776 on 2 and 2495 DF,  p-value: < 2.2e-16
anova(mod_1, mod_2, mod_3, mod_4, mod_5)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Anni.madre + N.gravidanze + Gestazione + Lunghezza + Cranio
## Model 2: Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio
## Model 3: Peso ~ Gestazione + Lunghezza + Cranio
## Model 4: Peso ~ Gestazione + Lunghezza
## Model 5: Peso ~ Gestazione + Cranio
##   Res.Df       RSS Df Sum of Sq        F    Pr(>F)    
## 1   2492 191639589                                    
## 2   2493 191692844 -1    -53254   0.6925  0.405396    
## 3   2494 192424285 -1   -731441   9.5114  0.002064 ** 
## 4   2495 241365355 -1 -48941070 636.4089 < 2.2e-16 ***
## 5   2495 284182810  0 -42817455                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(mod_1, mod_2, mod_3, mod_4, mod_5)
##       df      AIC
## mod_1  7 35200.22
## mod_2  6 35198.92
## mod_3  5 35206.43
## mod_4  4 35770.50
## mod_5  4 36178.44
BIC(mod_1, mod_2, mod_3, mod_4, mod_5)
##       df      BIC
## mod_1  7 35240.99
## mod_2  6 35233.86
## mod_3  5 35235.55
## mod_4  4 35793.79
## mod_5  4 36201.73

In primo luogo è stata condotta un’analisi volta a valutare l’impatto delle sole variabili quantitative sulla variabile risposta Peso, con l’obiettivo di individuare eventuali predittori poco rilevanti e di verificare possibili problematiche di multicollinearità. Il primo modello include tutte le variabili quantitative disponibili e dall’analisi emerge una ridotta significatività statistica per le variabili Anni.madre e N.gravidanze (p-value rispettivamente pari a 0.4054 e 0.0106). A tale modello corrisponde un R quadro pari a 0.7218, mentre l’errore standard residuo è di circa 277g. Il secondo modello è stato ottenuto eliminando la variabile Anni.madre, e rispetto al modello precedente si osserva una trascurabile diminuzione del fattore R quadro (0.7217). L’errore standard residuo resta sostanzialmente invariato, inoltre si rileva un incremento della significatività della variabile N.gravidanze (p-value = 0.00206), evidenza confermata anche dal confronto tramite test ANOVA tra i modelli annidati. Nel terzo modello, eliminando anche la variabile N.gravidanze, si osserva un moderato aumento dell’errore standard residuo e una lieve riduzione del coefficiente di determinazione (0.7207). Il test ANOVA indica però come la variabile rimossa fornisse un contributo statisticamente significativo condizionatamente alle altre variabili; pertanto, la sua esclusione non risulta giustificata dal punto di vista inferenziale. Gli ultimi due modelli, nei quali le variabili Lunghezza e Cranio non sono incluse contemporaneamente, mostrano una marcata riduzione del coefficiente R quadro e un sensibile incremento dell’errore standard residuo, evidenziando una significativa perdita di capacità esplicativa. Il confronto ANOVA tra i modelli 4 e 5 e i modelli precedenti suggerisce l’opportunità di mantenere entrambe le variabili nel modello di regressione, nonostante la loro correlazione reciproca. Infine, l’analisi comparativa degli indici informativi AIC e BIC porta a individuare come modello preferibile il modello 2, che esclude unicamente la variabile Anni.madre, garantendo il miglior compromesso tra bontà di adattamento e parsimonia.

library(car)
## Caricamento del pacchetto richiesto: carData
vif(mod_2)
## N.gravidanze   Gestazione    Lunghezza       Cranio 
##     1.022216     1.669153     2.053033     1.622427
par(mfrow=c(2,2))
plot(mod_2)

lev = hatvalues(mod_2)
plot(lev)
p = sum(lev)
n = nrow(dataset)

soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
##           3          13          15          34          47          61 
## 0.004144628 0.005348393 0.006384459 0.006330591 0.004091677 0.004074567 
##          67          89          96         101         106         131 
## 0.005061173 0.012580300 0.005091319 0.007516185 0.013201134 0.006301323 
##         134         151         155         161         189         190 
## 0.007261161 0.010048467 0.006178597 0.019369096 0.004531657 0.005180517 
##         204         205         206         220         249         277 
## 0.013758661 0.005078029 0.008226152 0.007140899 0.004566339 0.004133326 
##         294         304         305         310         312         315 
## 0.005392658 0.004693725 0.004682055 0.028668439 0.011459533 0.005145748 
##         348         378         440         442         445         471 
## 0.004121778 0.015936990 0.004930444 0.007404052 0.007482938 0.004274133 
##         486         492         497         516         540         582 
## 0.005049514 0.008261498 0.004707257 0.012693738 0.004134315 0.011164034 
##         587         592         614         615         629         638 
## 0.008322582 0.006260323 0.005034980 0.004466877 0.004230136 0.005573556 
##         656         657         684         697         702         706 
## 0.005669547 0.005027922 0.008389813 0.005493596 0.005061173 0.004195534 
##         726         729         748         750         757         765 
## 0.004411121 0.004889093 0.008560393 0.006918327 0.007894547 0.005173699 
##         769         805         828         893         895         913 
## 0.004007519 0.014357517 0.006950689 0.004591706 0.004708871 0.005115923 
##         928         946         947         949         951         956 
## 0.022661203 0.006515166 0.008383174 0.004392898 0.004022658 0.007665979 
##         964         985         991        1008        1014        1049 
## 0.004029692 0.006783725 0.004295524 0.005001734 0.008451943 0.004672780 
##        1067        1091        1096        1106        1130        1166 
## 0.008395289 0.007682371 0.004603339 0.005504258 0.031513152 0.005083204 
##        1181        1188        1200        1219        1238        1248 
## 0.005323594 0.006239247 0.005016914 0.030480569 0.004992954 0.012920980 
##        1262        1273        1275        1291        1293        1294 
## 0.004185997 0.006859386 0.004068395 0.005698916 0.005731728 0.004435634 
##        1311        1321        1323        1325        1356        1357 
## 0.009473731 0.009133604 0.004057347 0.004541346 0.004584433 0.006864213 
##        1385        1395        1400        1402        1411        1420 
## 0.012619889 0.004697373 0.005309650 0.004503404 0.007715017 0.004462202 
##        1426        1428        1429        1450        1505        1551 
## 0.004217571 0.008177383 0.021692559 0.014780512 0.012783196 0.048800922 
##        1553        1556        1560        1573        1593        1606 
## 0.007885899 0.005380663 0.004118021 0.004214200 0.004661169 0.004720021 
##        1610        1617        1619        1628        1686        1692 
## 0.008520202 0.004435777 0.015056165 0.005015678 0.008306823 0.004298817 
##        1693        1701        1712        1718        1727        1735 
## 0.004720388 0.009383004 0.006576676 0.006465690 0.012940147 0.004126594 
##        1780        1781        1802        1809        1827        1858 
## 0.025492866 0.016529710 0.004156061 0.008677581 0.005022425 0.004107116 
##        1868        1892        1893        1911        1962        1967 
## 0.004996338 0.004784549 0.004040041 0.004149449 0.004878094 0.004792006 
##        1977        2037        2040        2046        2086        2089 
## 0.006547897 0.004668764 0.011373547 0.005306884 0.012972461 0.006259049 
##        2098        2114        2115        2120        2140        2146 
## 0.004683334 0.013313489 0.011480195 0.018663873 0.006199231 0.005099620 
##        2148        2149        2157        2175        2200        2215 
## 0.007542042 0.012103757 0.005245436 0.032531265 0.010401116 0.004674369 
##        2216        2220        2221        2224        2225        2244 
## 0.007909966 0.004903488 0.021007035 0.004838764 0.005437839 0.006655216 
##        2257        2307        2317        2318        2337        2353 
## 0.006142702 0.012294996 0.007322418 0.004360961 0.004717443 0.004255103 
##        2359        2408        2422        2436        2437        2452 
## 0.009911047 0.008465160 0.021291712 0.004732981 0.021652651 0.023809600 
##        2458        2471        2478 
## 0.008445752 0.020569450 0.005535105
plot(rstudent(mod_2))
abline(h=c(-2,2), col=2)
outlierTest(mod_2)
##      rstudent unadjusted p-value Bonferroni p
## 1551 9.937878         7.5343e-23   1.8821e-19
## 155  5.200544         2.1486e-07   5.3673e-04
## 1306 4.619274         4.0467e-06   1.0109e-02
cook = cooks.distance(mod_2)
plot(cook)
max(cook)
## [1] 0.9751441
std_par = par(mfrow = c(1,1))

par(std_par)

Al fine di valutare la solidità del modello 2 è stata condotta un’analisi diagnostica completa, comprendente la verifica della multicollinearità, l’analisi dei residui, l’identificazione di osservazioni influenti e la valutazione dei leverage. In primo luogo, l’analisi della multicollinearità tramite Variance Inflation Factor (VIF) evidenzia valori contenuti per tutte le variabili esplicative: N.gravidanze (1.02), Gestazione (1.67), Lunghezza (2.05) e Cranio (1.62). Tali valori risultano ampiamente inferiori alle soglie comunemente considerate problematiche, indicando l’assenza di multicollinearità rilevante. In particolare, sebbene Lunghezza e Cranio siano biologicamente correlate, il livello di correlazione non risulta tale da compromettere la stabilità delle stime o l’interpretabilità dei coefficienti. Il modello può pertanto essere considerato stabile dal punto di vista strutturale. L’analisi dei leverage, calcolati tramite gli hat values, mostra una soglia teorica pari a 0.0040, con un valore massimo osservato di 0.0488. Sebbene alcune osservazioni superino la soglia convenzionale, ciò risulta comprensibile in presenza di un campione numeroso. Il leverage elevato indica combinazioni relativamente rare delle variabili esplicative, ma non implica automaticamente un’influenza distorsiva sul modello. L’esame dei residui studentizzati mostra alcune osservazioni con valore assoluto superiore a 2, corrispondenti a circa il 4% del campione. Tale proporzione risulta coerente con quanto atteso sotto l’ipotesi di normalità dei residui (circa il 5%), suggerendo l’assenza di un numero anomalo di outlier. Il test formale per l’identificazione di outlier non segnala criticità tali da compromettere l’affidabilità complessiva del modello. Ciononostante, si ritiene opportuno indagare ulteriormente su tre outlier estremamenti lontani dalla previsione del modello e statisticamente incompatibili con l’ipotesi di normalità dei residui, ossia i punti: 1306, 155 e 1551. Infine, l’analisi della Cook’s distance evidenzia un valore massimo pari a 0.975. Tale valore, pur risultando prossimo alla soglia indicativa di forte influenza (1), non la supera. Ciò suggerisce la presenza di almeno un’osservazione potenzialmente influente (probabilmente il punto 1551), la cui analisi individuale potrebbe risultare opportuna; tuttavia, non emergono evidenze di instabilità sistemica del modello. Nel complesso, la diagnostica condotta indica che il modello 2 è statisticamente solido: non presenta problematiche di multicollinearità, non evidenzia deviazioni sostanziali dalle assunzioni di base della regressione lineare e non risulta dominato da osservazioni fortemente influenti. Le osservazioni estreme appaiono compatibili con la naturale variabilità del fenomeno analizzato e non compromettono la validità inferenziale del modello, anche se risulta opportuno investigare sulla loro natura.

  • Unità statistica 1551: variabile Lunghezza ampiamente sotto la media (nonostante le altre variabili quantitative rispettino i valori medi).
new_dataset <- subset(dataset, row.names(dataset) != 1551)

new_mod_2 = lm(Peso ~ N.gravidanze
          + Gestazione
          + Lunghezza
          + Cranio,
          data = new_dataset)

vif(new_mod_2)
## N.gravidanze   Gestazione    Lunghezza       Cranio 
##     1.022484     1.677961     2.111187     1.655146
par(mfrow=c(2,2))
plot(new_mod_2)

lev = hatvalues(new_mod_2)
plot(lev)
p = sum(lev)
n = nrow(dataset)

soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
##           3          13          15          34          47          61 
## 0.004176758 0.005367725 0.006464200 0.006521702 0.004234200 0.004235625 
##          67          89          96         101         106         131 
## 0.005061584 0.012580311 0.005097567 0.007586328 0.013206457 0.006342065 
##         134         151         155         161         189         190 
## 0.007264605 0.010048646 0.006419350 0.019425908 0.004602412 0.005200113 
##         204         205         206         220         249         277 
## 0.013793557 0.005124262 0.008237282 0.007485408 0.004629036 0.004133711 
##         294         304         305         310         312         315 
## 0.005402568 0.004868750 0.004682725 0.028908632 0.011574271 0.005249778 
##         348         378         440         442         445         471 
## 0.004278579 0.015946514 0.004943580 0.007411451 0.007487090 0.004430230 
##         486         492         497         516         540         565 
## 0.005049730 0.008384026 0.004709549 0.012707656 0.004217834 0.004009504 
##         582         587         592         614         615         629 
## 0.011187095 0.008337452 0.006265217 0.005048988 0.004577996 0.004235129 
##         638         656         657         684         697         702 
## 0.005583773 0.005775514 0.005111533 0.008665300 0.005641445 0.005061584 
##         706         726         729         748         750         757 
## 0.004200878 0.004494610 0.005010470 0.008586026 0.006936034 0.007897100 
##         765         769         805         828         893         895 
## 0.005182800 0.004056704 0.014399652 0.006952112 0.004599764 0.004716914 
##         896         913         928         946         947         949 
## 0.004021662 0.005118404 0.022850762 0.006527731 0.008445184 0.004418693 
##         951         956         964         985         991        1008 
## 0.004080597 0.007792162 0.004189395 0.006789256 0.004298293 0.005002130 
##        1014        1049        1067        1091        1096        1106 
## 0.008627737 0.004674870 0.008395448 0.007682546 0.004634585 0.005519039 
##        1130        1166        1181        1188        1200        1219 
## 0.031638892 0.005185751 0.005337204 0.006497898 0.005171213 0.030480694 
##        1238        1248        1262        1273        1275        1291 
## 0.004996471 0.012936987 0.004194097 0.006954448 0.004117937 0.005736221 
##        1293        1294        1311        1321        1323        1325 
## 0.005839709 0.004640045 0.009475816 0.009160595 0.004162421 0.004546154 
##        1356        1357        1385        1395        1400        1402 
## 0.004616896 0.006872382 0.012619991 0.004808889 0.005374660 0.004705062 
##        1411        1420        1426        1428        1429        1450 
## 0.007767406 0.004462234 0.004227169 0.008333391 0.022012783 0.014789606 
##        1505        1553        1556        1560        1573        1593 
## 0.012784077 0.007920062 0.005409418 0.004206564 0.004231473 0.004690105 
##        1606        1610        1617        1619        1628        1686 
## 0.004908552 0.008643270 0.004438659 0.015286517 0.005123141 0.008307208 
##        1692        1693        1701        1712        1718        1727 
## 0.004343552 0.004763909 0.009525641 0.006788159 0.006475666 0.012946273 
##        1735        1780        1781        1802        1809        1827 
## 0.004291141 0.025533909 0.016543287 0.004323222 0.008687202 0.005049858 
##        1858        1868        1892        1893        1911        1962 
## 0.004107387 0.005031779 0.004801142 0.004067113 0.004294453 0.004973655 
##        1967        1977        2037        2040        2046        2086 
## 0.004792730 0.006548038 0.004677247 0.011947261 0.005318489 0.012975802 
##        2089        2098        2114        2115        2120        2140 
## 0.006337469 0.004703172 0.013408848 0.011707366 0.018665947 0.006206913 
##        2146        2148        2149        2157        2175        2200 
## 0.005103777 0.007584098 0.012115341 0.005248685 0.032542584 0.010402450 
##        2215        2216        2220        2221        2224        2225 
## 0.004675657 0.007918054 0.004903674 0.021016651 0.004859064 0.005498581 
##        2244        2257        2307        2317        2318        2337 
## 0.006655247 0.006223306 0.012326453 0.007363315 0.004398632 0.004842870 
##        2353        2359        2408        2422        2436        2437 
## 0.004294291 0.009916182 0.008468894 0.021311354 0.004736426 0.021812436 
##        2452        2458        2471        2478 
## 0.023811367 0.008447234 0.020586575 0.005556762
plot(rstudent(new_mod_2))
abline(h=c(-2,2), col=2)
outlierTest(new_mod_2)
##      rstudent unadjusted p-value Bonferroni p
## 155  5.460692         5.2124e-08   0.00013015
## 1306 4.728068         2.3930e-06   0.00597540
cook = cooks.distance(new_mod_2)
plot(cook)
max(cook)
## [1] 0.07986242
par(std_par)

In seguito alla rimozione dell’osservazione 1551, la distanza di Cook assume un valore decisamente ragionevole (0.0798 << 1). Ciononostante, si considera conveniente non rimuovere tale unità prima dell’aver incluso nel modello anche le variabili qualitative, in quanto essa non appare soggetta a errori di inserimento nel dataset.

Modello di Regressione Lineare Multipla (con variabili qualitative)

dataset$Fumatrici = factor(dataset$Fumatrici)

dataset$Ospedale = factor(dataset$Ospedale)

dataset$Tipo.parto = factor(dataset$Tipo.parto)

dataset$Sesso = factor(dataset$Sesso)

mod_6 = lm(Peso ~., data = dataset)

summary(mod_6)
## 
## Call:
## lm(formula = Peso ~ ., data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1123.26  -181.53   -14.45   161.05  2611.89 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        -6735.7960   141.4790 -47.610  < 2e-16 ***
## Anni.madre             0.8018     1.1467   0.699   0.4845    
## N.gravidanze          11.3812     4.6686   2.438   0.0148 *  
## FumatriciFumatrice   -30.2741    27.5492  -1.099   0.2719    
## Gestazione            32.5773     3.8208   8.526  < 2e-16 ***
## Lunghezza             10.2922     0.3009  34.207  < 2e-16 ***
## Cranio                10.4722     0.4263  24.567  < 2e-16 ***
## Tipo.partoNat         29.6335    12.0905   2.451   0.0143 *  
## Ospedaleosp2         -11.0912    13.4471  -0.825   0.4096    
## Ospedaleosp3          28.2495    13.5054   2.092   0.0366 *  
## SessoM                77.5723    11.1865   6.934 5.18e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274 on 2487 degrees of freedom
## Multiple R-squared:  0.7289, Adjusted R-squared:  0.7278 
## F-statistic: 668.7 on 10 and 2487 DF,  p-value: < 2.2e-16
mod_7 = update(mod_6, ~.
               - Anni.madre
               - Ospedale
               - Tipo.parto)

summary(mod_7)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + 
##     Cranio + Sesso, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1150.24  -181.32   -15.73   162.95  2635.69 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        -6682.2637   135.7983 -49.207  < 2e-16 ***
## N.gravidanze          12.6996     4.3470   2.921  0.00352 ** 
## FumatriciFumatrice   -30.5728    27.6048  -1.108  0.26818    
## Gestazione            32.6437     3.8079   8.573  < 2e-16 ***
## Lunghezza             10.2309     0.3011  33.979  < 2e-16 ***
## Cranio                10.5366     0.4265  24.707  < 2e-16 ***
## SessoM                78.1596    11.2117   6.971 4.01e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.7 on 2491 degrees of freedom
## Multiple R-squared:  0.7271, Adjusted R-squared:  0.7265 
## F-statistic:  1106 on 6 and 2491 DF,  p-value: < 2.2e-16
mod_8 = update(mod_7, ~.
               - Fumatrici)

summary(mod_8)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Sesso, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1149.37  -180.98   -15.57   163.69  2639.09 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -6681.7251   135.8036 -49.201  < 2e-16 ***
## N.gravidanze    12.4554     4.3416   2.869  0.00415 ** 
## Gestazione      32.3827     3.8008   8.520  < 2e-16 ***
## Lunghezza       10.2455     0.3008  34.059  < 2e-16 ***
## Cranio          10.5410     0.4265  24.717  < 2e-16 ***
## SessoM          77.9807    11.2111   6.956 4.47e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.7 on 2492 degrees of freedom
## Multiple R-squared:  0.727,  Adjusted R-squared:  0.7265 
## F-statistic:  1327 on 5 and 2492 DF,  p-value: < 2.2e-16

Il primo modello (modello 6) include tutte le variabili presenti nel dataset, sia quantitative che qualitative. Dall’analisi dei coefficienti emerge che alcune di esse esercitano un’influenza trascurabile sulla variabile risposta, come suggerito dai rispettivi p-value non significativi. Il modello successivo infatti è stato realizzato a partire dal sesto modello eliminando le variabili meno influenti, ovvero Anni.madre, Ospedale e Tipo.parto. Le ragioni che hanno condotto alla rimozione di tali variabili non sono riconducibili esclusivamente alla loro scarsa significatività statistica, ma anche alla natura della relazione con la variabile risposta. In particolare, per alcune di esse potrebbe non essere appropriato ipotizzare un rapporto di tipo esplicativo unidirezionale. Ad esempio, nel caso della tipologia di parto, è plausibile che la relazione sia inversa rispetto a quella modellizzata: il peso neonatale stimato o atteso potrebbe influenzare la scelta del tipo di parto, piuttosto che rappresentarne una conseguenza. In questo senso, includere tale variabile come predittore del peso potrebbe introdurre un’ambiguità interpretativa sul piano causale, configurando una potenziale relazione di dipendenza invertita. Il confronto tra i due modelli mostra differenze molto contenute in termini di coefficiente di determinazione (R quadro pari a 0.7289 per il modello 6 e 0.7271 per il modello 7). Quest’ultimo quindi risulta più parsimonioso, mantenendo una capacità esplicativa sostanzialmente analoga. Eliminando la variabile Fumatrici si ottiene il modello 8, caratterizzato da un coefficiente di determinazione pari a 0.7270. Si osserva che il contributo del fumo materno non risulta statisticamente significativo (p-value pari a 0.26818 nel modello 7), suggerendo un effetto marginale all’interno del campione analizzato. È plausibile che tale risultato sia influenzato anche dalla ridotta frequenza di madri fumatrici nel dataset. Anche le differenze tra gli RSE dei tre modelli risultano minime, indicando livelli di errore residuo molto simili. Da questa prima analisi comparativa si può quindi ritenere che, tra i modelli considerati, il modello 8 rappresenti una scelta efficiente in termini di equilibrio tra semplicità e capacità esplicativa.

Selezione del Modello Ottimale

anova(mod_6, mod_7, mod_8, mod_2)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza + 
##     Cranio + Tipo.parto + Ospedale + Sesso
## Model 2: Peso ~ N.gravidanze + Fumatrici + Gestazione + Lunghezza + Cranio + 
##     Sesso
## Model 3: Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + Sesso
## Model 4: Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio
##   Res.Df       RSS Df Sum of Sq       F    Pr(>F)    
## 1   2487 186743194                                   
## 2   2491 187949505 -4  -1206312  4.0163  0.002992 ** 
## 3   2492 188042054 -1    -92548  1.2325  0.267022    
## 4   2493 191692844 -1  -3650790 48.6203 3.965e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(mod_2, mod_6, mod_7, mod_8)
##       df      AIC
## mod_2  6 35198.92
## mod_6 12 35145.57
## mod_7  8 35153.66
## mod_8  7 35152.89
BIC(mod_2, mod_6, mod_7, mod_8)
##       df      BIC
## mod_2  6 35233.86
## mod_6 12 35215.45
## mod_7  8 35200.24
## mod_8  7 35193.65
library(car)

vif(mod_6)
##                  GVIF Df GVIF^(1/(2*Df))
## Anni.madre   1.190241  1        1.090982
## N.gravidanze 1.189278  1        1.090540
## Fumatrici    1.007426  1        1.003706
## Gestazione   1.695675  1        1.302181
## Lunghezza    2.086879  1        1.444604
## Cranio       1.631049  1        1.277125
## Tipo.parto   1.004227  1        1.002111
## Ospedale     1.004267  2        1.001065
## Sesso        1.040743  1        1.020168
vif(mod_8)
## N.gravidanze   Gestazione    Lunghezza       Cranio        Sesso 
##     1.023462     1.669779     2.075747     1.624568     1.040184

La scelta del modello è stata effettuata sulla base dei risultati del test ANOVA e dei criteri informativi AIC e BIC. Dal confronto tra il modello 6 e il modello 7 emerge un peggioramento statisticamente significativo (ΔRSS = 1.206.312, F = 4.016, p = 0.00299), mentre la rimozione della variabile Fumatrici non comporta una riduzione significativa della qualità del modello. Anche il modello 2, nel quale non è presente la variabile Sesso, evidenzia un marcato peggioramento rispetto al modello 8. In termini strettamente statistici, il test ANOVA suggerirebbe come preferibile il modello contenente tutte le variabili del dataset. Tuttavia, tale risultato potrebbe essere associato a un possibile fenomeno di overfitting, per cui il modello risulterebbe molto aderente ai dati osservati nel campione, ma potenzialmente meno generalizzabile a campioni caratterizzati da diversa variabilità e differente struttura. Anche l’indice AIC individua nel modello 6 la specificazione più efficiente, mentre il criterio BIC, che applica una penalizzazione più severa alla complessità del modello, identifica nel modello 8 la soluzione migliore tra quelle considerate. Nel complesso, l’analisi evidenzia come il modello sia principalmente guidato dalle variabili Gestazione, Lunghezza, Cranio e Sesso, con un contributo statisticamente significativo (seppur più contenuto) della variabile N.gravidanze. Alla luce di tali considerazioni, la scelta finale del modello di regressione si orienta verso il modello 8.

Analisi della Qualità del Modello

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

lev = hatvalues(mod_8)
plot(lev)
p = sum(lev)
n = nrow(dataset)

soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
##          13          15          34          67          89          96 
## 0.005632888 0.007056483 0.006748974 0.005896189 0.012817563 0.005351869 
##         101         106         131         134         151         155 
## 0.007528094 0.014487904 0.007237755 0.007553514 0.010889886 0.007209736 
##         161         189         190         204         205         206 
## 0.020341133 0.004894598 0.005366831 0.014494112 0.005351828 0.009482503 
##         220         294         305         310         312         315 
## 0.007403130 0.005914307 0.005445189 0.028815300 0.013173723 0.005386836 
##         378         440         442         445         486         492 
## 0.015942080 0.005405733 0.007725708 0.007511227 0.005165714 0.008274392 
##         497         516         582         587         592         614 
## 0.005167522 0.013080707 0.011667393 0.008415872 0.006385013 0.005300091 
##         638         656         657         684         697         702 
## 0.006693153 0.005934494 0.005323517 0.008825948 0.005864920 0.005203163 
##         729         748         750         757         765         805 
## 0.005024448 0.008567254 0.006943755 0.008146487 0.006076412 0.014358658 
##         828         893         895         913         928         946 
## 0.007180179 0.005076266 0.005297643 0.005574016 0.022745493 0.006910965 
##         947         956         985        1008        1014        1049 
## 0.008409518 0.007791530 0.007040035 0.005343994 0.008474086 0.004956561 
##        1067        1091        1106        1130        1166        1181 
## 0.008467035 0.008940030 0.005967511 0.031739177 0.005513581 0.005678043 
##        1188        1200        1219        1238        1248        1273 
## 0.006481533 0.005493009 0.030697778 0.005912496 0.014631359 0.007089553 
##        1291        1293        1311        1321        1325        1356 
## 0.006118589 0.006074423 0.009626391 0.009295311 0.004857340 0.005306940 
##        1357        1385        1395        1400        1402        1411 
## 0.006967713 0.012641828 0.005129491 0.005932524 0.004816704 0.008049539 
##        1420        1428        1429        1450        1505        1551 
## 0.005156670 0.008195421 0.021758961 0.015106684 0.013334256 0.048802841 
##        1553        1556        1573        1593        1606        1610 
## 0.008507417 0.005923458 0.005049368 0.005624961 0.005009312 0.008725821 
##        1617        1619        1628        1686        1693        1701 
## 0.004869997 0.015069038 0.005070717 0.009356578 0.005079185 0.010846383 
##        1712        1718        1727        1735        1780        1781 
## 0.006993461 0.006961226 0.013303625 0.004886226 0.025544997 0.016833696 
##        1809        1827        1868        1892        1962        1967 
## 0.008711082 0.006068655 0.005206137 0.005333985 0.005541287 0.005339716 
##        1977        2037        2040        2046        2086        2089 
## 0.006928794 0.004890003 0.011504028 0.005471894 0.013194769 0.006293791 
##        2098        2114        2115        2120        2140        2146 
## 0.005097113 0.013318873 0.011779730 0.018667270 0.006244737 0.005804705 
##        2148        2149        2157        2175        2200        2215 
## 0.007930323 0.013589469 0.005910248 0.032531736 0.011679031 0.004894044 
##        2216        2220        2221        2224        2225        2244 
## 0.008120291 0.005415586 0.021633907 0.005841119 0.005593576 0.006929530 
##        2257        2307        2317        2318        2337        2359 
## 0.006171101 0.013972901 0.007677230 0.004834368 0.005230839 0.010068259 
##        2408        2422        2436        2437        2452        2458 
## 0.009702475 0.021536269 0.004986609 0.023951342 0.023848222 0.008509142 
##        2471        2478 
## 0.020905930 0.005777111
plot(rstudent(mod_8))
abline(h=c(-2,2), col=2)
outlierTest(mod_8)
##       rstudent unadjusted p-value Bonferroni p
## 1551 10.046230         2.6345e-23   6.5810e-20
## 155   5.025345         5.3818e-07   1.3444e-03
## 1306  4.824963         1.4848e-06   3.7092e-03
cook = cooks.distance(mod_8)
plot(cook)
max(cook)
## [1] 0.8297645
shapiro.test(residuals(mod_8))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(mod_8)
## W = 0.97414, p-value < 2.2e-16
lmtest::bptest(mod_8)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_8
## BP = 90.297, df = 5, p-value < 2.2e-16
lmtest::dwtest(mod_8)
## 
##  Durbin-Watson test
## 
## data:  mod_8
## DW = 1.9532, p-value = 0.1209
## alternative hypothesis: true autocorrelation is greater than 0
par(std_par)

L’analisi diagnostica del modello 8 è stata condotta mediante esame grafico dei residui, valutazione dei leverage, identificazione di outlier e osservazioni influenti, nonché tramite test formali di normalità, omoschedasticità e autocorrelazione. Dall’elenco delle osservazioni con leverage superiore alla soglia emerge la presenza di numerosi punti con valori relativamente elevati; in particolare l’osservazione 1551, la quale presenta un leverage pari a 0.0488, sensibilmente superiore rispetto alla maggior parte delle altre osservazioni (e ciò indica la presenza di punti con potenziale influenza sulla stima dei coefficienti). Dall’analisi dei residui studentizzati emergono alcune osservazioni con valori particolarmente elevati: 1551 (rstudent ≈ 10.05); 155 (rstudent ≈ 5.03); 1306 (rstudent ≈ 4.82). Tra queste, l’unità 1551 presenta un p-value estremamente basso anche dopo correzione Bonferroni, configurandosi come outlier statisticamente significativo. Pertanto, è lecito affermare che nel modello sono presenti osservazioni anomale in grado di influenzare le stime. Il valore massimo della distanza di Cook è pari a 0.8298, ovvero un valore elevato, ma non oltre il limite critico convenzionale. Ciononostante, esso suggerisce la presenza di almeno un’osservazione con potenziale influenza rilevante. In seguito al test di Shapiro–Wilk (W = 0.974, p-value < 2.2e-16) si rifiuta l’ipotesi nulla di normalità dei residui, tuttavia, dato l’elevato numero di osservazioni, il test risulta estremamente sensibile a deviazioni anche minime dalla normalità. Il test di Breusch–Pagan (BP = 90.297, p-value < 2.2e-16) conferma la presenza di eteroschedasticità nel modello (o per meglio dire si rifiuta l’ipotesi nulla di omoschedasticità). In ultimo, dal test di Durbin–Watson (DW = 1.9532, p-value = 0.1209) si evince che non è possibile rifiutare l’ipotesi nulla di assenza di autocorrelazione positiva (non emergono infatti evidenze di autocorrelazione dei residui). Nel suo complesso, l’analisi diagnostica mette in evidenzia tre aspetti principali del modello numero 8: la presenza di osservazioni ad alto leverage; la presenza di outlier significativi (in particolare l’osservazione 1551); e l’evidenza di eteroschedasticità. Non sono stati rilevati invece problemi di autocorrelazione.

Correzzione del Modello Selezionato

new_mod_8 = lm(Peso ~ N.gravidanze
          + Gestazione
          + Lunghezza
          + Cranio
          + Sesso,
          data = new_dataset)

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

lev = hatvalues(new_mod_8)
plot(lev)
p = sum(lev)
n = nrow(dataset)

soglia = 2 * p/n
abline(h=soglia, col=2)
lev[lev > soglia]
##          13          15          34          61          67          89 
## 0.005652432 0.007136882 0.006940890 0.004869520 0.005896549 0.012817580 
##          96         101         106         131         134         151 
## 0.005358003 0.007598319 0.014493465 0.007279053 0.007557049 0.010890102 
##         155         161         189         190         204         205 
## 0.007449075 0.020397279 0.004965808 0.005386256 0.014528554 0.005397742 
##         206         220         294         304         305         310 
## 0.009493300 0.007748495 0.005924013 0.004966921 0.005445796 0.029056026 
##         312         315         348         378         440         442 
## 0.013287205 0.005491317 0.004861284 0.015951584 0.005418645 0.007733246 
##         445         486         492         497         516         582 
## 0.007515410 0.005165916 0.008397034 0.005169723 0.013094416 0.011690760 
##         587         592         614         638         656         657 
## 0.008430636 0.006389978 0.005313926 0.006703068 0.006040939 0.005407576 
##         684         697         702         729         748         750 
## 0.009102422 0.006012105 0.005203595 0.005146189 0.008592925 0.006961523 
##         757         765         805         828         893         895 
## 0.008149113 0.006085774 0.014400774 0.007181654 0.005084148 0.005305492 
##         913         928         946         947         949         956 
## 0.005576593 0.022934693 0.006923732 0.008471642 0.004827317 0.007918071 
##         964         985        1008        1014        1049        1067 
## 0.004869271 0.007045674 0.005344423 0.008650058 0.004958583 0.008467204 
##        1091        1106        1130        1166        1181        1188 
## 0.008940250 0.005982058 0.031864438 0.005615533 0.005691457 0.006740896 
##        1200        1219        1238        1248        1273        1291 
## 0.005646540 0.030697918 0.005915854 0.014646899 0.007184195 0.006156251 
##        1293        1294        1311        1321        1325        1356 
## 0.006181858 0.004955574 0.009628526 0.009322114 0.004862260 0.005339840 
##        1357        1385        1395        1400        1402        1411 
## 0.006975799 0.012641926 0.005241631 0.005998106 0.005019076 0.008101552 
##        1420        1428        1429        1450        1505        1553 
## 0.005156717 0.008351581 0.022079600 0.015115623 0.013335076 0.008541167 
##        1556        1560        1573        1593        1606        1610 
## 0.005952569 0.004867876 0.005066301 0.005653425 0.005198507 0.008848437 
##        1617        1619        1628        1686        1693        1701 
## 0.004872980 0.015299235 0.005178399 0.009356907 0.005122352 0.010987726 
##        1712        1718        1727        1735        1780        1781 
## 0.007204101 0.006971003 0.013309886 0.005049770 0.025585909 0.016847455 
##        1809        1827        1868        1892        1962        1967 
## 0.008720653 0.006095609 0.005241333 0.005350307 0.005636135 0.005340384 
##        1977        2037        2040        2046        2086        2089 
## 0.006928956 0.004898610 0.012078521 0.005483623 0.013198032 0.006372359 
##        2098        2114        2115        2120        2140        2146 
## 0.005117210 0.013414168 0.012006161 0.018669336 0.006252471 0.005808710 
##        2148        2149        2157        2175        2200        2215 
## 0.007972743 0.013600683 0.005913367 0.032543061 0.011680251 0.004895285 
##        2216        2220        2221        2224        2225        2244 
## 0.008128263 0.005415745 0.021643303 0.005861015 0.005654042 0.006929553 
##        2257        2307        2317        2318        2337        2359 
## 0.006251841 0.014003708 0.007718470 0.004872419 0.005355546 0.010073475 
##        2408        2422        2436        2437        2452        2458 
## 0.009706018 0.021555714 0.004990138 0.024109409 0.023849966 0.008510597 
##        2471        2478 
## 0.020922840 0.005798563
plot(rstudent(new_mod_8))
abline(h=c(-2,2), col=2)
outlierTest(new_mod_8)
##       rstudent unadjusted p-value Bonferroni p
## 155   5.285313         1.3639e-07   0.00034056
## 1306  4.940535         8.3077e-07   0.00207440
## 1399 -4.348609         1.4251e-05   0.03558600
cook = cooks.distance(new_mod_8)
plot(cook)
max(cook)
## [1] 0.06504824
shapiro.test(residuals(new_mod_8))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(new_mod_8)
## W = 0.98891, p-value = 5.23e-13
lmtest::bptest(new_mod_8)
## 
##  studentized Breusch-Pagan test
## 
## data:  new_mod_8
## BP = 11.343, df = 5, p-value = 0.04499
lmtest::dwtest(new_mod_8)
## 
##  Durbin-Watson test
## 
## data:  new_mod_8
## DW = 1.9536, p-value = 0.1227
## alternative hypothesis: true autocorrelation is greater than 0
par(std_par)

A seguito dell’identificazione dell’osservazione 1551 come outlier influente, è stato stimato nuovamente il modello di regressione lineare multipla escludendo tale unità campionaria. L’analisi diagnostica è stata quindi ripetuta al fine di valutare eventuali variazioni nella struttura dei residui e nella stabilità del modello. I leverage risultano distribuiti in un intervallo contenuto, senza la presenza di valori anomali paragonabili a quello precedentemente riscontrato per l’osservazione 1551. Il valore massimo della distanza di Cook risulta ora pari a 0.065, per cui (rispetto al valore precedente) si osserva una drastica riduzione dell’influenza massima esercitata da una singola osservazione. Il nuovo valore è ampiamente al di sotto della soglia convenzionale, suggerendo l’assenza di osservazioni fortemente influenti nel modello aggiornato, e questo rappresenta il cambiamento più sostanziale. Ciononostante, dall’analisi dei residui studentizzati emergono ancora alcune osservazioni anomale, ma nessuna di esse presenta valori estremi. Anche dopo la rimozione dell’osservazione 1551 si rifiuta l’ipotesi nulla di normalità dei residui, tuttavia il valore di W risulta più vicino a 1 rispetto al caso precedente (suggerendo un miglioramento minimo nella distribuzione dei residui). Considerata l’elevata numerosità campionaria, il test rimane ugualmente molto sensibile a deviazioni anche modeste dalla normalità. Dal test di Breusch–Pagan si osserva un cambiamento rilevante rispetto alla situazione precedente. Il risultato infatti è da considerarsi borderline: l’ipotesi nulla di omoschedasticità viene formalmente rifiutata al livello del 5%, ma con evidenza molto più debole, per cui si suppone che una parte significativa dell’eteroschedasticità precedentemente riscontrata fosse associata all’osservazione 1551. Anche l’ipotesi nulla di assenza di autocorrelazione positiva non viene rifiutata. Questo risultato rimane sostanzialmente invariato rispetto al modello precedente, confermando l’assenza di correlazione seriale nei residui.

Per concludere, la rimozione dell’osservazione 1551 ha prodotto effetti rilevanti sotto diversi profili:

  1. eliminazione di un punto altamente influente (drastica riduzione della Cook’s distance massima da 0.83 a 0.065);

  2. riduzione marcata dell’eteroschedasticità (Breusch–Pagan da p < 2e-16 a p ≈ 0.045);

  3. miglioramento della normalità dei residui (W passato da 0.974 a 0.989);

  4. persistenza di alcuni outlier moderati, ma assenza di casi estremamente critici.

Nel complesso, il modello appare ora più stabile e meno condizionato da singole osservazioni estreme. Le principali criticità riscontrate nella prima analisi risultano significativamente attenuate.

summary(mod_8)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Sesso, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1149.37  -180.98   -15.57   163.69  2639.09 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -6681.7251   135.8036 -49.201  < 2e-16 ***
## N.gravidanze    12.4554     4.3416   2.869  0.00415 ** 
## Gestazione      32.3827     3.8008   8.520  < 2e-16 ***
## Lunghezza       10.2455     0.3008  34.059  < 2e-16 ***
## Cranio          10.5410     0.4265  24.717  < 2e-16 ***
## SessoM          77.9807    11.2111   6.956 4.47e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.7 on 2492 degrees of freedom
## Multiple R-squared:  0.727,  Adjusted R-squared:  0.7265 
## F-statistic:  1327 on 5 and 2492 DF,  p-value: < 2.2e-16
summary(new_mod_8)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Sesso, data = new_dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1165.68  -179.74   -12.42   162.92  1410.68 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -6683.8326   133.1602 -50.194  < 2e-16 ***
## N.gravidanze    13.1448     4.2576   3.087  0.00204 ** 
## Gestazione      29.6341     3.7369   7.930 3.27e-15 ***
## Lunghezza       10.8899     0.3019  36.077  < 2e-16 ***
## Cranio           9.9192     0.4227  23.465  < 2e-16 ***
## SessoM          78.1376    10.9929   7.108 1.53e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 269.3 on 2491 degrees of freedom
## Multiple R-squared:  0.7372, Adjusted R-squared:  0.7367 
## F-statistic:  1398 on 5 and 2491 DF,  p-value: < 2.2e-16

Il confronto tra il modello stimato sul dataset originale e quello ottenuto sul nuovo dataset (eliminando l’osservazione 1551) evidenzia una sostanziale stabilità della struttura del modello, accompagnata da un lieve miglioramento delle performance nel secondo caso. I coefficienti stimati risultano molto simili in termini sia di segno sia di ordine di grandezza, a indicare che la relazione tra le variabili esplicative e la variabile risposta è robusta rispetto alla modifica del campione. Per il modello costruito sul dataset modificato si osserva un incremento del coefficiente di determinazione (0.7372 rispetto a 0.7270), così come una riduzione dell’errore standard residuo (269.3 contro 274.7). Sebbene la differenza non sia marcata in termini assoluti, essa suggerisce una migliore capacità esplicativa del modello nel secondo campione e una minore dispersione dei residui. L’R quadro aggiustato conferma questa tendenza, indicando che il miglioramento non è imputabile a un aumento del numero di parametri, ma a una reale ottimizzazione dell’adattamento. Dal punto di vista dei coefficienti, le variazioni sono contenute: l’effetto della Gestazione si riduce leggermente, mentre quello della Lunghezza aumenta; l’impatto del Cranio diminuisce in modo marginale. L’effetto della variabile Sesso rimane sostanzialmente invariato, così come quello di N.gravidanze, che continua a mostrare un contributo statisticamente significativo (ma di entità modesta). Tutte le variabili mantengono un’elevata significatività statistica in entrambi i modelli. Nel complesso, le differenze osservate non alterano l’interpretazione sostanziale del modello, ma indicano una lieve maggiore efficienza del modello stimato sul nuovo dataset.

Previsioni e Risultati

nuovo_neonato <- data.frame(
  N.gravidanze = 2,
  Gestazione = 39,
  Lunghezza = 500,
  Cranio = 341,
  Sesso = factor("M", levels = levels(dataset$Sesso)))

predict(new_mod_8, newdata = nuovo_neonato, interval = "prediction")
##        fit      lwr      upr
## 1 3403.714 2875.261 3932.166

La previsione ottenuta per un’unità con N.gravidanze = 2, Gestazione = 39, Lunghezza = 500, Cranio = 341 e Sesso = M, restituisce un peso stimato pari a 3403.7 g. L’intervallo di previsione al 95% risulta essere piuttosto ampio e tale aspetto è fisiologico, infatti esso incorpora anche la variabilità individuale non spiegata dal modello (errore residuo). Ne consegue che, pur in presenza di una buona capacità esplicativa complessiva (R² ≈ 0.74), permane una quota di variabilità biologica non catturata dalle variabili incluse. In sintesi, il modello fornisce una stima affidabile del peso medio atteso per neonati con le caratteristiche considerate, ma la dispersione osservata nell’intervallo di previsione ricorda che la variabilità individuale rimane un elemento strutturale del fenomeno e non può essere completamente eliminata attraverso una specificazione lineare.

Visualizzazioni Grafiche

library(ggplot2)

ggplot(data = new_dataset)+
  geom_point(aes(x = Gestazione,
                 y = Peso,
                 col = Sesso), position = "jitter")+
  geom_smooth(aes(x = Gestazione,
                  y = Peso,
                  col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = new_dataset)+
  geom_point(aes(x = Lunghezza,
                 y = Peso,
                 col = Sesso), position = "jitter")+
  geom_smooth(aes(x = Lunghezza,
                  y = Peso,
                  col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = new_dataset)+
  geom_point(aes(x = Cranio,
                 y = Peso,
                 col = Sesso), position = "jitter")+
  geom_smooth(aes(x = Cranio,
                  y = Peso,
                  col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = new_dataset)+
  geom_point(aes(x = N.gravidanze,
                 y = Peso,
                 col = Sesso), position = "jitter")+
  geom_smooth(aes(x = N.gravidanze,
                  y = Peso,
                  col = Sesso), se = F, method = "lm")
## `geom_smooth()` using formula = 'y ~ x'

Discussione dei Risultati e Conclusioni

L’intero progetto ha avuto come obiettivo la costruzione e la selezione di un modello di regressione lineare multipla in grado di spiegare la variabilità del peso neonatale attraverso variabili materne e antropometriche. Il modello selezionato presenta un coefficiente di determinazione pari a circa 0.73–0.74, indicando che oltre il 70% della variabilità del peso neonatale è spiegata dalle variabili incluse. Tale valore, in ambito biologico e clinico, può essere considerato elevato, soprattutto tenendo conto della fisiologica eterogeneità individuale. La relazione tra variabile risposta e variabili esplicative può essere riassunta nei seguenti punti.

  1. Gestazione mostra un effetto positivo robusto: l’aumento delle settimane di gravidanza è associato a un incremento significativo del peso.

  2. Lunghezza e Cranio risultano essere i predittori più influenti, coerentemente con la loro natura direttamente correlata allo sviluppo fetale.

  3. Sesso evidenzia una differenza sistematica tra neonati maschi e femmine.

  4. N.gravidanze contribuisce in misura più contenuta, ma statisticamente significativa.

Le analisi predittive hanno inoltre mostrato che il modello fornisce stime molto precise per il valore medio atteso, mentre l’intervallo di previsione per il singolo individuo rimane ampio. Questo aspetto è strutturale: una quota di variabilità biologica rimane inevitabilmente non spiegata. I grafici realizzati rafforzano visivamente quanto emerso dall’analisi numerica: la relazione GestazionePeso appare chiaramente crescente e quasi lineare; le associazioni LunghezzaPeso e CranioPeso mostrano pendenze ancora più marcate, evidenziando il loro ruolo centrale nel modello; la distinzione per Sesso rende visibile uno scostamento sistematico tra le rette di regressione, coerente con il coefficiente stimato nel modello. Dal presente elaborato dunque si deduce che il peso neonatale è principalmente determinato da fattori legati allo sviluppo fetale diretto (lunghezza e dimensione cranica), con un contributo rilevante della durata della gestazione e una differenza legata al sesso. Il modello finale risulta solido, parsimonioso, biologicamente coerente e dotato di buona capacità esplicativa. Pur non esaurendo la complessità del fenomeno, fornisce una rappresentazione quantitativa efficace delle principali determinanti del peso alla nascita.