Neonatal Health Solutions

Obiettivo: Creare un modello statistico in grado di prevedere con precisione il peso dei neonati alla nascita, basandosi su variabili cliniche raccolte da tre ospedali. Il progetto mira a migliorare la gestione delle gravidanze ad alto rischio, ottimizzare le risorse ospedaliere e garantire migliori risultati per la salute neonatale.

Il progetto si inserisce all’interno di un contesto di crescente attenzione verso la prevenzione delle complicazioni neonatali. La possibilità di prevedere il peso alla nascita dei neonati rappresenta un’opportunità fondamentale per migliorare la pianificazione clinica e ridurre i rischi associati a nascite problematiche, come parti prematuri o neonati con basso peso. Di seguito, i principali benefici che questo progetto porterà all’azienda e al settore sanitario:

  1. Miglioramento delle previsioni cliniche:

    • Il peso del neonato è un indicatore chiave della sua salute. Avere un modello predittivo accurato consente al personale medico di intervenire tempestivamente in caso di anomalie, riducendo le complicazioni perinatali come le difficoltà respiratorie o l’ipoglicemia.
  2. Ottimizzazione delle risorse ospedaliere:

    • Sapere in anticipo quali neonati potrebbero avere bisogno di cure intensive aiuta a organizzare le risorse umane e tecnologiche degli ospedali in modo efficiente. Questo si traduce in una riduzione dei costi operativi e una migliore pianificazione dell’utilizzo delle unità di terapia intensiva neonatale (TIN).
  3. Prevenzione e identificazione dei fattori di rischio:

    • Il modello potrà evidenziare i fattori che maggiormente influenzano negativamente il peso del neonato (come il fumo materno, gravidanze multiple o età avanzata della madre). Queste informazioni sono preziose per la prevenzione e la gestione personalizzata delle gravidanze, permettendo interventi proattivi in caso di rischio elevato.
  4. Valutazione delle pratiche ospedaliere:

    • Attraverso un’analisi comparativa tra i tre ospedali coinvolti, l’azienda potrà identificare eventuali differenze nei risultati clinici, come una maggiore incidenza di parti cesarei in una determinata struttura. Ciò consente di monitorare la qualità delle pratiche e armonizzare i protocolli tra i diversi centri ospedalieri, migliorando la coerenza delle cure.
  5. Supporto alla pianificazione strategica:

    • L’analisi dei dati e le previsioni possono essere utilizzate per prendere decisioni informate non solo a livello clinico ma anche strategico. L’azienda potrà sfruttare queste informazioni per implementare nuove politiche di salute pubblica, garantendo un impatto positivo sui tassi di mortalità e morbilità neonatale.

Librerie

Carico le librerie, le funzioni e il dataset

Installazione dei packages usati e verifica della versione

# library installatiion
library(ggplot2)
## Warning: il pacchetto 'ggplot2' è stato creato con R versione 4.4.1
# Packages verification installation
packageVersion("ggplot2")
## [1] '3.5.1'
########
# Load the moments package for skewness and kurtosis calculations
library(moments)
# Packages verification installation
packageVersion("moments")
## [1] '0.14.1'
########
# Load the moments package for skewness and kurtosis calculations
library(dplyr)
## Warning: il pacchetto 'dplyr' è stato creato con R versione 4.4.1
## 
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:stats':
## 
##     filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
## 
##     intersect, setdiff, setequal, union
# Packages verification installation
packageVersion("dplyr")
## [1] '1.1.4'
########
# Load the moments package for skewness and kurtosis calculations
library(stringr)
## Warning: il pacchetto 'stringr' è stato creato con R versione 4.4.1
# Packages verification installation
packageVersion("stringr")
## [1] '1.5.1'
########
# Load the ineq package for Gini calculations
library(ineq)
# Packages verification installation
packageVersion("ineq")
## [1] '0.2.13'
########
# Load the tidyr package for line charts
library(tidyr)
## Warning: il pacchetto 'tidyr' è stato creato con R versione 4.4.2
# Packages verification installation
packageVersion("tidyr")
## [1] '1.3.1'
########
# Load the knitr package for line charts
library(knitr)
## Warning: il pacchetto 'knitr' è stato creato con R versione 4.4.1
# Packages verification installation
packageVersion("knitr")
## [1] '1.48'
# library installatiion
library(car)
## Warning: il pacchetto 'car' è stato creato con R versione 4.4.2
## Caricamento del pacchetto richiesto: carData
## Warning: il pacchetto 'carData' è stato creato con R versione 4.4.2
## 
## Caricamento pacchetto: 'car'
## Il seguente oggetto è mascherato da 'package:dplyr':
## 
##     recode
# Packages verification installation
packageVersion("car")
## [1] '3.1.3'
########
# library installatiion
library(lmtest)
## Warning: il pacchetto 'lmtest' è stato creato con R versione 4.4.2
## Caricamento del pacchetto richiesto: zoo
## Warning: il pacchetto 'zoo' è stato creato con R versione 4.4.1
## 
## Caricamento pacchetto: 'zoo'
## I seguenti oggetti sono mascherati da 'package:base':
## 
##     as.Date, as.Date.numeric
# Packages verification installation
packageVersion("lmtest")
## [1] '0.9.40'
########

Funzioni

############################################################################
# Function to calculate mean, median, min, max, first quantile and third quantile  # for each numeric column in a dataframe
############################################################################
calculate_index_pos <- function(df) {
  # Select only numeric columns
  numeric_df <- df[sapply(df, is.numeric)]
  
  # Calculate mean, median, min, and max for each column
  stats <- data.frame(
    Mean   = sapply(numeric_df, mean, na.rm = TRUE),
    Median = sapply(numeric_df, median, na.rm = TRUE),
    Mode   = sapply(numeric_df, getmode),
    Min    = sapply(numeric_df, min, na.rm = TRUE),
    Max    = sapply(numeric_df, max, na.rm = TRUE),
    Qtl.25 = sapply(numeric_df, quantile, probs=0.25, na.rm = TRUE),
    Qtl.75 = sapply(numeric_df, quantile, probs=0.75, na.rm = TRUE)
    )
  return(stats)
}
############################################################################



############################################################################
# Calculate variance index of dataframe
############################################################################

calculate_variance_index <- function(df) {
  # Select only numeric columns
  numeric_df <- df[sapply(df, is.numeric)]
  
  # Calculate variance index 
  stats = data.frame(
    Range    =sapply(numeric_df, getrange),
    IQR      =sapply(numeric_df, IQR, na.rm = TRUE),
    variance =sapply(numeric_df, var, na.rm = TRUE), 
    st.dev   =sapply(numeric_df, sd, na.rm = TRUE),
    CV       =sapply(numeric_df, CV ) 
    )
  return(stats)
}
#
############################################################################



############################################################################
# Calculate the shape of a dataframe
############################################################################
calculate_shape = function(df) {
  # Select only numeric columns
  numeric_df = df[sapply(df, is.numeric)]
  
  # Calculate variance index 
  stats = data.frame(
    Asym_ind  =sapply(numeric_df, skewness,na.rm = TRUE),
    Kurtosis  =sapply(numeric_df, kurtosis, na.rm = TRUE)
    )
  return(stats)
}
############################################################################


############################################################################
# Get mode of the vector 
############################################################################
getmode <- function(v) {
   uniqv <- unique(v)
   uniqv[which.max(tabulate(match(v, uniqv)))]
}
#
############################################################################




############################################################################
# Get the range of a vector 
############################################################################
getrange <- function(v) {
  range = max(v)-min(v) 
  return(range)
  }
############################################################################




############################################################################
# Function Variance %
############################################################################
CV = function(x){
  return = (  sd(x)/mean(x)*100 ) 
}
############################################################################




############################################################################
# GINI index a
############################################################################
gini.index = function(x){
      ni=table(x)         
      fi=ni/length(x)
      fi2=fi^2
      J = length (table(x))
      
      gini = 1 - sum(fi2)
      gini.normalizzato = gini/((J-1)/J)
      return(gini.normalizzato)
}
#
############################################################################



############################################################################
# class and graph maker
############################################################################
freq_grap = function(x,
                     seq_start,
                     seq_end,
                     seq_steps,
                     title_desc,
                     x_desc,
                     y_desc,
                     y_start,
                     y_end,
                     y_steps) {

    # Create the classes
    x_cl = cut(x, seq(seq_start, seq_end, seq_steps))
    x_n  = length(x)
    
    # Create the frequency distribution table
    distr_freq = as.data.frame(
      cbind(
        ni = table(x_cl),              # Absolute frequency
        fi = table(x_cl) / x_n,        # Relative frequency
        Ni = cumsum(table(x_cl)),      # Cumulative absolute frequency
        Fi = cumsum(table(x_cl) / x_n) # Cumulative relative frequency
      )
    )
    
    # Create the frequency distribution plot
    plot = ggplot(data = as.data.frame(x_cl)) +
      geom_bar(aes(x = x_cl),
               position = "stack",
               stat = "count",
               col = "black",
               
               fill = "lightblue") +
      labs(title = title_desc,
           x =x_desc,
           y =y_desc) +
      scale_y_continuous(breaks = seq(y_start, y_end, y_steps)) +
      theme_classic() +
      theme(legend.position = "bottom")
    
    print(plot)  # Force the plot to display
    
    return(distr_freq)
}
#
############################################################################




############################################################################
# word counter 
############################################################################
count_word = function(word, text_vector) {
    # Convert to lowercase for case-insensitive search
    word = tolower(word)
    text_vector = tolower(text_vector)
    
    # Count occurrences of the specific word in each element of the vector
    count = sum(sapply(text_vector, function(text) {
        str_count(text, paste0("\\b", word, "\\b"))
    }))
    
    return(count)
}
#
############################################################################



############################################################################
# words counter in columns - 
############################################################################
count_words_in_columns = function(df, column_A, word_A, column_B, word_B) {
    # Convert words to lowercase for case-insensitive search
    word_A = tolower(word_A)
    word_B = tolower(word_B)
    
    # Initialize counter
    count = 0
    
    # Loop through each row of the dataframe
    for (i in seq_len(nrow(df))) {
        # Convert values in specified columns to lowercase for case-insensitive comparison
        text_A = tolower(as.character(df[i, column_A]))
        text_B = tolower(as.character(df[i, column_B]))
        
        # Check if word_A is in column_A and word_B is in column_B for the same row
        if (grepl(word_A, text_A) & grepl(word_B, text_B)) {
            count = count + 1
        }
    }
    
    return(count)
}
#     
############################################################################


############################################################################
# class and graph maker with X labels 45 deg
############################################################################
freq_grap_45 = function(x,
                     seq_start,
                     seq_end,
                     seq_steps,
                     title_desc,
                     x_desc,
                     y_desc,
                     y_start,
                     y_end,
                     y_steps) {

    # Create the classes
  
    class_limits = pretty(seq_start:seq_end, n = seq_steps)
    
    x_cl=      cut(x,
                   breaks = class_limits,
                   include.lowest = TRUE,
                   right = TRUE, # Classe chiusa a sinistra, aperta a destra
                   labels=paste0("[", head(class_limits, -1), " - ", tail(class_limits, -1), ")")
                   )
    
    x_n  = length(x)
    
    # Create the frequency distribution table
    distr_freq = as.data.frame(
      cbind(
        ni = table(x_cl),              # Absolute frequency
        fi = table(x_cl) / x_n,        # Relative frequency
        Ni = cumsum(table(x_cl)),      # Cumulative absolute frequency
        Fi = cumsum(table(x_cl) / x_n) # Cumulative relative frequency
      )
    )
    
    # Create the frequency distribution plot
    plot = ggplot(data = as.data.frame(x_cl)) +
      geom_bar(aes(x = x_cl),
               position = "stack",
               stat = "count",
               col = "black",
               
               fill = "lightblue") +
      labs(title = title_desc,
           x =x_desc,
           y =y_desc) +
      scale_y_continuous(breaks = seq(y_start, y_end, y_steps)) +
      theme_classic() +
      theme(legend.position = "bottom")+
      # Rotate x-axis labels by 45 degrees for readability
      theme(axis.text.x = element_text(angle = 45, hjust = 1))+
      scale_x_discrete(labels = function(x) gsub("\\(|\\]|,", "", x))
    
    print(plot)  # Force the plot to display
    
    return(distr_freq)
}
#
############################################################################

############################################################################
# Function Line Chart by group
############################################################################
line_chart_group  = function(dataframe,
                            data_col,
                            df_filter_1,
                            df_filter_2,
                            x_start,
                            x_end,
                            x_steps,
                            title_desc,
                            Y_desc,
                            X_desc,
                            group_desc,
                            y_start,
                            y_end,
                            y_steps
                            ) {

    # Using the {{ }} operator to refer to column names
    
    df_A = NULL
    df_A <- dataframe %>%
    group_by({{ df_filter_1 }},{{ df_filter_2 }}) %>%
    summarise(tot_sum = sum({{data_col}}, na.rm = TRUE)) %>%
    ungroup()
    # Print the new dataframe created 
    print(df_A)

    ggplot(data = df_A,
           aes(x = {{ df_filter_1 }},
               y = tot_sum,
               color = {{ df_filter_2 }}, 
               group = {{ df_filter_2 }}
               ))+
    geom_line(size = 1)+ 
    theme_minimal() +
    # Definisce i nomi degli assi 
    labs (title = title_desc,
              x = X_desc,
              y = Y_desc, 
              fill = group_desc
    )+   
   scale_y_continuous(breaks=seq(y_start,y_end,y_steps))+
   if (x_start >0) {
          
            scale_x_continuous(breaks = seq(x_start, x_end, x_steps))
          }   
  
}  
############################################################################

############################################################################
# Function Line Chart by group + Colored
############################################################################
line_chart_group_col  = function(dataframe,
                                  data_col,
                                  df_filter_1,
                                  df_filter_2,
                                  x_start,
                                  x_end,
                                  x_steps,
                                  title_desc,
                                  Y_desc,
                                  X_desc,
                                  group_desc,
                                  y_start,
                                  y_end,
                                  y_steps
                                  ) {

    # Using the {{ }} operator to refer to column names
    
    df_A = NULL
    df_A = dataframe %>%
    group_by({{ df_filter_1 }}, {{ df_filter_2 }}) %>%
    summarise(tot_sum = sum({{data_col}}, na.rm = TRUE), .groups = "drop") %>%
    ungroup()
    
    # Convert {{ df_filter_2 }} to a factor
    df_A = df_A %>%
        mutate({{ df_filter_2 }} := as.factor({{ df_filter_2 }}))
    
    # Print the new dataframe created 
    print(df_A)

    ggplot(data = df_A,
           aes(x = {{ df_filter_1 }},
               y = tot_sum,
               color = {{ df_filter_2 }}, 
               group = {{ df_filter_2 }}
               ))+
    geom_line(size = 1)+ 
    theme_minimal() +
    # Definisce i nomi degli assi 
    labs (title = title_desc,
              x = X_desc,
              y = Y_desc, 
              color = group_desc
    )+   
    scale_y_continuous(breaks = seq(y_start, y_end, y_steps)) +
    scale_color_discrete() + # Use discrete color scale
    
    if (x_start > 0) {
        scale_x_continuous(breaks = seq(x_start, x_end, x_steps))
    }
}  
############################################################################

Import dei dati

dati_neonati = read.csv("neonati.csv", header = TRUE, sep = ",", fileEncoding = "ISO-8859-1")

dati_neonati_fact = NULL
dati_neonati_fact = read.csv("neonati.csv",
                             stringsAsFactors = T,
                             sep="," ,
                             fileEncoding = "ISO-8859-1"
                             )

n <- dim(dati_neonati)[1] # Define dataset elements

head(dati_neonati) # Controllo che il dataframe sia stato caricato
##   Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio Tipo.parto
## 1         26            0         0         42 3380       490    325        Nat
## 2         21            2         0         39 3150       490    345        Nat
## 3         34            3         0         38 3640       500    375        Nat
## 4         28            1         0         41 3690       515    365        Nat
## 5         20            0         0         38 3700       480    335        Nat
## 6         32            0         0         40 3200       495    340        Nat
##   Ospedale Sesso
## 1     osp3     M
## 2     osp1     F
## 3     osp2     M
## 4     osp2     M
## 5     osp3     F
## 6     osp2     F
sum_no_data=sum(is.na(dati_neonati
                      ))
cat("Numero totale di NA nel dataframe:",sum_no_data, "\n")
## Numero totale di NA nel dataframe: 0

Esplorazione delle variabili

Il dataframe contiene le seguenti variabili

  • Anni.madre: Età della madre. -> Variabile quantitativa discreta

  • N.gravidanze: Numero di gravidanze precedenti. -> Variabile quantitativa discreta

  • Fumatrici: Indica se la madre fuma (0 = no, 1 = sì). -> Variabile qualitativa nominale

  • Gestazione: Settimane di gestazione. -> Variabile quantitativa discreta

  • Peso: Peso del neonato in grammi. -> Variabile quantitativa continua

  • Lunghezza: Lunghezza del neonato in millimetri. -> Variabile quantitativa continua

  • Cranio: Circonferenza cranica in millimetri. -> Variabile quantitativa continua

  • Tipo.parto: Tipo di parto (es. naturale o cesareo). -> Variabile qualitativa nominale

  • Ospedale: Codice dell’ospedale. -> Variabile qualitativa nominale

  • Sesso: Sesso del neonato (M/F -> Variabile qualitativa nominale

Il dataset non contiene dati mancanti

====================================================================

Costruisco un dataframe che contiene variabili non qualitative

dati_neonati_no_qual = NULL

dati_neonati_no_qual = dati_neonati

dati_neonati_no_qual = dati_neonati_no_qual[, !colnames(dati_neonati_no_qual) %in%                        "Fumatrici"]
dati_neonati_no_qual = dati_neonati_no_qual[, !colnames(dati_neonati_no_qual) %in%                        "Tipo.parto"]
dati_neonati_no_qual = dati_neonati_no_qual[, !colnames(dati_neonati_no_qual) %in%                        "Ospedale"]
dati_neonati_no_qual = dati_neonati_no_qual[, !colnames(dati_neonati_no_qual) %in%                        "Sesso"]



kable(head(dati_neonati_no_qual),format = "simple", caption = "Dataframe contenente solo variabili quantitative")
Dataframe contenente solo variabili quantitative
Anni.madre N.gravidanze Gestazione Peso Lunghezza Cranio
26 0 42 3380 490 325
21 2 39 3150 490 345
34 3 38 3640 500 375
28 1 41 3690 515 365
20 0 38 3700 480 335
32 0 40 3200 495 340

1.1 Indici di posizione

df_temp = NULL
df_temp = calculate_index_pos(dati_neonati_no_qual)

kable(df_temp,format = "simple", caption = "Dataframe contenente solo variabili quantitative")
Dataframe contenente solo variabili quantitative
Mean Median Mode Min Max Qtl.25 Qtl.75
Anni.madre 28.1640 28 30 0 46 25 32
N.gravidanze 0.9812 1 0 0 12 0 1
Gestazione 38.9804 39 40 25 43 38 40
Peso 3284.0808 3300 3300 830 4930 2990 3620
Lunghezza 494.6920 500 500 310 565 480 510
Cranio 340.0292 340 340 235 390 330 350

1.1.1 Analisi

Calcoli di indici di posizione (media, mediana, moda) e dispersione (minimo, massimo, quartili). Analizziamo ogni variabile:

1. Anni.madre

  • Media (Mean): 28.16 anni. L’età media delle madri è circa 28 anni.

  • Mediana: 28 anni. L’età centrale è molto vicina alla media, indicando una distribuzione probabilmente simmetrica.

  • Moda: 30 anni. L’età più comune è 30 anni.

  • Minimo - Massimo: da 0 a 46 anni, suggerendo la presenza di valori non conformi come 0. Andrà controllato

  • Primo quartile (Q1): 25 anni.

  • Terzo quartile (Q3): 32 anni. La maggior parte delle madri ha un’età compresa tra 25 e 32 anni.

    I dati indicano una distribuzione simmetrica

2. N.gravidanze

  • Media: 0.98. Il numero medio di gravidanze è appena sotto 1.

  • Mediana: 1. Il valore centrale corrisponde a una gravidanza.

  • Moda: 0 gravidanze, indica che la maggior parte delle donne non ha mai avuto gravidanze

  • Minimo - Massimo: da 0 a 12 gravidanze, con valori estremi (12 gravidanze), dato anche qui da controllare

  • Quartili: Il 25% delle donne ha avuto 0 gravidanze, e il 75% ha avuto massimo 1 gravidanza.

    I dati indicano una distribuzione simmetrica

3. Gestazione (settimane)

  • Media: 38.98 settimane. Il valore medio è vicino alla durata standard di una gravidanza (circa 39 settimane).

  • Mediana: 39 settimane.

  • Moda: 40 settimane, il valore più comune per una gravidanza a termine.

  • Minimo - Massimo: da 25 a 43 settimane, con valori bassi (25 settimane) probabilmente associati a parti prematuri.

  • Quartili: La maggior parte delle gravidanze dura tra 38 e 40 settimane, in linea

4. Peso (grammi)

  • Media: 3284 grammi (circa 3.28 kg). Peso medio nella norma per un neonato.

  • Mediana: 3300 grammi.

  • Moda: 3300 grammi, il valore più frequente.

  • Minimo - Massimo: da 830 a 4930 grammi. Il minimo sembra indicare un peso estremamente basso (neonati prematuri), mentre il massimo suggerisce un neonato molto grande.

  • Quartili: Il peso è compreso tra 2990 e 3620 grammi per il 50% dei neonati.

    • I dati indicano una distribuzione simmetrica

5. Lunghezza (mm)

  • Media: 494.69 mm (circa 49.5 cm). Lunghezza media adeguata per un neonato.

  • Mediana: 500 mm (50 cm), un valore comune.

  • Minimo - Massimo: da 310 a 565 mm. I valori minimi potrebbero indicare anomalie o neonati prematuri.

  • Quartili: Il 50% dei neonati ha una lunghezza tra 480 e 510 mm.

6. Cranio (mm)

  • Media: 340 mm (34 cm). Circonferenza cranica media nella norma per un neonato.

  • Mediana: 340 mm.

  • Moda: 340 mm, valore centrale molto rappresentativo.

  • Minimo - Massimo: da 235 a 390 mm. Anche qui, i valori estremi possono indicare neonati prematuri o casi particolari.

  • Quartili: Il 50% dei neonati ha una circonferenza cranica tra 330 e 350 mm.

1.1.2 Osservazioni generali

  • La maggior parte delle variabili presenta distribuzioni relativamente simmetriche, come indicato dalla vicinanza tra media e mediana.

  • Sono presenti valori estremi (outlier) in alcune variabili, come “Anni.madre” (0 anni), “N.gravidanze” (12 gravidanze), “Peso” (830 grammi).

  • I dati suggeriscono un’analisi ulteriore per verificare errori o valori anomali.

  • Potremmo usare un Box Plot per analizzare meglio le distribuzioni in oggetto, sopratutto per evidenziare gli outliners e poter considerare essi un dato errato all’origine

1.2 Box plot per evidenziare outliners della var. “Anni madre”

ggplot(data=dati_neonati_no_qual)+
         geom_boxplot(aes(y=Anni.madre
                   ),
                   fill="lightblue"
                   )+
             
         labs(title =" Box plot dell'età della madre",
            
            y = " Età della madre [Anni]")+
   
      scale_y_continuous(breaks=seq(0,50,5))   

1.2.1 Analisi del grafico

  • Distribuzione principale:

    • La distribuzione sembra relativamente simmetrica per la maggior parte dei dati, con mediana e quartili abbastanza centrati.

    • Il 50% delle madri si trova in una fascia d’età compresa tra 25 e 32 anni.

  • Outlier:

    • I valori inferiori a 15 anni sono anomali e potrebbero rappresentare errori di input o dati eccezionali (madri molto giovani).

    • I valori superiori a 45 anni, anche se meno frequenti, possono rappresentare madri in età più avanzata o casi speciali.

  • Intervallo interquartile (IQR):

    • L’intervallo tra Q1 (25 anni) e Q3 (32 anni) è relativamente stretto, indicando una distribuzione centrale concentrata.

1.2.2 Osservazioni generali - correzione dataset

Si evidenziano numerosi outliners, ma possiamo ricostruire il database eliminando le righe che presentano quelli in basso 0 e 1 visto che sappiamo che sono valori troppo bassi. Li sostituiremo con la mediana.

dati_neonati_no_qual$Anni.madre[dati_neonati_no_qual$Anni.madre<=1] = 28
dati_neonati$Anni.madre[dati_neonati$Anni.madre<=1] = 28
dati_neonati_fact$Anni.madre[dati_neonati_fact$Anni.madre<=1] = 28

=================================================================

1.3 Analisi delle variabilità

df_temp= NULL

df_temp=calculate_variance_index(dati_neonati_no_qual)
df_temp$variance = round(df_temp$variance,2)


kable(df_temp, format = "simple", caption = "Variabilità del dataset")
Variabilità del dataset
Range IQR variance st.dev CV
Anni.madre 33 7 27.20 5.215121 18.502521
N.gravidanze 12 1 1.64 1.280587 130.512310
Gestazione 18 2 3.49 1.868639 4.793792
Peso 4100 630 275665.68 525.038744 15.987388
Lunghezza 255 30 692.67 26.318644 5.320208
Cranio 155 20 269.79 16.425330 4.830565

La tabella evidenzia le misure di variabilità: Range, Interquartile Range (IQR), Varianza, Deviazione standard (st.dev) e Coefficiente di variazione (CV). Ecco l’interpretazione dettagliata:

1. Anni.madre

  • Range: 33 anni (massimo - minimo).

    • La distribuzione copre un ampio intervallo, ma potrebbe includere outlier.
  • IQR: 7 anni.

    • Il 50% centrale delle madri ha un’età compresa in un intervallo ristretto.
  • Varianza: 27.20.

  • Deviazione standard: 5.22.

    • L’età delle madri varia in media di circa 5 anni rispetto alla media.
  • CV (Coefficiente di variazione): 18.50%.

    • La variabilità relativa è moderata.

2. N.gravidanze

  • Range: 12.

    • Il numero di gravidanze varia da 0 a 12, con valori estremi potenzialmente anomali.
  • IQR: 1.

    • La maggior parte delle madri ha avuto poche gravidanze (tra Q1 e Q3 differiscono di 1).
  • Varianza: 1.64.

  • Deviazione standard: 1.28.

    • La variabilità è bassa, coerente con il range ristretto per la maggior parte dei dati.
  • CV: 130.51%.

    • La variabilità relativa è alta, probabilmente a causa della frequenza di valori vicini a 0.

3. Gestazione (settimane)

  • Range: 18 settimane.

    • La durata della gestazione varia da parti prematuri a post-termine.
  • IQR: 2 settimane.

    • La maggior parte delle gravidanze si trova in un intervallo ristretto vicino alla durata standard.
  • Varianza: 3.49.

  • Deviazione standard: 1.87.

    • La durata della gravidanza varia di circa 1.87 settimane rispetto alla media.
  • CV: 4.79%.

    • La variabilità relativa è bassa, confermando la stabilità della durata gestazionale.

4. Peso (grammi)

  • Range: 4100 grammi.

    • Ampio intervallo di peso, da neonati estremamente piccoli a molto grandi.
  • IQR: 630 grammi.

    • Il 50% dei pesi è concentrato in un intervallo moderatamente ristretto.
  • Varianza: 275665.68.

  • Deviazione standard: 525.04.

    • Il peso varia in media di circa 525 grammi rispetto alla media.
  • CV: 15.99%.

    • La variabilità relativa è moderata.

5. Lunghezza (mm)

  • Range: 255 mm.

    • Ampio intervallo, che potrebbe includere valori anomali o neonati prematuri.
  • IQR: 30 mm.

    • La lunghezza centrale dei neonati è più stabile rispetto all’intero range.
  • Varianza: 692.67.

  • Deviazione standard: 26.32 mm.

    • La variabilità in lunghezza è limitata, con una deviazione standard di circa 26 mm.
  • CV: 5.32%.

    • La variabilità relativa è bassa.

6. Cranio (mm)

  • Range: 155 mm.

    • Copre una discreta varietà di valori.
  • IQR: 20 mm.

    • Il 50% delle circonferenze craniche è concentrato in un intervallo stretto.
  • Varianza: 269.79.

  • Deviazione standard: 16.43 mm.

    • La variabilità è contenuta, con una deviazione standard di circa 16 mm.
  • CV: 4.83%.

    • La variabilità relativa è molto bassa.

1.3.1 Osservazioni generali

  1. Bassa variabilità relativa (CV):

    • Variabili come “Gestazione”, “Lunghezza” e “Cranio” mostrano una variabilità relativa bassa, indicando distribuzioni stabili.
  2. Elevata variabilità relativa:

    • “N.gravidanze” presenta un CV elevato (130%), probabilmente a causa di valori vicini a 0 e occasionali valori estremi.
  3. Ampio range e IQR:

    • Variabili come “Peso” e “Lunghezza” mostrano un ampio range, ma un IQR più ristretto, indicando che la maggior parte dei valori è concentrata in un intervallo centrale.

Le variabil peso e numero di gravidenze necessitano di un’analisi approfondita per capire se ci sono degli errori di rilevazione

1.4 Variabile peso: analisi

1.4.1 Costruiamo un box plot della variabile peso

ggplot(data=dati_neonati_no_qual)+
         geom_boxplot(aes(y=Peso
                   ),
                   fill="lightblue"
                   )+
             
         labs(title =" Box plot della variabile peso",
            
            y = " Peso del neonato [ Grammi ]")+
   
      scale_y_continuous(breaks=seq(800,5000,250))  

1.4.2 Costruisco una distribuzione in classi per comprendere meglio se gli outliers sono dovuti ad un errore di campionamento

distr_freq = freq_grap_45(x = dati_neonati_no_qual$Peso,
                           seq_start  = 500,
                           seq_end    = 5000,
                           seq_steps  = 18,
                           title_desc = "Distribuzione in classi della variabile peso",
                           y_desc ="Frequenza assoluta",
                           x_desc ="Classi di peso del neonato [grammi] ",
                           y_start    = 0,
                           y_end      = 1200,
                           y_steps    = 50
                           )

print(distr_freq)
##                ni     fi   Ni     Fi
## [400 - 600)     0 0.0000    0 0.0000
## [600 - 800)     0 0.0000    0 0.0000
## [800 - 1000)    6 0.0024    6 0.0024
## [1000 - 1200)   5 0.0020   11 0.0044
## [1200 - 1400)   8 0.0032   19 0.0076
## [1400 - 1600)   9 0.0036   28 0.0112
## [1600 - 1800)  12 0.0048   40 0.0160
## [1800 - 2000)  13 0.0052   53 0.0212
## [2000 - 2200)  21 0.0084   74 0.0296
## [2200 - 2400)  38 0.0152  112 0.0448
## [2400 - 2600)  83 0.0332  195 0.0780
## [2600 - 2800) 157 0.0628  352 0.1408
## [2800 - 3000) 305 0.1220  657 0.2628
## [3000 - 3200) 400 0.1600 1057 0.4228
## [3200 - 3400) 444 0.1776 1501 0.6004
## [3400 - 3600) 361 0.1444 1862 0.7448
## [3600 - 3800) 278 0.1112 2140 0.8560
## [3800 - 4000) 195 0.0780 2335 0.9340
## [4000 - 4200)  92 0.0368 2427 0.9708
## [4200 - 4400)  46 0.0184 2473 0.9892
## [4400 - 4600)  16 0.0064 2489 0.9956
## [4600 - 4800)   8 0.0032 2497 0.9988
## [4800 - 5000)   3 0.0012 2500 1.0000

1.4.3 Osservazioni generali

Questo grafico mostra distribuzione del peso dei neonati divisi in classi, con la frequenza assoluta sull’asse y.

1. Distribuzione del Peso

L’istogramma mostra come i pesi dei neonati siano distribuiti in vari intervalli (classi), ognuno dei quali copre un range di 200 grammi:

  • Gli intervalli variano da 800 g fino a 5000 g.

  • La classe con la frequenza più alta è 3200-3400 g, seguita da 3400-3600 g e 3000-3200 g, che indica che la maggior parte dei neonati rientra in questo range di peso.

2. Caratteristiche della Distribuzione

  • Distribuzione Simmetrica: La distribuzione sembra avere una forma che ricorda una curva normale, indicando una distribuzione simmetrica dei pesi dei neonati attorno alla media.

  • Moda: La classe con la frequenza più alta (ossia la moda) è quella tra 3200 g e 3400 g, con circa 450 neonati.

  • Code: Le code, ovvero le classi agli estremi (come 800-1000 g e 4800-5000 g), presentano una frequenza molto bassa, indicando che i pesi estremamente bassi o estremamente alti sono rari.

3. Tendenza Centrale e Variabilità

  • Media e Mediana: Considerando la forma della distribuzione, la media e la mediana sono vicine alla classe centrale (tra 3200 g e 3400 g). Questo è indicativo di un buon livello di salute per la maggior parte dei neonati.

  • Variabilità: C’è una buona quantità di variabilità, ma non sembra ci siano valori estremamente anomali. La variabilità dei pesi si concentra intorno ai valori medi, mentre i valori agli estremi (come 800-1200 g o 4800-5000 g) sono molto meno frequenti.

4. Intervalli di Peso Significativi

  • Classi Centrali: Le classi 3000-3800 g comprendono la maggior parte dei neonati, suggerendo che questi pesi siano i più comuni e che rappresentino una buona salute del neonato.

  • Classi Estreme: Le classi sotto 2000 g indicano neonati con peso basso, che potrebbero aver bisogno di maggiore attenzione medica.

5. Considerazioni Statistiche

  • Distribuzione Normale: La distribuzione del peso dei neonati sembra approssimare una distribuzione normale, suggerendo che la maggior parte dei neonati ha un peso simile, con alcune eccezioni alle estremità.

  • Valori Anomali: Le code della distribuzione potrebbero rappresentare neonati prematuri (a sinistra) o neonati con peso sopra la norma (a destra), comunque sono dati che non sembrano debbano essere eliminati. No vengono considerati errori di campionamento

1.5.1 Box plot per la variabile numero di gravidanze

Costruiamo questo boxplot

ggplot(data=dati_neonati_no_qual)+
         geom_boxplot(aes(y=N.gravidanze
                   ),
                   fill="lightblue"
                   )+
             
         labs(title =" Box plot del numero di gravidanze",
            
            y = " Numero di gravidanze")+
   
      scale_y_continuous(breaks=seq(0,30,1))  

Il grafico è un box plot del numero di gravidanze. Procederò con un’analisi dettagliata del box plot per descrivere la distribuzione di questa variabile.

1.5.2 Osservazione generali

Un box plot è uno strumento utile per comprendere la distribuzione di una variabile, individuare mediana, quartili e valori anomali.

  • Asse Y: Mostra il numero di gravidanze delle madri.

  • Box centrale (interquartile range, IQR): Rappresenta la porzione centrale del dataset (dal 1° quartile (Q1) al 3° quartile (Q3)). In questo caso, la maggior parte dei valori del numero di gravidanze è 1.

  • Linea nera all’interno del box: Questa linea rappresenta la mediana della distribuzione. Da quanto

  • “Baffi” : Si estendono dal box per mostrare l’estensione dei dati fino a 2 gravidanze.

  • Punti sopra il baffo superiore: Questi punti rappresentano i valori anomali o outliers, ovvero casi in cui il numero di gravidanze è significativamente più alto rispetto alla maggior parte dei dati. Nel grafico, si possono osservare valori anomali fino a 12 gravidanze.

2. Considerazioni sulla Distribuzione

  • Mediana e Quartili: La mediana è bassa, probabilmente attorno a 1. Questo suggerisce che la maggior parte delle madri nel dataset ha avuto 1 o meno gravidanze.

  • Concentrazione dei Valori: La maggior parte dei valori è concentrata tra 0 e 2 gravidanze. Questo indica che per la maggioranza delle madri il numero di gravidanze è limitato a poche (principalmente 0 o 1).

  • Valori Anomali: I valori anomali sono rappresentati da madri che hanno avuto un numero di gravidanze significativamente più alto, come 6, 8, 10 o addirittura 12. Questi casi rappresentano una minoranza nel dataset e potrebbero essere soggetti ad ulteriori analisi per capire eventuali correlazioni con altri fattori.

3. Distribuzione Asimmetrica

  • La presenza di molti valori anomali indica che la distribuzione è asimmetrica e presenta una coda lunga a destra, con un piccolo numero di madri che ha avuto un numero molto elevato di gravidanze.

  • La concentrazione di gravidanze pari a 0 o 1 mostra che nella maggior parte dei casi, le madri sono alla loro prima gravidanza o non hanno avuto precedenti gravidanze.

4. Considerazioni e Suggerimenti

  • Verificare con una disribuzione di frequenza i valori della gravidenze.

1.6.1 Costruisco una distribuzione in classi per la variabile numero di gravidanze

distr_freq = freq_grap_45(x = dati_neonati_no_qual$N.gravidanze,
                           seq_start  = 0,
                           seq_end    = 12,
                           seq_steps  = 13,
                           title_desc = "Distribuzione in classi della variabile numero di gravidanze",
                           y_desc ="Frequenza assoluta",
                           x_desc ="Classi del numero di gravidanze ",
                           y_start    = 0,
                           y_end      = 2200,
                           y_steps    = 200
                           )

print(distr_freq)
##             ni     fi   Ni     Fi
## [0 - 1)   1914 0.7656 1914 0.7656
## [1 - 2)    340 0.1360 2254 0.9016
## [2 - 3)    150 0.0600 2404 0.9616
## [3 - 4)     48 0.0192 2452 0.9808
## [4 - 5)     21 0.0084 2473 0.9892
## [5 - 6)     11 0.0044 2484 0.9936
## [6 - 7)      1 0.0004 2485 0.9940
## [7 - 8)      8 0.0032 2493 0.9972
## [8 - 9)      2 0.0008 2495 0.9980
## [9 - 10)     3 0.0012 2498 0.9992
## [10 - 11)    1 0.0004 2499 0.9996
## [11 - 12)    1 0.0004 2500 1.0000

1.4.3 Osservazioni generali

Questo grafico mostra distribuzione del numero di gravidanze divisi in classi, con la frequenza assoluta sull’asse y.

1. Distribuzione del numero di gravidanze

L’istogramma mostra come il numero di gravidanze sia distribuito in classi

  • Gli intervalli variano da 0 fino a 12 gravidanze.

  • La classe con la frequenza più alta è 0 gravidanze

2. Caratteristiche della Distribuzione

  • Distribuzione asimmetrica: La distribuzione è fortemente asimettrica negativa. La gran parte dei valori si concentra nelle gravidanze 0 o 1

  • Moda: La classe con la frequenza più alta (ossia la moda) è quella tra con 0 gravidanze

  • Code: Le code, ovvero le classi agli estremi come da 6 a 12 presentano una frequenza molto bassa, indicando che mamme con più di 6 gravidanze sono estrememamente rare

5. Considerazioni Statistiche

  • Distribuzione Normale: La distribuzione delle gravidanze è fortemente asimmetria negative concentrando nelle classi 0 e 1 la maggior parte dei valori

Valori Anomali: Le code della distribuzione potrebbero rappresentare casi estremi ma comunque non verranno eliminati

1.7.1 Analisi di correlazione fra variabili

1.7.2 Scatter plot anni della madre e peso del neonato

 cov_eta_lunghezza = cor(dati_neonati_no_qual$Anni.madre,
                         dati_neonati_no_qual$Peso
                         )
 
# Scatterplot per l'età della madre e la lunghezza del neonato
ggplot(data = dati_neonati_no_qual, 
       aes(x = Anni.madre, 
           y = Peso
           )) +
  geom_point(color = "blue", alpha = 0.6) +  # Scatterplot con punti blu
  labs(
    title = "Relazione tra età della madre e peso del neonato",
    x = paste0("Età della Madre (anni) - Indice di Pearson: ", round(cov_eta_lunghezza,3) ),
    y = "Peso del Neonato (grammi)"
  ) +
  scale_y_continuous(breaks = seq(800, 5000, 200))+
  scale_x_continuous(breaks = seq(13, 46, 2))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 1)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 1)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 1)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

L’immagine che vediamo è uno scatterplot che mostra la relazione tra l’età della madre e il peso del neonato. Procederò con un’analisi dettagliata basata sul grafico.

Ho aggiunto tre line, una rossa che indica il valore mediano della lunghezza del neonato e le due linee arancioni per mostrare i due range interquartili

1.7.3 Analisi dello Scatterplot

  • Distribuzione Generale

    • Asse X: Rappresenta l’età della madre in anni, variando da circa 13 anni a 45 anni.

    • Asse Y: Rappresenta il peso del neonato in grammi, variando da circa 800 a 4900 grammi

  • Tendenza Centrale

    • il peso del neonato sembra essere concentrata principalmente tra 2800 a 3700 grammi, indipendentemente dall’età della madre.

    • La maggiore concentrazione di punti si trova per le madri di età tra 21e 35 anni, che suggerisce che queste siano le età più comuni per la maternità nel dataset.

  • Relazione tra Età della Madre e peso del neonato

    • Non sembra esserci una chiara correlazione lineare tra l’età della madre e il peso del neonato.

    • Il peso dei neonati appaiono similmente distribuite per diverse età della madre, suggerendo che l’età materna potrebbe non essere un fattore determinante per il peso del neonato in questo dataset.

    • Alcuni valori si distaccano dalla zona di maggiore densità: ad esempio, ci sono alcuni neonati con un peso inferiore a 2200 grammi, prevalentemente associati a madri tra i 23e i 41 anni.

  • Possibili Valori Anomali

    • Nel grafico ci sono alcuni valori anomali (outliers) nella parte inferiore dell’asse Y (al di sotto dei 1600 grammi), indicando la presenza di neonati con un peso significativamente più bassa rispetto alla media. Questi valori potrebbero indicare neonati prematuri o altre condizioni particolari.

Età Materna Estrema

  • Per le madri più giovani (circa 13-20 anni), i dati sembrano essere meno numerosi, ci potrebbe essere una tendenza ad allontanarsi dal valore mediano, probabilmente dato dal numero inferiore di gravidanze in questa fascia di età

  • Per le madri più anziane (oltre i 40 anni), la varianza nella lunghezza del neonato sembra simile, ma i dati sono meno frequenti, probabilmente a causa del numero inferiore di gravidanze in questa fascia di età.

Considerazioni

  • Assenza di Correlazione Forte: Dall’osservazione di questo scatterplot, sembra che l’età della madre non abbia un effetto evidente e diretto sulla peso del neonato, almeno non in termini di una relazione lineare.

  • Dai 14 ai 20 anni c’è un aumento della distanza dei punti dalla mediana, come a formare un triangolo

  • La correlazione delle due variabili è di -0.024 che indica scarsa correlazione

    1.7.4 Scatter plot fumo e peso del neonato

 cov_eta_lunghezza = cor(dati_neonati$Fumatrici,
                         dati_neonati$Peso
                         )
 
# Scatterplot per l'età della madre e la lunghezza del neonato
ggplot(data = dati_neonati, 
       aes(x = Fumatrici, 
           y = Peso
           )) +
  geom_point(color = "blue", alpha = 0.6) +  # Scatterplot con punti blu
  labs(
    title = "Relazione tra madre fumatrice e peso del neonato",
    x = paste0("Madre fumatrice [SI=1,NO=0]Indice di Pearson: ", round(cov_eta_lunghezza,3) ),
    y = "Peso del Neonato (grammi)"
  ) +
  scale_y_continuous(breaks = seq(800, 5000, 200))+
  scale_x_continuous(breaks = seq(0, 1, 1))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 1)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 1)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 1)

 cov_eta_lunghezza = cor(dati_neonati_no_qual$Anni.madre,
                         dati_neonati_no_qual$Lunghezza
                         )

1.7.4.1 Analisi dei dati

Il grafico è uno scatterplot che mostra il peso del neonato in relazione alla variabile binaria “madre fumatrice”.

  • Asse X: Rappresenta lo stato della madre come fumatrice:

    • 0: Madre non fumatrice.

    • 1: Madre fumatrice.

  • Asse Y: Rappresenta il peso del neonato in grammi con valori che variano da 800 a 4900 grammi circa

Ci sono anche linee orizzontali aggiunte per evidenziare determinati livelli di lunghezza:

  • Una linea rossa tratteggiata, che rappresenta la mediana

  • Due linee arancione, che rappresentano i due range interquartili

  1. Distribuzione dei Dati

    • I punti sul grafico rappresentano i neonati, raggruppati per la condizione di fumo della madre.

    • Le madri non fumatrici (0) costituiscono la maggior parte del campione, come evidenziato dal grande numero di punti sulla sinistra.

    • Le madri fumatrici (1) sono rappresentate sulla destra e mostrano una distribuzione simile a quella delle non fumatrici.

  2. Valori Anomali

    • Sono presenti alcuni valori anomali (outliers) nella parte inferiore del grafico, specialmente per le madri non fumatrici, con pesi inferiori a 1000 grammi. Questi potrebbero rappresentare neonati nati prematuri o con altri problemi di crescita.
  3. Indice di Pearson

    • È presente un indice di Pearson pari a -0,019, che indica la correlazione tra la variabile “madre fumatrice” e il peso del neonato.

    • Un valore di -0,019 suggerisce che non c’è una correlazione significativa tra il fumo della madre e il peso del neonato. La correlazione è molto debole e leggermente negativa, ma non abbastanza forte da suggerire una relazione chiara.

  4. Confronto tra Fumatrici e Non Fumatrici

    • Visivamente, non sembrano esserci differenze significative tra il peso dei neonati delle madri fumatrici e non fumatrici. Entrambi i gruppi mostrano una concentrazione simile intorno ai 3300 grammi.

    • La varianza delle lunghezze è simile tra i due gruppi, suggerendo che il fumo potrebbe non avere un impatto significativo sul peso del neonato (almeno non in modo evidente in questo grafico).

    1.7.4 Scatter plot gravidanze e peso del neonato

 cov_eta_lunghezza = cor(dati_neonati$N.gravidanze,
                         dati_neonati$Peso
                         )
 
# Scatterplot per l'età della madre e la lunghezza del neonato
ggplot(data = dati_neonati, 
       aes(x = N.gravidanze, 
           y = Peso
           )) +
  geom_point(color = "blue", alpha = 0.6) +  # Scatterplot con punti blu
  labs(
    title = "Relazione tra numero di gravidanze e peso del neonato",
    x = paste0("Numero di gravidanze | Indice di Pearson: ", round(cov_eta_lunghezza,3) ),
    y = "Peso del neonato (grammi)"
  ) +
  scale_y_continuous(breaks = seq(800, 5000, 200))+
  scale_x_continuous(breaks = seq(0, 12, 1))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 0.8)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 1)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 1)

1.7.4.1Analisi del grafico

  • Asse X: Indica il numero di gravidanze della madre, che varia da 0 a 12.

    • 0 indica una madre alla prima gravidanza.

    • Valori superiori indicano il numero di gravidanze precedenti.

  • Asse Y: Indica il peso del neonato in grammi, con valori che vanno da circa 800 g a 5000 g.

Il grafico presenta:

  • Punti blu: Ogni punto rappresenta un neonato, con la sua lunghezza e il numero di gravidanze della madre.

  • Linee orizzontali:

    • Linea arancione: Rappresenta il range interquartile .

    • Linea rossa tratteggiata: rappresenta la mediana del peso dei neonati.

Analisi del Grafico

  1. Distribuzione del Peso dei Neonati in Relazione al Numero di Gravidanze

    • I punti sono distribuiti lungo i diversi numeri di gravidanze, da 0 a 12.

    • La maggior parte delle nascite si concentra nelle prime 4-5 gravidanze, con una densità decrescente per numeri di gravidanze più alti.

    • Il peso del neonato è principalmente concentrato tra 3000 e 3600 grammi, indipendentemente dal numero di gravidanze.

  2. Relazione tra Numero di Gravidanze e Peso del Neonato

    • Dalla distribuzione dei punti, non sembra esserci una chiara correlazione tra il numero di gravidanze e il peso del neonato. La variabilità del peso è simile per i diversi valori di gravidanze, suggerendo che il numero di gravidanze non sia un fattore determinante nel peso del neonato.

    • Indice di Pearson: L’indice di correlazione riportato è 0,002, indicando una correlazione praticamente inesistente tra il numero di gravidanze e il peso del neonato. Questo conferma che non sembra esserci un legame diretto tra il numero di gravidanze precedenti e il peso alla nascita.

  3. Valori Anomali

    • Si osservano valori anomali (outliers) nella parte superiore e inferiore del grafico. Questi includono neonati con pesi molto bassi (sotto 2000 grammi) e neonati con pesi molto elevati (oltre 4500 grammi).

    • Non c’è un pattern evidente che indichi che il numero di gravidanze aumenti o diminuisca la probabilità di un peso anomalo.

Considerazioni

  • Nessuna Correlazione Significativa: L’indice di Pearson vicino a 0 indica che il numero di gravidanze precedenti non sembra influenzare significativamente il peso del neonato. Questo significa che, nel dataset considerato, le madri alla loro prima gravidanza o con molte gravidanze hanno neonati con pesi simili.

  • Possibili Fattori Influenzanti: Il peso del neonato potrebbe essere più influenzato da altri fattori.

Suggerimenti per Ulteriori Analisi

  • Analisi dei Valori Anomali: Studiare più a fondo i casi con valori anomali (peso molto basso o molto alto) potrebbe fornire informazioni interessanti, specialmente in relazione a fattori di rischio o condizioni particolari della madre.

2. Creazione del modello di regressione

attach(dati_neonati)
summary(dati_neonati)
##    Anni.madre     N.gravidanze       Fumatrici        Gestazione   
##  Min.   :13.00   Min.   : 0.0000   Min.   :0.0000   Min.   :25.00  
##  1st Qu.:25.00   1st Qu.: 0.0000   1st Qu.:0.0000   1st Qu.:38.00  
##  Median :28.00   Median : 1.0000   Median :0.0000   Median :39.00  
##  Mean   :28.19   Mean   : 0.9812   Mean   :0.0416   Mean   :38.98  
##  3rd Qu.:32.00   3rd Qu.: 1.0000   3rd Qu.:0.0000   3rd Qu.:40.00  
##  Max.   :46.00   Max.   :12.0000   Max.   :1.0000   Max.   :43.00  
##       Peso        Lunghezza         Cranio     Tipo.parto       
##  Min.   : 830   Min.   :310.0   Min.   :235   Length:2500       
##  1st Qu.:2990   1st Qu.:480.0   1st Qu.:330   Class :character  
##  Median :3300   Median :500.0   Median :340   Mode  :character  
##  Mean   :3284   Mean   :494.7   Mean   :340                     
##  3rd Qu.:3620   3rd Qu.:510.0   3rd Qu.:350                     
##  Max.   :4930   Max.   :565.0   Max.   :390                     
##    Ospedale            Sesso          
##  Length:2500        Length:2500       
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
n<-nrow(dati_neonati)


peso.skewness = moments::skewness(Peso)
peso.kurtosis = moments::kurtosis(Peso)-3
peso.shapiro  = shapiro.test(Peso)

print(paste0("Il test di simmetria da risultato ", round(peso.skewness,2)))
## [1] "Il test di simmetria da risultato -0.65"
print(paste0("Il test di curtosi da risultato ", round(peso.kurtosis,2)))
## [1] "Il test di curtosi da risultato 2.03"
print(paste0("Il p-value del test di Shapiro-Wilk è: ", peso.shapiro$p.value))
## [1] "Il p-value del test di Shapiro-Wilk è: 3.2344586185273e-22"
print("Il p-value del test di Shapiro-Wilk indica che la distribuzione non è una distribuzione normale ")
## [1] "Il p-value del test di Shapiro-Wilk indica che la distribuzione non è una distribuzione normale "
##################################################################
####### Funzione Pairs
#################################################################
panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
  usr <- par("usr"); on.exit(par(usr))
  par(usr = c(0, 1, 0, 1))
  r <- (cor(x, y))
  txt <- format(c(r, 1), digits = digits)[1]
  txt <- paste0(prefix, txt)
  if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
  text(0.5, 0.5, txt, cex = 1.5)
}
#################################################################



print( "Matrice di correlazione approsimata alla seconda cifra decimale")
## [1] "Matrice di correlazione approsimata alla seconda cifra decimale"
print ( round(cor(dati_neonati_no_qual),2))
##              Anni.madre N.gravidanze Gestazione  Peso Lunghezza Cranio
## Anni.madre         1.00         0.38      -0.13 -0.02     -0.06   0.02
## N.gravidanze       0.38         1.00      -0.10  0.00     -0.06   0.04
## Gestazione        -0.13        -0.10       1.00  0.59      0.62   0.46
## Peso              -0.02         0.00       0.59  1.00      0.80   0.70
## Lunghezza         -0.06        -0.06       0.62  0.80      1.00   0.60
## Cranio             0.02         0.04       0.46  0.70      0.60   1.00
print( "Matrice di covarianza approsimata alla seconda cifra decimale")
## [1] "Matrice di covarianza approsimata alla seconda cifra decimale"
print ( round(cov(dati_neonati_no_qual),2))
##              Anni.madre N.gravidanze Gestazione      Peso Lunghezza  Cranio
## Anni.madre        27.20         2.56      -1.31    -65.10     -8.92    1.39
## N.gravidanze       2.56         1.64      -0.24      1.62     -2.04    0.82
## Gestazione        -1.31        -0.24       3.49    580.59     30.44   14.14
## Peso             -65.10         1.62     580.59 275665.68  10999.88 6078.16
## Lunghezza         -8.92        -2.04      30.44  10999.88    692.67  260.82
## Cranio             1.39         0.82      14.14   6078.16    260.82  269.79
# Trasposizione grafica della matrice di correlazione
pairs(dati_neonati_fact,lower.panel=panel.cor, upper.panel=panel.smooth)
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico
## Warning in par(usr): l'argomento 1 non nomina un parametro grafico

2.1 Box plot per variabili qualitative

2.1.1 Box plot per la variabile sesso - peso

attach(dati_neonati_fact)
## I seguenti oggetti sono mascherati da dati_neonati:
## 
##     Anni.madre, Cranio, Fumatrici, Gestazione, Lunghezza, N.gravidanze,
##     Ospedale, Peso, Sesso, Tipo.parto
par(mfrow=c(1,2))
boxplot(Peso~Sesso)

peso.maschi.mean = mean(Peso[Sesso=="M"])
peso.femmine.mean = mean(Peso[Sesso=="F"])

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
print(paste0("Il peso medio dei maschi è:  ", round(peso.maschi.mean,2)))
## [1] "Il peso medio dei maschi è:  3408.22"
print(paste0("Il peso medio delle femmine è:  ", round(peso.femmine.mean,2)))
## [1] "Il peso medio delle femmine è:  3161.13"
detach()

2.1.2 Dettagli del Risultato

  1. Statistiche del Test:

    • t = -12.106: Il valore del test t indica la differenza standardizzata tra le medie dei due gruppi. Un valore negativo significa che il peso medio del gruppo F è inferiore rispetto al gruppo M.

    • p-value < 2.2e-16: Il valore p è estremamente piccolo, il che indica una forte evidenza statistica contro l’ipotesi nulla.

  2. Ipotesti del Test:

    • Hypothesis: L’ipotesi alternativa è che ci sia una differenza nelle medie dei pesi tra i gruppi Femmine (F) e Maschi (M). Il valore p così basso supporta l’ipotesi alternativa, indicando che la differenza nelle medie è statisticamente significativa.
  3. Intervallo di Confidenza (95%):

    • 95 percent confidence interval: -287.1051, -207.0615: L’intervallo di confidenza per la differenza delle medie si estende tra -287,1 g e -207,1 g. Questo significa che siamo al 95% sicuri che la differenza media del peso tra le femmine e i maschi rientri in questo intervallo.

    • Dato che l’intervallo è tutto negativo, possiamo dire che, in media, i neonati maschi pesano tra 207 e 287 grammi in più rispetto alle neonate femmine.

  4. Stima delle Medie dei Gruppi:

    • Mean in group F: 3161,132 g - Il peso medio dei neonati femmina.

    • Mean in group M: 3408,215 g - Il peso medio dei neonati maschio.

    • La differenza tra le medie dei due gruppi è di circa 247 g (i maschi pesano di più in media rispetto alle femmine).

Conclusioni

  • Differenza Statistica Significativa: Il p-value molto basso indica che la differenza tra i pesi medi dei neonati maschi e femmine è altamente significativa dal punto di vista statistico. Possiamo quindi rifiutare l’ipotesi nulla e concludere che c’è una differenza significativa tra il peso dei neonati maschi e delle neonate femmine.

  • Peso Maggiore nei Maschi: I risultati mostrano che, in media, i neonati maschi pesano più delle femmine. Questo risultato è supportato sia dalla stima delle medie sia dall’intervallo di confidenza, che è completamente negativo.

2.2.1 Box plot per la variabile fumatrici - peso

attach(dati_neonati_fact)
## I seguenti oggetti sono mascherati da dati_neonati:
## 
##     Anni.madre, Cranio, Fumatrici, Gestazione, Lunghezza, N.gravidanze,
##     Ospedale, Peso, Sesso, Tipo.parto
par(mfrow=c(1,2))
boxplot(Peso~Fumatrici)

peso.fumo_no.mean = mean(Peso[Fumatrici==0])
peso.fumo_si.mean = mean(Peso[Fumatrici==1])

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

2.2.1 Dettagli del Risultato

  1. Statistiche del Test:

    • p-value = 0.3033: Questo è il valore p del test, che rappresenta la probabilità di osservare un effetto almeno grande quanto quello osservato se l’ipotesi nulla fosse vera. In questo caso, il p-value è superiore a 0,05, il che significa che non possiamo rifiutare l’ipotesi nulla. La differenza tra i gruppi non è statisticamente significativa.
  2. Ipotesti del Test:

    • L’ipotesi nulla (H₀) è che non c’è differenza significativa tra le medie del peso dei neonati delle madri fumatrici e non fumatrici.

    • L’ipotesi alternativa (H₁) è che ci sia una differenza nelle medie dei pesi tra i due gruppi.

    • Con un p-value di 0.3033, non abbiamo evidenza sufficiente per supportare l’ipotesi alternativa. In altre parole, non ci sono prove statisticamente significative per dire che il fumo delle madri abbia un impatto sul peso del neonato.

    2.3.1 Bar graph per la variabile tipo parto e ospedale

    # Grafico a barre con valori assoluti
    ggplot(data = dati_neonati_fact) +
      # Selezione tipo grafico con geom_bar()
      geom_bar(aes(x = Ospedale,
                   fill = Tipo.parto),
               position = "dodge",  # Barre sovrapposte
               col = "black") +
      # Aggiunta delle etichette e del titolo corretto
      labs(x = "Ospedale", 
           y = "Numero di Neonati", 
           title = "Numero di neonati per ospedale e tipo di parto",
           fill = "Tipo di Parto") +
      # Configurazione del tema
      theme_minimal()+
      scale_y_continuous(breaks=seq(0,600,30))

    2.2.1 Dettagli del Risultato

  3. Confronto Tra Ospedali:

    • osp1, osp2, osp3 mostrano una tendenza simile nella preferenza del tipo di parto: in tutti gli ospedali, i parti naturali (barra azzurra) sono significativamente più numerosi rispetto ai cesarei (barra rossa).

    • Il numero totale di parti (naturali e cesarei) è simile in tutti e tre gli ospedali, con osp2 leggermente superiore per entrambi i tipi di parto.

  4. Preferenza del Tipo di Parto:

    • In generale, il parto naturale è più comune rispetto al cesareo in tutti e tre gli ospedali.

    • Il numero di parti cesarei è relativamente basso rispetto a quello dei parti naturali in ciascun ospedale, il che potrebbe indicare che i cesarei vengono effettuati solo in casi specifici

2.2 Costruzione del modello di regressione

2.2.1 Stimo tutti i coefficienti

mod1 = lm(Peso ~ . , data=dati_neonati_fact)


summary(mod1)
## 
## Call:
## lm(formula = Peso ~ ., data = dati_neonati_fact)
## 
## 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

Coefficiente di Regressione (Coefficients:):

  • Anni.madre (0.7983): Il coefficiente non è significativo (p-value = 0.4862), indicando che l’età della madre non ha un impatto significativo sul peso del neonato, almeno in questo modello.

  • N.gravidanze (11.4118): Questo coefficiente è significativo (p-value = 0.0145). Indica che, in media, ogni gravidanza aggiuntiva della madre è associata ad un incremento di circa 11.4 grammi nel peso del neonato. Tuttavia, l’effetto è relativamente piccolo.

  • Fumatrici (-30.1567): Il coefficiente non è significativo (p-value = 0.2736), indicando che il fatto che la madre sia fumatrice non ha un impatto significativo sul peso del neonato in questo modello.

  • Gestazione (32.5265): Il coefficiente è altamente significativo (p-value < 2e-16). Questo indica che ogni settimana di gestazione in più è associata a un incremento di circa 32.5 grammi nel peso del neonato, suggerendo un impatto importante.

  • Lunghezza (10.2951): Il coefficiente è altamente significativo (p-value < 2e-16). Questo significa che ogni millimetro in più nella lunghezza del neonato è associato a un incremento di circa 10.3 grammi nel peso.

  • Cranio (10.4725): Anche questo coefficiente è altamente significativo (p-value < 2e-16), indicando che ogni millimetro in più nella circonferenza cranica è associato a un incremento di circa 10.5 grammi nel peso.

  • Tipo.partoNat (29.5027): Il coefficiente è significativo (p-value = 0.0147). Questo indica che i neonati nati con parto naturale pesano in media 29.5 grammi in più rispetto agli altri tipi di parto.

  • Ospedaleosp2 (-11.2216): Questo coefficiente non è significativo (p-value = 0.4038), quindi non c’è evidenza che l’ospedale osp2 abbia un impatto sul peso rispetto all’ospedale di riferimento.

  • Ospedaleosp3 (28.0984): Il coefficiente è significativo (p-value = 0.0375), suggerendo che i neonati nati nell’ospedale osp3 pesano in media 28.1 grammi in più rispetto all’ospedale di riferimento.

  • SessoM (77.5473): Il coefficiente è altamente significativo (p-value = 5.07e-12). Questo significa che i neonati maschi pesano in media 77.5 grammi in più rispetto alle femmine.

2.2.1.2 Conclusioni

  1. Variabili Significative:

    • Le variabili più significative sono Gestazione, Lunghezza, Cranio, e Sesso. Queste variabili hanno il maggiore impatto sul peso del neonato.

    • N.gravidanze, Tipo.partoNat, e sono anche significativi, ma il loro effetto è relativamente minore.

    • Ospedale con un piccolo effetto ma anche ospedale 3 da qualche segnale. Bisognerà approfondire se per caso questa variabile è controllata da qualche altra variabile.

  2. Variabili Non Significative:

    • Anni.madre, Fumatrici, non risultano significative nel predire il peso del neonato, suggerendo che questi fattori potrebbero non essere rilevanti oppure che i loro effetti sono deboli.
  3. Impatto del Fumo:

    • Il fatto che il fumo materno non sia risultato significativo potrebbe essere sorprendente, ma suggerisce che almeno per quanto riguarda il peso alla nascita, non ci sono differenze rilevanti tra i neonati di madri fumatrici e non fumatrici.

2.3.1 Rimuoviamo la variabile Fumatrici

mod2 = update (mod1, ~.-Fumatrici)

summary(mod2)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Gestazione + 
##     Lunghezza + Cranio + Tipo.parto + Ospedale + Sesso, data = dati_neonati_fact)
## 
## 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
print("ANOVA")
## [1] "ANOVA"
anova(mod2,mod1)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Anni.madre + N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Ospedale + Sesso
## Model 2: Peso ~ Anni.madre + N.gravidanze + Fumatrici + Gestazione + Lunghezza + 
##     Cranio + Tipo.parto + Ospedale + Sesso
##   Res.Df       RSS Df Sum of Sq      F Pr(>F)
## 1   2490 186862686                           
## 2   2489 186772707  1     89979 1.1991 0.2736
print("BIC")
## [1] "BIC"
BIC(mod2,mod1)
##      df      BIC
## mod2 11 35235.35
## mod1 12 35241.97

2.3.1.2 Dettagli del Risultato

  • Analisi del summary

L’R quadro aggiustato non è variato resta 0.7278 , quindi abbiamo tolto una variabile che no ha impattato sul risultato. La variabile anni della madre invece direi di lasciarla anche se ha un p-value di 0.48, verrà usata come variabile controllo . Resta ancora da valutare la variabile ospedale che per qualche motivo ottiene un p value basso.

resta

  • test anova

Ho eseguito il test Anova per verificare che la rimozione della variabile fumo non abbia un impatto sul modello di regressione lineare. Il p-value presenta un valore di 0.2736 e quindi possiamo ritenere la variabile fumatrici non rilevante

  • test BIC

Ho eseguito anche questo test per una doppia verifica, vediamo che il mod 2 presenta 11 Vs 12 gradi di libertà quindi si preferisce sempre il modello 2

2.4.1 Rimuoviamo la variabile ospedale

mod3 = update (mod2, ~.-Ospedale)

summary(mod3)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + N.gravidanze + Gestazione + 
##     Lunghezza + Cranio + Tipo.parto + Sesso, data = dati_neonati_fact)
## 
## 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
print("ANOVA")
## [1] "ANOVA"
anova(mod3,mod2)
## Analysis of Variance Table
## 
## Model 1: Peso ~ Anni.madre + N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Sesso
## Model 2: Peso ~ Anni.madre + N.gravidanze + Gestazione + Lunghezza + Cranio + 
##     Tipo.parto + Ospedale + Sesso
##   Res.Df       RSS Df Sum of Sq      F   Pr(>F)   
## 1   2492 187557831                                
## 2   2490 186862686  2    695146 4.6315 0.009824 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
print("BIC")
## [1] "BIC"
BIC(mod3,mod2)
##      df      BIC
## mod3  9 35228.99
## mod2 11 35235.35

2.4.1.2 Dettagli del Risultato

  • Analisi del summary

L’R quadro aggiustato è variato abbasandosi a 0.7270 , quindi abbiamo tolto una variabile che ha sensibilmente impattato sulle performance diminuendola.

  • Anova

Ho eseguito il test Anova per verificare che la rimozione della variabile ospedale non abbia un impatto sul modello di regressione lineare. Il p-value presenta un valore di 0.009824 e quindi possiamo ritenere che la variabile ospedale possa migliorare il modello

  • test BIC

Mod3 non contiene la variabile ospedale: 35228 di BIC + 9 gradi di liberta

Mod2 contiene la variabile ospedale: 35235 di BIC + 11 gradi di libertà

Ho eseguito anche questo test per una doppia verifica, vediamo che il mod 2 che include la variabile ospedale presenta 11 Vs 9 gradi di libertà quindi ben 2 gradi di libertà.

Ricordando che il BIC è un criterio utilizzato per confrontare modelli di regressione al fine di scegliere quello che meglio si adatta ai dati, tenendo conto della complessità del modello., un valore di BIC più basso indica un modello migliore poiché rappresenta un compromesso tra una buona aderenza ai dati e un numero ridotto di parametri.

Conclusioni

Quindi tenuto conto che ,il teorema di Occam ci dice che a parita o minime prestazioni del modello bisogna prediligere quello con meno variabili e il test BIC che penalizza fortemente i modelli che includono variabili che non migliorano in modo significativo la capacità del modello di adattarsi ai dati, decidiamo di rimuovere la variabile ospedale

=================================================================

2.5.1 Test di interazione fra variabili

mod4 = lm(Peso ~  Anni.madre
                  +Fumatrici*Gestazione
                  +Lunghezza*Cranio
                  +Sesso
                  , data=dati_neonati_fact) 

mod5 = lm(Peso ~  Anni.madre
                  +Gestazione*Lunghezza*Cranio
                  +Sesso
          
          
                  , data=dati_neonati_fact) 

mod6 = lm(Peso ~  Anni.madre
                  +Fumatrici*Gestazione
                  +Fumatrici*Lunghezza
                  +Fumatrici*Cranio
                  +Gestazione*Lunghezza*Cranio
                  +Sesso
                  , data=dati_neonati_fact) 


mod7 = lm(Peso ~  Anni.madre
                  +Fumatrici*Gestazione
                  +Fumatrici*Lunghezza
                  +Gestazione*Lunghezza*Cranio
                  +Sesso
                  , data=dati_neonati_fact) 

summary(mod4)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + Fumatrici * Gestazione + Lunghezza * 
##     Cranio + Sesso, data = dati_neonati_fact)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1164.43  -182.47   -13.89   164.16  2842.29 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -1.860e+03  1.020e+03  -1.824   0.0683 .  
## Anni.madre            1.937e+00  1.064e+00   1.820   0.0688 .  
## Fumatrici             9.592e+02  7.559e+02   1.269   0.2046    
## Gestazione            3.877e+01  4.027e+00   9.628  < 2e-16 ***
## Lunghezza            -3.649e-01  2.208e+00  -0.165   0.8687    
## Cranio               -4.709e+00  3.198e+00  -1.473   0.1410    
## SessoM                7.485e+01  1.121e+01   6.674 3.05e-11 ***
## Fumatrici:Gestazione -2.506e+01  1.924e+01  -1.302   0.1929    
## Lunghezza:Cranio      3.160e-02  6.544e-03   4.829 1.45e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 273.7 on 2491 degrees of freedom
## Multiple R-squared:  0.7292, Adjusted R-squared:  0.7283 
## F-statistic: 838.5 on 8 and 2491 DF,  p-value: < 2.2e-16
summary(mod5)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + Gestazione * Lunghezza * Cranio + 
##     Sesso, data = dati_neonati_fact)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1170.24  -181.32   -13.56   160.56  2567.66 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                  3.652e+04  8.311e+03   4.395 1.15e-05 ***
## Anni.madre                   2.182e+00  1.059e+00   2.060  0.03947 *  
## Gestazione                  -1.198e+03  2.358e+02  -5.081 4.04e-07 ***
## Lunghezza                   -7.338e+01  1.956e+01  -3.751  0.00018 ***
## Cranio                      -1.248e+02  2.739e+01  -4.556 5.46e-06 ***
## SessoM                       7.338e+01  1.115e+01   6.580 5.71e-11 ***
## Gestazione:Lunghezza         2.378e+00  5.273e-01   4.509 6.81e-06 ***
## Gestazione:Cranio            3.817e+00  7.537e-01   5.064 4.41e-07 ***
## Lunghezza:Cranio             2.608e-01  6.195e-02   4.210 2.65e-05 ***
## Gestazione:Lunghezza:Cranio -7.353e-03  1.641e-03  -4.480 7.79e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 272.1 on 2490 degrees of freedom
## Multiple R-squared:  0.7324, Adjusted R-squared:  0.7314 
## F-statistic: 757.2 on 9 and 2490 DF,  p-value: < 2.2e-16
summary(mod6)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + Fumatrici * Gestazione + Fumatrici * 
##     Lunghezza + Fumatrici * Cranio + Gestazione * Lunghezza * 
##     Cranio + Sesso, data = dati_neonati_fact)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1165.43  -180.59   -14.56   163.79  2526.83 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                  3.625e+04  8.297e+03   4.369 1.30e-05 ***
## Anni.madre                   2.326e+00  1.058e+00   2.197 0.028087 *  
## Fumatrici                    5.419e+02  8.755e+02   0.619 0.536035    
## Gestazione                  -1.192e+03  2.354e+02  -5.065 4.38e-07 ***
## Lunghezza                   -7.256e+01  1.953e+01  -3.714 0.000208 ***
## Cranio                      -1.239e+02  2.734e+01  -4.532 6.11e-06 ***
## SessoM                       7.354e+01  1.115e+01   6.598 5.07e-11 ***
## Fumatrici:Gestazione        -5.957e+01  2.203e+01  -2.704 0.006894 ** 
## Fumatrici:Lunghezza          5.226e+00  1.652e+00   3.164 0.001578 ** 
## Fumatrici:Cranio            -2.357e+00  2.346e+00  -1.005 0.315099    
## Gestazione:Lunghezza         2.358e+00  5.264e-01   4.480 7.80e-06 ***
## Gestazione:Cranio            3.806e+00  7.525e-01   5.058 4.54e-07 ***
## Lunghezza:Cranio             2.577e-01  6.185e-02   4.167 3.19e-05 ***
## Gestazione:Lunghezza:Cranio -7.295e-03  1.638e-03  -4.452 8.88e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 271.6 on 2486 degrees of freedom
## Multiple R-squared:  0.7338, Adjusted R-squared:  0.7324 
## F-statistic: 527.2 on 13 and 2486 DF,  p-value: < 2.2e-16
summary(mod7)
## 
## Call:
## lm(formula = Peso ~ Anni.madre + Fumatrici * Gestazione + Fumatrici * 
##     Lunghezza + Gestazione * Lunghezza * Cranio + Sesso, data = dati_neonati_fact)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1165.31  -181.30   -14.68   163.79  2537.13 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                  3.631e+04  8.297e+03   4.377 1.25e-05 ***
## Anni.madre                   2.296e+00  1.058e+00   2.170 0.030073 *  
## Fumatrici                    1.983e+02  8.060e+02   0.246 0.805661    
## Gestazione                  -1.191e+03  2.354e+02  -5.060 4.50e-07 ***
## Lunghezza                   -7.303e+01  1.953e+01  -3.739 0.000189 ***
## Cranio                      -1.241e+02  2.734e+01  -4.540 5.90e-06 ***
## SessoM                       7.348e+01  1.115e+01   6.592 5.26e-11 ***
## Fumatrici:Gestazione        -6.138e+01  2.195e+01  -2.796 0.005218 ** 
## Fumatrici:Lunghezza          4.443e+00  1.457e+00   3.050 0.002311 ** 
## Gestazione:Lunghezza         2.366e+00  5.264e-01   4.495 7.28e-06 ***
## Gestazione:Cranio            3.802e+00  7.524e-01   5.053 4.67e-07 ***
## Lunghezza:Cranio             2.591e-01  6.184e-02   4.191 2.88e-05 ***
## Gestazione:Lunghezza:Cranio -7.316e-03  1.638e-03  -4.465 8.35e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 271.6 on 2487 degrees of freedom
## Multiple R-squared:  0.7337, Adjusted R-squared:  0.7324 
## F-statistic: 571.1 on 12 and 2487 DF,  p-value: < 2.2e-16
#anova(mod4,mod5)

BIC(mod4,mod5,mod6,mod7)
##      df      BIC
## mod4 10 35223.35
## mod5 11 35201.41
## mod6 15 35219.33
## mod7 14 35212.52

2.5.1.2 Dettagli del Risultato

  • Significatività delle Variabili:

    • Anni.madre: Diventa significativo a partire dal secondo modello, suggerendo un leggero effetto positivo dell’età materna sul peso del neonato. Anche se, nei vari test questa variabile non è significativa, la lasciamo in quanto variabile test sempre usata in medicina

    • Fumatrici: L’effetto principale non è significativo, ma le interazioni con Gestazione e Lunghezza sono significative nei modelli tre e quattro, indicando che il fumo influenza il peso ( anche se in modo molto marginale). Questa variabile, anche se sembra influire ben poco , viene lasciata in quanto potrebbe servire come variabile controllo

    • Gestazione, Lunghezza, Cranio: Le interazioni tra queste variabili sono cruciali per spiegare il peso del neonato.

    • Sesso: Costantemente significativo in tutti i modelli, con i maschi che pesano di più.

    • Parto naturale o cesareo, visto che il modello deve prevedere il peso questa variabile può essere tolta, essendo che il tipo di parto viene deciso al momento dal medico ( consideriamo valori di outliners le decisioni presi prima a causa di problema al feto )

  • Interazioni:

    • Le interazioni di ordine superiore tra Gestazione, Lunghezza e Cranio sono significative in tutti i modelli, suggerendo che l’effetto di una variabile dipende dai valori delle altre.

    • L’inclusione delle interazioni con Fumatrici migliora leggermente il modello, indicando che il fumo materno modera l’effetto di altre variabili sul peso ( sempre in maniera molto marginale )

  • Prestazioni dei Modelli:

    • Tutti i modelli hanno un R-quadrato e un R-quadrato aggiustato molto simili (~0.73), suggerendo che spiegano circa il 73% della variabilità del peso.

    • Il terzo e quarto modello offrono un leggero miglioramento rispetto ai primi due ( circa 1 punto percentuale ) ma includono la variabile fumo che come detto prima verrà lasciata.

  • Scelta del Modello Migliore:

    • Quarto Modello: Potrebbe essere preferibile poiché elimina un’interazione non significativa (Fumatrici:Cranio), rendendo il modello più parsimonioso senza perdere capacità esplicativa.

      Anche l’indcie RSE di 271 resta costante sia per il modello 3 sia per il 4

2.6.1 Presenza multicollinearità

car::vif(mod7, type=c("predictor"))
## GVIFs computed for predictors
##                    GVIF Df GVIF^(1/(2*Df))                Interacts With
## Anni.madre 1.031500e+00  1        1.015628                          --  
## Fumatrici  9.184401e+06  6        3.804120         Gestazione, Lunghezza
## Gestazione 1.085074e+00 10        1.004091  Fumatrici, Lunghezza, Cranio
## Lunghezza  1.085074e+00 10        1.004091 Fumatrici, Gestazione, Cranio
## Cranio     1.153709e+00  7        1.010265         Gestazione, Lunghezza
## Sesso      1.052678e+00  1        1.026001                          --  
##                                                Other Predictors
## Anni.madre      Fumatrici, Gestazione, Lunghezza, Cranio, Sesso
## Fumatrici                             Anni.madre, Cranio, Sesso
## Gestazione                                    Anni.madre, Sesso
## Lunghezza                                     Anni.madre, Sesso
## Cranio                             Anni.madre, Fumatrici, Sesso
## Sesso      Anni.madre, Fumatrici, Gestazione, Lunghezza, Cranio

2.6.2 Conclusioni

L’unica variabile che è un po alta è la variabile Fumatrice, in quanto il modello è stato forzato su questa variabile . I dati sono minori di 5 quindi il modello non rischia la multicollinearità

Molto bene invece le variabili gestazione, lunghezza e cranio che nonostante siano state interferenziate tra loro mantengono gradi di collinearità molto bassi

2.7 Costruzione del modello: considerazioni finali

In base a tutte le valutazioni possiamo dire che:

  • fumo materno

    Il fatto che la madre sia fumatrice non ha un impatto significativo sul peso del neonato in questo modello che potrebbe dipendere dal campione. Ho comunque deciso di mantenerlo , visto che ho trovato una corrinealità, seppure minima, con la variabile gestazione e lunghezza

    Fumatrici:Gestazione -2.796 0.005218 ** P-value

    Fumatrici:Lunghezza 3.050 0.002311 ** P-value

  • gravidanze multiple

    Indica che, in media, ogni gravidanza aggiuntiva della madre è associata ad un incremento di circa 11.4 grammi nel peso del neonato. Tuttavia, l’effetto è relativamente piccolo.

  • gestazione

    Ogni settimana di gestazione in più è associata a un incremento di circa 32.5 grammi nel peso del neonato, suggerendo un impatto importante.

2.8 Selezione del modello ottimale

Il modello ottimale è il 7. Modello di regressione

mod7 = lm(Peso ~ Anni.madre +FumatriciGestazione +FumatriciLunghezza +GestazioneLunghezzaCranio +Sesso , data=dati_neonati_fact)

Spiegazione delle variabili:

  1. Anni.madre: Età della madre, considerata un predittore lineare. Inserita solamente per controllo visto che il peso è molto basso

  2. Fumatrici * Gestazione: Interazione tra il fatto che la madre sia fumatrice e la durata della gestazione. Questa interazione permette di valutare se il fumo modifica l’effetto della durata della gestazione sul peso.

  3. Fumatrici * Lunghezza: Interazione tra il fatto che la madre sia fumatrice e la lunghezza del neonato. Valuta se il fumo altera l’effetto della lunghezza sul peso.

  4. Gestazione * Lunghezza * Cranio: Interazione tra gestazione, lunghezza e circonferenza cranica. Questo termine cattura gli effetti combinati di queste tre variabili sul peso, aumentando la precisione del modello.

Sesso: Variabile categorica che confronta i maschi con le femmine.

2.9.1 Analisi della qualita del modello

Analisi dei residui : shapiro test ,Breusch-Pagan test & Durbin-Watson

par(mfrow=c(2,2))

plot(mod7)

lmtest::bptest(mod7)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod7
## BP = 228.95, df = 12, p-value < 2.2e-16
lmtest::dwtest(mod7)
## 
##  Durbin-Watson test
## 
## data:  mod7
## DW = 1.962, p-value = 0.1707
## alternative hypothesis: true autocorrelation is greater than 0
shapiro.test(mod7$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  mod7$residuals
## W = 0.97542, p-value < 2.2e-16
plot(density(residuals(mod7)))

2.9.1.1 Analisi grafici

Residuals vs Fitted

  • Cosa mostra: La relazione tra i valori predetti (fitted) e i residui.

  • Obiettivo: I residui dovrebbero essere distribuiti casualmente intorno alla linea orizzontale (zero).

  • Osservazione:

    • I residui sembrano distribuiti intorno a zero, ma ci sono alcune osservazioni fuori scala (outliers).

    • In genereal non ci sono evidenti pattern non lineari, il che suggerisce che l’assunzione di linearità è soddisfatta, anche se abbiamo una nuvola di punti abbastanza concentrata da 3000 a 4000, che può essere dovuto ai numerosi outliners

Normal Q-Q

  • Cosa mostra: La distribuzione dei residui rispetto alla distribuzione normale teorica.

  • Obiettivo: I punti dovrebbero seguire la linea diagonale, indicando che i residui sono distribuiti normalmente.

  • Osservazione:

    • La maggior parte dei residui segue la linea diagonale, ma ci sono deviazioni significative alle estremità, indicando code lunghe (non normalità nelle code).

Questo potrebbe essere un problema, specialmente se il modello è sensibile agli outlier. Andrà eseguito un t-test per verifiare se la distribuzione può essere una normale

Spread-Location

  • Cosa mostra: La radice quadrata dei residui standardizzati rispetto ai valori predetti.

  • Obiettivo: I punti dovrebbero essere distribuiti in modo casuale con una banda orizzontale, indicando omoschedasticità (varianza costante dei residui).

Osservazione:

  • La varianza dei residui sembra costante per la maggior parte dei dati, ma ci sono alcune osservazioni anomale che potrebbero indicare eteroschedasticità.

Residuals vs Leverage

  • Cosa mostra: La relazione tra i residui standardizzati e il leverage delle osservazioni.

  • Obiettivo: Identificare osservazioni influenti che possono avere un forte impatto sul modello.

  • Osservazione:

    • Ci sono alcune osservazioni con alto leverage (come 15510 e 310), che possono influenzare significativamente il modello.

Le osservazioni vicine alla curva di Cook’s Distance meritano attenzione poiché potrebbero essere influenti. Faremo un grafico apposito per misurare questi dati

Residuals vs Leverage

  • Cosa mostra: La relazione tra i residui standardizzati e il leverage delle osservazioni.

  • Obiettivo: Identificare osservazioni influenti che possono avere un forte impatto sul modello.

  • Osservazione:

    • Ci sono alcune osservazioni con alto leverage (come 15510 e 310), che possono influenzare significativamente il modello.

    • Le osservazioni vicine alla curva di Cook’s Distance meritano attenzione poiché potrebbero essere influenti e quindi andranno analizzate in modo approfondito.

2.9.1.2 Analisi dei test Breusch-Pagan, Durbin-Watson e Shapiro-Wilk

  • Test Breusch-Pagan,
-   Il test di Breusch-Pagan verifica l'omoschedasticità, ovvero se la varianza dei residui è costante.

-   Un p-value molto piccolo (\<2.2e−16) indica che possiamo rifiutare l'ipotesi nulla di omoschedasticità.

**Conclusione**: I residui mostrano eteroschedasticità, il che significa che la varianza non è costante. Questo potrebbe indicare la necessità di trasformare i dati oppure usare altri modelli di regressione
  • Test di Durbin-Watson (Autocorrelation Test)

    • Interpretazione:

      • Il test di Durbin-Watson verifica la presenza di autocorrelazione tra i residui.

      • Il p-value di 0.1707 non è sufficientemente piccolo per rifiutare l’ipotesi nulla di assenza di autocorrelazione.

      • Conclusione: Non c’è evidenza di autocorrelazione nei residui del modello.

  • Test di Shapiro-Wilk (Normality Test)

    Interpretazione:

    • Il test di Shapiro-Wilk verifica l’ipotesi nulla che i residui siano distribuiti secondo una normale.

    • Un p-value molto piccolo (<2.2e−16) indica che possiamo rifiutare l’ipotesi nulla di normalità.

    • Conclusione: I residui non seguono una distribuzione normale. Questo è coerente con l’osservazione fatta nel grafico Q-Q, dove le code mostrano deviazioni dalla normalità. Ciò può influire sull’interpretazione dei test di significatività. Potrebbe essere dovuto ai numerosi outliners

2.9.2 Analisi dei leverage e della distanza di cook

mod_cook = mod7
  
#leverage
lev = hatvalues(mod_cook)
p   = sum(lev)
n   = length(lev)
soglia=2*p/n

lev_df = data.frame(Indice = 1:n, Leverage = lev )

# Scatterplot dei leverage 

ggplot(data = lev_df) +
       aes(x= Indice,
           y= lev
           ) +
           
        
  geom_point(color = "blue", alpha = 0.4) +  # Scatterplot con punti blu
  labs(
    title = "Valori leverage del modello 7 ",
    x = "Indice  ",
    y = "Valore di Leverage"
  ) +
  scale_y_continuous(breaks = seq(-2, 2, 0.025))+
  scale_x_continuous(breaks = seq(0, 2000,250))+
  geom_hline(yintercept = soglia, color = "red", linetype = "solid", size = 0.7)

Il grafico mostra i valori di leverage per il modello 7. Il leverage indica quanto un’osservazione è distante dal centro del gruppo di dati (cioè dalla media delle variabili indipendenti) ed è utile per identificare osservazioni potenzialmente influenti nel modello.

2.9.2.1 Analisi del grafico leverages

  1. Distribuzione dei valori di leverage:

    • La maggior parte dei punti ha valori di leverage molto bassi, vicino a zero, il che è normale in modelli con molti dati.

    • Ci sono alcuni punti (outlier) con leverage alto, che si trovano lontani dagli altri.

  2. Linea di soglia (rossa):

    • La linea rossa rappresenta la soglia per considerare un valore di leverage elevato.

    • Le osservazioni che superano questa soglia meritano attenzione.

  3. Osservazioni con leverage alto:

    • Ci sono alcuni punti con leverage molto alto (vicini a 0.3), ben oltre la soglia rossa. Questi punti hanno una posizione molto distante dal resto dei dati e possono avere un’influenza sproporzionata sul modello.

Implicazioni dei leverage elevati

  • Osservazioni con leverage alto non necessariamente influenzano il modello a meno che non abbiano anche residui elevati (cioè grandi errori di predizione). Tuttavia, se hanno anche grandi residui, possono distorcere i coefficienti della regressione.

Raccomandazioni

  1. Individuazione delle osservazioni influenti:

    • Si potrebbe identificare gli indici delle osservazioni con leverage elevato (superiore alla soglia rossa) e analizza i loro residui per verificare se sono responsabili di distorsioni nel modello
  2. Analisi dei dati:

    • Verifica se queste osservazioni con alto leverage sono errori nei dati o rappresentano casi validi ma atipici.

    • Se sono errori, correggili o rimuovili. Se sono validi, considera se è necessario un modello più robusto.

  3. Eventuali aggiustamenti al modello:

    • Se queste osservazioni influenzano eccessivamente il modello, puoi considerare:

      • Regressione robusta, che riduce l’impatto di outlier.

      • Trasformazioni delle variabili per ridurre la variabilità.

Conclusione

Il grafico mostra che la maggior parte delle osservazioni ha leverage basso, ma ci sono alcune osservazioni atipiche con leverage alto che meritano attenzione. Una diagnosi più approfondita con strumenti come la Distanza di Cook o l’analisi dei residui può aiutare a decidere se intervenire su queste osservazioni. Se hai bisogno di calcolare o analizzare i leverage o la Distanza di Cook in dettaglio, fammi sapere!

lev[lev>soglia]
##         15         36         96         99        101        105        106 
## 0.02004838 0.01910289 0.01285844 0.02695093 0.02397822 0.02608684 0.03252573 
##        120        128        131        140        151        155        182 
## 0.01315962 0.05226135 0.02146321 0.04516750 0.05171120 0.01097146 0.03790159 
##        190        194        205        206        220        234        242 
## 0.01158166 0.01714599 0.01148638 0.01969138 0.01433723 0.01845571 0.01161183 
##        249        251        279        295        296        306        310 
## 0.01205049 0.04125469 0.01396506 0.01157307 0.01423989 0.02267706 0.29417069 
##        312        315        321        335        378        391        413 
## 0.04016166 0.01300181 0.02305498 0.02916239 0.05500984 0.03340116 0.02219025 
##        424        442        445        473        486        492        538 
## 0.02514088 0.03234274 0.01529656 0.02736432 0.01067484 0.02225192 0.02425947 
##        557        567        572        587        592        593        600 
## 0.02335184 0.01966949 0.02517481 0.02688488 0.01323057 0.01352732 0.01043399 
##        615        616        638        658        668        684        699 
## 0.01112483 0.01114216 0.01171744 0.04194158 0.04241261 0.01210056 0.01208898 
##        701        703        748        750        758        765        805 
## 0.01161858 0.02654578 0.02556839 0.02952549 0.05971229 0.01467640 0.03907443 
##        928        932        947        956        984        991       1014 
## 0.17735033 0.01144130 0.01853553 0.02745310 0.01269671 0.01811206 0.04536670 
##       1017       1026       1037       1051       1067       1091       1110 
## 0.01276808 0.03226497 0.01331851 0.01848308 0.01868833 0.02333319 0.01729713 
##       1118       1130       1134       1170       1175       1181       1188 
## 0.01493832 0.01617785 0.01111953 0.01927429 0.03101330 0.01432928 0.01325652 
##       1227       1238       1248       1262       1271       1273       1275 
## 0.01369921 0.01152178 0.03453118 0.03539416 0.01123147 0.02328613 0.01409358 
##       1282       1283       1285       1326       1333       1356       1357 
## 0.01289977 0.01270580 0.02181235 0.01452891 0.05573514 0.01061918 0.01754942 
##       1368       1379       1385       1397       1398       1400       1410 
## 0.01420677 0.04146882 0.03353058 0.02251121 0.03443652 0.01447149 0.03553860 
##       1415       1420       1425       1426       1428       1429       1443 
## 0.01778206 0.01451191 0.01401621 0.03660250 0.04038889 0.23688857 0.01494884 
##       1449       1458       1473       1480       1512       1513       1525 
## 0.04116497 0.01289114 0.02699474 0.02891188 0.01463377 0.01058527 0.01092587 
##       1537       1551       1553       1556       1576       1583       1593 
## 0.05605222 0.15119940 0.01863178 0.01222315 0.02308689 0.02001497 0.01156509 
##       1610       1619       1626       1652       1660       1672       1686 
## 0.03502621 0.05483988 0.02702452 0.01579628 0.04811025 0.01966370 0.01892923 
##       1691       1692       1701       1712       1720       1743       1761 
## 0.02714034 0.01459218 0.02733679 0.01075413 0.01348537 0.01058770 0.02235987 
##       1763       1780       1789       1809       1827       1858       1893 
## 0.02174324 0.23328721 0.03539880 0.02656517 0.01151605 0.01234250 0.01067130 
##       1902       1906       1920       1929       1933       1971       2003 
## 0.02410702 0.02581230 0.11152161 0.06639001 0.01170130 0.02218363 0.01403188 
##       2016       2037       2040       2046       2049       2089       2101 
## 0.06977382 0.01426274 0.01933362 0.04338503 0.02659157 0.26689273 0.01939788 
##       2110       2114       2115       2120       2136       2140       2145 
## 0.03116764 0.04280122 0.04490904 0.06455184 0.01047507 0.01341269 0.01434896 
##       2149       2175       2180       2200       2202       2215       2216 
## 0.02669483 0.14694323 0.01209322 0.02502980 0.01141701 0.01187597 0.01123127 
##       2220       2224       2225       2237       2238       2245       2256 
## 0.05401892 0.01258889 0.01622045 0.01385130 0.04087445 0.12006294 0.01459236 
##       2257       2270       2282       2285       2307       2337       2353 
## 0.01558792 0.01296254 0.03885095 0.02006700 0.02953124 0.04691559 0.06965820 
##       2361       2391       2408       2412       2437       2442       2450 
## 0.01094586 0.01597682 0.01936352 0.02207459 0.13986991 0.01067099 0.03410616 
##       2452       2458       2459       2465 
## 0.17387672 0.02016331 0.01432251 0.03507730
leverage_len = length(lev[lev>soglia] )
print(paste0(" I valori di leverage sono: ", leverage_len ))
## [1] " I valori di leverage sono: 200"
rstudent_df = NULL
rstudent_df = as.data.frame(rstudent(mod_cook))

rstudent_df = data.frame(Indice = 1:n, Leverage = rstudent_df$`rstudent(mod_cook)` )


# Scatterplot dei outliners

ggplot(data = rstudent_df) +
       aes(x= Indice,
           y= Leverage
           ) +
           
        
  geom_point(color = "blue", alpha = 0.4) +  # Scatterplot con punti blu
  labs(
    title = "Outliners dei leverage del modello 7 ",
    x = "Indice  ",
    y = "Outliners"
  ) +
  scale_y_continuous(breaks = seq(-5, 12, 1))+
  scale_x_continuous(breaks = seq(0, 4000,250))+
  geom_hline(yintercept = -2, color = "red", linetype = "solid", size = 0.7)+
  geom_hline(yintercept = 2 , color = "red", linetype = "solid", size = 0.7)

 car::outlierTest(mod_cook)
##       rstudent unadjusted p-value Bonferroni p
## 1551 10.354256         1.2575e-24   3.1438e-21
## 155   5.300563         1.2560e-07   3.1401e-04
## 1306  4.787622         1.7867e-06   4.4668e-03
## 1694  4.339627         1.4843e-05   3.7107e-02
## 1399 -4.318140         1.6352e-05   4.0880e-02

2.9.2.2 Analisi del grafico outliners

Il grafico mostra gli outlier basati sui valori di leverage per il modello 7, insieme a due linee rosse orizzontali che rappresentano le soglie di riferimento (-2,+2). Vediamo un’analisi dettagliata:

Cosa mostra il grafico

  1. Punti (Osservazioni):

    • Ogni punto rappresenta un’osservazione nel dataset.

    • L’asse y mostra la deviazione (outlier score) rispetto al comportamento atteso, basato sui valori di leverage e residui.

    • Le osservazioni fuori dalle linee rosse sono considerate potenziali outlier.

  2. Linee di soglia (rossa):

    • Le linee rosse orizzontali rappresentano i limiti oltre i quali un’osservazione può essere considerata un outlier (-2,2 )

    • Questi limiti sono basati su una distribuzione standardizzata e indicano osservazioni con valori estremamente alti o bassi rispetto alla maggior parte dei dati.

  3. Distribuzione delle osservazioni:

    • La maggior parte delle osservazioni si trova tra le due linee rosse, il che indica che non sono outlier significativi.

    • Alcuni punti (soprattutto in alto) si trovano fuori dai limiti, e questi devono essere analizzati più a fondo.

Osservazioni dal grafico

  1. Outlier identificati:

    • Ci sono alcune osservazioni con valori molto alti (sopra la linea superiore, ad esempio vicino a 10.

    • Questi punti possono essere influenti e potrebbero distorcere i risultati del modello.

  2. Distribuzione generale:

    • La maggior parte dei punti è compresa tra le due linee, indicando che il modello cattura bene la maggior parte dei dati senza grandi deviazioni.

Conclusioni

  • La maggior parte dei dati è ben modellata, ma ci sono alcuni punti estremi che meritano attenzione.

  • Gli outlier identificati potrebbero rappresentare:

    • Errori nei dati (da verificare e correggere).

    • Osservazioni valide ma atipiche

Osservazione del numero di outliners

Abbiamo solamente 5 osservazione che superano i valori soglia, diciamo che l’osservazione 1151 potrebbe distorce il modello.

Gli outliners confermati potrebbero essere errori di raccolta , oppure dei valori atipici che possono distorcere il nostro modello

==========================================================================

2.9.2.3 Analisi della distanza di cook

#distanza di cook
cook =cooks.distance(mod_cook)

cook_dist_df = NULL
cook_dist_df = as.data.frame(cook)
cook_dist_df = data.frame(Indice = 1:n, Cook_Distance = cook_dist_df$cook )


osservazioni_influenti = which(cook > 1)

# Scatterplot della distanza di cook
ggplot(data = cook_dist_df) +
       aes(x= Indice,
           y= Cook_Distance
           ) +
           
        
  geom_point(color = "blue", alpha = 0.4) +  # Scatterplot con punti blu
  labs(
    title = "Distance di cook del modello 7 ",
    x = "Indice  ",
    y = "Distanza di Cook"
  ) +
  scale_y_continuous(breaks = seq(0, 2, 0.1))+
  scale_x_continuous(breaks = seq(0, 4000,250))+
  geom_hline(yintercept = 1.0, color = "red", linetype = "solid", size = 0.7)+
  
  # Aggiunge le etichette per le osservazioni influenti
  geom_text(
    data = cook_dist_df[osservazioni_influenti, ], 
    aes(label = Indice), 
    color = "black", 
    vjust = 1.5, 
    size = 3
  )

# Stampa gli indici delle osservazioni influenti

print(paste0("Osservazioni che andrebbero riviste: ", toString(osservazioni_influenti)))      
## [1] "Osservazioni che andrebbero riviste: 1551"

Il grafico mostra i valori della Distanza di Cook per il modello 7. Questa metrica misura quanto ciascuna osservazione influisce sui coefficienti stimati del modello. È utile per identificare osservazioni influenti.

Cosa mostra il grafico

  1. Asse X (Indice):

    • Rappresenta le osservazioni nel dataset, ordinate per indice.
  2. Asse Y (Distanza di Cook):

    • Indica il valore della Distanza di Cook per ciascuna osservazione.

    • Valori più elevati indicano che l’osservazione ha un’influenza maggiore sui coefficienti del modello.

  3. Linea rossa orizzontale:

    • Indica la soglia comunemente accettata per la Distanza di Cook. Solitamente, una distanza superiore a 1 è considerata problematica e l’osservazione dovrebbe essere analizzata con attenzione.
  4. Distribuzione delle osservazioni:

    • La maggior parte dei punti ha valori di Distanza di Cook bassi, il che è atteso in un modello ben specificato.

    • L’osservazione 1551 si trova sopra la soglia critica di 1.

Osservazioni chiave

  1. Presenza di osservazioni influenti:

    • L’osservazione 1551 con valore sopra 1 andrebbe rivista, perchè anche se un caso isolato potrebbe influire sulle prestazione del modello

    • Tuttavia, ci sono alcune osservazioni con Distanza di Cook elevata (vicino a 0.3–0.4), che potrebbero avere un impatto moderato sul modello e meritano ulteriori indagini.

  2. Trattamento degli outlier:

    • Se le osservazioni risultano valide ma influenti, considera:

      • Utilizzare una modelleo di regressione differente per mitigare il loro impatto, oppure normalizzare la variabile target.

Conclusioni

  • Valutare se eliminare l’osservazione 1551

3. Previsioni e risultati

Richiesta: stimare la previsione del peso del noeonato con i dati seguenti come input:

Anni.madre +FumatriciGestazione +FumatriciLunghezza +GestazioneLunghezzaCranio +Sesso

#summary(mod7)



Anni.madre.test  = 28
Fumatrice.test   = 0
Gestazione.test  = 39
Lunghezza.test   = 495
Cranio.test      = 340 
Sesso.test       ="F"



predict_df = data.frame(Anni.madre=Anni.madre.test,
                        Fumatrici =Fumatrice.test,
                        Gestazione=Gestazione.test,
                        Lunghezza=Lunghezza.test,
                        Cranio=Cranio.test,
                        Sesso=Sesso.test
                        )           


peso.pred.test = predict(mod7, newdata = predict_df)
test_predict = round(peso.pred.test,2)
print(test_predict)
##       1 
## 3252.87

La previsione del peso del neonato con i seguenti dati di input :

4. Visualizzazioni

4.1.1 Scatterplot gestazione e peso del neonato

Bar graph per apprezzare la variabile peso sulla gestazione, tenendo conto della variabile fumo

ggplot(data = dati_neonati_fact, 
       aes(x = Gestazione, 
           y = Peso,
           color = Sesso
           )) +
  geom_point( alpha = 0.7) +  # Scatterplot con punti blu
  
  labs(
    title = "Relazione tra peso e gestazione della madre",
    x = "Gestazione della madre [settimane] ",
    y = "Peso del Neonato [grammi]"
    ) +
  
  scale_y_continuous(breaks = seq(800, 5000, 300))+
  scale_x_continuous(breaks = seq(13, 46, 2))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 0.7)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 0.7)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 0.7)+
  scale_color_manual(values = c("M" = "blue", "F" = "green")) 

Il grafico mostra la relazione tra il peso del neonato (in grammi) e la durata della gestazione della madre (in settimane), con i punti colorati per distinguere il sesso del neonato (verde per femmine, blu per maschi). Sono presenti anche delle linee orizzontali di riferimento (rosse e arancioni) che indicano mediane e range interquartili .

4.1.2 Analisi del grafico

  1. Relazione tra peso e gestazione:

    • Il peso del neonato tende a crescere con l’aumento della durata della gestazione.

    • Neonati nati prematuramente (prima delle 37 settimane) hanno generalmente un peso inferiore rispetto a quelli nati a termine (37-42 settimane).

    • Oltre le 42 settimane, il peso sembra più variabile, con alcuni neonati con peso superiore alla media.

  2. Differenze di peso tra maschi e femmine:

    • I neonati maschi (punti blu) tendono a pesare di più rispetto alle femmine (punti verdi), confermando una tendenza biologica nota.

    • Questa differenza è visibile in quasi tutte le durate di gestazione.

  3. Distribuzione del peso:

    • Nelle settimane centrali (37-41 settimane), il peso dei neonati è più concentrato intorno a valori mediani ( rappresentati dalla linea tratteggiata rossa).

    • Vi sono alcuni outlier:

      • Neonati molto piccoli, anche con una gestazione avanzata.

      • Neonati con peso molto elevato rispetto alla media (sopra i 4500 grammi).

  4. Linee di riferimento:

    • Linea rossa tratteggiata: rappresenta il peso mediano dei neonati.

    • Linee arancioni: Rappresentano i due range interquartili 25 e 75 percento

Interpretazione clinica e biologica

  1. Neonati prematuri (< 37 settimane):

    • Peso generalmente più basso, come atteso.

    Neonati post-termine (> 42 settimane):

    • Peso più variabile, con alcuni neonati significativamente più grandi della media
  2. Differenza tra sessi:

    • I maschi hanno generalmente un peso maggiore rispetto alle femmine, una tendenza comune in molti studi neonatali.
  3. Osservazioni atipiche (outlier):

    • Neonati con peso molto basso o molto alto rispetto alla durata della gestazione potrebbero indicare condizioni particolari.

Raccomandazioni

  1. Analisi statistica:

    • Calcola la differenza media di peso tra maschi e femmine per confermare la significatività della differenza osservata.

    • Usa modelli per analizzare se altre variabili (ad esempio, età materna o stato di salute) influenzano il peso del neonato.

  2. Monitoraggio clinico:

    • Verifica gli outlier (neonati con peso estremamente basso o alto rispetto alla gestazione) per identificare eventuali problematiche.
  3. Valutazione delle linee guida:

    • Se le linee arancioni rappresentano soglie cliniche, potrebbe essere utile analizzare quanti neonati rientrano in tali categorie per definire eventuali interventi.

Conclusione

Il grafico conferma una correlazione positiva tra peso e durata della gestazione e mostra differenze evidenti tra maschi e femmine. Tuttavia, gli outlier meritano attenzione, e sarebbe utile approfondire l’impatto di altre variabili sul peso del neonato.

=================================================================

4.2.1 Scatterplot lunghezza e peso del neonato

ggplot(data = dati_neonati_fact, 
       aes(x = Lunghezza, 
           y = Peso,
           color = Sesso
           )) +
  geom_point( alpha = 0.7) +  # Scatterplot con punti blu
  
  labs(
    title = "Relazione tra lunghezza misurata tramite ecografia e peso",
    x = "Lunghezza del neonato  [mm] ",
    y = "Peso del Neonato [grammi]"
    ) +
  
  scale_y_continuous(breaks = seq(800, 5000, 300))+
  scale_x_continuous(breaks = seq(300, 600, 20))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 0.7)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 0.7)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 0.7)+
  scale_color_manual(values = c("M" = "blue", "F" = "green")) 

Il grafico mostra la relazione tra la lunghezza del neonato (in millimetri) e il peso del neonato (in grammi), con i punti distinti per sesso (verde per femmine, blu per maschi). Sono presenti anche linee orizzontali che indicano mediane e range interquartili .

4.2.1.2 Analisi del grafico

  1. Relazione tra lunghezza e peso:

    • Esiste una chiara relazione positiva tra la lunghezza e il peso del neonato: all’aumentare della lunghezza, aumenta il peso.

    • La relazione sembra essere abbastanza lineare, con una maggiore densità di dati tra 450 e 540 mm di lunghezza e 2800-3800 grammi di peso.

  2. Differenze tra maschi e femmine:

    • I maschi (punti blu) tendono a pesare di più rispetto alle femmine (punti verdi) a parità di lunghezza.

    • Questa differenza si osserva lungo quasi tutto il range di lunghezza, confermando una tendenza biologica nota.

  3. Distribuzione dei dati:

    • La maggior parte dei neonati si trova in un intervallo di lunghezza tra 450 e 550 mm, con un peso compreso tra 2800 e 3800 grammi.

    • Ci sono alcuni outlier:

      • Neonati con peso molto basso rispetto alla lunghezza

      • Neonati con peso molto alto rispetto alla lunghezza

  4. Linee di riferimento:

    • Linea rossa tratteggiata: Rrappresenta il peso mediano dei neonati.

    • Linee arancioni: Rappresentano i due range interquartili

Interpretazione varie

  1. Neonati normali:

    • La maggior parte dei neonati segue la relazione attesa tra lunghezza e peso. I punti si distribuiscono lungo una tendenza lineare positiva.
  2. Differenze sessuali:

    • I maschi tendono ad avere un peso maggiore rispetto alle femmine a parità di lunghezza.
  3. Identificazione degli outlier:

  • Analizza gli outlier (peso molto basso o molto alto rispetto alla lunghezza) per verificare se rappresentano errori nei dati o condizioni cliniche particolari.

  • ci potrebbe essere un dato anomalo nella parte sinistra del grafico rappresentato da una osservazione sesso femmina, maggiore di 4300 grammi di peso ma con una lunghezza di circa 300 mm.

Conclusione

Il grafico evidenzia una relazione chiara tra lunghezza e peso del neonato, con differenze significative tra maschi e femmine. Tuttavia, gli outlier meritano attenzione, poiché possono rappresentare errori nei dati.

4.3.1 Scatterplot misura del cranio e peso del neonato

ggplot(data = dati_neonati_fact, 
       aes(x = Cranio, 
           y = Peso,
           color = Sesso
           )) +
  geom_point( alpha = 0.7) +  # Scatterplot con punti blu
  
  labs(
    title = "Relazione tra misura del cranio misurata tramite ecografia e peso",
    x = "Misura del cranio  [mm] ",
    y = "Peso del Neonato [grammi]"
    ) +
  
  scale_y_continuous(breaks = seq(800, 5000, 300))+
  scale_x_continuous(breaks = seq(50, 600, 10))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 0.7)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 0.7)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 0.7)+
  scale_color_manual(values = c("M" = "blue", "F" = "green")) 

Il grafico mostra la relazione tra la misura del cranio (in millimetri) e il peso del neonato (in grammi), distinguendo il sesso del neonato (verde per femmine, blu per maschi). Le linee orizzontali indicano valori di riferimento ( mediana e range interquartili 25%-75% del peso ).

4.3.1.2 Analisi del grafico

  1. Relazione tra misura del cranio e peso:

    • Esiste una relazione positiva tra la misura del cranio e il peso: un cranio più grande è associato a un peso maggiore.

    • La relazione non è perfettamente lineare, ma la tendenza è chiara.

  2. Differenze tra maschi e femmine:

    • I neonati maschi (punti blu) tendono ad avere una misura del cranio maggiore e un peso superiore rispetto alle femmine (punti verdi) a parità di misura del cranio.

    • Questa differenza è evidente in quasi tutto l’intervallo di misure.

  3. Distribuzione dei dati:

    • La maggior parte dei neonati ha una misura del cranio compresa tra 310 e 370 mm e un peso tra 2800 e 4000 grammi.

    • Ci sono alcuni outlier:

      • Neonati con una misura del cranio molto piccola e peso basso

      • Neonati con cranio grande e peso fuori scala

  4. Linee di riferimento:

    • Linea rossa tratteggiata: Rappresenta il peso mediano dei neonati.

    • Linee arancioni: Rappresenta il range interquartile del peso del neonato

Interpretazione clinica e biologica

  1. Neonati normali:

    • La maggior parte dei neonati segue una relazione prevedibile tra la misura del cranio e il peso.
  2. Differenze sessuali:

    • I maschi tendono ad avere cranio e peso maggiori rispetto alle femmine, un risultato coerente con le differenze biologiche note.

Conclusione

Il grafico evidenzia una relazione chiara e prevedibile tra la misura del cranio e il peso del neonato, con differenze significative tra maschi e femmine. Tuttavia, alcuni outlier meritano attenzione per garantire che non ci siano errori nei dati.

=================================================================

4.4.1 Scatterplot settimane di gestazione e fumo sul peso del neonato

ggplot(data = dati_neonati_fact, 
       aes(x = Gestazione, 
           y = Peso,
           color = as.factor(Fumatrici)
           )) +
  geom_point( alpha = 0.9) +  # Scatterplot con punti blu
  
  labs(
    title = "Relazione tra settimane di gestazione , peso e madre fumatrice ",
    x = " Gestazione  [settimane] ",
    y = "Peso del Neonato [grammi]",
    color = " Fumatrici "
    ) +
  
  scale_y_continuous(breaks = seq(800, 5000, 300))+
  scale_x_continuous(breaks = seq(5, 45, 1))+
  geom_hline(yintercept = 3300, color = "red", linetype = "dashed", size = 0.7)+
  geom_hline(yintercept = 2990, color = "orange", linetype = "solid", size = 0.7)+
  geom_hline(yintercept = 3620, color = "orange", linetype = "solid", size = 0.7)+
  scale_color_manual(values = c("0" = "blue", "1" = "green"),
                     labels = c("0" = "Non-fumatrice", "1" = "Fumatrice")
                     )

Il grafico mostra la relazione tra il numero di settimane di gestazione, il peso del neonato (in grammi) e se la madre è fumatrice (punti verdi) o non fumatrice (punti blu). Sono presenti linee orizzontali che indicano: rossa la mediana del peso mentre quelle arancion i due range interquartili

4.4.1.2 Analisi del grafico

  1. Impatto del fumo sulla relazione peso-gestazione:

    • una tendenza chiara tra fumo e peso-gestazione non sembra essere definita
  2. Linee di riferimento:

    • Linea rossa tratteggiata: Rappresenta il peso mediano dei neonati.

    • Linee arancioni: Rappresentare il range interquartile

  3. Outlier clinici:

    • Neonati con peso estremamente basso o alto rispetto alla media dovrebbero essere valutati per eventuali condizioni particolari o errori .

Conclusione

Il grafico mostra il fumo materno sul peso dei neonati, probabilmente a causa del campione, non si riesce a distinguere una differenza chiara tra madri fumatrici e non fumatrici.