Abordagem de imputação baseada em modelo

Tratamento de Dados Ausentes com Imputações em R

Michal Oleszak

Machine Learning Engineer

Imputação baseada em modelo

  • Imputar cada variável com um modelo estatístico diferente.
  • Conseguir considerar relações conhecidas nos dados.
Tratamento de Dados Ausentes com Imputações em R

Procedimento de imputação baseada em modelo

  • Percorrer as variáveis.
  • Para cada variável, criar um modelo que a explique.
  • Usar o modelo para prever valores ausentes.
  • Iterar pelas variáveis imputando onde os dados eram originalmente ausentes.
Tratamento de Dados Ausentes com Imputações em R

Imputação baseada em modelo passo a passo

Um data frame com quatro variáveis (A, B, C e D) e cinco linhas, preenchido com dados fictícios. Duas variáveis (A e C) têm dois valores ausentes cada, todos em linhas diferentes.

Tratamento de Dados Ausentes com Imputações em R

Imputação baseada em modelo passo a passo

Um data frame com quatro variáveis (A, B, C e D) e cinco linhas, preenchido com dados fictícios. Os valores ausentes em A foram imputados.

  1. Prever valores ausentes em A.
Tratamento de Dados Ausentes com Imputações em R

Imputação baseada em modelo passo a passo

Um data frame com quatro variáveis (A, B, C e D) e cinco linhas, preenchido com dados fictícios. Valores ausentes em A e C foram imputados.

  1. Prever valores ausentes em A.
  2. Tratar dados imputados em A como observados e prever os ausentes em C.
Tratamento de Dados Ausentes com Imputações em R

Imputação baseada em modelo passo a passo

Um data frame com quatro variáveis (A, B, C e D) e cinco linhas, preenchido com dados fictícios. Os valores ausentes em C foram imputados.

  1. Prever valores ausentes em A.
  2. Tratar dados imputados em A como observados e prever os ausentes em C.
  3. Tratar dados imputados em C como observados e prever A novamente onde era originalmente ausente.
  4. Continuar até convergir.
Tratamento de Dados Ausentes com Imputações em R

Como escolher o modelo

O modelo para cada variável depende do seu tipo:

  • Variáveis contínuas — regressão linear
  • Variáveis binárias — regressão logística
  • Variáveis categóricas — regressão logística multinomial
  • Variáveis de contagem — regressão de Poisson
Tratamento de Dados Ausentes com Imputações em R

Imputação por regressão linear única

Imputar Height e Weight em nhanes com um modelo linear:

library(simputation)
nhanes_imp <- impute_lm(nhanes, Height + Weight ~ .)

Verificar se foram realmente imputados:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Tratamento de Dados Ausentes com Imputações em R

Imputação com regressão linear na prática

Inicializar valores ausentes com hotdeck e salvar as posições ausentes:

nhanes_imp <- hotdeck(nhanes)
missing_height <- nhanes_imp$Height_imp
missing_weight <- nhanes_imp$Weight_imp

Iterar sobre Height e Weight 5 vezes, imputando nas posições originalmente ausentes:

for (i in 1:5) {
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Weight ~ Age + Gender + Height)
}
Tratamento de Dados Ausentes com Imputações em R

Detectando convergência



for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Tratamento de Dados Ausentes com Imputações em R

Detectando convergência

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Tratamento de Dados Ausentes com Imputações em R

Detectando convergência

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Tratamento de Dados Ausentes com Imputações em R

Detectando convergência

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)
  diff_height <- c(diff_height, mapc(prev_iter$Height, nhanes_imp$Height))
  diff_weight <- c(diff_weight, mapc(prev_iter$Weight, nhanes_imp$Weight))
}
Tratamento de Dados Ausentes com Imputações em R

Detectando convergência

Um gráfico de linhas com duas séries, uma para as variáveis Pulse e TotChol. O eixo x mostra o número de iterações, e o eixo y mostra a variação percentual absoluta média nos valores imputados entre iterações. Após a primeira iteração, ambas mudam um pouco. Da iteração 2 em diante, não mudam mais.

Tratamento de Dados Ausentes com Imputações em R

Vamos praticar imputação por regressão linear!

Tratamento de Dados Ausentes com Imputações em R

Preparing Video For Download...