Replicando a variabilidade dos dados

Tratamento de Dados Ausentes com Imputações em R

Michal Oleszak

Machine Learning Engineer

Variabilidade em dados imputados

Um gráfico de margens, que é um diagrama de dispersão de "Height" vs "Weight", onde valores imputados em qualquer uma das duas variáveis são destacados em outra cor.

  • Sem variabilidade nos dados imputados.
  • Queremos que a imputação replique a variabilidade dos dados observados.
  • Em imputação baseada em modelo, os mesmos preditores geram o mesmo valor imputado.
  • Solução: amostrar de distribuições condicionais.
Tratamento de Dados Ausentes com Imputações em R

O que é uma predição

A maioria dos modelos estatísticos estima a distribuição condicional da variável resposta:

$p(y|X)$

Para fazer uma única predição, resumimos a distribuição condicional:

  • Regressão linear: valor esperado da distribuição condicional.
  • Regressão logística: classe com maior probabilidade.

Em vez disso, podemos amostrar dessas distribuições para aumentar a variabilidade.

Tratamento de Dados Ausentes com Imputações em R

Amostrando de distribuições condicionais

Um gráfico mostrando a função densidade de probabilidade de uma distribuição normal. A média de 25 está destacada.

Tratamento de Dados Ausentes com Imputações em R

Amostrando de distribuições condicionais

Uma tabela com quatro colunas: probabilidade prevista da regressão logística (0,7 em todas as linhas), um booleano indicando se essa probabilidade é maior que 0,5 (TRUE em todas), valores imputados por limiar (1 em todas) e valor imputado amostrado da distribuição condicional (1 na maioria, mas 0 em algumas).

Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão logística

Tarefa: imputar PhysActive dos dados nhanes com regressão logística.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão logística

Tarefa: imputar PhysActive dos dados nhanes com regressão logística.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão logística

Tarefa: imputar PhysActive dos dados nhanes com regressão logística.

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")
Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão logística

Tarefa: imputar PhysActive dos dados nhanes com regressão logística.

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)
Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão logística

Tarefa: imputar PhysActive dos dados nhanes com regressão logística.

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]
Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão logística

Variabilidade dos dados imputados:

table(preds[missing_physactive])
 1 
26

Variabilidade dos dados PhysActive observados:

table(nhanes$PhysActive)
  0   1 
181 610
Tratamento de Dados Ausentes com Imputações em R

Amostrando a partir das probabilidades de classe

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]
Tratamento de Dados Ausentes com Imputações em R

Amostrando a partir das probabilidades de classe

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]
Tratamento de Dados Ausentes com Imputações em R

Amostrando a partir das probabilidades de classe

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]
Tratamento de Dados Ausentes com Imputações em R

Amostrando a partir das probabilidades de classe

Variabilidade dos dados imputados:

table(preds[missing_physactive])
0  1 
5 21

Variabilidade dos dados PhysActive observados:

table(nhanes$PhysActive)
  0   1 
181 610
Tratamento de Dados Ausentes com Imputações em R

Vamos praticar replicar a variabilidade dos dados!

Tratamento de Dados Ausentes com Imputações em R

Preparing Video For Download...