Variabiliteit van geïmputeerde data

Omgaan met missende data met imputaties in R

Michal Oleszak

Machine Learning Engineer

Variatie in geïmputeerde data

Een margin-plot: een scatterplot van "Height" vs. "Weight" waarin waarden die in een van beide variabelen zijn geïmputeerd, anders zijn gemarkeerd.

  • Geen variatie in geïmputeerde data.
  • We willen dat imputatie de variatie van geobserveerde data nabootst.
  • Bij modelgebaseerde imputatie geven dezelfde voorspellers dezelfde imputatie.
  • Oplossing: trekken uit conditionele verdelingen.
Omgaan met missende data met imputaties in R

Wat is een voorspelling

De meeste statistische modellen schatten de conditionele verdeling van de respons:

$p(y|X)$

Voor één voorspelling vat je die verdeling samen:

  • Lineaire regressie: verwachte waarde van de conditionele verdeling.
  • Logistische regressie: klasse met de hoogste kans.

In plaats daarvan kun je uit deze verdelingen trekken om de variatie te vergroten.

Omgaan met missende data met imputaties in R

Trekkingen uit conditionele verdelingen

Een grafiek met een dichtheidsfunctie van een normale verdeling. Het gemiddelde van 25 is gemarkeerd.

Omgaan met missende data met imputaties in R

Trekkingen uit conditionele verdelingen

Een tabel met vier kolommen: voorspelde kans uit logistische regressie (0,7 voor alle rijen), een boolean of deze kans > 0,5 (TRUE voor alle rijen), geïmputeerde waarden op basis van drempel (1 voor alle rijen) en geïmputeerde waarde getrokken uit de conditionele verdeling (meestal 1, soms 0).

Omgaan met missende data met imputaties in R

Imputatie met logistische regressie

Taak: imputeer PhysActive uit nhanes met logistische regressie.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
Omgaan met missende data met imputaties in R

Imputatie met logistische regressie

Taak: imputeer PhysActive uit nhanes met logistische regressie.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
Omgaan met missende data met imputaties in R

Imputatie met logistische regressie

Taak: imputeer PhysActive uit nhanes met logistische regressie.

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

Imputatie met logistische regressie

Taak: imputeer PhysActive uit nhanes met logistische regressie.

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

Imputatie met logistische regressie

Taak: imputeer PhysActive uit nhanes met logistische regressie.

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

Imputatie met logistische regressie

Variatie van geïmputeerde data:

table(preds[missing_physactive])
 1 
26

Variatie van geobserveerde PhysActive-data:

table(nhanes$PhysActive)
  0   1 
181 610
Omgaan met missende data met imputaties in R

Trekken uit klassekansen

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

Trekken uit klassekansen

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

Trekken uit klassekansen

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

Trekken uit klassekansen

Variatie van geïmputeerde data:

table(preds[missing_physactive])
0  1 
5 21

Variatie van geobserveerde PhysActive-data:

table(nhanes$PhysActive)
  0   1 
181 610
Omgaan met missende data met imputaties in R

Laten we data­variatie nabootsen oefenen!

Omgaan met missende data met imputaties in R

Preparing Video For Download...