Azienda
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.
Nota. Ho rimosso due righe dove la madre aveva 0 e 1 anno.
Per costruire il modello predittivo, abbiamo raccolto dati su 2500 neonati provenienti da tre ospedali. Le variabili raccolte includono:
L’obiettivo principale è identificare quali di queste variabili sono più predittive del peso alla nascita, con un focus particolare sull’impatto del fumo materno e delle settimane di gestazione, che potrebbero indicare nascite premature.
## 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
## Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio
## 1 26 0 0 42 3380 490 325
## 2 21 2 0 39 3150 490 345
## 3 34 3 0 38 3640 500 375
## 4 28 1 0 41 3690 515 365
## 5 20 0 0 38 3700 480 335
## 6 32 0 0 40 3200 495 340
## Parto.naturale Ospedale Femmina
## 1 1 3 0
## 2 1 1 1
## 3 1 2 0
## 4 1 2 0
## 5 1 3 1
## 6 1 2 1
Mi sembra di notare un andamento lineare per ‘Lunghezza’, ‘Cranio’, e ‘Peso’ (in ordine di quanto è vicino alla linearità l’andamento). Riguardo ‘Anni.madre’, il grafico mostra una nuvola di punti centrata, senza una tendenza lineare evidente tra le due variabili.
Nota: Per le variabili con pochi valori discreti qui non ho fatto nulla, le analizzerò in questo senso nella sezione prossima tramite boxplots e piecharts, quindi evito di ripetere.
## variabile rho
## 1 Anni.madre -0.01
## 2 N.gravidanze 0.02
## 3 Fumatrici -0.04
## 4 Gestazione 0.43
## 5 Lunghezza 0.75
## 6 Cranio 0.63
## 7 Parto.naturale 0.01
## 8 Ospedale 0.02
## 9 Femmina -0.27
Le due correlazioni danno risultati simili. C’è una correlazione: - Debole per ‘Femmina’ ~ Proporzionalità inversa. - Moderata per ‘Gestazione’. - Forte per ‘Lunghezza’ e ‘Cranio’.
Osservazione: che ‘Lunghezza’ ha a sua volta una correlazione forte con ‘Cranio’ e ‘Gestazione’ e ‘Cranio’ e ‘Gestazione’ sono a loro volta legate tra loro. ‘Femmina’ invece sembra indipendente da queste, il che la rende interessante come variabile anche se di per se è meno correlata con ‘Peso’. Quindi sarà unportante considerare il VIF mentre si pensera al modello per considerare anche la possibilità di rimuovere una o due di queste variabili (ad esempio, ‘Lunghezza’ e ‘Cranio’ sono molto correlate, quindi magari il modelli migliore ne ha solo una delle due, è una possibilità da considerare).
Prima di tutto creo delle classi delle variabili troppo granulari. Ho fatto varie prove per scegliere questi parametri, così che non avesi mai classi poco popolose (problematico per il chi value).
Anni.madre -> 0-20, 20-30, 30-38, 39+
N.gravidanze -> 0, 1, 2, 3, 4+
Peso -> 0-2750,2751-3500, 3501+
Gestazione -> 0-35, 36-37, 38-40, 41+
Lunghezza -> 0-425, 426-450, 451-475, 475+
Cranio -> 0-320, 321-340, 341+
## # A tibble: 9 × 4
## Variabile Statistica Gradi_libertà P_value
## <chr> <dbl> <dbl> <dbl>
## 1 Anni.madre 20.6 8 0.008
## 2 N.gravidanze 8.72 8 0.367
## 3 Fumatrici 5.3 2 0.071
## 4 Gestazione 724. 6 0
## 5 Lunghezza 1600. 6 0
## 6 Cranio 913. 4 0
## 7 Parto.naturale 3.51 2 0.173
## 8 Ospedale 8.49 4 0.075
## 9 Femmina 119. 2 0
Da questa analisi, si ha la conferma che “Gestazione”, “Cranio”, “Lunghezza” e “Femmina” hanno una correlazione forte (con magnitudine molto più forte nei primi 3). Sembra che anche “Anni.madre” abbia una correlazione significativa, debole, ma ha un p-value comunque minore di 0.05 (cosa che non avevo colto dagli scatterplot). Sicuramente non è una correlazione impattante come le altre, ma ne terremo considerazione (e non è lineare). L’unica cosa inaspettata è che ospedale ha un p-value piccolo, non significativo ma quasi, mentre mi sarei aspettato che fosse la variabile con il p-value più alto.
Kendall confermal, ma con valori diversi, la correlazione lineare. In particolare, le variabili con correlazione significativa restano ‘Gestazione’, ‘Lunghezza’, ‘Cranio’, ‘Femmina’. La correlazione per ‘Femmina’ è praticamente uguale nei due test, quella per ‘Gestazione è quasi dimezzata, quella di ’Lunghezza’ è diminuita di circa 1/4 (da 0.8 a 0.59) mentre quella di ‘Cranio’ diminuisce di meno di metà (da 0.7 a 0.47). Questo lo interpreto considerando che ‘Gestazione’, ‘Lunghezza’, ‘Cranio’ siano più correlate linearmente con ‘Peso’ (si vede bene anche dallo scatter) rispetto alle altre variabili, e Kendall coglie meno la correlazione perchè la correlazione lineare è più specifica per il tipo di correlazione reale che esite. Rispetto ‘Femmina’, evidentemente accade che la correlazione che c’è non è altrettanto lineare, ma viene colta comunque sia dalla correlazione lineare che da un test più robusto come quello di Kendall.
Le variabili che per i test fatti finora sembrano le più interessanti sono:
Nota: Tra le due variabili indicate come più critice, ‘Gestazione’ risulta rilevanete, mente ‘Fumatrici’ non sembra rilevante in nessuno dei casi. In ogni caso, qualunque considerazione qui non mi sembra troppo indicativa, visto il fatto che ci sono pochissime righe (il 4%) con madre fumatrice. (Farò osservazioni ulteriori riguardo ‘Fumatrici’ nell’analisi dei boxplots e piecharts, come già accennato.)
Nella prima fase, esploreremo le variabili attraverso un’analisi descrittiva per comprenderne la distribuzione e identificare eventuali outlier o anomalie. Inoltre si saggeranno le seguenti ipotesi con i test adatti:
Vedo che media e mediana sono valori simili o coincidenti, che è segnale di dati centrati e simmetrici.
## skewness kurtosis
## Anni.madre 0.15 2.89
## N.gravidanze 2.51 13.98
## Gestazione -2.07 11.26
## Peso -0.65 5.03
## Lunghezza -1.51 9.48
## Cranio -0.79 5.94
Le variabili, come già immaginavo, sono simmetriche. N.gravidanze come previsto ha una coda pesante verso la destra. Anche ‘Gestazione’ e ‘Lunghezza’ in realtà, in generale tutte le variabili sono sbilanciate a destra a livello di pesantezza della coda. ‘Anni.madre’ è simmetrica con code poco pesanti, il che significa che i suoi massimi e minimi sono outliers.
Ho normalizzato il boxplot, alla fine volevo vedere più che altro caratteristiche qualitative e non quantitative. Inoltre ho voluto esplorare meglio la variabile ‘Fumatrici’, in particolare in relazione agli outliers, colorando di rosso quelli con ‘Fumatrici’=1 (relativi a madri fumetrici). Non sembra che ad esempio gestazioni molto basse siano particolarmente legate a fumatrici (1 su 71).
## # A tibble: 6 × 6
## Variabile Range Variance SD CV IQR
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Anni.madre 33 27.2 5.22 0.19 7
## 2 N.gravidanze 12 1.64 1.28 1.3 1
## 3 Gestazione 18 3.49 1.87 0.05 2
## 4 Peso 4100 275866. 525. 0.16 630
## 5 Lunghezza 255 693. 26.3 0.05 30
## 6 Cranio 155 270. 16.4 0.05 20
Le variabili sembrano essere abbastanza stabili, tranne N.gravidanze, ma qui c’è un discorso a parte. N.gravidanze sembra la variabile con più varianza, causato sicuramente dagli outliers. Secondo me non ha senso interpretare questo risultato, analizzerò N.gravidanze senza outliers (da 0 a 3) nei grafici sotto.
## Peso_range n
## 1 0-2000 50
## 2 2000-3000 578
## 3 3000-4000 1690
## 4 4000+ 180
Questo comportamento è interessante quindi per ora non mi sento di scartare le variabili, in seguito vedrò se tenerle o no.
## # A tibble: 6 × 2
## Variabile Gini
## <chr> <dbl>
## 1 N.gravidanze 0.678
## 2 Fumatrici 0.08
## 3 Parto.naturale 0.413
## 4 Ospedale 0.667
## 5 Femmina 0.5
## 6 N.gravidanze (≤3) 0.653
Le variabili, a parte ‘Fumatrici’, sono abbastanza bilanciate. Per ‘N.gravidanze’ ho anche fatto una prova restringendo il campo escludento le code (è la variabile con le code più pesanti), e non cambia di molto.
\(H_0\): Non ci sono differenze sistematiche tra il numero di parti cesari
E ora provo a smentirla. Faccio 3 test Z confrontando coppie di ospedali. Scelgo \(\alpha\) uguale a 0.05.
## [1] "Z value del confronto tra Ospedale 1 e 2: -0.13"
## [1] "Z value del confronto tra Ospedale 1 e 3: 0.82"
## [1] "Z value del confronto tra Ospedale 2 e 3: 0.96"
Non rifiuto l’ipotesi in tutti e tre i casi. Gli p-value sono 0.896, 0.412 e 0.96. Da notare che il non-rifiuto è più forte (p-value più alto) tra ospedale 1 e 2, dove effettivamente il numero di cesari è molto vicino.
Conclusione Non rifiuto l’ipotesi.
Prendo valori di riferimento come peso e lunghezza della popolazione 3300 e 500 e come confidenza 0.95.
## [1] "p-value per peso: 0.132"
## [1] "p-value per lunghezza assumendio media della popolazione:"
## [1] "500: 2.1e-23"
## [1] "495: 0.564"
## [1] "490: 9.29e-19"
Peso: Il t-test di peso dimostra che siamo in linea con la popolazione, avendo un pvalue 0.132.
Lunghezza: Lunghezza dimostra che siamo leggermente sotto rispetto alla lunghezza della popolazione. In realtà saremmo in linea se come media avessi scelto 495, visto che la mia scelta è stata non precisa ma ho preso un riferimento che ho trovato, in realtà anche in questo caso nel complesso concludo che siamo in linea con la popolazione.
Conclusione: In sostanza, non rifiuto l’ipotesi 2.
## [1] "p-value per 'Peso' confrontando maschi e femmine 7.28e-33"
## [1] "p-value per 'Lunghezza' confrontando maschi e femmine 2.23e-21"
## [1] "p-value per 'Cranio' confrontando maschi e femmine 1.41e-13"
Quello che ho fatto è fare un test confrontando direttamente maschi e femmine. Il test verifica se i due vettori soni uguali, p-value bassi dicono che non lo sono.
Conclusione: Quindi (rifiutando il suo opposto in realtà) non rifiuto l’Ipotesi 3.
Verrà sviluppato un modello di regressione lineare multipla che includa tutte le variabili rilevanti. In questo modo, potremo quantificare l’impatto di ciascuna variabile indipendente sul peso del neonato ed eventuali interazioni. Ad esempio, ci aspettiamo che una maggiore durata della gestazione aumenterebbe in media il peso del neonato.
Le regressioni le farò con le variabili scalate (media 0 e deviazione standard 1) in modo tale che anche i coefficienti possono aiutarmi a capire il peso relativo di una rispetto alle altre.
Faccio una prima previsione usando tutte le variabili, tanto per avere un riferimento iniziale più che altro.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.717
## R² aggiustato: 0.716
## MSE: 72498.73
## MSE normalizzato: 0.234
## RSE: 269.256
## RSE normalizzato: 0.484
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.931
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.0080 6.1678 533.7428 0.0000
## scale(Anni.madre) 3.7701 6.6969 0.5630 0.5735
## scale(N.gravidanze) 16.3283 6.6921 2.4399 0.0148
## scale(Fumatrici) -6.1865 6.1988 -0.9980 0.3184
## scale(Gestazione) 59.6631 7.8476 7.6028 0.0000
## scale(Lunghezza) 260.5545 8.6367 30.1682 0.0000
## scale(Cranio) 175.3192 7.7087 22.7431 0.0000
## scale(Parto.naturale) 15.9970 6.1814 2.5879 0.0097
## scale(Ospedale) 9.5418 6.1791 1.5442 0.1227
## scale(Femmina) -43.4808 6.2905 -6.9121 0.0000
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Anni.madre) 1 312663 312663 4.1136 0.042673 *
## scale(N.gravidanze) 1 142877 142877 1.8798 0.170512
## scale(Fumatrici) 1 446742 446742 5.8776 0.015423 *
## scale(Gestazione) 1 175944384 175944384 2314.8464 < 2.2e-16 ***
## scale(Lunghezza) 1 161219224 161219224 2121.1120 < 2.2e-16 ***
## scale(Cranio) 1 40352376 40352376 530.9038 < 2.2e-16 ***
## scale(Parto.naturale) 1 549754 549754 7.2330 0.007218 **
## scale(Ospedale) 1 201356 201356 2.6492 0.103762
## scale(Femmina) 1 3631410 3631410 47.7774 6.409e-12 ***
## Residuals 1988 151101792 76007
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Anni.madre) 312663 0.059
## scale(N.gravidanze) 142877 0.027
## scale(Fumatrici) 446742 0.084
## scale(Gestazione) 175944384 32.954
## scale(Lunghezza) 161219224 30.196
## scale(Cranio) 40352376 7.558
## scale(Parto.naturale) 549754 0.103
## scale(Ospedale) 201356 0.038
## scale(Femmina) 3631410 0.680
## Residuals 151101792 28.301
##
## AIC: 28136.74
## BIC: 28198.33
## ═══════════════════════════════════════════
In media, il modello sbaglia di circa + o - 269 grammi nel prevedere il peso del neonato, circa il 48% dela deviazione standard del peso reale. Quindi le prestazioni sono precise e coerenti coi pesi reali.
Ora faccio la previsione con le variabili rilevanti che ho selezionato, tenendo in realtà anche ‘Parto.naturale’ perchè da sopra sembra che sia rilevante e guardando i diagrammi a torta sembrava che fosse comunque legata a ‘Peso’, nonostante questo legame non l’avessi colto prima. Qui mi risulta che ‘Anni.Madre’ non è rilevante, ma la tengo per ora perchè dalle analisi prima sembrava interessante, semmai la tolgo dopo.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.716
## R² aggiustato: 0.715
## MSE: 72498.73
## MSE normalizzato: 0.234
## RSE: 269.256
## RSE normalizzato: 0.484
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.931
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.0080 6.1774 532.9153 0.0000
## scale(Cranio) 177.0471 7.6952 23.0075 0.0000
## scale(Gestazione) 58.4550 7.8338 7.4619 0.0000
## scale(Lunghezza) 259.8352 8.6311 30.1047 0.0000
## scale(Anni.madre) 9.6774 6.2679 1.5440 0.1228
## scale(Femmina) -44.0950 6.2918 -7.0083 0.0000
## scale(Parto.naturale) 15.7905 6.1830 2.5538 0.0107
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Cranio) 1 258171372 258171372 3386.1573 < 2.2e-16 ***
## scale(Gestazione) 1 47016396 47016396 616.6637 < 2.2e-16 ***
## scale(Lunghezza) 1 72442447 72442447 950.1500 < 2.2e-16 ***
## scale(Anni.madre) 1 213504 213504 2.8003 0.09440 .
## scale(Femmina) 1 3761443 3761443 49.3348 2.95e-12 ***
## scale(Parto.naturale) 1 497265 497265 6.5221 0.01073 *
## Residuals 1991 151800152 76243
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Cranio) 258171372 48.356
## scale(Gestazione) 47016396 8.806
## scale(Lunghezza) 72442447 13.568
## scale(Anni.madre) 213504 0.040
## scale(Femmina) 3761443 0.705
## scale(Parto.naturale) 497265 0.093
## Residuals 151800152 28.432
##
## AIC: 28139.95
## BIC: 28184.75
## ═══════════════════════════════════════════
Non ho peggioramenti, eliminando le variabili che non ho ritenuto interessanti. In realtà guardando solo AIC e BIC sembra che il modello con tutte le variabili principali sia migliore, ma in questo caso si tratta di overfitting. Basta guardare la significatività delle variabili. Per fortuna torna come previsto, ovvero semplificando il modello non ho peggioramenti dei risultati.
Attraverso tecniche di selezione del modello, come la minimizzazione del criterio di informazione di Akaike (AIC) o di Bayes (BIC), selezioneremo il modello più parsimonioso, eliminando le variabili non significative. Verranno considerati anche modelli con interazioni tra le variabili e possibili effetti non lineari.
Come punto di partenza scelgo il modello avente come variabili <‘Lunghezza’, ‘Cranio’,‘Gestazione’,‘Anni.madre’, ‘Parto.naturale’,‘Femmina’>. Come detto prima, queste sono variabili che in almeno una delle fasi precedenti sono risultate rilevanti.
Qui ora faccio una serie di prove guardando AIC e BIC, scegliendo il modello migliore e poi nella sezione successiva lo analizzerò più nel dettaglio.
Intanto cerco di capire chi tenere tra ‘Anni.madre’ e ‘Parto.naturale’, visto che la prima non risultava rilevante dopo la regressione iniziale e la seconda non risultava rilevante nell’analisi della seconda parte del progetto.
## Rimuovo 'Anni.madre'
##
## AIC: 28140.34
## BIC: 28179.54
## Rimuovo 'Parto.naturale'
##
## AIC: 28144.48
## BIC: 28183.68
## Rimuovo 'Anni.madre' e 'Parto.naturale'
##
## AIC: 28144.83
## BIC: 28178.43
La cosa migliore sembra rimuovere ‘Anni.madre’, BIC è leggermente peggiore nel caso di rimozione di entrambe, ma ho un miglioramento di impatto maggiore nell’AIC. Comunque siamo lì non ci sono differenze grosse. Ora valuto se rimuovere ‘Femmina’, che risultava rilevante sempre, ma con un impatto inferiore rispetto a ‘Gestazione’, ‘Cranio’, e ‘Lunghezza’.
## Modello attuale
##
## AIC: 28140.34
## BIC: 28179.54
## Rimuovo 'Femmina'
##
## AIC: 28187.42
## BIC: 28221.01
Ho un peggioramento di BIC (quindi anche di AIC), quindi mantengo la variabile ‘Femmina’. Il suo impatto è marginale, ma comunque rilevante, ci da vera informazione.
Conclusione: Rimuovo Anni.madre. Le mie variabili di riferimento ora sono <‘Lunghezza’, ‘Cranio’,‘Gestazione’, ‘Parto.naturale’,‘Femmina’>, anche se ‘Parto.naturale’ non mi convince ancora.
Quello che è da capire è se alcune variabili sono correlate e posso fare a meno di una. Ad esempio, vedendo le correlazioni, noto che ‘Lunghezza’ e ‘Cranio’ sono molto correlate. I loro coefficienti, infatti, pur essendo alti, poi non si riperquotono nel peso ANOVA mostrata in precedenza. Ad esempio, ‘Lunghezza’ ha il coefficente maggiore, ma il suo peso nel summary ANOVA è nettamente più basso di ‘Cranio’. ‘Gestazione’, anche dalla tabella di correlazione, sembra essere più indipendente dalle altre due. Faccio delle prove calcolando intanto i VIF.
## scale(Cranio) scale(Gestazione) scale(Lunghezza)
## 1.540 1.576 1.951
## scale(Femmina) scale(Parto.naturale)
## 1.036 1.001
Sembra che le variabili siano sufficientemente indipendenti tra di loro. Rimuovendone una dovrei avere un peggioramento notevole del modello. Faccio una prova, rimuovendo la più vicina all’essere poco significativa ovvero ‘Lunghezza’ (che in effetti ha un valore vicino a 2).
## Modello attuale
##
## AIC: 28140.34
## BIC: 28179.54
## Rimuovo 'Lunghezza'
##
## AIC: 28886.22
## BIC: 28919.81
Ho un peggioramento circa 10 volte più significativo rimuovendo ‘Lunghezza’ rispetto a rimuovere ‘Femmina’, dato che ‘Femmina’ già era utile tenerlo qui non ci sono dubbi.
Dato che Lunghezza e Cranio sono correlate, inserisco un termine che ne è il prodotto sperando di spiegare meglio la variabile.
## Modello attuale
##
## AIC: 28140.34
## BIC: 28179.54
## Aggiungo 'Lunghezza'*'Cranio'
##
## AIC: 28131.61
## BIC: 28176.41
## Aggiungo 'Lunghezza'*'Cranio' e tolgo 'Cranio'
##
## AIC: 28129.69
## BIC: 28168.89
## Aggiungo 'Lunghezza'*'Cranio' e tolgo 'Lunghezza'
##
## AIC: 28130.02
## BIC: 28169.22
## Aggiungo 'Lunghezza'*'Cranio' e tolgo sia 'Lunghezza' che 'Cranio'
##
## AIC: 28145.95
## BIC: 28179.55
La cosa migliore sembra aggiungere ‘Lunghezza’*‘Cranio’ e togliere ‘Cranio’. Le mie variabili ora sono **<‘Lunghezza’, ‘Lunghezza’*‘Cranio’,‘Gestazione’, ‘Parto.naturale’,‘Femmina’>**
Provo ad inserire un contributo quadratico di gestazione, che mi sembra la meno lineare delle variabili.
## Modello attuale
##
## AIC: 28129.69
## BIC: 28168.89
## Aggiungo 'Gestazione'^2
##
## AIC: 28129.2
## BIC: 28174
## Aggiungo 'Gestazione'^2 e rimuovo 'Gestazione'
##
## AIC: 28131.73
## BIC: 28170.93
Il contributo di ‘Gestazione’ non sembra significativo quindi evito di aggiungerlo per ora. Provo ad inserire ‘Cranio’\(^2\) e ‘Lunghezza’\(^2\)
## Modello attuale
##
## AIC: 28129.69
## BIC: 28168.89
## Aggiungo 'Cranio'^2
##
## AIC: 28131.23
## BIC: 28176.03
## Aggiungo 'Lunghezza'^2
##
## AIC: 28089.2
## BIC: 28134
## Aggiungo 'Lunghezza'^2 e 'Cranio'^2
##
## AIC: 28053.46
## BIC: 28103.86
L’ultima variante, dove entrambe ‘Cranio’ e ‘Lunghezza’ vengono inserite con un termine quadratico, sembra la migliore per ora guardando solo indici AIC e BIC. In seguito raffinero eventualmente questa scelta con analisi più approfondite.
Le mie variabili ora sono **<‘Lunghezza’, ‘Lunghezza’*‘Cranio’, ‘Lunghezza’\(^2\),‘Cranio’\(^2\), ‘Gestazione’, ‘Parto.naturale’,‘Femmina’>**
Una volta ottenuto il modello finale, valuteremo la sua capacità predittiva utilizzando metriche come R² e il Root Mean Squared Error (RMSE). Un’attenzione particolare sarà rivolta all’analisi dei residui e alla presenza di valori influenti, che potrebbero distorcere le previsioni, indagando su di essi.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.728
## R² aggiustato: 0.727
## MSE: 70178.62
## MSE normalizzato: 0.227
## RSE: 264.912
## RSE normalizzato: 0.476
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.933
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.0080 6.0436 544.7112 0.0000
## scale(Gestazione) 70.6230 7.8358 9.0129 0.0000
## scale(Lunghezza) -255.9479 102.6690 -2.4929 0.0127
## scale(Femmina) -41.8224 6.1726 -6.7755 0.0000
## scale(Parto.naturale) 13.7863 6.0533 2.2775 0.0229
## scale(I(Cranio * Lunghezza)) -899.1023 199.0740 -4.5164 0.0000
## scale(I(Lunghezza)^2) 1048.2567 116.4301 9.0033 0.0000
## scale(I(Cranio)^2) 655.0842 106.3389 6.1603 0.0000
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Gestazione) 1 172696287 172696287 2366.4556 < 2.2e-16 ***
## scale(Lunghezza) 1 162723752 162723752 2229.8021 < 2.2e-16 ***
## scale(Femmina) 1 4817452 4817452 66.0135 7.777e-16 ***
## scale(Parto.naturale) 1 589231 589231 8.0742 0.004536 **
## scale(I(Cranio * Lunghezza)) 1 41901779 41901779 574.1797 < 2.2e-16 ***
## scale(I(Lunghezza)^2) 1 3180850 3180850 43.5872 5.186e-11 ***
## scale(I(Cranio)^2) 1 2769456 2769456 37.9498 8.760e-10 ***
## Residuals 1990 145223772 72977
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Gestazione) 172696287 32.346
## scale(Lunghezza) 162723752 30.478
## scale(Femmina) 4817452 0.902
## scale(Parto.naturale) 589231 0.110
## scale(I(Cranio * Lunghezza)) 41901779 7.848
## scale(I(Lunghezza)^2) 3180850 0.596
## scale(I(Cranio)^2) 2769456 0.519
## Residuals 145223772 27.200
##
## AIC: 28053.46
## BIC: 28103.86
## ═══════════════════════════════════════════
Commento Il modello sembra avere una buona capacità predittiva, spiegando quindi circa il 73% della variabilità del peso neonatale e sbagliando di media di circa 264 grammi, quindi meglio di prima (anche in termini di RSE normalizzato). Le variabili più influenti risultano Gestazione e Lunghezza, che insieme spiegano oltre il 60% della varianza, l’effetto di Cranio lo vediamo nel termine ‘Cranio’x’Lunghezza’. Da notare che ‘Cranio’ sembra poco influente, a giudicare dai numeri, ma in realtà non è così, la sua influenza è esercitata perchè è correlato con ‘Lunghezza’. Limitando l’influenza di ‘Cranio’, che non spiega troppo di più di quello che spiega ‘Lunghezza’, ‘Gestazione’ si dimostra più rilevante e addirittura la più rilevante di tutte, cosa che non era sospettabile nella fase di selezione delle variabili. Tutti i coefficienti sono statisticamente significativi. L’effetto di Femmina è negativo, come atteso, mentre Parto naturale ha un’influenza positiva ma modesta. L’AIC e il BIC sono relativamente bassi, rispetto ai modelli precedenti, suggerendo un buon compromesso tra accuratezza e semplicità.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1327.76 -180.79 -11.15 0.00 161.66 1204.76
## [1] 4.924656e-15
## [1] 269.6683
La media è vicina a 0, quindi il modello non sbaglia sempre sistematicamente allo stesso modo o sovrastimando o sottostimando (non c’è bias). Anche la mediana con minimo e massimo sono minanciati. La deviazione standard è di 270 grammi, in linea esattamente con il MSE misurato prima che è circa \(270^2\). Dal grafico qui sotto si vede che la media dei residui è esattamente l’asse X, quindi si può essere soddisfatti di questa analisi.
Mi sembra chiaro che ci sono dei valori influenti (uno in particolare molto influente). Andiamo ad analizzare meglio la cosa.
## CookD
## 1549 7.18
## 310 0.36
## 1427 0.17
## 155 0.03
## 2113 0.03
## 684 0.03
## Anni.madre N.gravidanze Fumatrici Gestazione Peso Lunghezza Cranio
## 1549 35 1 0 38 4370 315 374
## 310 40 3 0 28 1560 420 379
## 1427 24 4 0 29 1280 390 355
## 155 30 0 0 36 3610 410 330
## 2113 35 1 0 32 1890 500 309
## 684 30 1 0 39 3000 475 390
## Parto.naturale Ospedale Femmina
## 1549 1 3 1
## 310 1 3 1
## 1427 1 1 1
## 155 1 1 0
## 2113 1 2 1
## 684 0 2 1
Qui sopra le righe influenti sono ordinate per magnitudine di influenza. La riga 1549 è quella che nel grafico precedente si stacca novevolmente dalle altre, con un valore 7.18. E’ un bambino con cranio e lunghezza ridotti ma molto pesante, che va contro ogni intuizione avuta finora. (Gli altri sono dati dove ci sono valori fuori la norma, come gestazioni basse.) Dato che questa riga da sola ha 20 volte più influenza della seconda più influente ed è 700 volte più influente dell’ottava più influente, verifico se basta rimuovere questa riga per avere risultati notevolmente migliori.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.729
## R² aggiustato: 0.728
## MSE: 70213.34
## MSE normalizzato: 0.227
## RSE: 264.978
## RSE normalizzato: 0.476
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.933
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.0541 6.0408 544.9724 0.0000
## scale(Gestazione) 70.9508 7.8315 9.0596 0.0000
## scale(Lunghezza) -256.3408 102.6203 -2.4980 0.0126
## scale(Femmina) -42.0642 6.1694 -6.8182 0.0000
## scale(Parto.naturale) 13.3568 6.0507 2.2075 0.0274
## scale(I(Cranio * Lunghezza)) -899.6498 198.9320 -4.5224 0.0000
## scale(I(Lunghezza)^2) 1048.6479 116.3749 9.0109 0.0000
## scale(I(Cranio)^2) 655.6487 106.2168 6.1727 0.0000
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Gestazione) 1 172863085 172863085 2372.1341 < 2.2e-16 ***
## scale(Lunghezza) 1 162615128 162615128 2231.5053 < 2.2e-16 ***
## scale(Femmina) 1 4843878 4843878 66.4707 6.215e-16 ***
## scale(Parto.naturale) 1 573542 573542 7.8705 0.005074 **
## scale(I(Cranio * Lunghezza)) 1 42102486 42102486 577.7563 < 2.2e-16 ***
## scale(I(Lunghezza)^2) 1 3176168 3176168 43.5853 5.191e-11 ***
## scale(I(Cranio)^2) 1 2776638 2776638 38.1027 8.112e-10 ***
## Residuals 1989 144943184 72872
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Gestazione) 172863085 32.378
## scale(Lunghezza) 162615128 30.458
## scale(Femmina) 4843878 0.907
## scale(Parto.naturale) 573542 0.107
## scale(I(Cranio * Lunghezza)) 42102486 7.886
## scale(I(Lunghezza)^2) 3176168 0.595
## scale(I(Cranio)^2) 2776638 0.520
## Residuals 144943184 27.148
##
## AIC: 28036.56
## BIC: 28086.96
## ═══════════════════════════════════════════
Rimuovendo solo questa riga già ho un miglioramento.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.772
## R² aggiustato: 0.771
## MSE: 70071.78
## MSE normalizzato: 0.227
## RSE: 264.711
## RSE normalizzato: 0.476
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.933
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.4562 5.2857 622.8950 0.0000
## scale(Gestazione) 53.3074 6.8372 7.7967 0.0000
## scale(Lunghezza) -91.7854 101.2307 -0.9067 0.3647
## scale(Femmina) -43.4192 5.3929 -8.0512 0.0000
## scale(Parto.naturale) 9.7989 5.2973 1.8498 0.0645
## scale(I(Cranio * Lunghezza)) -629.1142 367.7507 -1.7107 0.0873
## scale(I(Lunghezza)^2) 717.9933 210.8698 3.4049 0.0007
## scale(I(Cranio)^2) 498.2524 199.4788 2.4978 0.0126
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Gestazione) 1 141107306 141107306 2666.6085 < 2.2e-16 ***
## scale(Lunghezza) 1 161852703 161852703 3058.6495 < 2.2e-16 ***
## scale(Femmina) 1 4689071 4689071 88.6128 < 2.2e-16 ***
## scale(Parto.naturale) 1 286299 286299 5.4104 0.020123 *
## scale(I(Cranio * Lunghezza)) 1 29225480 29225480 552.2954 < 2.2e-16 ***
## scale(I(Lunghezza)^2) 1 353293 353293 6.6764 0.009844 **
## scale(I(Cranio)^2) 1 330138 330138 6.2389 0.012582 *
## Residuals 1886 99800318 52916
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Gestazione) 141107306 32.242
## scale(Lunghezza) 161852703 36.983
## scale(Femmina) 4689071 1.071
## scale(Parto.naturale) 286299 0.065
## scale(I(Cranio * Lunghezza)) 29225480 6.678
## scale(I(Lunghezza)^2) 353293 0.081
## scale(I(Cranio)^2) 330138 0.075
## Residuals 99800318 22.804
##
## AIC: 25984.95
## BIC: 26034.87
## ═══════════════════════════════════════════
Qui invece ho rimosso tutto e il miglioramento è notevole, spiego il 5% in più della variabilità e AIC e BIC sono molto minori. In realtà tolti questi valori significativi, risulta che ‘Lunghezza’ non lo è più (diventa collineare col suo termine quadrato e interattivo con ‘Cranio’)
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.772
## R² aggiustato: 0.771
## MSE: 71689.95
## MSE normalizzato: 0.232
## RSE: 267.75
## RSE normalizzato: 0.481
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.932
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.4562 5.2855 622.9244 0.0000
## scale(Gestazione) 51.3440 6.4849 7.9175 0.0000
## scale(Femmina) -43.7574 5.3797 -8.1338 0.0000
## scale(Parto.naturale) 9.9766 5.2934 1.8847 0.0596
## scale(I(Cranio * Lunghezza)) -709.7392 356.8213 -1.9891 0.0468
## scale(I(Lunghezza)^2) 674.1089 205.2303 3.2846 0.0010
## scale(I(Cranio)^2) 541.4772 193.6893 2.7956 0.0052
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Gestazione) 1 141107306 141107306 2666.8600 < 2.2e-16 ***
## scale(Femmina) 1 14165622 14165622 267.7234 < 2.2e-16 ***
## scale(Parto.naturale) 1 8332 8332 0.1575 0.691538
## scale(I(Cranio * Lunghezza)) 1 178572020 178572020 3374.9250 < 2.2e-16 ***
## scale(I(Lunghezza)^2) 1 3533985 3533985 66.7906 5.473e-16 ***
## scale(I(Cranio)^2) 1 413522 413522 7.8154 0.005233 **
## Residuals 1887 99843821 52911
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Gestazione) 141107306 32.242
## scale(Femmina) 14165622 3.237
## scale(Parto.naturale) 8332 0.002
## scale(I(Cranio * Lunghezza)) 178572020 40.803
## scale(I(Lunghezza)^2) 3533985 0.808
## scale(I(Cranio)^2) 413522 0.094
## Residuals 99843821 22.814
##
## AIC: 25983.78
## BIC: 26028.15
## ═══════════════════════════════════════════
Parto.naturale risulta marginale, a quanto pare erano questi residui a renderlo interessante, quindi provo a toglierla.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.771
## R² aggiustato: 0.771
## MSE: 70273.35
## MSE normalizzato: 0.227
## RSE: 265.091
## RSE normalizzato: 0.477
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.933
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.4562 5.2891 622.5038 0.0000
## scale(Gestazione) 51.6071 6.4878 7.9545 0.0000
## scale(Femmina) -43.8628 5.3831 -8.1483 0.0000
## scale(I(Cranio * Lunghezza)) -733.0898 356.8471 -2.0544 0.0401
## scale(I(Lunghezza)^2) 687.0636 205.2538 3.3474 0.0008
## scale(I(Cranio)^2) 554.2633 193.7013 2.8614 0.0043
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Gestazione) 1 141107306 141107306 2663.2598 < 2.2e-16 ***
## scale(Femmina) 1 14165622 14165622 267.3620 < 2.2e-16 ***
## scale(I(Cranio * Lunghezza)) 1 178411646 178411646 3367.3420 < 2.2e-16 ***
## scale(I(Lunghezza)^2) 1 3494449 3494449 65.9542 8.243e-16 ***
## scale(I(Cranio)^2) 1 433814 433814 8.1878 0.004264 **
## Residuals 1888 100031771 52983
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Gestazione) 141107306 32.242
## scale(Femmina) 14165622 3.237
## scale(I(Cranio * Lunghezza)) 178411646 40.766
## scale(I(Lunghezza)^2) 3494449 0.798
## scale(I(Cranio)^2) 433814 0.099
## Residuals 100031771 22.857
##
## AIC: 25985.34
## BIC: 26024.17
## ═══════════════════════════════════════════
Gli \(R^2\) restano uguali (0.771), MSE e AIC sono scesi di un po’. Il modello è più pulito. Provo ora a rimuovere ‘Cranio’x’Lunghezza’.
## ═══════════════════════════════════════════
## 📊 Valutazione modello lineare
## ═══════════════════════════════════════════
## R²: 0.771
## R² aggiustato: 0.77
## MSE: 70365.85
## MSE normalizzato: 0.228
## RSE: 265.266
## RSE normalizzato: 0.477
## MAPE (%): 0.07
## 1 - MAPE (pseudo-accuracy): 0.933
## ───────────────────────────────
##
## --- Coefficienti del modello ---
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3292.4562 5.2936 621.9739 0
## scale(Gestazione) 50.9166 6.4846 7.8519 0
## scale(Femmina) -44.2131 5.3850 -8.2105 0
## scale(I(Lunghezza)^2) 265.6730 7.3917 35.9423 0
## scale(I(Cranio)^2) 156.5682 6.6709 23.4704 0
##
## --- ANOVA ---
## Analysis of Variance Table
##
## Response: Peso
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Gestazione) 1 141107306 141107306 2658.73 < 2.2e-16 ***
## scale(Femmina) 1 14165622 14165622 266.91 < 2.2e-16 ***
## scale(I(Lunghezza)^2) 1 152880509 152880509 2880.56 < 2.2e-16 ***
## scale(I(Cranio)^2) 1 29235792 29235792 550.86 < 2.2e-16 ***
## Residuals 1889 100255378 53073
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## --- Percentuale di varianza spiegata ---
## Sum Sq PercVar
## scale(Gestazione) 141107306 32.242
## scale(Femmina) 14165622 3.237
## scale(I(Lunghezza)^2) 152880509 34.933
## scale(I(Cranio)^2) 29235792 6.680
## Residuals 100255378 22.908
##
## AIC: 25987.57
## BIC: 26020.85
## ═══════════════════════════════════════════
‘Cranio’x’Lunghezza’ è marginale, migliora di un po’ l’adattamento ma di poco e preferisco rimuoverlo a favore di semplicità e stabilità. Le variabili che alla fine decido di tenere sono solo 4, ovvero ‘Lunghezza’ e ‘Cranio’ quadratiche e ‘Gestazione’ e ‘Femmina’ lineari.
<‘Lunghezza’\(^2\),‘Cranio’\(^2\), ‘Gestazione’, ‘Femmina’>
Il modello è notevolmente migliore rispetto a quelli precedenti in termine di \(R^2\), più o meno uguale in termini di RSE. Quindi questo ultimo modello spiega meglio la varianza e può adattarsi meglio a dati nuovi e risulta più affidabile fuori dal training, mantenendo però qui gli stessi risultati.
Una volta validato il modello, lo useremo per fare previsioni pratiche. Ad esempio, potremo stimare il peso di una neonata considerando una madre alla terza gravidanza che partorirà alla 39esima settimana.
Prima commento un po’ il modello, poi faccio degli esperimenti ed evidenzio che effettivamente quello che è previsto accade.
Parto da un caso iniziale che chiamo di riferimento e lo modifico in vari modi (ogni modifica che evidenzio è fatta a partire dal caso di riferimento).
## RIFERIMENTO: Gestazione = 39, Lunghezza = 495, Cranio = 340, Parto.naturale = 1, Femmina = 1
## fit lwr upr
## 1 3232.914 2780.857 3684.97
##
## ---------------------
##
## Femmina -> 0
## fit lwr upr
## 1 3321.326 2869.259 3773.393
##
## ---------------------
##
## Lunghezza -> 480
## fit lwr upr
## 1 3064.069 2611.939 3516.199
##
## ---------------------
##
## Lunghezza -> 510
## fit lwr upr
## 1 3406.954 2954.777 3859.131
##
## ---------------------
##
## Cranio -> 330
## fit lwr upr
## 1 3130.966 2678.83 3583.102
##
## ---------------------
##
## Cranio -> 350
## fit lwr upr
## 1 3337.905 2885.762 3790.047
##
## ---------------------
##
## Gestazione -> 36
## fit lwr upr
## 1 3142.747 2690.138 3595.357
##
## ---------------------
##
## Gestazione -> 42
## fit lwr upr
## 1 3323.08 2870.455 3775.705
Da un caso di riferimento ho provato ad abbassare ed alzare una stessa variabile di una stessa quantità. Si vede come il cambiamento di ‘Lunghezza’ e ‘Cranio’ è più impattante di ‘Gestazione’ e ‘Femmina’.
Femmina: Il modello aumenta il peso di circa 90 grammi quando si passa da una femmina ad un maschio. Contando che è una variabile bilanciata (guardando Gini) e che il coefficente è -43, a occhio ci sta che sia calato di 90 (mi aspetterei più o meno -86).
Lunghezza (per Cranio il discorso è simile, lo evito): Da notare che ho questa situazione:
480->495->510 e 3064.069->3232.914->3406.954
Ovvero da 480 a 495 ho un incremento di 168 e da 495 a 3407 ho un incremento di 175, che non è lineare chiaramente ma non di discosta troppo. Anche guardando il dataset l’incremento sembra coerente, tra i 10mm e i 20 millimetri di lunghezza diversi ho circa una cresita si 100 o 200 grammi, chiaramente qui è più marcata leggermente verso destra perchè come detto il modello scelto è quadratico.
Valutazione: Dal caso specifico studiato, non ci sono sorprese rispetto a quello che prevede il modello e quello che ci si aspetterebbe dato il dataset.
Infine, utilizzeremo grafici e rappresentazioni visive per comunicare i risultati del modello e mostrare le relazioni più significative tra le variabili. Ad esempio, potremmo visualizzare l’impatto del numero di settimane di gestazione e del fumo sul peso previsto.
Mostro solo come va una variabile, le altre le mantengo fisse ai loro valori medi (variabili continue) o più frequenti.
Ragionamento su ‘Lunghezza e Cranio’: Il modello sembra spiegare bene la maggior parte dei dati, mentre per la coda a sinistra ha un bias positivo e ci sono errori notevoli. Questi sono i valori influenti scartati, che se considerati mi andavano ad influire negativamente sulla maggioranza dei dati. In particolare, il modello sembra predirre bene i dati intorno alla media (per ‘Lunghezza’, ad esempio, tra 494 e 495).
Nota. Con un modello lineare sarei stato in grado di andare a spiegare meglio i dati in coda, restando abbastanza vicino nella nuvola di dati centrali, ma risulta meglio essere più imprecisi in coda migliorando anche di relativamente poco la spiegazione sui quartili principali. Nel caso si volesse essere più precisi nelle code a discapito di errori più marcati nel complesso, potrebbe aver senso un modello lineare. Di base questi ragionamenti confermano le osservazioni che avevamo fatto osservando i boxplots e commentando le misure di forma.
Ragionamento su ‘Gestazione’: Il ragionamento è uguale a quello per ‘Lunghezza’ e ‘Cranio’, solo che qui la variabile ottiene lo stesso risultato con un comportamento lineare.
Ragionamento su ‘Femmina’: Il modello appiattisce la differenza tra maschi e femmine, prevedendo sotto la mediana per i maschi e sopra per le femmine. In realtà però non è così, è da notare che in questo caso la differenza tra maschi e femmine è l’unica differenza, mentre sto tenendo costanti le altre variabili, che però sono correlate a ‘Femmina’. Quindi quella spinta in più verso il valore di mediana sarebbe dato da ‘Lunghezze’ e ‘Cranio’ più alti, cosa che non accade qua. Questo appiattimento quindi è quello che dovevamo aspettarci da questo particolare grafico, anche se poi in realtà il puntino blu è leggermente più in alto per i maschi che per le femmine. Quindi in conclusione il grafico conferma che il nostro modello sta usando questa variabile correttamente.
Il progetto di previsione del peso neonatale è un’iniziativa fondamentale per Neonatal Health Solutions. Attraverso l’uso di dati clinici dettagliati e strumenti di analisi statistica avanzati, possiamo contribuire a migliorare la qualità della cura prenatale, ridurre i rischi per i neonati e ottimizzare l’efficienza delle risorse ospedaliere. Questo progetto rappresenta un punto di svolta per l’azienda, consentendo non solo un miglioramento della pratica clinica ma anche l’implementazione di politiche sanitarie più informate e proattive.
Il modello funziona bene: spiega circa il 77% del peso alla nascita e ha un’accuratezza intorno al 93%. I fattori che contano di più sono lunghezza, gestazione e cranio, mentre le femmine pesano in media un po’ meno dei maschi. In generale, i risultati sono solidi e il modello può essere un buon supporto per valutazioni cliniche rapide e affidabili.