Podejście imputacji opartej na modelu

Obsługa brakujących danych z imputacją w R

Michal Oleszak

Machine Learning Engineer

Imputacja oparta na modelu

  • Każda zmienna jest uzupełniana innym modelem statystycznym.
  • Możliwość uwzględnienia znanych zależności w danych.
Obsługa brakujących danych z imputacją w R

Procedura imputacji opartej na modelu

  • Iteracja po zmiennych.
  • Dla każdej zmiennej tworzony jest model objaśniający jej wartości.
  • Model służy do przewidywania brakujących wartości.
  • Iteracja przez zmienne z uzupełnianiem oryginalnych braków.
Obsługa brakujących danych z imputacją w R

Imputacja oparta na modelu — krok po kroku

Ramka danych z czterema zmiennymi (A, B, C i D) i pięcioma wierszami z przykładowymi danymi. Dwie zmienne (A i C) mają po dwie brakujące wartości, każda w innych wierszach.

Obsługa brakujących danych z imputacją w R

Imputacja oparta na modelu — krok po kroku

Ramka danych z czterema zmiennymi (A, B, C i D) i pięcioma wierszami z przykładowymi danymi. Brakujące wartości w A zostały uzupełnione.

  1. Przewiduje się brakujące wartości w A.
Obsługa brakujących danych z imputacją w R

Imputacja oparta na modelu — krok po kroku

Ramka danych z czterema zmiennymi (A, B, C i D) i pięcioma wierszami z przykładowymi danymi. Brakujące wartości w A i C zostały uzupełnione.

  1. Przewiduje się brakujące wartości w A.
  2. Dane uzupełnione w A traktuje się jako obserwowane i przewiduje brakujące wartości w C.
Obsługa brakujących danych z imputacją w R

Imputacja oparta na modelu — krok po kroku

Ramka danych z czterema zmiennymi (A, B, C i D) i pięcioma wierszami z przykładowymi danymi. Brakujące wartości w C zostały uzupełnione.

  1. Przewiduje się brakujące wartości w A.
  2. Dane uzupełnione w A traktuje się jako obserwowane i przewiduje brakujące wartości w C.
  3. Dane uzupełnione w C traktuje się jako obserwowane i ponownie przewiduje A tam, gdzie brakowało.
  4. Powtarza się aż do osiągnięcia zbieżności.
Obsługa brakujących danych z imputacją w R

Wybór modelu

Model dla każdej zmiennej zależy od jej typu:

  • Zmienne ciągłe — regresja liniowa
  • Zmienne binarne — regresja logistyczna
  • Zmienne kategoryczne — wielomianowa regresja logistyczna
  • Zmienne zliczeniowe — regresja Poissona
Obsługa brakujących danych z imputacją w R

Imputacja pojedynczą regresją liniową

Uzupełnienie Height i Weight w nhanes modelem liniowym:

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

Sprawdzenie, czy zostały uzupełnione:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Obsługa brakujących danych z imputacją w R

Imputacja regresją liniową w praktyce

Inicjalizacja brakujących wartości za pomocą hotdeck i zapisanie ich lokalizacji:

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

Iteracja po Height i Weight 5 razy, uzupełniając oryginalne braki:

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)
}
Obsługa brakujących danych z imputacją w R

Wykrywanie zbieżności



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)


}
Obsługa brakujących danych z imputacją w R

Wykrywanie zbieżności

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)


}
Obsługa brakujących danych z imputacją w R

Wykrywanie zbieżności

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)


}
Obsługa brakujących danych z imputacją w R

Wykrywanie zbieżności

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))
}
Obsługa brakujących danych z imputacją w R

Wykrywanie zbieżności

Wykres liniowy z dwiema liniami: dla zmiennej Pulse i TotChol. Oś X przedstawia liczbę iteracji, oś Y — średnią bezwzględną zmianę procentową uzupełnionych wartości między iteracjami. Po pierwszej iteracji obie zmienne wykazują pewną zmianę. Od iteracji 2 wartości się nie zmieniają.

Obsługa brakujących danych z imputacją w R

Ćwiczenie imputacji regresją liniową!

Obsługa brakujących danych z imputacją w R

Preparing Video For Download...