Modelgebaseerde imputatie-aanpak

Omgaan met missende data met imputaties in R

Michal Oleszak

Machine Learning Engineer

Modelgebaseerde imputatie

  • Imputeer elke variabele met een ander statistisch model.
  • Kan rekening houden met bekende relaties in de data.
Omgaan met missende data met imputaties in R

Procedure voor modelgebaseerde imputatie

  • Loop over variabelen.
  • Maak per variabele een model dat deze verklaart.
  • Gebruik het model om missende waarden te voorspellen.
  • Itereer door variabelen en imputeer op de oorspronkelijke missende posities.
Omgaan met missende data met imputaties in R

Modelgebaseerde imputatie stap voor stap

Een dataframe met vier variabelen (A, B, C en D) en vijf rijen met dummydata. Twee variabelen (A en C) hebben elk twee missende waarden, in verschillende rijen.

Omgaan met missende data met imputaties in R

Modelgebaseerde imputatie stap voor stap

Een dataframe met vier variabelen (A, B, C en D) en vijf rijen met dummydata. De missende waarden in A zijn geïmputeerd.

  1. Voorspel missende waarden in A.
Omgaan met missende data met imputaties in R

Modelgebaseerde imputatie stap voor stap

Een dataframe met vier variabelen (A, B, C en D) en vijf rijen met dummydata. Missende waarden in zowel A als C zijn geïmputeerd.

  1. Voorspel missende waarden in A.
  2. Behandel in A geïmputeerde data als geobserveerd en voorspel missende waarden in C.
Omgaan met missende data met imputaties in R

Modelgebaseerde imputatie stap voor stap

Een dataframe met vier variabelen (A, B, C en D) en vijf rijen met dummydata. Missende waarden in C zijn geïmputeerd.

  1. Voorspel missende waarden in A.
  2. Behandel in A geïmputeerde data als geobserveerd en voorspel missende waarden in C.
  3. Behandel in C geïmputeerde data als geobserveerd en voorspel A opnieuw waar het oorspronkelijk miste.
  4. Ga door tot convergentie.
Omgaan met missende data met imputaties in R

Het juiste model kiezen

Het model per variabele hangt af van het type:

  • Continue variabelen - lineaire regressie
  • Binaire variabelen - logistische regressie
  • Categorische variabelen - multinomiale logistische regressie
  • Telvariabelen - Poisson-regressie
Omgaan met missende data met imputaties in R

Enkele imputatie met lineaire regressie

Imputeer Height en Weight in nhanes met een lineair model:

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

Check of ze inderdaad zijn geïmputeerd:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Omgaan met missende data met imputaties in R

Lineaire regressie-imputatie in de praktijk

Initialiseer missende waarden met hotdeck en sla missende posities op:

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

Itereer 5 keer over Height en Weight, en imputeer op de oorspronkelijk missende posities:

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)
}
Omgaan met missende data met imputaties in R

Convergentie detecteren



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)


}
Omgaan met missende data met imputaties in R

Convergentie detecteren

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)


}
Omgaan met missende data met imputaties in R

Convergentie detecteren

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)


}
Omgaan met missende data met imputaties in R

Convergentie detecteren

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))
}
Omgaan met missende data met imputaties in R

Convergentie detecteren

Een lijngrafiek met twee lijnen, voor de variabelen Pulse en TotChol. De x-as toont het aantal iteraties; de y-as toont de gemiddelde absolute procentuele verandering in geïmputeerde waarden per iteratie. Na de eerste iteratie is er wat verandering; vanaf iteratie 2 verandert er niets meer.

Omgaan met missende data met imputaties in R

Laten we lineaire regressie-imputatie oefenen!

Omgaan met missende data met imputaties in R

Preparing Video For Download...