# Lista de pacotes necessários
pacotes <- c("tidyverse", "gt","dataMaid","validate", "VIM")
# Verifica se os pacotes estão instalados e instala se necessário
install.packages(setdiff(x = pacotes,
y = rownames(installed.packages())))
# Carrega os pacotes
lapply(X = pacotes,
FUN = library,
character.only = TRUE)
Introdução às Técnicas de Imputação
Compartilhando o código em R
Tutorial transformação digital nº 5
Este tutorial aborda técnicas de imputação e o pacote VIM que, além de utilizar métodos de visualização, possui métodos de imputação implementados para imputar valores ausentes e suspeitos.
Contato: transformacao.digital@fjp.mg.gov.br
1 Introdução
Imputação é formalmente definida como “um procedimento para criar um valor para um item específico num registro quando a resposta está ausente ou é inaceitável” (UNECE Glossary of Terms). Consiste em substituir um valor ausente ou rejeitado por um valor estimado viável, porém artificial. É um dos métodos usuais para lidar com não resposta parcial ou de itens em pesquisas. Em contrapartida, o método da reponderação é mais usado para não resposta total ou de unidades.
A imputação é aconselhável nas seguintes circunstâncias:
Os mecanismos causadores de erros são adequadamente reconhecidos e compreendidos;
Existem informações auxiliares disponíveis, com elevada capacidade de previsão, para todas as unidades da amostra, resultando em imputações que se aproximam dos valores reais;
Os padrões de não resposta são classificáveis como Missing Completely At Random (MCAR) ou Missing At Random (MAR), condições nas quais a imputação é mais viável. Por outro lado, a imputação pode ser desafiadora ou até inviável quando o padrão de não resposta segue a categoria Not Missing At Random (NMAR).
Entretanto, a imputação pode também resultar em:
Distorções nas distribuições das variáveis, alterando sua forma e intervalos naturais;
Alterações nas relações intervariáveis, afetando a correlação e a interdependência entre elas;
Incremento na complexidade do cálculo de variâncias, complicando a análise estatística.
Além disso, incorporar o erro devido à imputação na estimação de medidas de precisão ainda é tema de pesquisa e desenvolvimento.
Todo o material aqui apresentado foi baseado nas notas de aula de Crítica e Imputação (Silva 2020).
1.1 Classificações de imputação
A imputação pode ser realizada de forma manual ou automática.
Os métodos de imputação automática podem ser classificados
conforme a natureza do mecanismo de imputação:
Determinísticos;
Estocásticos.
e conforme o resultado da imputação:
Imputação de valor único;
Imputação múltipla.
2 Base de dados
Antes de iniciar o processo, é necessário carregar as bibliotecas necessárias. (Kowarik e Templ 2016; Loo e Jonge 2021; Petersen e Ekstrøm 2019)
2.1 Importação dos dados:
Os dados utilizados para a análise é da série do número de policiais presente na base de dados do IMRS.
Disponível em: base de dados
# Opção de vizualização
options(scipen = 999)
# Importar dados
base <- readRDS("imrs_completo.rds")
# Fazendo o report
makeDataReport(base[,c("P_PM","P_PM1","D_POPT")], replace = TRUE)2.2 Preparação dos dados
Vamos utilizar como exemplo o ano de 2014. O comando gt() pode ser usado para visualizar o conjunto de dados. Foram criadas duas variáveis para complementar a análise exploratória dos dados: diferença e fator.
base <- base %>%
select(
IBGE7,
Município,
ANO,
P_PM,
P_PM1,
D_POPT
) %>%
filter(ANO == 2013 | ANO == 2014) %>%
pivot_wider(id_cols = c(IBGE7,Município), names_from = ANO, values_from = c(D_POPT, P_PM, P_PM1)) %>% mutate(DIF_VAR_PM = P_PM1_2014-P_PM1_2013,
FAT_VAR_PM = (P_PM1_2014/P_PM1_2013))
base %>%
head(5) %>%
gt()| IBGE7 | Município | D_POPT_2013 | D_POPT_2014 | P_PM_2013 | P_PM_2014 | P_PM1_2013 | P_PM1_2014 | DIF_VAR_PM | FAT_VAR_PM |
|---|---|---|---|---|---|---|---|---|---|
| 3100104 | Abadia dos Dourados | 6892 | 6913 | 1117.33 | 957.71 | 6 | 7 | 1 | 1.1666667 |
| 3100203 | Abaeté | 23198 | 23224 | 756.33 | 782.41 | 30 | 29 | -1 | 0.9666667 |
| 3100302 | Abre Campo | 13554 | 13551 | 831.94 | 831.94 | 16 | 16 | 0 | 1.0000000 |
| 3100401 | Acaiaca | 4001 | 4003 | 1306.67 | 784.00 | 3 | 5 | 2 | 1.6666667 |
| 3100500 | Açucena | 10182 | 10087 | 1141.78 | 1468.00 | 9 | 7 | -2 | 0.7777778 |
# Fazendo outro report
makeDataReport(base, replace = TRUE)2.3 Crítica de dados
As regras de crítica consistem em expressões analíticas que, ao serem aplicadas aos dados, resultam em valores lógicos do tipo ‘verdadeiro’ ou ‘falso’. Essas regras identificam ocorrências de valores ausentes ou potencialmente incorretos, os quais são submetidos a um processo subsequente de avaliação, que pode ser interativo ou automatizado.
regras <- validator(
# Regras de tipo (T)
TI01 = is.numeric(P_PM1_2013),
TI01 = is.numeric(P_PM1_2014),
# Regras de validade (V)
VI01 = (P_PM1_2013>= 0),
VI01 = (P_PM1_2014>= 0),
# Regras de consistência (C)
CF01 = (P_PM1_2014/P_PM1_2013) <= 100,
CF02 = abs(P_PM1_2014-P_PM1_2013) <= 1000,
CF03 = (abs(P_PM1_2014-P_PM1_2013) <= 1000) & ((P_PM1_2014/P_PM1_2013) <= 100),
# Regras de distribuição (D)
DF01 = P_PM1_2013 >= 10,
DF01 = P_PM1_2014 >= 10
)
# Aplica regras de crítica aos dados
base_conf <- confront(base, regras)
# Obtém resumo da aplicação das regras aos dados
summary(base_conf) %>% gt()| name | items | passes | fails | nNA | error | warning | expression |
|---|---|---|---|---|---|---|---|
| TI01 | 1 | 1 | 0 | 0 | FALSE | FALSE | is.numeric(P_PM1_2013) |
| TI01.1 | 1 | 1 | 0 | 0 | FALSE | FALSE | is.numeric(P_PM1_2014) |
| VI01 | 853 | 853 | 0 | 0 | FALSE | FALSE | (P_PM1_2013 - 0 >= -0.00000001) |
| VI01.1 | 853 | 853 | 0 | 0 | FALSE | FALSE | (P_PM1_2014 - 0 >= -0.00000001) |
| CF01 | 853 | 851 | 2 | 0 | FALSE | FALSE | (P_PM1_2014/P_PM1_2013) <= 100 |
| CF02 | 853 | 846 | 7 | 0 | FALSE | FALSE | abs(P_PM1_2014 - P_PM1_2013) <= 1000 |
| CF03 | 853 | 846 | 7 | 0 | FALSE | FALSE | (abs(P_PM1_2014 - P_PM1_2013) <= 1000) & ((P_PM1_2014/P_PM1_2013) <= 100) |
| DF01 | 853 | 351 | 502 | 0 | FALSE | FALSE | P_PM1_2013 - 10 >= -0.00000001 |
| DF01.1 | 853 | 363 | 490 | 0 | FALSE | FALSE | P_PM1_2014 - 10 >= -0.00000001 |
# gráfico
plot(base_conf)Para fins ilustrativos, consideremos que os registros que não satisfazem a regra de consistência CF02 correspondem aos que necessitam de imputação de dados. Nessa situação específica, será implementada uma estratégia de imputação automática.
# Selecionando os casos
violating(base,base_conf[c("CF03")])# A tibble: 7 × 10
IBGE7 Município D_POPT_2013 D_POPT_2014 P_PM_2013 P_PM_2014 P_PM1_2013
<dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 3118601 Contagem 631104 636604 402. 345. 1502
2 3118700 Coqueiral 9388 9363 1161. 407. 8
3 3136652 Juatuba 23965 24430 822. 372. 27
4 3136702 Juiz de Fora 540079 544842 368. 514. 1404
5 3143302 Montes Claros 381751 386175 295. 1178. 1228
6 3143401 Monte Sião 22315 22556 1247. 288. 17
7 3170305 Umburatiba 2716 2703 676. 397. 4
# ℹ 3 more variables: P_PM1_2014 <dbl>, DIF_VAR_PM <dbl>, FAT_VAR_PM <dbl>
# Preparando os dados para imputação
base_edit <- base %>%
mutate(
P_PM1_2014 = if_else(abs(P_PM1_2014-P_PM1_2013) <= 1000,P_PM1_2014, NA_real_),
CLASS_TAM = case_when(D_POPT_2014>=1000000 ~ "1",
D_POPT_2014 < 1000000 & D_POPT_2014 >= 200000 ~ "2",
D_POPT_2014 < 200000 & D_POPT_2014 >= 100000 ~ "3",
D_POPT_2014 < 100000 & D_POPT_2014 >= 10000 ~ "4",
D_POPT_2014 < 10000 ~ "5")
)3 Técnicas de imputação
Conforme a abordagem que guia a imputação:
Baseada em regras;
Dedutiva;
Baseada em modelos (model-based);
Usando registros doadores (donor-based).
3.1 Imputação baseada em regras
Neste método, os valores a serem imputados são estabelecidos com base nos dados de outros campos disponíveis ou a partir dos próprios valores que foram inicialmente rejeitados e estão sujeitos à substituição. As regras operacionais adotam o formato de condicionais: SE (condição específica) ENTÃO (execute a ação de imputação). Para a definição precisa dessas regras, é essencial o conhecimento especializado na área temática correspondente.
Este método permite a detecção de erros e a imputação concomitante, o que o torna particularmente eficaz no manejo de erros sistemáticos cujas características são bem compreendidas.
A vantagem desse procedimento reside na sua simplicidade de execução, uma vez que os mecanismos de erro estejam claramente identificados e descritos. Além disso, ele possibilita uma recuperação eficiente dos ‘valores verdadeiros’ sempre que a origem do erro for corretamente diagnosticada.
Entretanto, as desvantagens incluem o risco de introdução de viés nas estimativas caso os mecanismos causadores de erro não sejam corretamente compreendidos. Ademais, a complexidade e a dificuldade de implementação podem aumentar significativamente à medida que o número de regras especificadas cresce.
3.2 Imputação dedutiva
Considerando os valores presentes em um registro e apoiando-se em relações matemáticas ou lógicas, pode-se identificar um subconjunto de valores que, após serem imputados, garantem que o registro atenda a todas as regras de crítica estabelecidas.
No caso em que apenas uma variável esteja com valor faltante, é possível inferir seu valor a partir das outras duas variáveis, seguindo uma equação de equilíbrio.
Com o uso de um software apropriado e um conjunto coerente de regras de crítica, este se revela como o método de imputação de menor custo. Ademais, ele é confiável, uma vez que as ações de imputação são fundamentadas em princípios lógicos e consistentes.
No entanto, a eficácia desse método depende diretamente da qualidade das regras de crítica implementadas. Ele é mais adequado para situações em que as regras de crítica são inflexíveis.
3.3 Imputação baseada em modelos
3.3.1 Por média ou moda
A concepção fundamental deste método é a imputação de valores faltantes utilizando um valor resumo, que é derivado dos dados disponíveis. Sugere-se que, para dados ausentes de variáveis numéricas contínuas, se impute o valor da média ponderada dos respondentes. Já para variáveis categóricas ou numéricas discretas, recomenda-se a imputação do valor modal, isto é, a categoria que ocorre com maior frequência.
Embora este método seja considerado um padrão de referência em diversos estudos comparativos, a sua aplicação prática é relativamente rara.
# Imputação por média - NÃO RECOMENDADO
imput_media <- base_edit %>%
mutate(
P_PM1_2014_imp = if_else(is.na(P_PM1_2014), T, F),
P_PM1_2014 = if_else(P_PM1_2014_imp, round(weighted.mean(P_PM1_2014, D_POPT_2014, na.rm = TRUE)), round(P_PM1_2014))
) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_media %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 1800 | TRUE |
| 3118700 | Coqueiral | 8 | 1800 | TRUE |
| 3136652 | Juatuba | 27 | 1800 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 1800 | TRUE |
| 3143302 | Montes Claros | 1228 | 1800 | TRUE |
| 3143401 | Monte Sião | 17 | 1800 | TRUE |
| 3170305 | Umburatiba | 4 | 1800 | TRUE |
3.3.2 Por média ou moda dentro de classes
É necessário definir classes e implementar o método de imputação supracitado dentro desses agrupamentos específicos. Estas classes devem ser estruturadas de modo que as médias dos respondentes e dos não respondentes dentro de cada classe sejam equivalentes. Algoritmos de segmentação podem ser empregados na formação destas classes de imputação, por exemplo, as árvores de regressão ou de classificação.
As vantagens desse método incluem sua relativa simplicidade e a utilização de informações já disponíveis, caracterizando-se como um método ‘determinístico’. Contudo, há desvantagens significativas, como a possibilidade de imputação de valores que não são observados nos dados, o que pode resultar na criação de picos artificiais e distorções nas distribuições dos dados. Além disso, pode haver um viés na estimativa de variâncias e uma atenuação nas medidas de associação entre as variáveis.
# Imputação por média dentro da classe
imput_media_classe <- base_edit %>%
mutate(
P_PM1_2014_imp = if_else(is.na(P_PM1_2014), T, F))
tabela_media <- imput_media_classe %>% group_by(CLASS_TAM) %>%
summarise(media_classe = round(weighted.mean(P_PM1_2014, D_POPT_2014, na.rm = TRUE)))
tabela_media %>% gt() | CLASS_TAM | media_classe |
|---|---|
| 1 | 12921 |
| 2 | 498 |
| 3 | 113 |
| 4 | 48 |
| 5 | 19 |
imput_media_classe <- imput_media_classe %>%
left_join(tabela_media) %>%
mutate(
P_PM1_2014 = if_else(P_PM1_2014_imp, media_classe, round(P_PM1_2014))
) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_media_classe %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 498 | TRUE |
| 3118700 | Coqueiral | 8 | 19 | TRUE |
| 3136652 | Juatuba | 27 | 48 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 498 | TRUE |
| 3143302 | Montes Claros | 1228 | 498 | TRUE |
| 3143401 | Monte Sião | 17 | 48 | TRUE |
| 3170305 | Umburatiba | 4 | 19 | TRUE |
3.3.3 Imputação por razão
A imputação de dados é realizada atribuindo-se à resposta do período atual (\(y_t\)) o valor da resposta do período anterior (\(y_{t-1}\)), ajustado por um fator de crescimento (\(R_t\)): \(y_{k,t} = R_t \times y_{k,t-1}\). Esse fator de crescimento é comumente calculado dentro de estratos de imputação específicos, utilizando informações de respondentes que disponibilizaram dados para ambos os períodos considerados.
Por exemplo, pode-se empregar a razão entre o valor da variável no período atual e o valor da mesma variável no período anterior como uma técnica de imputação.
# Imputação por razão = População 2022 / P_PM 2021
imput_razao <- base_edit %>%
mutate(
P_PM1_2014_imp = if_else(is.na(P_PM1_2014), T, F),
P_PM1_2014 = if_else(P_PM1_2014_imp, round(D_POPT_2014 / P_PM_2013), round(P_PM1_2014))
) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_razao %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 1585 | TRUE |
| 3118700 | Coqueiral | 8 | 8 | TRUE |
| 3136652 | Juatuba | 27 | 30 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 1482 | TRUE |
| 3143302 | Montes Claros | 1228 | 1310 | TRUE |
| 3143401 | Monte Sião | 17 | 18 | TRUE |
| 3170305 | Umburatiba | 4 | 4 | TRUE |
3.3.4 Imputação por regressão
Por exemplo, pode-se imputar as despesas com pessoal utilizando como variáveis a receita e o total de pessoal ocupado, coletados na mesma etapa da pesquisa. A imputação baseada em regressão é tipicamente realizada dentro de estratos ou classes de imputação, que são conjuntos de registros organizados de forma a minimizar o viés nas estimativas resultantes.
O processo inicia-se com o ajuste de um modelo de regressão do tipo \(y_k = x_k' \beta + \epsilon\_k\) aos dados fornecidos pelos respondentes, onde \(y\) é a variável com valores faltantes e \(x\) é um vetor que contém as variáveis preditoras, as quais são conhecidas para todas as observações na amostra. Os valores faltantes de \(y\) são então imputados utilizando os valores preditos pelo modelo.
Este método é relativamente simples de ser aplicado, contanto que se disponha de um software apropriado. Se os modelos forem adequadamente especificados e possuírem uma forte capacidade preditiva dos valores ausentes ou rejeitados, os resultados podem ser muito satisfatórios. Contudo, a especificação e o ajuste do(s) modelo(s) podem exigir um investimento considerável de tempo.
3.4 Imputação por Registros Doadores
Os valores a serem imputados são extraídos de registros que são considerados completos e ‘limpos’, ou seja, registros que não apresentam falhas segundo as regras de crítica estabelecidas. Os métodos conhecidos como hot-deck representam um exemplo específico dessa técnica. Existem duas abordagens alternativas para a seleção de registros doadores:
Seleção Aleatória: Essa abordagem é comumente preferida em métodos de imputação que operam dentro de classes ou estratos previamente definidos.
Vizinho Mais Próximo: Essa técnica seleciona registros que apresentam a menor distância em relação ao registro receptor, considerando as variáveis preditoras.
Ambas as estratégias têm como objetivo a escolha de valores apropriados para a imputação, visando preservar a integridade e a fidedignidade do conjunto de dados.
3.4.1 Imputação Aleatória por Registro Doador (Hot-Deck)
A premissa central deste método reside na utilização de dados provenientes de respondentes (denominados registros doadores) para preencher lacunas nos conjuntos de dados que estão incompletos (referidos como registros receptores). A seleção dos registros doadores ocorre através de um processo de sorteio aleatório. Esta técnica possui diversas variantes, que podem abarcar:
- Diferentes procedimentos para a seleção dos registros doadores, que podem ser realizada de forma global ou dentro de classes específicas, e com probabilidades iguais ou desiguais de seleção.
- A possibilidade de usar o mesmo registro doador mais de uma vez ou restrito a um único uso.
- A imputação pode ser feita individualmente para cada campo faltante ou, alternativamente, pode-se imputar vários campos com base em um único registro doador.
Este método emergiu na década de 1960 sob a designação de Hot-deck e tem sido adaptado e refinado ao longo do tempo para atender a diferentes contextos e necessidades de análise de dados.
# Hot-deck - Doador aleatório
imput_hotdeck_ale <- base_edit %>%
hotdeck(variable = "P_PM1_2014",
ord_var = "IBGE7",
domain_var = c("CLASS_TAM")) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_hotdeck_ale %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 573 | TRUE |
| 3118700 | Coqueiral | 8 | 34 | TRUE |
| 3136652 | Juatuba | 27 | 7 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 603 | TRUE |
| 3143302 | Montes Claros | 1228 | 603 | TRUE |
| 3143401 | Monte Sião | 17 | 24 | TRUE |
| 3170305 | Umburatiba | 4 | 16 | TRUE |
# Hot-deck - Doador aleatório após ordenação por população
imput_hotdeck_ord_pop <- base_edit %>%
hotdeck(variable = "P_PM1_2014",
ord_var = "D_POPT_2014",
domain_var = c("CLASS_TAM")) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_hotdeck_ord_pop %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 573 | TRUE |
| 3118700 | Coqueiral | 8 | 9 | TRUE |
| 3136652 | Juatuba | 27 | 16 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 573 | TRUE |
| 3143302 | Montes Claros | 1228 | 455 | TRUE |
| 3143401 | Monte Sião | 17 | 52 | TRUE |
| 3170305 | Umburatiba | 4 | 7 | TRUE |
3.4.2 Registro Doador Vizinho Mais Próximo
Na técnica de imputação conhecida como “registro doador de vizinho mais próximo”, um registro doador é escolhido com base na sua semelhança ou proximidade com o registro receptor, que é o não respondente.
Normalmente, calcula-se uma função de distância entre o registro não respondente e os potenciais doadores. O registro doador selecionado é aquele que apresenta o menor valor na função de distância, sendo assim identificado como o “vizinho mais próximo”.
Quanto à classificação dos algoritmos utilizados neste processo, eles podem ser divididos em dois tipos: não supervisionados e supervisionados. Os algoritmos não supervisionados incluem aqueles baseados no modelo de decisão de Fellegi-Sunter, que pode empregar o algoritmo EM para estimativa de parâmetros, além de métodos como K-Means, e Bclust, que é uma forma de agrupamento embolsado. Por outro lado, os algoritmos supervisionados envolvem Rpart, que utiliza a técnica de partição recursiva; Bagging, que é uma agregação de bootstrap; Bumping, que se refere à sombrinha de parâmetros de modelo de bootstrap; ADA, que é um método de boosting adaptativo; SVM, que se baseia em máquinas de vetores de suporte; e Nnet, que é relacionado a redes neurais.
# Knn padrão (k = 5)
imput_knn_pad <- base_edit %>%
kNN(variable = "P_PM1_2014",
dist_var = c("D_POPT_2014","P_PM1_2013"),
k = 5 ) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_knn_pad %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 573 | TRUE |
| 3118700 | Coqueiral | 8 | 9 | TRUE |
| 3136652 | Juatuba | 27 | 22 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 573 | TRUE |
| 3143302 | Montes Claros | 1228 | 573 | TRUE |
| 3143401 | Monte Sião | 17 | 20 | TRUE |
| 3170305 | Umburatiba | 4 | 5 | TRUE |
# Knn ponderado - Maior peso para os vizinhos mais próximos
# Dado os k vizinhos, aqueles mais próximos têm maior peso ao agregar os resultados
imput_knn_pond <- base_edit %>%
kNN(variable = "P_PM1_2014",
dist_var = c("D_POPT_2014","P_PM1_2013"),
k = 5,
numFun = weighted.mean,
weightDist = T ) %>%
select(
IBGE7,
Município,
P_PM1_2013,
P_PM1_2014,
P_PM1_2014_imp
)
imput_knn_pond %>% filter(P_PM1_2014_imp == TRUE) %>% gt()| IBGE7 | Município | P_PM1_2013 | P_PM1_2014 | P_PM1_2014_imp |
|---|---|---|---|---|
| 3118601 | Contagem | 1502 | 557.122047 | TRUE |
| 3118700 | Coqueiral | 8 | 56.599515 | TRUE |
| 3136652 | Juatuba | 27 | 19.400169 | TRUE |
| 3136702 | Juiz de Fora | 1404 | 556.316145 | TRUE |
| 3143302 | Montes Claros | 1228 | 549.057319 | TRUE |
| 3143401 | Monte Sião | 17 | 46.198687 | TRUE |
| 3170305 | Umburatiba | 4 | 5.199993 | TRUE |
3.5 Visualização os resultados
A tabela a seguir apresenta os resultados imputados dos diferentes métodos aqui apresentados.
tab <- left_join(imput_media %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014) ,
imput_media_classe %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014),by=c("Município")) %>%
left_join(imput_razao %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014),by=c("Município")) %>%
left_join(imput_hotdeck_ale %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014),by=c("Município")) %>%
left_join(imput_hotdeck_ord_pop %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014),by=c("Município")) %>%
left_join(imput_knn_pad %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014),by=c("Município")) %>%
left_join(imput_knn_pond %>% filter(P_PM1_2014_imp == TRUE) %>% select(Município, P_PM1_2014),by=c("Município"))
colnames(tab) <- c("Município","Média","Média_classe","Razão","Hot Deck_aleat","Hot Deck_ord_pop","KNN_pad","KNN_pond")
tab %>% gt()| Município | Média | Média_classe | Razão | Hot Deck_aleat | Hot Deck_ord_pop | KNN_pad | KNN_pond |
|---|---|---|---|---|---|---|---|
| Contagem | 1800 | 498 | 1585 | 573 | 573 | 573 | 557.122047 |
| Coqueiral | 1800 | 19 | 8 | 34 | 9 | 9 | 56.599515 |
| Juatuba | 1800 | 48 | 30 | 7 | 16 | 22 | 19.400169 |
| Juiz de Fora | 1800 | 498 | 1482 | 603 | 573 | 573 | 556.316145 |
| Montes Claros | 1800 | 498 | 1310 | 603 | 455 | 573 | 549.057319 |
| Monte Sião | 1800 | 48 | 18 | 24 | 52 | 20 | 46.198687 |
| Umburatiba | 1800 | 19 | 4 | 16 | 7 | 5 | 5.199993 |
4 Imputação: Precauções Essenciais
Considere a imputação como uma apólice de seguro: é essencial possuí-la, mas idealmente, não se quer recorrer a ela. É crucial adotar práticas reprodutíveis e manter registros dos dados antes e após a imputação. Na eventualidade de divulgar conjuntos de microdados, é importante incluir indicativos que denotem quais valores foram imputados. O monitoramento cuidadoso do processo de imputação é imperativo para garantir que seu impacto nas estimativas e nos dados permaneça dentro dos limites aceitáveis. Não se esqueça também de considerar os efeitos da imputação no cálculo das variâncias.
5 Citação
Souza, Igor; Gonçalves, C. Introdução às Técnicas de Imputação. Tutorial Transformação Digital. Fundação João Pinheiro, n. 5, 2023. Disponível em: https://rpubs.com/fjp/imputacao.