Replikera datavariabilitet

Hantering av saknade värden med imputering i R

Michal Oleszak

Machine Learning Engineer

Variabilitet i imputerade data

Ett marginaldiagram – ett spridningsdiagram över "Längd" mot "Vikt" – där imputerade värden i någon av de två variablerna är markerade i en annan färg.

  • Ingen variabilitet i imputerade data.
  • Vi vill att imputeringen ska replikera variabiliteten i observerade data.
  • Vid modellbaserad imputering ger samma prediktorvärden samma imputerade värde.
  • Lösning: dragning från villkorliga fördelningar.
Hantering av saknade värden med imputering i R

Vad är en prediktion

De flesta statistiska modeller skattar den villkorliga fördelningen för responsvariabeln:

$p(y|X)$

Vid en enskild prediktion sammanfattas den villkorliga fördelningen:

  • Linjär regression: väntevärdet för den villkorliga fördelningen.
  • Logistisk regression: klassen med högst sannolikhet.

I stället kan vi dra från dessa fördelningar för att öka variabiliteten.

Hantering av saknade värden med imputering i R

Dragning från villkorliga fördelningar

Ett diagram som visar en sannolikhetstäthetsfunktion för en normalfördelning. Medelvärdet 25 är markerat.

Hantering av saknade värden med imputering i R

Dragning från villkorliga fördelningar

En tabell med fyra kolumner: prediktionssannolikhet från logistisk regression (0,7 för alla rader), ett booleskt värde för om sannolikheten överstiger 0,5 (TRUE för alla rader), imputerade värden baserat på tröskel (1 för alla rader) och imputerade värden dragna från villkorlig fördelning (1 för de flesta rader, men 0 för några).

Hantering av saknade värden med imputering i R

Imputering med logistisk regression

Uppgift: imputera PhysActive från nhanes-data med logistisk regression.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
Hantering av saknade värden med imputering i R

Imputering med logistisk regression

Uppgift: imputera PhysActive från nhanes-data med logistisk regression.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
Hantering av saknade värden med imputering i R

Imputering med logistisk regression

Uppgift: imputera PhysActive från nhanes-data med logistisk regression.

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

Imputering med logistisk regression

Uppgift: imputera PhysActive från nhanes-data med logistisk regression.

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

Imputering med logistisk regression

Uppgift: imputera PhysActive från nhanes-data med logistisk regression.

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

Imputering med logistisk regression

Variabilitet i imputerade data:

table(preds[missing_physactive])
 1 
26

Variabilitet i observerade PhysActive-data:

table(nhanes$PhysActive)
  0   1 
181 610
Hantering av saknade värden med imputering i R

Dragning från klassprobabiliteter

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

Dragning från klassprobabiliteter

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

Dragning från klassprobabiliteter

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

Dragning från klassprobabiliteter

Variabilitet i imputerade data:

table(preds[missing_physactive])
0  1 
5 21

Variabilitet i observerade PhysActive-data:

table(nhanes$PhysActive)
  0   1 
181 610
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...