Replicarea variabilității datelor

Gestionarea datelor lipsă prin imputare în R

Michal Oleszak

Machine Learning Engineer

Variabilitatea în datele imputate

Un grafic de margine, care este un grafic de dispersie „Height" vs „Weight", unde valorile imputate în oricare dintre cele două variabile sunt evidențiate cu culori diferite.

  • Nicio variabilitate în datele imputate.
  • Dorim ca imputarea să replice variabilitatea datelor observate.
  • În imputarea bazată pe model, aceleași valori ale predictorilor produc aceeași valoare imputată.
  • Soluție: eșantionare din distribuții condiționale.
Gestionarea datelor lipsă prin imputare în R

Ce este o predicție

Majoritatea modelelor statistice estimează distribuția condițională a variabilei răspuns:

$p(y|X)$

Pentru o predicție unică, distribuția condițională este rezumată:

  • Regresie liniară: valoarea așteptată a distribuției condiționale.
  • Regresie logistică: clasa cu probabilitatea cea mai mare.

În schimb, putem eșantiona din aceste distribuții pentru a crește variabilitatea.

Gestionarea datelor lipsă prin imputare în R

Eșantionare din distribuții condiționale

Un grafic care prezintă funcția densității de probabilitate a unei distribuții normale. Media de 25 este evidențiată.

Gestionarea datelor lipsă prin imputare în R

Eșantionare din distribuții condiționale

Un tabel cu patru coloane: probabilitatea de predicție din regresia logistică (0,7 pentru toate rândurile), un boolean care indică dacă această probabilitate este mai mare de 0,5 (TRUE pentru toate rândurile), valori imputate pe baza pragului (1 pentru toate rândurile) și valoarea imputată eșantionată din distribuția condițională (1 pentru majoritatea rândurilor, dar 0 pentru câteva.)

Gestionarea datelor lipsă prin imputare în R

Imputare prin regresie logistică

Sarcină: imputați PhysActive din datele nhanes cu regresie logistică.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
Gestionarea datelor lipsă prin imputare în R

Imputare prin regresie logistică

Sarcină: imputați PhysActive din datele nhanes cu regresie logistică.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
Gestionarea datelor lipsă prin imputare în R

Imputare prin regresie logistică

Sarcină: imputați PhysActive din datele nhanes cu regresie logistică.

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

Imputare prin regresie logistică

Sarcină: imputați PhysActive din datele nhanes cu regresie logistică.

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

Imputare prin regresie logistică

Sarcină: imputați PhysActive din datele nhanes cu regresie logistică.

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

Imputare prin regresie logistică

Variabilitatea datelor imputate:

table(preds[missing_physactive])
 1 
26

Variabilitatea datelor observate PhysActive:

table(nhanes$PhysActive)
  0   1 
181 610
Gestionarea datelor lipsă prin imputare în R

Eșantionare din probabilități de clasă

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

Eșantionare din probabilități de clasă

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

Eșantionare din probabilități de clasă

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

Eșantionare din probabilități de clasă

Variabilitatea datelor imputate:

table(preds[missing_physactive])
0  1 
5 21

Variabilitatea datelor observate PhysActive:

table(nhanes$PhysActive)
  0   1 
181 610
Gestionarea datelor lipsă prin imputare în R

Să exersăm replicarea variabilității datelor!

Gestionarea datelor lipsă prin imputare în R

Preparing Video For Download...