setwd("C:/Users/csant/Desktop/ProfessionAI/Statistica Inferenziale")
df <- read.csv("neonati.csv")
print(sum(is.na.data.frame(df)))
## [1] 0
Non ci sono valori mancanti
str(df)
## 'data.frame': 2500 obs. of 10 variables:
## $ Anni.madre : int 26 21 34 28 20 32 26 25 22 23 ...
## $ N.gravidanze: int 0 2 3 1 0 0 1 0 1 0 ...
## $ Fumatrici : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Gestazione : int 42 39 38 41 38 40 39 40 40 41 ...
## $ Peso : int 3380 3150 3640 3690 3700 3200 3100 3580 3670 3700 ...
## $ Lunghezza : int 490 490 500 515 480 495 480 510 500 510 ...
## $ Cranio : int 325 345 375 365 335 340 345 349 335 362 ...
## $ Tipo.parto : chr "Nat" "Nat" "Nat" "Nat" ...
## $ Ospedale : chr "osp3" "osp1" "osp2" "osp2" ...
## $ Sesso : chr "M" "F" "M" "M" ...
Il dataset è composto da 2500 osservazioni e 10 variabili. Ci sono 6 variabili quantitative (Anni.madre, N.gravidanze, Gestazione, Peso, Lunghezza e Cranio) e 4 variabili qualitative di cui 1 già codificata (Fumatrici) e altre sotto forma di stringa (Tipo.parto, Ospedale, Sesso)
cont_var <- c("Peso", "Lunghezza", "Cranio", "Anni.madre")
lista_grafici_cont <- list()
cont_var <- c("Peso", "Lunghezza", "Cranio", "Anni.madre")
lista_grafici_cont <- list()
for (colonna in cont_var){
media <- mean(df[[colonna]])
max_y <- max(hist(df[[colonna]], breaks=20, plot=FALSE)$counts) # Calcola l'altezza massima dei bins
grafico <- ggplot(data=df) +
geom_histogram(aes(x=.data[[colonna]]),
fill = "white",
color = "black",
bins = 20) +
labs(title= paste("Istogramma di", colonna),
x=colonna,
y="Freq. Ass.") +
theme_light() +
geom_vline(xintercept=media, color="red") +
annotate("text",
label=paste("Media =", round(media, 2)),
x=media,
y=max_y*0.9, # Posiziona il testo al 90% dell'altezza massima dell'istogramma
color="red",
hjust=-0.1) # Aggiusta leggermente l'orizzontalità
lista_grafici_cont[[colonna]] <- grafico
}
for (grafico in lista_grafici_cont) {
print(grafico)
}
PESO La variabile indica il peso del neonato alla nascita registrato in grammi. Si nota che gran parte delle osservazioni presenta un peso compreso sui 3000 gr, con una media del campione pari a circa 3284 gr
LUNGHEZZA La variabile indica la lunghezza del neonato in mm. Dal grafico si vede che la maggior parte dei nascituri ha una lunghezza intorno ai 500 mm con una media di 494.69 mm
CRANIO La variabile sta ad indicare il diametro del cranio del neonato, misurato in mm. Si può notare che la maggior parte dei bambini nasce con un cranio il cui diametro va dai 320 ai 360 mm con una media di circa 340 mm
ANNI.MADRE Gran parte delle donne presenti all’interno del campione ha un età compresa tra i 24 e i 32 anni con una media di 28.16 anni. Visualizzando il grafico si nota la presenza di osservazioni con un’età inferiore ai 10 anni, il che porta a pensare ad errori di misurazione. In seguito si procede alla rimozione di tali osservazioni dal dataset
del_oss <- which(df$Anni.madre<10)
del_oss
## [1] 1152 1380
df<-df[-del_oss,]
dis_var <- c("N.gravidanze", "Gestazione")
lista_grafici_dis <- list()
for (colonna in dis_var) {
tab_freq <- table(df[[colonna]])
modalità <- as.numeric(names(tab_freq))
frq <- as.numeric(tab_freq)
prc <- round(frq / sum(frq), 3)
df_bar <- data.frame(modalità, prc)
max_prc <- max(prc) # Calcola il massimo della frequenza relativa
media <- round(mean(df[[colonna]]), 2) # Calcola la media della colonna
grafico <- ggplot(data = df_bar) +
geom_bar(aes(x = modalità, y = prc),
stat = "identity",
fill = "white",
color = "black") +
labs(title = paste("Barplot di", colonna),
x = colonna,
y = "Freq. Rel.") +
theme_light() +
annotate("text",
x = max(modalità), # Posiziona il testo accanto alla barra più alta
y = max_prc * 0.9, # Poco sotto il massimo delle barre
label = paste("Media =", media),
color = "red",
hjust = 1) # Aggiusta l'orizzontalità per allinearlo
lista_grafici_dis[[colonna]] <- grafico
}
# Stampa i grafici
for (grafico in lista_grafici_dis) {
print(grafico)
}
N.GRAVIDANZE La variabile indica il numero di gravidanze sostenute precedentemente alla raccolta dei dati. Circa il 40% del campione è composto da donne alla prima gravidanza
GESTAZIONE La variabile sta ad indicare il numero di settimane di gestazione per la gravidanza in atto al momento della raccolta dei dati. Per il 30% del campione è stata registrata una durata della gestazione pari a 40 settimane, ovvero circa 9.2 mesi. Inoltre si riscontra una media pari 38.98 settimane di gestazione, in linea con le tempistiche comunicate dal Ministero della Salute
var_qual <- c("Tipo.parto", "Ospedale", "Sesso", "Fumatrici")
df$Fumatrici <- ifelse(df$Fumatrici==0, "No Fum.", "Fum")
lista_grafici_qual <-list()
for (colonna in var_qual) {
tab_freq <- table(df[[colonna]])
modalità <- rownames(tab_freq)
frq <- c()
for (i in seq(length(tab_freq))){
frq <- c(frq, tab_freq[[i]])
}
prc <- round(frq/sum(frq),3)
df_pie = data.frame(modalità, prc)
grafico <- ggplot(df_pie, aes(x="", y=prc, fill=modalità))+
geom_bar(stat="identity", width=1) +
coord_polar("y", start=0)+
geom_text(aes(label = paste0(prc, "%")), position = position_stack(vjust=0.5))+
labs(title=paste("Pie chart di", colonna))+
theme_void()
lista_grafici_qual[[colonna]] <- grafico
}
for (grafico in lista_grafici_qual) {
print(grafico)
}
Relazione tra Peso e variabili quantitative:
# Test di correlazione 1: Anni.madre vs Peso
cor_test1 <- cor.test(df$Anni.madre, df$Peso)
cor_label1 <- paste0("r = ", round(cor_test1$estimate, 3),
"\nP = ", signif(cor_test1$p.value, 3))
# Test di correlazione 2: N.gravidanze vs Peso
cor_test2 <- cor.test(df$N.gravidanze, df$Peso)
cor_label2 <- paste0("r = ", round(cor_test2$estimate, 3),
"\nP = ", signif(cor_test2$p.value, 3))
# Grafico 1: Anni.madre vs Peso
plot1 <- ggplot(data = df) +
geom_point(aes(x = Anni.madre, y = Peso)) +
theme_light() +
labs(title = "Relazione tra Anni.madre e Peso") +
annotate("text",
x = max(df$Anni.madre, na.rm = TRUE) * 0.9,
y = max(df$Peso, na.rm = TRUE) * 0.95,
label = cor_label1,
hjust = 1, size = 5, color = "red")
# Grafico 2: N.gravidanze vs Peso
plot2 <- ggplot(data = df) +
geom_point(aes(x = N.gravidanze, y = Peso)) +
theme_light() +
labs(title = "Relazione tra N.gravidanze e Peso") +
annotate("text",
x = max(df$N.gravidanze, na.rm = TRUE) * 0.9,
y = max(df$Peso, na.rm = TRUE) * 0.95,
label = cor_label2,
hjust = 1, size = 5, color = "red")
# Visualizzazione dei grafici affiancati
grid.arrange(plot1, plot2, ncol = 2)
Per entrambi i test di correlazione non si rigetta l’ipoteso nulla, per cui non ci sono evidenze di una correlazione lineare tra le variabili
Relazione tra peso e fumo:
df$Fumatrici <- as.factor(df$Fumatrici)
# Eseguo il t-test
t_test_result <- t.test(Peso ~ Fumatrici, data = df)
# Estraggo i risultati del t-test in un testo leggibile
test_result_text <- paste0(
"t = ", round(t_test_result$statistic, 2),
"\ndf = ", round(t_test_result$parameter, 2),
"\np-value = ", signif(t_test_result$p.value, 3)
)
# Creo il boxplot e aggiungo il testo in rosso
ggplot(data = df) +
geom_boxplot(aes(x = Fumatrici, y = Peso)) +
annotate("text", x = 1.5, y = max(df$Peso) * 0.95, label = test_result_text, hjust = 0.5, size = 5, color = "red") +
theme_light() +
labs(title = "Boxplot con risultati del t-test", x = "Fumatrici", y = "Peso")
Non si rifiuta l’ipotesi nulla secondo cui il campione è estratto da una popolazione in cui il peso dei nati da mamme fumatrici, in media, è uguale a quello dei neonati da mamme non fumatrici
Encoding
df$Tipo.parto_ces <- ifelse(df$Tipo.parto=="Ces", 1, 0)
df$Sesso_m <- ifelse(df$Sesso=="M",1, 0)
df$Ospedale1 <- ifelse(df$Ospedale=="osp1", 1, 0)
df$Ospedale2 <- ifelse(df$Ospedale=="osp2", 1 ,0)
df$Fumatrici <- ifelse(df$Fumatrici=="Fum",1,0)
df$Tipo.parto<-NULL
df$Ospedale<-NULL
df$Sesso<-NULL
Modello con tutte le variabili:
mod1 <- lm(Peso~., df)
summary(mod1)
##
## Call:
## lm(formula = Peso ~ ., data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1123.26 -181.53 -14.45 161.05 2611.89
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6677.9129 141.3984 -47.228 < 2e-16 ***
## Anni.madre 0.8018 1.1467 0.699 0.48449
## N.gravidanze 11.3812 4.6686 2.438 0.01485 *
## Fumatrici -30.2741 27.5492 -1.099 0.27191
## Gestazione 32.5773 3.8208 8.526 < 2e-16 ***
## Lunghezza 10.2922 0.3009 34.207 < 2e-16 ***
## Cranio 10.4722 0.4263 24.567 < 2e-16 ***
## Tipo.parto_ces -29.6335 12.0905 -2.451 0.01432 *
## Sesso_m 77.5723 11.1865 6.934 5.18e-12 ***
## Ospedale1 -28.2495 13.5054 -2.092 0.03657 *
## Ospedale2 -39.3408 13.3838 -2.939 0.00332 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 274 on 2487 degrees of freedom
## Multiple R-squared: 0.7289, Adjusted R-squared: 0.7278
## F-statistic: 668.7 on 10 and 2487 DF, p-value: < 2.2e-16
Interpretazione dei coefficienti:
Anni.madre e Fumatrici non sono significativi, si procede alla rimozione delle variabili dal modello;
N.gravidanze, Gestazione, Lunghezza e Cranio in media hanno una relazione lineare positiva con il Peso
In media il i bambini nati con il parto cesareo pesano circa 30 gr in meno rispetto ai neonati con parto naturale;
I neonati maschi, pesano, in media, 77 gr in più rispetto alle femmine, tenendo fissi gli altri coefficienti;
In media negli ospedali 1 e 2 il peso è minore rispetto a coloro i quali nascono nell’ospedale 3. Ciò non significa che è l’ospedale ad influenzare il peso, potrebbe essere una proxy di condizioni socio-economiche date dalla posizione geografica degli ospedali stessi
mod1 <- update(mod1, . ~ . - Anni.madre - Fumatrici)
Ora si valuteranno eventuali relazioni non lineari tra la variabile Peso e le variabili quantitative, attraverso degli scatter-plot
variabili <- c("N.gravidanze", "Gestazione", "Lunghezza", "Cranio")
for (var in variabili) {
gg <- ggplot(df, aes(x = Peso, y = !!sym(var))) +
geom_point() +
labs(title = paste("Peso vs", var), x = "Peso", y = var) +
theme_minimal()
print(gg)
}
Non sembrano esserci particolari evidenze di relazioni non lineari tra le variabili
Si passa, ora, alla valutazione di possibili effetti interazione tra le variabili L’idea è quella di considerare gli effetti del diametro del cranio e la lunghezza a seconda del sesso del neonato a causa delle differenze biologiche
mod2 <- update(mod1, . ~ . + Cranio:Sesso_m + Lunghezza:Sesso_m)
summary(mod2)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Tipo.parto_ces + Sesso_m + Ospedale1 + Ospedale2 + Cranio:Sesso_m +
## Lunghezza:Sesso_m, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1126.16 -179.68 -15.57 160.39 2542.38
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6476.3416 174.2611 -37.165 < 2e-16 ***
## N.gravidanze 12.6319 4.3353 2.914 0.00360 **
## Gestazione 32.2913 3.7948 8.509 < 2e-16 ***
## Lunghezza 9.8800 0.3779 26.143 < 2e-16 ***
## Cranio 10.5670 0.5800 18.218 < 2e-16 ***
## Tipo.parto_ces -29.9122 12.0919 -2.474 0.01344 *
## Sesso_m -336.1235 249.2982 -1.348 0.17769
## Ospedale1 -29.0970 13.5015 -2.155 0.03125 *
## Ospedale2 -39.5767 13.3766 -2.959 0.00312 **
## Cranio:Sesso_m -0.2255 0.8414 -0.268 0.78873
## Lunghezza:Sesso_m 0.9897 0.5324 1.859 0.06313 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 273.9 on 2487 degrees of freedom
## Multiple R-squared: 0.7292, Adjusted R-squared: 0.7281
## F-statistic: 669.7 on 10 and 2487 DF, p-value: < 2.2e-16
Si procede all’eliminazione dell’effetto interazione tra Cranio e Sesso in quanto non significativo
mod2 <- update(mod2, . ~ . - Cranio:Sesso_m)
summary(mod2)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Tipo.parto_ces + Sesso_m + Ospedale1 + Ospedale2 + Lunghezza:Sesso_m,
## data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1125.75 -180.44 -14.99 160.50 2552.59
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6459.7376 162.8443 -39.668 < 2e-16 ***
## N.gravidanze 12.6042 4.3333 2.909 0.00366 **
## Gestazione 32.3232 3.7922 8.524 < 2e-16 ***
## Lunghezza 9.9165 0.3525 28.134 < 2e-16 ***
## Cranio 10.4614 0.4256 24.579 < 2e-16 ***
## Tipo.parto_ces -29.7854 12.0804 -2.466 0.01375 *
## Sesso_m -370.9609 212.6825 -1.744 0.08125 .
## Ospedale1 -29.2343 13.4892 -2.167 0.03031 *
## Ospedale2 -39.6524 13.3711 -2.966 0.00305 **
## Lunghezza:Sesso_m 0.9051 0.4287 2.111 0.03484 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 273.8 on 2488 degrees of freedom
## Multiple R-squared: 0.7292, Adjusted R-squared: 0.7282
## F-statistic: 744.4 on 9 and 2488 DF, p-value: < 2.2e-16
Come da ipotesi iniziale, ad un incremento unitario del diametro del cranio (in mm) è associato un incremento del peso per i maschi maggiore di 0.9 rispetto alle femmine
Inoltre, gli effetti degli incrementi unitari di Lunghezza e Cranio sul Peso possono essere diversi a seconda della fase di gestazione
mod3 <- update(mod2, . ~ . + Cranio:Gestazione + Lunghezza:Gestazione)
summary(mod3)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Tipo.parto_ces + Sesso_m + Ospedale1 + Ospedale2 + Lunghezza:Sesso_m +
## Gestazione:Cranio + Gestazione:Lunghezza, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1111.19 -180.98 -11.23 160.23 2627.19
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -289.88102 1105.95615 -0.262 0.79326
## N.gravidanze 13.16807 4.30870 3.056 0.00227 **
## Gestazione -134.04317 29.71628 -4.511 6.76e-06 ***
## Lunghezza 9.68690 3.75643 2.579 0.00997 **
## Cranio -8.29203 6.42519 -1.291 0.19698
## Tipo.parto_ces -28.44580 12.01095 -2.368 0.01795 *
## Sesso_m -227.62363 214.07559 -1.063 0.28776
## Ospedale1 -30.12508 13.41126 -2.246 0.02478 *
## Ospedale2 -38.55530 13.29453 -2.900 0.00376 **
## Lunghezza:Sesso_m 0.60413 0.43188 1.399 0.16199
## Gestazione:Cranio 0.49155 0.16609 2.960 0.00311 **
## Gestazione:Lunghezza 0.01480 0.09779 0.151 0.87973
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 272.2 on 2486 degrees of freedom
## Multiple R-squared: 0.7326, Adjusted R-squared: 0.7314
## F-statistic: 619.3 on 11 and 2486 DF, p-value: < 2.2e-16
Si elimina l’effetto interazione tra Gestazione e Lunghezza perchè non significativo
mod3 <- update(mod3, . ~ . - Gestazione:Lunghezza)
summary(mod3)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Tipo.parto_ces + Sesso_m + Ospedale1 + Ospedale2 + Lunghezza:Sesso_m +
## Gestazione:Cranio, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1111.65 -181.00 -11.47 160.10 2628.13
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -286.78964 1105.55024 -0.259 0.79534
## N.gravidanze 13.16530 4.30781 3.056 0.00227 **
## Gestazione -134.01702 29.70994 -4.511 6.76e-06 ***
## Lunghezza 10.25282 0.35534 28.854 < 2e-16 ***
## Cranio -9.10808 3.49277 -2.608 0.00917 **
## Tipo.parto_ces -28.45331 12.00849 -2.369 0.01789 *
## Sesso_m -231.06313 212.82384 -1.086 0.27772
## Ospedale1 -30.15342 13.40732 -2.249 0.02460 *
## Ospedale2 -38.58702 13.29027 -2.903 0.00372 **
## Lunghezza:Sesso_m 0.61122 0.42924 1.424 0.15458
## Gestazione:Cranio 0.51259 0.09081 5.644 1.85e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 272.1 on 2487 degrees of freedom
## Multiple R-squared: 0.7326, Adjusted R-squared: 0.7315
## F-statistic: 681.5 on 10 and 2487 DF, p-value: < 2.2e-16
Non è significativa l’interazione tra Sesso e Lunghezza
mod3 <- update(mod3, . ~ . - Sesso_m:Lunghezza)
summary(mod3)
##
## Call:
## lm(formula = Peso ~ N.gravidanze + Gestazione + Lunghezza + Cranio +
## Tipo.parto_ces + Sesso_m + Ospedale1 + Ospedale2 + Gestazione:Cranio,
## data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1102.79 -181.11 -11.67 161.68 2675.01
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -224.27159 1104.90623 -0.203 0.83917
## N.gravidanze 13.00405 4.30721 3.019 0.00256 **
## Gestazione -139.29724 29.48371 -4.725 2.43e-06 ***
## Lunghezza 10.52218 0.30086 34.973 < 2e-16 ***
## Cranio -9.68667 3.46977 -2.792 0.00528 **
## Tipo.parto_ces -28.16143 12.00922 -2.345 0.01911 *
## Sesso_m 71.57291 11.15549 6.416 1.67e-10 ***
## Ospedale1 -29.88706 13.40878 -2.229 0.02591 *
## Ospedale2 -38.57652 13.29301 -2.902 0.00374 **
## Gestazione:Cranio 0.52828 0.09016 5.859 5.26e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 272.2 on 2488 degrees of freedom
## Multiple R-squared: 0.7324, Adjusted R-squared: 0.7314
## F-statistic: 756.6 on 9 and 2488 DF, p-value: < 2.2e-16
Il coefficiente di Gestazione:Lunghezza è positivo, quindi all’aumentare della gestazione, ad un incremento di 1mm del diametro del cranio, è associato, in media, un incremento del peso sempre maggiore, pari a 0.5*Gestazione
Si nota un incremento dell’R2 aggiustato rispetto al modello che include la sola interazione tra Sesso e Lunghezza (mod2). Questo modello spiega circa il 73% della variabilità del peso dei neonati.
Si sottopongono i tre modelli alla procedura BIC al fine di individuare il modello più parsimonioso
kable(BIC(mod1, mod2, mod3))
| df | BIC | |
|---|---|---|
| mod1 | 10 | 35201.52 |
| mod2 | 11 | 35204.87 |
| mod3 | 11 | 35175.11 |
Il modello 3, con l’interazione tra Gestazione e Cranio, ha un BIC più basso e verrà preso d’ora in avanti come modello di riferimento
kable(vif(mod3, type = "predictor"))
## GVIFs computed for predictors
| GVIF | Df | GVIF^(1/(2*Df)) | Interacts With | Other Predictors | |
|---|---|---|---|---|---|
| N.gravidanze | 1.025968 | 1 | 1.012901 | – | Gestazione, Lunghezza, Cranio, Tipo.parto_ces, Sesso_m, Ospedale1, Ospedale2 |
| Gestazione | 2.143686 | 3 | 1.135517 | Cranio | N.gravidanze, Lunghezza, Tipo.parto_ces, Sesso_m, Ospedale1, Ospedale2 |
| Lunghezza | 2.114847 | 1 | 1.454251 | – | N.gravidanze, Gestazione, Cranio, Tipo.parto_ces, Sesso_m, Ospedale1, Ospedale2 |
| Cranio | 2.143686 | 3 | 1.135517 | Gestazione | N.gravidanze, Lunghezza, Tipo.parto_ces, Sesso_m, Ospedale1, Ospedale2 |
| Tipo.parto_ces | 1.004155 | 1 | 1.002075 | – | N.gravidanze, Gestazione, Lunghezza, Cranio, Sesso_m, Ospedale1, Ospedale2 |
| Sesso_m | 1.048959 | 1 | 1.024187 | – | N.gravidanze, Gestazione, Lunghezza, Cranio, Tipo.parto_ces, Ospedale1, Ospedale2 |
| Ospedale1 | 1.333402 | 1 | 1.154730 | – | N.gravidanze, Gestazione, Lunghezza, Cranio, Tipo.parto_ces, Sesso_m, Ospedale2 |
| Ospedale2 | 1.335959 | 1 | 1.155837 | – | N.gravidanze, Gestazione, Lunghezza, Cranio, Tipo.parto_ces, Sesso_m, Ospedale1 |
Non ci sono problemi
plot(mod1)
Assunzione degli errori a media 0 rispettata, non visualizzo dei pattern
Assunzione distribuzione normale errori non perfettamente rispettata, problema nelle code che presentano osservazioni che si discostano dalla bisettrice
Assunzione omoschedasticità rispettata, visualizzo una nube casuale di punti
Osservazione 1551 da monitorare
kable(df[1551,])
| Anni.madre | N.gravidanze | Fumatrici | Gestazione | Peso | Lunghezza | Cranio | Tipo.parto_ces | Sesso_m | Ospedale1 | Ospedale2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1553 | 30 | 4 | 0 | 35 | 4520 | 520 | 360 | 0 | 0 | 0 | 1 |
L’ID 1551 ha un peso superiore alla media (condizionata al sesso e alla gestazione)
df$Peso[rownames(df) == "1551"] > mean(df$Peso[df$Sesso_m == 0 & df$Gestazione == 38])
## [1] TRUE
Ho utilizzato media condizionata e moda per imputare i valori non ancora conosciuti
prd <- data.frame(Cranio = mean(df$Cranio[df$Sesso_m==0 & df$Gestazione==39]), Sesso_m = 0, Gestazione = 39, Lunghezza = mean(df$Lunghezza[df$Sesso_m==0 & df$Gestazione==39]), N.gravidanze = 2, Tipo.parto_ces = 0, Ospedale1 = 0, Ospedale2 = 0)
kable(predict(mod3, newdata=prd))
| x |
|---|
| 3252.509 |
ggplot(data = df) +
geom_point(aes(y = predict(mod3), x = Gestazione, color = factor(Fumatrici))) +
labs(title = "Impatto di settimane di gestazione e fumo sul peso",
x = "Settimane di gestazione",
y = "Peso Previsto",
color = "Fumatrici") + # Titolo della legenda
scale_color_manual(values = c("0" = "blue", "1" = "red"), # Colori per 0 e 1
labels = c("0" = "Non fumatrice", "1" = "Fumatrice")) + # Etichette leggibili
theme_light()
Dal grafico si evince una correlazione positiva tra peso previsto e settimane di gestazione. Non ci sono evidenze di relazioni con l’essere o meno fumatrice