Approccio di imputazione basato su modello

Gestione dei dati mancanti con imputazioni in R

Michal Oleszak

Machine Learning Engineer

Imputazione basata su modello

  • Imputa ogni variabile con un modello statistico diverso.
  • Consente di considerare le relazioni nei dati che conosciamo.
Gestione dei dati mancanti con imputazioni in R

Procedura di imputazione basata su modello

  • Cicla sulle variabili.
  • Per ciascuna, crea un modello che la spieghi.
  • Usa il modello per predire i mancanti.
  • Itera sulle variabili imputando dove i dati erano originariamente mancanti.
Gestione dei dati mancanti con imputazioni in R

Imputazione basata su modello, passo dopo passo

Un data frame con quattro variabili (A, B, C e D) e cinque righe, riempito con dati fittizi. Due variabili (A e C) hanno due valori mancanti ciascuna, in righe diverse.

Gestione dei dati mancanti con imputazioni in R

Imputazione basata su modello, passo dopo passo

Un data frame con quattro variabili (A, B, C e D) e cinque righe, riempito con dati fittizi. I valori mancanti in A sono stati imputati.

  1. Predici i valori mancanti in A.
Gestione dei dati mancanti con imputazioni in R

Imputazione basata su modello, passo dopo passo

Un data frame con quattro variabili (A, B, C e D) e cinque righe, riempito con dati fittizi. I valori mancanti in A e C sono stati imputati.

  1. Predici i valori mancanti in A.
  2. Tratta i dati imputati in A come osservati e predici i mancanti in C.
Gestione dei dati mancanti con imputazioni in R

Imputazione basata su modello, passo dopo passo

Un data frame con quattro variabili (A, B, C e D) e cinque righe, riempito con dati fittizi. I valori mancanti in C sono stati imputati.

  1. Predici i valori mancanti in A.
  2. Tratta i dati imputati in A come osservati e predici i mancanti in C.
  3. Tratta i dati imputati in C come osservati e predici di nuovo A dove era mancante.
  4. Continua fino alla convergenza.
Gestione dei dati mancanti con imputazioni in R

Come scegliere il modello

Il modello per ogni variabile dipende dal suo tipo:

  • Variabili continue: regressione lineare
  • Variabili binarie: regressione logistica
  • Variabili categoriali: regressione logistica multinomiale
  • Variabili di conteggio: regressione di Poisson
Gestione dei dati mancanti con imputazioni in R

Imputazione singola con regressione lineare

Imputa Height e Weight in nhanes con un modello lineare:

library(simputation)
nhanes_imp <- impute_lm(nhanes, Height + Weight ~ .)

Verifica che siano stati imputati:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Gestione dei dati mancanti con imputazioni in R

Imputazione con regressione lineare: pratica

Inizializza i valori mancanti con hotdeck e salva le posizioni mancanti:

nhanes_imp <- hotdeck(nhanes)
missing_height <- nhanes_imp$Height_imp
missing_weight <- nhanes_imp$Weight_imp

Itera su Height e Weight 5 volte, imputando nelle posizioni originariamente mancanti:

for (i in 1:5) {
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Weight ~ Age + Gender + Height)
}
Gestione dei dati mancanti con imputazioni in R

Rilevare la convergenza



for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Gestione dei dati mancanti con imputazioni in R

Rilevare la convergenza

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Gestione dei dati mancanti con imputazioni in R

Rilevare la convergenza

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Gestione dei dati mancanti con imputazioni in R

Rilevare la convergenza

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)
  diff_height <- c(diff_height, mapc(prev_iter$Height, nhanes_imp$Height))
  diff_weight <- c(diff_weight, mapc(prev_iter$Weight, nhanes_imp$Weight))
}
Gestione dei dati mancanti con imputazioni in R

Rilevare la convergenza

Un grafico a linee con due serie, una per Pulse e una per TotChol. L’asse x mostra il numero di iterazioni, l’asse y la variazione percentuale assoluta media dei valori imputati tra le iterazioni. Dopo la prima iterazione entrambi cambiano un po’. Dalla seconda in poi non cambiano più.

Gestione dei dati mancanti con imputazioni in R

Esercizio: imputazione con regressione lineare

Gestione dei dati mancanti con imputazioni in R

Preparing Video For Download...