1 Analisi preliminare

Età della madre: variabile quantitativa continua

Num. Gravidanze: variabile quantitativa discreta

Fumo Materno: variabile nominale dummy. 0 = non fumatrici , 1 = fumatrici

Età Gestazionale: variabile quantitativa continua

Peso Neonato: variabile quantitativa continua espressa in grammi (g)

Lunghezza Neonato: variabile quantitativa continua espressa in millimetri (mm)

Diametro Cranio: variabile quantitativa continua espressa in millimetri (mm)

Tipo Parto: variabile nominale categoriale. Nat = naturale , Ces = cesareo

Ospedale: variabile nominale categoriale

Sesso Neonato: variabile nominale categoriale

2 Indici di posizione, variabilità e forma

#Sostituzione anni 0 e 1 nel dataset con la media della variabile
dati <- dati %>%
  mutate(Anni.madre = ifelse(Anni.madre %in% c(0, 1), 28, Anni.madre))

#funzione per il calcolo indici
calcola_indici <- function(colonna) {
  min <- min(colonna)
  max <- max(colonna)
  media <- mean(colonna)
  mediana <- median(colonna)
  varianza <- var(colonna)
  dev_std <- sd(colonna)
  cv <- (dev_std / media) * 100
  asimmetria <- skewness(colonna)
  curtosi <- kurtosis(colonna) - 3 
  
  return(c(Min = min ,Max = max ,Media = media, Mediana = mediana,Varianza = varianza, Dev_Std = dev_std, CV = cv, Asimmetria = asimmetria, Curtosi = curtosi))}

variabili <- dati[, c("Anni.madre", "Gestazione", "Peso", "Lunghezza", "Cranio")]
risultati <- t(apply(variabili, 2,calcola_indici))
risultati_df <- as.data.frame(round(risultati,2))
risultati_df <- cbind(Variabile = rownames(risultati_df), risultati_df)
rownames(risultati_df) <- NULL

kable(
  risultati_df,
  format = "markdown",
  col.names = c("Variabile","Min","Max", "Media", "Mediana","Varianza", "Dev. Std.", "CV (%)", "Asimmetria", "Curtosi"),
  caption = " Indici di posizione, variabilità e forma") %>%
   kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>% 
    kable_classic_2(full_width = F,
                   html_font = "Cambria",
                   font_size = 14)
Indici di posizione, variabilità e forma
Variabile Min Max Media Mediana Varianza Dev. Std. CV (%) Asimmetria Curtosi
Anni.madre 13 46 28.19 28 27.20 5.22 18.50 0.15 -0.10
Gestazione 25 43 38.98 39 3.49 1.87 4.79 -2.07 8.26
Peso 830 4930 3284.08 3300 275665.68 525.04 15.99 -0.65 2.03
Lunghezza 310 565 494.69 500 692.67 26.32 5.32 -1.51 6.49
Cranio 235 390 340.03 340 269.79 16.43 4.83 -0.79 2.95

La variabile risposta peso ha un valore di curtosi di 2.03 indicando una distribuzione platicurtica, più piatta rispetto ad una distribuzione normale standard.

3 Boxplot variabile risposta - variabile indipendente

t.test(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
par(mfrow=c(1,2))
boxplot(Peso)
boxplot(Peso~Sesso)

Media nel gruppo F (femmine) = 3161.132

Media nel gruppo M (maschi) = 3408.215

Le medie suggeriscono che i neonati maschi hanno un peso medio più elevato rispetto alle femmine. La differenza tra le medie è di circa 247.1 unità (3408.215 - 3161.132).

t.test(Peso~Fumatrici)
## 
##  Welch Two Sample t-test
## 
## data:  Peso by Fumatrici
## t = 1.034, df = 114.1, p-value = 0.3033
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  -45.61354 145.22674
## sample estimates:
## mean in group 0 mean in group 1 
##        3286.153        3236.346
par(mfrow=c(1,2))
boxplot(Peso)
boxplot(Peso~Fumatrici)

Più alto è il valore assoluto della statistica t, più forte è l’evidenza contro l’ipotesi nulla (cioè, che le medie dei due gruppi siano uguali). Un valore t più basso, come questo, indica che la differenza tra i gruppi non è molto forte.

Media nel gruppo 0 (non fumatori) = 3286.153

Media nel gruppo 1 (fumatori) = 3236.346

Le medie suggeriscono che i neonati partoriti da madri non fumatrici hanno un peso medio leggermente maggiore rispetto ai neonati da madri fumatrici. Tuttavia, il p-value elevato indica che questa differenza non è statisticamente significativa.

scatterplot(Peso~Gestazione)

Lo scatterplot mostra che all’aumentare delle settimane di gestazione aumenta il peso del neonato. Quindi maggiori sono le settimane di gestazione e tendenzialmente maggiore sarà il peso medio del neonato.

4 Distribuzioni variabili numeriche

# Selezionare solo le variabili numeriche
variabili_numeriche <- dati %>%
  select(Anni.madre, N.gravidanze, Gestazione, Peso, Lunghezza, Cranio)

# Trasformare i dati in formato lungo per ggplot2
dati_long <- variabili_numeriche %>%
  pivot_longer(cols = everything(), 
               names_to = "Variabile", 
               values_to = "Valore")

# Creare un boxplot
ggplot(dati_long, aes(x = Variabile, y = Valore, fill = Variabile)) +
  geom_boxplot(outlier.color = "red", outlier.shape = 16, outlier.size = 1) +
  labs(title = "Distribuzione delle Variabili Numeriche", 
       x = element_blank(), 
       y = element_blank()) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none")

Peso

Il boxplot del peso presenta una distribuzione relativamente concentrata, con valori medi attorno ai 3284 g (valore medio riportato in precedenza). Sono presenti outlier significativi sopra e sotto il range dei baffi. Questo indica la presenza di neonati con peso molto alto (macrosomia) o molto basso (neonati prematuri o sottopeso). La maggior parte dei dati è ben distribuita attorno alla mediana, ma ci sono alcune nascite eccezionali.

Lunghezza

La distribuzione è concentrata, con pochi outlier visibili. La lunghezza media è di circa 494 mm, con una curtosi elevata (molti valori vicini alla media). Le lunghezze dei neonati sono abbastanza omogenee, con qualche rara eccezione.

Cranio

La distribuzione del diametro cranico è stretta, e la maggior parte dei dati si trova vicino alla mediana. Qualche outlier è presente, suggerendo misure particolarmente alte o basse. I valori sono concentrati, ma gli outlier potrebbero rappresentare errori di misurazione o neonati con caratteristiche craniche particolari.

Gestazione

La durata della gravidanza è centrata attorno alle 39 settimane, con qualche outlier al di sotto. Gli outlier probabilmente rappresentano nascite premature. La maggior parte delle gravidanze è a termine, ma ci sono casi di prematurità che si riflettono anche nei dati sul peso.

Età delle madri

La distribuzione è concentrata, senza outlier significativi.L’età media delle madri è attorno ai 28 anni. Individuate anomalie nei dati, che sono stati corretti inserendo i valori medi della variabile.

Numero di gravidanze

I boxplot mostrano una forte asimmetria (come indicato nelle statistiche descrittive), con la maggior parte delle madri che ha avuto meno di una gravidanza precedente. Gli outlier rappresentano madri con molte gravidanze precedenti. La maggioranza delle madri nel dataset sono primipare, ma esistono casi di madri con molte gravidanze.

Conclusioni Generali: Il peso e la gestazione mostrano outlier significativi, probabilmente associati a neonati prematuri o sottopeso. Variabili come lunghezza e diametro cranico sono distribuite in modo omogeneo, con pochi valori eccezionali. Il numero di gravidanze è fortemente asimmetrico, con molte madri primipare. Età delle madri non mostra variazioni significative, ed è relativamente omogenea.

5 Numero di parti cesarei negli ospedali

tabella <- matrix(c(574, 242, 595, 254, 603, 232),
                  nrow = 3,
                  ncol = 2,
                  byrow = T)

colnames(tabella) <- c("Parto Naturale","Parto Cesareo")
row.names(tabella) <- c("Osp1","Osp2","Osp3")

test.indipendenza <- chisq.test(tabella)

kable(tabella,
  format = "markdown",
  col.names = c("Ospedale","Parto naturale","Parto cesareo"),
  caption = "Distribuzioni tipologie di parto") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>% 
    kable_classic_2(full_width = F,
                   html_font = "Cambria",
                   font_size = 14)
Distribuzioni tipologie di parto
Ospedale Parto naturale Parto cesareo
Osp1 574 242
Osp2 595 254
Osp3 603 232
ggpubr::ggballoonplot(data = as.data.frame(tabella),
                       fill = "blue")

Risultati:

X-squared = 1.0972 , df = 2 (gradi di libertà), p-value = 0.5778

Il p-value ottenuto è 0.5778, che è decisamente maggiore del livello di significatività standard di 0.05. Questo significa che non possiamo rifiutare l’ipotesi nulla.

Ipotesi nulla (H₀): Non c’è differenza significativa nella distribuzione dei tipi di parto tra i tre ospedali (i cesarei sono distribuiti in modo simile tra gli ospedali).

Ipotesi alternativa (H₁): C’è una differenza significativa nella distribuzione dei tipi di parto tra gli ospedali (i cesarei non sono distribuiti in modo simile tra gli ospedali).

Conclusione: Nonostante il test chi-quadrato non indichi una differenza significativa, c’è una tendenza nei dati che suggerisce che l’Ospedale 2 abbia un numero di cesarei più alto rispetto agli altri due ospedali. Poiché il p-value è maggiore di 0.05, non rifiutiamo l’ipotesi nulla. Questo significa che non c’è una differenza significativa nella distribuzione dei tipi di parto (naturale vs. cesareo) tra i tre ospedali.

6 La media del peso e della lunghezza in relazione alle medie della popolazione

media_pop_peso <- 3300
t_test_peso <- t.test(dati$Peso, 
                      mu = media_pop_peso)

media_pop_lun <- 495
t_test_lun <- t.test(dati$Lunghezza, 
                     mu = media_pop_lun)

risultati_test <- data.frame(Variabile = c("Peso","Lunghezza"),
                                t_value = c(-1.516, -0.58514),
                                df = c(2499,2499),
                                p_value = c(0.1296, 0.5585),
                                conf_interval_lower = c(3263.490,493.6598), 
                                conf_interval_upper = c(3304.672,495.7242),
                                mean_sample = c(3284.081,494.692))

kable(risultati_test,
      format = "markdown") %>% 
   kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>% 
    kable_classic_2(full_width = F,
                   html_font = "Cambria",
                   font_size = 14) %>% 
  add_header_above(c(" " = 1, "Risultati dei Test T " = 6), 
                   line = TRUE,
                   font_size = 30)
Risultati dei Test T
Variabile t_value df p_value conf_interval_lower conf_interval_upper mean_sample
Peso -1.51600 2499 0.1296 3263.4900 3304.6720 3284.081
Lunghezza -0.58514 2499 0.5585 493.6598 495.7242 494.692

Il valore di t-peso calcolato è -1.516 ; Il valore t-lunghezza è -0.58514.

La media ipotizzata della popolazione secondo la letteratura medica è per il peso: 3300 g mentre per la lunghezza: 495mm Questi valori rappresentano quanto la media campionaria delle due variabili in esame differisce dalla media ipotizzata in termini di deviazione standard. Un valore di t negativo indica che la media del campione è inferiore alla media ipotizzata.

I risultati indicano che non c’è una differenza significativa tra la media del campione in esame e la media ipotizzata. Il p-value elevato suggerisce che la differenza osservata non è abbastanza grande da essere considerata statisticamente significativa al livello di significatività del 5%.

7 Le misure antropometriche

#df misure antropometriche 
misure_antropometriche <- data.frame(Variabile = c("Lunghezza","Peso","Cranio"),
                                t_value = c(-9.582, -12.106,-7.4102),
                                df = c(2459.3,2490.7,2491.4),
                                p_value = c("<2.2e-16","<2.2e-16" ,"1.718e-13"),
                                conf_interval_lower = c(-11.929470,-287.1051,-6.089912), 
                                conf_interval_upper = c(-7.876273,-207.0615,-3.541270),
                                mean_M = c(499.6672,3408.215,342.4486),
                                mean_F = c(489.7643 ,3161.132 ,337.6330))
                                


  kable(misure_antropometriche,
        format = "markdown")%>% 
   kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>% 
    kable_classic_2(full_width = F,
                   html_font = "Cambria",
                   font_size = 14)
Variabile t_value df p_value conf_interval_lower conf_interval_upper mean_M mean_F
Lunghezza -9.5820 2459.3 <2.2e-16 -11.929470 -7.876273 499.6672 489.7643
Peso -12.1060 2490.7 <2.2e-16 -287.105100 -207.061500 3408.2150 3161.1320
Cranio -7.4102 2491.4 1.718e-13 -6.089912 -3.541270 342.4486 337.6330

I risultati indicano che per ciascuna delle variabili antropometriche (Lunghezza, Peso e Cranio) ci sono differenze significative tra i maschi e le femmine, come evidenziato dai seguenti punti:

Lunghezza: t = -9.582, df = 2459.3, p-value < 2.2e-16 Il p-value è estremamente basso (meno di 2.2e-16), indicando che la differenza tra la lunghezza media dei maschi e delle femmine è altamente significativa. La media dei maschi è 499,67 mm ; la media delle femmine è 489,76 mm. Quindi, i maschi hanno, in media, una lunghezza superiore in confronto alle femmine.

Peso: t = -12.106, df = 2490.7, p-value < 2.2e-16 Anche in questo caso, il p-value è estremamente basso, quindi la differenza di peso tra maschi e femmine è altamente significativa. La Media dei maschi è 3408.22 g ; Media delle femmine è 3161.13 g. I maschi, quindi, pesano di più delle femmine, in media.

Cranio: t = -7.4102, df = 2491.4, p-value = 1.718e-13 Anche in questo caso, il p-value è molto basso e conferma che c’è una differenza significativa tra la circonferenza cranica dei maschi e delle femmine. La media dei maschi è 342.45 mm ; Media delle femmine è 337.63 mm. In media, i maschi hanno una circonferenza cranica più grande.

In sintesi, i maschi e le femmine presentano differenze antropometriche significative in tutte le variabili considerate (lunghezza, peso, cranio). Le basse probabilità (p-value) indicano che queste differenze sono reali e non dovute al caso.

8 Creazione modello di regressione

mod1 <- lm(Peso ~ .,
           data = dati)
summary(mod1)
## 
## Call:
## lm(formula = Peso ~ ., data = dati)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1123.3  -181.2   -14.6   160.7  2612.6 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -6735.1677   141.3977 -47.633  < 2e-16 ***
## Anni.madre        0.7983     1.1463   0.696   0.4862    
## N.gravidanze     11.4118     4.6665   2.445   0.0145 *  
## Fumatrici       -30.1567    27.5396  -1.095   0.2736    
## Gestazione       32.5265     3.8179   8.520  < 2e-16 ***
## Lunghezza        10.2951     0.3007  34.237  < 2e-16 ***
## Cranio           10.4725     0.4261  24.580  < 2e-16 ***
## Tipo.partoNat    29.5027    12.0848   2.441   0.0147 *  
## Ospedaleosp2    -11.2216    13.4388  -0.835   0.4038    
## Ospedaleosp3     28.0984    13.4972   2.082   0.0375 *  
## SessoM           77.5473    11.1779   6.938 5.07e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 273.9 on 2489 degrees of freedom
## Multiple R-squared:  0.7289, Adjusted R-squared:  0.7278 
## F-statistic: 669.1 on 10 and 2489 DF,  p-value: < 2.2e-16
mod2 <- update(mod1, ~.-Fumatrici)
summary(mod2)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Gestazione + 
##     Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1122.69  -181.85   -15.23   161.38  2615.71 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -6734.8325   141.4031 -47.629  < 2e-16 ***
## Anni.madre        0.8083     1.1463   0.705   0.4808    
## N.gravidanze     11.1515     4.6606   2.393   0.0168 *  
## Gestazione       32.2721     3.8109   8.468  < 2e-16 ***
## Lunghezza        10.3092     0.3004  34.314  < 2e-16 ***
## Cranio           10.4768     0.4261  24.591  < 2e-16 ***
## Tipo.partoNat    29.2488    12.0830   2.421   0.0156 *  
## Ospedaleosp2    -11.1647    13.4392  -0.831   0.4062    
## Ospedaleosp3     28.3685    13.4955   2.102   0.0356 *  
## SessoM           77.3679    11.1772   6.922 5.65e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 273.9 on 2490 degrees of freedom
## Multiple R-squared:  0.7287, Adjusted R-squared:  0.7278 
## F-statistic: 743.3 on 9 and 2490 DF,  p-value: < 2.2e-16
mod3 <- update(mod2, ~.-Ospedale)
summary(mod3)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Gestazione + 
##     Lunghezza + Cranio + Tipo.parto + Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1139.63  -181.49   -15.06   160.22  2633.85 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -6737.0948   141.4951 -47.614  < 2e-16 ***
## Anni.madre        0.8759     1.1475   0.763   0.4454    
## N.gravidanze     11.4432     4.6655   2.453   0.0142 *  
## Gestazione       32.5746     3.8152   8.538  < 2e-16 ***
## Lunghezza        10.2870     0.3007  34.206  < 2e-16 ***
## Cranio           10.4890     0.4266  24.586  < 2e-16 ***
## Tipo.partoNat    29.9956    12.0980   2.479   0.0132 *  
## SessoM           77.8482    11.1920   6.956 4.47e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.3 on 2492 degrees of freedom
## Multiple R-squared:  0.7277, Adjusted R-squared:  0.727 
## F-statistic: 951.6 on 7 and 2492 DF,  p-value: < 2.2e-16
mod4 <- update(mod3, ~.-Anni.madre)
summary(mod4)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1129.31  -181.70   -16.31   161.07  2638.85 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -6707.2971   135.9911 -49.322  < 2e-16 ***
## N.gravidanze     12.7558     4.3366   2.941   0.0033 ** 
## Gestazione       32.2713     3.7941   8.506  < 2e-16 ***
## Lunghezza        10.2864     0.3007  34.207  < 2e-16 ***
## Cranio           10.5057     0.4260  24.659  < 2e-16 ***
## Tipo.partoNat    30.0342    12.0969   2.483   0.0131 *  
## SessoM           77.9285    11.1905   6.964 4.22e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.3 on 2493 degrees of freedom
## Multiple R-squared:  0.7277, Adjusted R-squared:  0.727 
## F-statistic:  1110 on 6 and 2493 DF,  p-value: < 2.2e-16
mod5 <- update(mod4, ~.-Tipo.parto)
summary(mod5)
## 
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1149.44  -180.81   -15.58   163.64  2639.72 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -6681.1445   135.7229 -49.226  < 2e-16 ***
## N.gravidanze    12.4750     4.3396   2.875  0.00408 ** 
## Gestazione      32.3321     3.7980   8.513  < 2e-16 ***
## Lunghezza       10.2486     0.3006  34.090  < 2e-16 ***
## Cranio          10.5402     0.4262  24.728  < 2e-16 ***
## SessoM          77.9927    11.2021   6.962 4.26e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 274.6 on 2494 degrees of freedom
## Multiple R-squared:  0.727,  Adjusted R-squared:  0.7265 
## F-statistic:  1328 on 5 and 2494 DF,  p-value: < 2.2e-16
mod6 <- update(mod5,~.-N.gravidanze)
summary(mod6)
## 
## Call:
## lm(formula = Peso ~ Gestazione + Lunghezza + Cranio + Sesso, 
##     data = dati)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1138.2  -184.3   -17.6   163.3  2627.3 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -6651.1188   135.5172 -49.080  < 2e-16 ***
## Gestazione     31.2737     3.7856   8.261 2.31e-16 ***
## Lunghezza      10.2054     0.3007  33.939  < 2e-16 ***
## Cranio         10.6704     0.4245  25.139  < 2e-16 ***
## SessoM         79.1049    11.2117   7.056 2.22e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 275 on 2495 degrees of freedom
## Multiple R-squared:  0.7261, Adjusted R-squared:  0.7257 
## F-statistic:  1654 on 4 and 2495 DF,  p-value: < 2.2e-16
#Effetti di interazione:
mod7 <- lm(Peso~Gestazione*Sesso, data = dati)
summary(mod7) 
## 
## Call:
## lm(formula = Peso ~ Gestazione * Sesso, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1512.95  -274.30   -14.35   267.28  1953.68 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       -3010.130    228.509 -13.173   <2e-16 ***
## Gestazione          159.327      5.892  27.042   <2e-16 ***
## SessoM               75.811    354.946   0.214    0.831    
## Gestazione:SessoM     2.349      9.086   0.259    0.796    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 415.3 on 2496 degrees of freedom
## Multiple R-squared:  0.3752, Adjusted R-squared:  0.3745 
## F-statistic: 499.6 on 3 and 2496 DF,  p-value: < 2.2e-16
mod8<- lm(Peso~Gestazione*Anni.madre , data = dati)
summary(mod8)
## 
## Call:
## lm(formula = Peso ~ Gestazione * Anni.madre, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1514.97  -286.72   -16.95   282.30  1902.10 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -348.4319   952.4608  -0.366 0.714528    
## Gestazione              88.7661    24.4536   3.630 0.000289 ***
## Anni.madre            -100.7575    32.1601  -3.133 0.001750 ** 
## Gestazione:Anni.madre    2.7450     0.8278   3.316 0.000926 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 421.5 on 2496 degrees of freedom
## Multiple R-squared:  0.3562, Adjusted R-squared:  0.3555 
## F-statistic: 460.4 on 3 and 2496 DF,  p-value: < 2.2e-16
mod9<- lm(Peso~Fumatrici*Gestazione, data = dati)
summary(mod9)
## 
## Call:
## lm(formula = Peso ~ Fumatrici * Gestazione, data = dati)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1609.03  -289.03   -11.54   280.97  1898.44 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -3240.771    178.861 -18.119   <2e-16 ***
## Fumatrici             1343.426   1164.746   1.153    0.249    
## Gestazione             167.495      4.585  36.534   <2e-16 ***
## Fumatrici:Gestazione   -36.764     29.646  -1.240    0.215    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 422.9 on 2496 degrees of freedom
## Multiple R-squared:  0.352,  Adjusted R-squared:  0.3513 
## F-statistic:   452 on 3 and 2496 DF,  p-value: < 2.2e-16
BIC_df <- as.data.frame(BIC(mod1,mod2,mod3,mod4,mod5,mod6,mod7,mod8,mod9))

kable(BIC_df,
      caption = "BIC modelli lineari") %>%
 kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>% 
    kable_classic_2(full_width = F,
                   html_font = "Cambria",
                   font_size = 14)
BIC modelli lineari
df BIC
mod1 12 35241.97
mod2 11 35235.35
mod3 9 35228.99
mod4 8 35221.75
mod5 7 35220.10
mod6 6 35220.54
mod7 5 37274.36
mod8 5 37349.14
mod9 5 37365.38
  1. Procedura di selezione stepwise backward

    • Si parte con un modello completo che include tutte le variabili disponibili per spiegare la variabile dipendente, in questo caso Peso.

    • Rimozione delle variabili meno significative; le variabili Ospedale, Anni madre, Tipo di parto, Fumatrici e Num di gravidanze sono state rimosse perché non contribuiscono in modo significativo alla spiegazione del Peso.
      Queste variabili sono state identificate come non significative attraverso test statistici come il test t o il test F, che hanno mostrato p-value al di sopra di una soglia predefinita (alfa = 0.05).

  2. Test di interazioni

    • Dopo aver rimosso le variabili meno significative, si è deciso di esplorare le interazioni tra alcune variabili per vedere se potessero migliorare il modello. Le interazioni testate sono state:

      • Gestazione:Sesso
      • Gestazione:Anni.madre
      • Fumatrici:Gestazione
    • Tuttavia, i modelli con le interazioni risultano troppo complessi e poco esplicativi, il che significa che le interazioni non aggiungono un miglioramento significativo alla comprensione del modello o alla previsione del peso. Le interazioni possono complicare eccessivamente l’interpretazione del modello, rendendolo meno intuitivo.

  3. Selezione del modello finale (BIC = 35220.10)

    • Si è quindi deciso di mantenere il modello che disperde meno informazioni e che risulta più facile da interpretare (mod5).
    • Questo modello ridotto è più semplice, senza le interazioni complesse, ma dovrebbe comunque essere sufficientemente esplicativo e in grado di descrivere la variabilità del peso.

9 Interpretazione dei coefficienti del Modello 5

Il modello di regressione lineare ha identificato i seguenti effetti delle variabili indipendenti sul peso medio alla nascita, mantenendo costanti tutte le altre variabili incluse:

Num.gravidanze: Ogni gravidanza aggiuntiva aumenta il peso medio di circa 12.48 unità, mantenendo costanti le altre variabili.

Gestazione: Ogni settimana aggiuntiva di gestazione aumenta il peso medio di circa 32.33 unità.

Lunghezza: Ogni centimetro in più di lunghezza alla nascita aumenta il peso medio di 10.25 unità.

Cranio: Ogni unità di circonferenza cranica aumenta il peso medio di 10.54 unità.

SessoM: I maschi pesano in media 77.99 unità in più rispetto alle femmine.

10 Selezione modello ottimale

car::vif(mod5)
## N.gravidanze   Gestazione    Lunghezza       Cranio        Sesso 
##     1.023475     1.669189     2.074689     1.624465     1.040054

Calcolato il VIF per la verifica di multicollinearità tra variabili, anche con modello stepwise.

I valori per ciascuna variabile è inferiore a 5, quindi non è presente multicollinearità.

11 Analisi della Qualità del Modello

#analisi residui
par(mfrow=c(2,2))
plot(mod5)

  1. Residui vs. valori predetti: controlla l’omoschedasticità (varianza costante).
    • se p-value <0.05 l’assunzione di omoschedasticità non è verificata.
    • In tal caso, si parla di eteroschedasticità. La componente di errore non ha varianza costante in quanto la dispersione dei residui attorno allo 0 (cioè la variabilità dei residui) tende ad aumentare (o a diminuire) al crescere dei valori stimati della variabile dipendente.
  2. Q-Q Plot: verifica la normalità dei residui.
    • I residui si distribuiscono sulla bisettrice del grafico, seguono una distribuzione normale tranne che nelle code.
  3. Scale-Location Plot: ulteriore verifica dell’omoschedasticità.
    • La distribuzione dei residui non sembra mantenere una varianza costante (dispersione leggermente crescente con i valori previsti)
  4. Residual vs Leverage:
    • Esistono alcuni punti influenti che potrebbero distorcere il modello.

Conclusioni: Se il test suggerisce non normalità ma l’istogramma e il Q-Q plot sembrano accettabili. Si può considerare che la non normalità non sia grave e proseguire con il modello, specialmente se il campione è grande (la stima dei parametri sarà comunque robusta per il Teorema del Limite Centrale).

#leverage
lev <- hatvalues(mod5)
plot(lev)
p <- sum(lev)
soglia = 2*p/n
abline(h = soglia, col= "red")

La maggior parte delle osservazioni non è influente e ha leverage basso. L’osservazione con leverage più alto è di 0.0049

#outliers
plot(rstudent(mod5))
abline(h=c(-2,2), col="red")

car::outlierTest(mod5)
##       rstudent unadjusted p-value Bonferroni p
## 1551 10.051908         2.4906e-23   6.2265e-20
## 155   5.027798         5.3138e-07   1.3285e-03
## 1306  4.827238         1.4681e-06   3.6702e-03
#distanza di cook
cook <-  cooks.distance(mod5)
plot(cook)

Valore basso (tipicamente < 1): La singola osservazione non ha un’influenza significativa sul modello. Il valore massimo della distanza di cook è 0.83

lmtest::bptest(mod5)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod5
## BP = 90.253, df = 5, p-value < 2.2e-16
lmtest::dwtest(mod5)
## 
##  Durbin-Watson test
## 
## data:  mod5
## DW = 1.9535, p-value = 0.1224
## alternative hypothesis: true autocorrelation is greater than 0
plot(density(residuals(mod5)))

par(mfrow=c(1,2))
plot(density(residuals(mod5)))
hist(residuals(mod5))

Per verificare graficamente la normalità dei residui, si può rappresentare l’istogramma dei residui standardizzati

Se l’assunzione di normalità è verificata, al crescere di 𝒏 i residui standardizzati dovrebbero distribuirsi secondo una normale standardizzata.

I residui graficamente non sembrano assumere una distribuzione normale.

Il test Shapiro - Wilk: La statistica test (W) può assumere valori compresi tra 0 e 1. Valori piccoli portano al rifiuto dell’ipotesi nulla. Quanto più il valore della statistica test si avvicina ad uno, tanto più la distribuzione dei residui approssima ad una normale. Nel caso specifico con 𝒏=2500 , si presume sia ancora troppo piccolo per vedere la distribuzione convergere in una normale standard.

Il test di Durbin-Watson viene utilizzato per verificare la presenza di autocorrelazione nei residui di un modello di regressione. Non c’è evidenza statistica sufficiente per rifiutare l’ipotesi nulla.Questo implica che non ci sono prove di autocorrelazione positiva nei residui del modello.

12 Previsioni e Risultati

nuovo_dato <- data.frame(
  N.gravidanze = 3,
  Fumatrici = 0,
  Gestazione = 39,
  Lunghezza = 494.7,
  Cranio = 340,
  Sesso = "F"
)
peso_previsto <- predict(mod5, newdata = nuovo_dato)
peso_previsto
##        1 
## 3270.864

Il modello scelto (mod5) verrà utilizzato per fare previsioni.

Nel caso studio stimeremo il peso di una neonata considerando una madre alla terza gravidanza che partorità alla 39esima settimana. Il peso previsto sarà di 3270,86 grammi

13 Visualizzazioni

ggplot(dati, aes(x = Gestazione, y = Peso, color = Sesso)) +
  geom_smooth(aes(x = Gestazione, y = Peso, color = Sesso), se = F, method = "lm") +
  geom_smooth(aes(x = Gestazione, y = Peso),color = "black",se = F, method = "lm")+
  labs(title = "Interazione tra sesso e settimane di gestazione",
       x = "Settimane di gestazione",
       y = "Peso del neonato (grammi)")

ggplot(dati, aes(x = Gestazione, y = Peso, color = factor(Fumatrici), shape = factor(Fumatrici))) +
  geom_point(alpha = 0.5, size = 2) + # Punti con trasparenza
  geom_smooth(method = "lm", se = FALSE, aes(linetype = factor(Fumatrici))) +
  scale_color_manual(values = c("blue", "red1"), labels = c("Non Fumatrice", "Fumatrice")) +
  scale_shape_manual(values = c(16, 17), labels = c("Non Fumatrice", "Fumatrice")) +
  scale_linetype_manual(values = c("solid", "dashed"), labels = c("Non Fumatrice", "Fumatrice")) +
  labs(title = "Gestazione vs Peso del neonato (Fumatrice: Sì/No)",
       x = "Settimane di Gestazione",
       y = "Peso del Neonato (grammi)",
       color = "Fumatrici",
       shape = "Fumatrici",
       linetype = "Fumatrici") +
  theme_minimal()

  1. Andamento Generale tra Gestazione e Peso:

La relazione tra le settimane di gestazione e il peso del neonato è chiaramente positiva: All’aumentare delle settimane di gestazione, il peso del neonato aumenta. Questo andamento è evidente sia per le madri fumatrici che per le non fumatrici.

  1. Differenza tra Fumatrici e Non Fumatrici:

La linea di regressione tratteggiata rossa (fumatrici) si trova leggermente più in basso rispetto alla linea continua blu (non fumatrici). Ciò suggerisce che, a parità di settimane di gestazione, i neonati di madri fumatrici tendono ad avere un peso inferiore rispetto ai neonati di madri non fumatrici. Questa differenza non è visivamente enorme, ma è comunque consistente.

  1. Distribuzione dei Dati:

Le osservazioni sono più dense per gestazioni tra le 39 e 41 settimane, indicando che la maggior parte delle nascite avviene in questo intervallo.

Nei valori estremi (gestazioni brevi, es. 30 settimane), il peso è basso per entrambi i gruppi, ma l’effetto del fumo sembra meno evidente (poche osservazioni disponibili).