La imputación es el proceso conversión de los datos faltantes en datos simulados, de manera de intentar no interferir o minimizar de la mejor forma la incidencia en el resultado esperado.
El proceso de imputación genera uno o más versiones de los datos imputados (“simulados”) basado en la cantidad de iteraciones especificadas. Cada iteración genera una versión de los datos que deben ser analizadas y estimadas según el interés sobre los datos. Finalmente, la totalidad de estimaciones iteradas son agrupados en un solo conjunto que permita la validación de ese dato imputado en relación al conjunto de datos totales.
El modelo de imputación kNN parte de la librería vim (Kowarik and Templ 2016) es la del k-esimo vecino más cercano. Establece el valor faltante sobre la media de todos los valores situados a k-distancias de la celda que contiene el faltante. Utiliza una distancia euclideana para determinar el valor faltante.
Esto funciona para valores numéricos exclusivamente. Por tanto las variables de tipo texto deben ser modificadas a un valor binario. Se utiliza para variables numéricas, categóricas y semicontinuas.
Cuando se utiliza KNN, hay que tener en cuenta muchos parámetros. A continuación algunos:
kNN se basa en la distancia euclideana, que es un número positivo que establece la separación entre dos puntos en un espacio que cumple la geometría de Euclides. Esto es que esta distancia es el largo de un vector AB que corresponde a una recta que pasa por los puntos A y B.
Los espacios euclídeos son de 1 o más dimensiones y poseen planos y rectas.
\[d(A,B) = \sqrt{(X*B - X*A)^2}\]
El uso de las medidas al cuadrado garantiza qu siempre sean valores positivos y que la distancia sea igual entre A y B que entre B y A.
# carga de library VIM para obtener función kNN
library(VIM)
Estableciendo inicialmente donde se encuentran las variables con valores faltantes usando summary.
summary(airquality)
Lo que muestra que Ozone tiene 37 valores ausentes y Solar.R posee 7 valores ausentes. con kNN estableceremos nuevos valores imputados para esas variables.
<- kNN(airquality, variable = c("Ozone", "Solar.R"), k = 6)
newdata summary(newdata)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 19.00 1st Qu.:115.0 1st Qu.: 7.400 1st Qu.:72.00
## Median : 32.00 Median :203.0 Median : 9.700 Median :79.00
## Mean : 41.12 Mean :185.3 Mean : 9.958 Mean :77.88
## 3rd Qu.: 59.00 3rd Qu.:259.0 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## Month Day Ozone_imp Solar.R_imp
## Min. :5.000 Min. : 1.0 Mode :logical Mode :logical
## 1st Qu.:6.000 1st Qu.: 8.0 FALSE:116 FALSE:146
## Median :7.000 Median :16.0 TRUE :37 TRUE :7
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
Ahora no se ven valores NA en las columnas Ozone y Solar.R .
Mice (Multivariate Imputation by Chained Equations) (van Buuren and Groothuis-Oudshoorn 2011) es una librería que ofrece una serie de funciones orientadas a la visualización e imputación de datos perdidos. Crea múltiples imputaciones para datos multivariados, donde cada variable puede ser imputada con un modelo estadístico particular.
library("mice")
marginplot(airquality[c("Ozone","Solar.R")])
Los puntos en azul indican valores existentes y en rojo los registros con valores ausentes. La interpretación de este gráfico es como sigue:
Si se asume que la pérdida de datos es completamente aleatoria (MCAR), los boxplot debiesen ser similares en su distribución en los valores ausente como en los observados.
Una medida rápida y eficiente es el reemplazo de los valores perdidos por la media de estos. Cuando se trate de datos categóricos se utilizará la moda. Este método va variar la distribución de los datos ya que altera los valores previos.
<- mice(airquality[c("Ozone","Solar.R")], m = 3, maxit = 10, print = FALSE) imputacion
summary(imputacion)
## Class: mids
## Number of multiple imputations: 3
## Imputation methods:
## Ozone Solar.R
## "pmm" "pmm"
## PredictorMatrix:
## Ozone Solar.R
## Ozone 0 1
## Solar.R 1 0
La función utiliza por defecto “pmm” (Predictive Mean Matching) y en variables categóricas “polyreg” (Multinomial Logistic Regression) para el cálculo de los valores imputados.
Para más información vea la documentación de “mice.”
# primera matriz completada con los datos imputados
complete(imputacion) # opcional m = 1 ó n
# muestra datos observados e imputados en cada iteración (3 en el ejemplo)
stripplot(imputacion, pch = 20 )
Es bastante simple aplicar algunas de las metodologías disponibles de imputación, sin embargo evaluar cuál es la más eficaz en cada caso es ya más complejo.
El proceso completo de imputación implica realizar la imputación, estimar los parámetros y el agrupamiento (“pooling”) de los resultados. Sin embargo el proceso de estimación de los parámetros puede o debería implicar una serie de etapas, a saber:
Pasos principales en el proceso de imputación múltiple. (Buuren 2018)