Modellbaserad imputering

Hantering av saknade värden med imputering i R

Michal Oleszak

Machine Learning Engineer

Modellbaserad imputering

  • Imputera varje variabel med en separat statistisk modell.
  • Möjlighet att ta hänsyn till kända samband i data.
Hantering av saknade värden med imputering i R

Procedur för modellbaserad imputering

  • Iterera över variablerna.
  • Bygg en modell för varje variabel.
  • Använd modellen för att prediktera saknade värden.
  • Upprepa och imputera ursprungligen saknade värden för varje variabel.
Hantering av saknade värden med imputering i R

Modellbaserad imputering steg för steg

En dataram med fyra variabler (A, B, C och D) och fem rader med dummydata. Två variabler (A och C) har två saknade värden vardera, i olika rader.

Hantering av saknade värden med imputering i R

Modellbaserad imputering steg för steg

En dataram med fyra variabler (A, B, C och D) och fem rader med dummydata. Saknade värden i A har imputerats.

  1. Prediktera saknade värden i A.
Hantering av saknade värden med imputering i R

Modellbaserad imputering steg för steg

En dataram med fyra variabler (A, B, C och D) och fem rader med dummydata. Saknade värden i både A och C har imputerats.

  1. Prediktera saknade värden i A.
  2. Behandla imputerade värden i A som observerade och prediktera saknade värden i C.
Hantering av saknade värden med imputering i R

Modellbaserad imputering steg för steg

En dataram med fyra variabler (A, B, C och D) och fem rader med dummydata. Saknade värden i C har imputerats.

  1. Prediktera saknade värden i A.
  2. Behandla imputerade värden i A som observerade och prediktera saknade värden i C.
  3. Behandla imputerade värden i C som observerade och prediktera A igen där det ursprungligen saknades.
  4. Fortsätt tills konvergens uppnås.
Hantering av saknade värden med imputering i R

Välja modell

Modellen för varje variabel väljs utifrån variabelns typ:

  • Kontinuerliga variabler – linjär regression
  • Binära variabler – logistisk regression
  • Kategoriska variabler – multinomial logistisk regression
  • Räknevariabler – Poisson-regression
Hantering av saknade värden med imputering i R

Imputering med enkel linjär regression

Imputera Height och Weight i nhanes med en linjär modell:

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

Kontrollera att de faktiskt imputerades:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Hantering av saknade värden med imputering i R

Linjär regressionsimputering i praktiken

Initiera saknade värden med hotdeck och spara saknade positioner:

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

Iterera över Height och Weight 5 gånger och imputera ursprungligen saknade positioner:

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)
}
Hantering av saknade värden med imputering i R

Detektera konvergens



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)


}
Hantering av saknade värden med imputering i R

Detektera konvergens

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)


}
Hantering av saknade värden med imputering i R

Detektera konvergens

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)


}
Hantering av saknade värden med imputering i R

Detektera konvergens

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))
}
Hantering av saknade värden med imputering i R

Detektera konvergens

Ett linjediagram med två linjer, en för Pulse och en för TotChol. X-axeln visar antal iterationer och y-axeln visar genomsnittlig absolut procentuell förändring i imputerade värden mellan iterationer. Efter den första iterationen förändras båda variablerna något. Från iteration 2 och framåt sker ingen ytterligare förändring.

Hantering av saknade värden med imputering i R

Nu kör vi en övning!

Hantering av saknade värden med imputering i R

Preparing Video For Download...