Replikowanie zmienności danych

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

Michal Oleszak

Machine Learning Engineer

Zmienność imputowanych danych

Wykres marginalny – wykres punktowy „Height" vs „Weight", w którym wartości imputowane w jednej z dwóch zmiennych są wyróżnione innym kolorem.

  • Brak zmienności w imputowanych danych.
  • Imputacja powinna odwzorowywać zmienność obserwowanych danych.
  • W imputacji modelowej te same wartości predyktorów dają tę samą wartość imputowaną.
  • Rozwiązanie: losowanie z rozkładów warunkowych.
Obsługa brakujących danych z imputacją w R

Czym jest prognoza

Większość modeli statystycznych szacuje rozkład warunkowy zmiennej odpowiedzi:

$p(y|X)$

Aby uzyskać pojedynczą prognozę, rozkład warunkowy jest podsumowywany:

  • Regresja liniowa: wartość oczekiwana rozkładu warunkowego.
  • Regresja logistyczna: klasa o najwyższym prawdopodobieństwie.

Można zamiast tego losować z tych rozkładów, aby zwiększyć zmienność.

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

Losowanie z rozkładów warunkowych

Wykres funkcji gęstości prawdopodobieństwa rozkładu normalnego z wyróżnioną średnią równą 25.

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

Losowanie z rozkładów warunkowych

Tabela z czterema kolumnami: prawdopodobieństwo prognozowane przez regresję logistyczną (0,7 dla wszystkich wierszy), wartość logiczna wskazująca, czy prawdopodobieństwo przekracza 0,5 (TRUE dla wszystkich), wartości imputowane na podstawie progu (1 dla wszystkich) oraz wartości imputowane losowane z rozkładu warunkowego (1 dla większości wierszy, 0 dla niektórych).

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

Imputacja regresją logistyczną

Zadanie: imputacja PhysActive z danych nhanes za pomocą regresji logistycznej.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
Obsługa brakujących danych z imputacją w R

Imputacja regresją logistyczną

Zadanie: imputacja PhysActive z danych nhanes za pomocą regresji logistycznej.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
Obsługa brakujących danych z imputacją w R

Imputacja regresją logistyczną

Zadanie: imputacja PhysActive z danych nhanes za pomocą regresji logistycznej.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
Obsługa brakujących danych z imputacją w R

Imputacja regresją logistyczną

Zadanie: imputacja PhysActive z danych nhanes za pomocą regresji logistycznej.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
Obsługa brakujących danych z imputacją w R

Imputacja regresją logistyczną

Zadanie: imputacja PhysActive z danych nhanes za pomocą regresji logistycznej.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Obsługa brakujących danych z imputacją w R

Imputacja regresją logistyczną

Zmienność imputowanych danych:

table(preds[missing_physactive])
 1 
26

Zmienność obserwowanych danych PhysActive:

table(nhanes$PhysActive)
  0   1 
181 610
Obsługa brakujących danych z imputacją w R

Losowanie z prawdopodobieństw klas

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Obsługa brakujących danych z imputacją w R

Losowanie z prawdopodobieństw klas

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")

nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Obsługa brakujących danych z imputacją w R

Losowanie z prawdopodobieństw klas

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- rbinom(length(preds), size = 1, prob = preds)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Obsługa brakujących danych z imputacją w R

Losowanie z prawdopodobieństw klas

Zmienność imputowanych danych:

table(preds[missing_physactive])
0  1 
5 21

Zmienność obserwowanych danych PhysActive:

table(nhanes$PhysActive)
  0   1 
181 610
Obsługa brakujących danych z imputacją w R

Czas na ćwiczenia dotyczące replikowania zmienności danych!

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

Preparing Video For Download...