knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, results = 'asis')

Carica le librerie necessarie

library(tidyverse) library(caret) library(ggplot2) library(car) library(lmtest) library(knitr)

Carica il dataset

dataset <- read.csv("C:/Users/carbaren/Desktop/R/neonati.csv")

Visualizza le prime righe per una rapida panoramica

head(dataset)

Statistiche descrittive

summary(dataset)

Verifica della presenza di valori mancanti

sapply(dataset, function(x) sum(is.na(x)))

Visualizzazione delle distribuzioni delle variabili principali

ggplot(dataset, aes(x = peso)) + geomhistogram(binwidth = 50, fill = "blue", color = "black") + thememinimal() + labs(title = "Distribuzione del peso del neonato")

ggplot(dataset, aes(x = duratagravidanza)) + geomhistogram(binwidth = 1, fill = "green", color = "black") + theme_minimal() + labs(title = "Distribuzione della durata della gravidanza")

Ipotesi 1: Parto cesareo più frequente in alcuni ospedali

hospitalpartocesareo <- table(dataset$ospedale, dataset$tipoparto) hospitalparto_cesareo

Test chi-quadrato per verificare la distribuzione delle frequenze di tipo di parto negli ospedali

chisq.test(hospitalpartocesareo)

Ipotesi 2: Peso e lunghezza sono significativamente uguali a quelli della popolazione (test t)

t.test(dataset$peso, mu = 3200) # Test sulla media del peso, con una media ipotizzata di 3200g t.test(dataset$lunghezza, mu = 50) # Test sulla lunghezza, con una media ipotizzata di 50 cm

Ipotesi 3: Misure antropometriche sono significativamente diverse tra i sessi

boxplot(dataset$peso ~ dataset$sesso, main = "Distribuzione del peso per sesso") t.test(dataset$peso ~ as.factor(dataset$sesso)) # Test t per il peso tra i sessi

Crea un modello di regressione lineare

modello <- lm(peso ~ etamadre + numerogravidanze + fumomaterno + duratagravidanza + lunghezza + diametrocranio + tipoparto + ospedale + sesso, data = dataset)

Riepilogo del modello

summary(modello)

Selezione del modello ottimale usando il passo indietro (stepwise)

modello_selezionato <- step(modello, direction = "both")

Riepilogo del modello ottimale

summary(modello_selezionato)

Visualizza i criteri AIC e BIC

AIC(modelloselezionato) BIC(modelloselezionato)

Calcola R²

rsq <- summary(modello_selezionato)$r.squared cat("R²:", rsq)

Calcola RMSE

pred <- predict(modello_selezionato) residui <- dataset$peso - pred rmse <- sqrt(mean(residui^2)) cat("RMSE:", rmse)

Analizza i residui

plot(residui, main = "Residui del modello", xlab = "Indice dei dati", ylab = "Residui") abline(h = 0, col = "red") hist(residui, main = "Distribuzione dei residui", xlab = "Residui", col = "gray", border = "black")

Previsione per un nuovo caso

nuovodato <- data.frame( etamadre = 28, numerogravidanze = 3, fumomaterno = 0, duratagravidanza = 39, lunghezza = 50, diametrocranio = 34, tipoparto = "naturale", ospedale = "ospedale1", sesso = "M" )

Assicurati che le variabili categoriche siano trattate correttamente come fattori

nuovodato$tipoparto <- factor(nuovodato$tipoparto, levels = levels(dataset$tipoparto)) nuovodato$ospedale <- factor(nuovodato$ospedale, levels = levels(dataset$ospedale)) nuovodato$sesso <- factor(nuovo_dato$sesso, levels = levels(dataset$sesso))

previsione <- predict(modelloselezionato, nuovodato) cat("Il peso previsto del neonato è:", previsione, "grammi")

Visualizzazione dell'impatto della durata della gravidanza sul peso

ggplot(dataset, aes(x = duratagravidanza, y = peso)) + geompoint() + geom_smooth(method = "lm", color = "blue") + labs(title = "Impatto della durata della gravidanza sul peso del neonato", x = "Durata della gravidanza (settimane)", y = "Peso del neonato (grammi)")

Visualizzazione dell'effetto del fumo sulla previsione del peso

ggplot(dataset, aes(x = fumomaterno, y = peso, fill = factor(fumomaterno))) + geom_boxplot() + labs(title = "Differenze nel peso tra fumatrice e non fumatrice")