Abordarea imputării bazate pe modele

Gestionarea datelor lipsă prin imputare în R

Michal Oleszak

Machine Learning Engineer

Imputare bazată pe modele

  • Imputați fiecare variabilă cu un model statistic diferit.
  • Posibilitatea de a ține cont de relațiile cunoscute din date.
Gestionarea datelor lipsă prin imputare în R

Procedura de imputare bazată pe modele

  • Iterați prin variabile.
  • Pentru fiecare variabilă, creați un model care o explică.
  • Folosiți modelul pentru a prezice valorile lipsă.
  • Parcurgeți variabilele imputând la locațiile unde datele lipseau inițial.
Gestionarea datelor lipsă prin imputare în R

Imputare bazată pe modele pas cu pas

Un cadru de date cu patru variabile (A, B, C și D) și cinci rânduri, cu date de test. Două dintre variabile (A și C) au câte două valori lipsă, în rânduri diferite.

Gestionarea datelor lipsă prin imputare în R

Imputare bazată pe modele pas cu pas

Un cadru de date cu patru variabile (A, B, C și D) și cinci rânduri, cu date de test. Valorile lipsă din A au fost imputate.

  1. Preziceți valorile lipsă din A.
Gestionarea datelor lipsă prin imputare în R

Imputare bazată pe modele pas cu pas

Un cadru de date cu patru variabile (A, B, C și D) și cinci rânduri, cu date de test. Valorile lipsă din A și C au fost imputate.

  1. Preziceți valorile lipsă din A.
  2. Tratați datele imputate în A ca observate și preziceți valorile lipsă din C.
Gestionarea datelor lipsă prin imputare în R

Imputare bazată pe modele pas cu pas

Un cadru de date cu patru variabile (A, B, C și D) și cinci rânduri, cu date de test. Valorile lipsă din C au fost imputate.

  1. Preziceți valorile lipsă din A.
  2. Tratați datele imputate în A ca observate și preziceți valorile lipsă din C.
  3. Tratați datele imputate în C ca observate și preziceți din nou A unde lipseau inițial.
  4. Continuați până la convergență.
Gestionarea datelor lipsă prin imputare în R

Cum să alegeți modelul

Modelul pentru fiecare variabilă depinde de tipul acesteia:

  • Variabile continue - regresie liniară
  • Variabile binare - regresie logistică
  • Variabile categoriale - regresie logistică multinomială
  • Variabile de numărare - regresie Poisson
Gestionarea datelor lipsă prin imputare în R

Imputare prin regresie liniară simplă

Imputați Height și Weight în nhanes cu un model liniar:

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

Verificați dacă au fost imputate:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Gestionarea datelor lipsă prin imputare în R

Regresie liniară pentru imputare în practică

Inițializați valorile lipsă cu hotdeck și salvați locațiile acestora:

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

Iterați peste Height și Weight de 5 ori, imputând la locațiile inițial lipsă:

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)
}
Gestionarea datelor lipsă prin imputare în R

Detectarea convergenței



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)


}
Gestionarea datelor lipsă prin imputare în R

Detectarea convergenței

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)


}
Gestionarea datelor lipsă prin imputare în R

Detectarea convergenței

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)


}
Gestionarea datelor lipsă prin imputare în R

Detectarea convergenței

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))
}
Gestionarea datelor lipsă prin imputare în R

Detectarea convergenței

Un grafic liniar cu două linii, una pentru variabila Pulse și una pentru TotChol. Axa x indică numărul de iterații, iar axa y indică modificarea procentuală absolută medie a valorilor imputate între iterații. După prima iterație, ambele variabile prezintă modificări. Începând cu iterația 2, acestea nu se mai modifică.

Gestionarea datelor lipsă prin imputare în R

Să exersăm imputarea prin regresie liniară!

Gestionarea datelor lipsă prin imputare în R

Preparing Video For Download...