Los datos faltantes son observaciones sobre las cuales se posee la inexistencia de determinada información en las variables de un conjunto de datos. La existencia de los valores perdidos suele generar dudas acerca de la calidad del conjunto de datos, aumenta la probabilidad de cometer errores tipo I y II, reduce la potencia estadística y limita la fiabilidad de los intervalos de confianza (Striner,2002).
En la práctica la forma más general de explicar el comportamiento de los datos faltantes suele ser asociada con el comportamiento de la realización de encuestas, en el caso las personas invitadas a participar no deseen responder pueden considerarse como datos perdidos provocando una tasa de repuesta pobre que no permite proceder con los análisis. Sin embargo, cuando los participantes omiten las respuestas a los ítems dentro de un conjunto de datos, hay una serie de procedimientos estadísticos disponibles para que los investigadores reemplacen, o imputen, los valores faltantes con estimaciones razonables (Van Buuren,2018).
Se han desarrollado diversas formas de imputación de datos que parten de premisas tan simples como ignorarlas hasta las más sofisticadas que implementan técnicas estadísticas y de machine learning (ML), no obstante, en general no existe un modelo de imputación que sea el más recomendado, si no que depende netamente del caso de aplicación y con la finalidad de evitar el sesgo estadístico cuando se realiza el análisis.
Introduciendo el concepto de mecanismo de ausencia como la causa de la existencia de valores faltante, la mayoría de métodos de imputación de datos exigen que la ocurrencia de valores perdidos pueda explicarse como algo al azar o debido a los valores observados en otras variables, proporcionando información acerca de los datos faltantes y la aleatoriedad de la falta (schafer Y Graham,2002).
Se han propuesto diversas formas de tratar con datos faltantes, considerando técnicas que pueden considerarse básicas hasta aquellas que pueden considerarse complejas por lo sofisticados que pueden ser los conceptos que emplean en la imputación de datos. A continuación, se muestran algunas de estas técnicas.
El conjunto de datos de iris da las medidas en centímetros de las variables longitud y anchura de los sépalos y longitud y anchura de los pétalos, respectivamente, para 50 flores de cada una de las 3 especies de iris. Las especies son Iris setosa, versicolor y virginica.
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Introducimos valores faltantes a los datos.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## Min. :4.30 Min. :2.000 Min. :1.100 Min. :0.100 setosa :45
## 1st Qu.:5.10 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
## Median :5.80 Median :3.000 Median :4.450 Median :1.300 virginica :47
## Mean :5.83 Mean :3.045 Mean :3.809 Mean :1.184 NA's : 8
## 3rd Qu.:6.40 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.90 Max. :4.400 Max. :6.900 Max. :2.500
## NA's :22 NA's :20 NA's :10 NA's :15
Calculamos el porcentaje de datos perdidos para columnas y para filas.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 14.67 13.33 6.67 10.00 5.33
## [1] 20 40 0 20 0 0 0 0 0 0 0 0 20 0 20 20 0 20 20 20 0 0 40 0 0
## [26] 0 20 40 20 20 0 20 0 0 0 40 20 40 0 20 0 0 20 0 0 0 0 0 20 0
## [51] 20 0 0 0 0 0 0 20 0 20 20 20 0 0 20 20 0 0 0 0 20 20 0 40 20
## [76] 0 0 0 0 20 0 20 0 0 0 0 0 0 0 20 0 20 0 20 0 40 0 20 0 0
## [101] 0 0 0 0 0 20 0 0 20 0 20 0 20 0 0 0 20 0 40 0 40 20 20 0 20
## [126] 40 0 20 0 0 20 0 0 20 0 40 0 20 0 20 0 0 0 40 40 20 0 20 20 20
Consiste en considerar únicamente las observaciones que poseen todos sus campos completos, es decir se ignoran los valores faltantes. En la práctica el empleo de esta técnica no es recomendable a menos que se tenga una proporción de valores perdidos muy pequeña (menor al 5%).
## [1] 150 5
## [1] 88 5
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 0 0 0 0 0
Consiste en permitir que el algoritmo que se emplea maneje los datos faltantes, puede que dentro de su funcionamiento tenga implementado un método de imputación, puede omitir los datos faltantes o enviar un mensaje de error dado que no puede realizar la operación requerida.
#seleccionemos únicamente los datos numéricos por cuestiones de explicación
do2<-do %>% select(-Species)
df2<-df %>% select(-Species)
#calculemos diferentes medidas
#media
apply(do2,2,mean)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## NA NA NA NA
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.830469 3.044615 3.808571 1.183704
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 0.6856935 0.1899794 3.1162779 0.5810063
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 0.6969384 0.2060561 3.1331634 0.5727175
Consiste en la deducción de los valores faltantes a partir de la información disponible, en general su uso es recomendable cuando se tienen una cantidad pequeña de datos faltantes. Por ejemplo, cuando se posee la fecha de nacimiento y existen observaciones faltantes en la variable edad.
Consiste en el reemplazo de los valores faltantes por los valores de la media, mediana o moda, en general es el de uso más común por su facilidad de implementación, no es recomendable puesto que reduce la variabilidad de los datos debido a que se introduce la misma cantidad para una gran cantidad de observaciones. Nunca debe ser usada con datos MNAR.
df2$Sepal.Length[is.na(df2$Sepal.Length)]<-mean(df2$Sepal.Length,na.rm = T)
df2$Sepal.Width[is.na(df2$Sepal.Width)]<-median(df2$Sepal.Width,na.rm = T)
library(modeest)
df2$Petal.Length[is.na(df2$Petal.Length)]<-mfv(df2$Petal.Length[!is.na(df2$Petal.Length)])
df2$Petal.Width[is.na(df2$Petal.Width)]<-mean(df2$Petal.Width)
library(gridExtra)
p1<-ggplot()+
geom_histogram(data=do2,aes(x=Sepal.Length),color="#1F618D", fill="#5DADE2")+
geom_histogram(data=df2,aes(x=Sepal.Length),color="#D35400", fill="NA")+theme_classic()+
ggtitle("Media")
p2<-ggplot()+
geom_histogram(data=do2,aes(x=Sepal.Width),color="#1F618D", fill="#5DADE2")+
geom_histogram(data=df2,aes(x=Sepal.Width),color="#D35400", fill="NA")+theme_classic()+
ggtitle("Mediana")
p3<-ggplot()+
geom_histogram(data=do2,aes(x=Petal.Length),color="#1F618D", fill="#5DADE2")+
geom_histogram(data=df2,aes(x=Petal.Length),color="#D35400", fill="NA")+theme_classic()+
ggtitle("Moda")
p4<-ggplot()+
geom_histogram(data=do2,aes(x=Petal.Width),color="#1F618D", fill="#5DADE2")+
geom_histogram(data=df2,aes(x=Petal.Width),color="#D35400", fill="NA")+theme_classic()+
ggtitle("Media")
La imputación multiple consiste en la creación de varios conjuntos de datos imputados plausibles diferentes y la combinación adecuada de los resultados obtenidos de cada uno de ellos. Estos se muestrean a partir de su distribución predictiva basada en los datos observados; por lo tanto, la imputación múltiple se basa en un enfoque bayesiano. El procedimiento de imputación debe tener plenamente en cuenta toda la incertidumbre al predecir los valores faltantes inyectando la variabilidad adecuada en los múltiples valores imputados; nunca podremos conocer los verdaderos valores de los datos faltantes.
La segunda etapa consiste en utilizar métodos estadísticos estándar para ajustar el modelo de interés a cada uno de los conjuntos de datos imputados. Las asociaciones estimadas en cada uno de los conjuntos de datos imputados diferirán debido a la variación introducida en la imputación de los valores faltantes, y solo son útiles cuando se promedian juntos para dar asociaciones estimadas generales. Los errores estándar se calculan utilizando las reglas de Rubin (1976) que tienen en cuenta la variabilidad de los resultados entre los conjuntos de datos imputados, lo que refleja la incertidumbre asociada con los valores perdidos. Se obtienen inferencias válidas porque estamos promediando la distribución de los datos faltantes dados los datos observados.
El paquete mice de R, posee un conjunto de técnicas que permiten imputar valores perdidos con valores de datos plausibles. Estos valores plausibles se extraen de una distribución diseñada específicamente para cada punto de datos que falta. Con la finalidad de poder resumir de forma intuitiva los hallazgos en cuanto a datos perdidos se hará uso de la biblioteca nombrada anteriormente junto con la biblioteca VIM .
library(VIM)
aggr(df, col=c('#1A5276','#7B241C'), numbers=TRUE, sortVars=TRUE, labels=names(df), cex.axis=.7, gap=3, ylab=c("Histograma de datos perdidos","Comportamiento"))
##
## Variables sorted by number of missings:
## Variable Count
## Sepal.Length 0.14666667
## Sepal.Width 0.13333333
## Petal.Width 0.10000000
## Petal.Length 0.06666667
## Species 0.05333333
Los métodos implementados dentro del paquete son los siguiente:
## [1] mice.impute.2l.bin mice.impute.2l.lmer mice.impute.2l.norm
## [4] mice.impute.2l.pan mice.impute.2lonly.mean mice.impute.2lonly.norm
## [7] mice.impute.2lonly.pmm mice.impute.cart mice.impute.jomoImpute
## [10] mice.impute.lda mice.impute.logreg mice.impute.logreg.boot
## [13] mice.impute.mean mice.impute.midastouch mice.impute.mnar.logreg
## [16] mice.impute.mnar.norm mice.impute.norm mice.impute.norm.boot
## [19] mice.impute.norm.nob mice.impute.norm.predict mice.impute.panImpute
## [22] mice.impute.passive mice.impute.pmm mice.impute.polr
## [25] mice.impute.polyreg mice.impute.quadratic mice.impute.rf
## [28] mice.impute.ri mice.impute.sample mice.mids
## [31] mice.theme
## see '?methods' for accessing help and source code
PMM implica seleccionar un punto de datos de los datos originales que no faltan, que tienen un valor predicho cercano al valor predicho de la muestra faltante. Los valores N más cercanos se eligen como candidatos, de los cuales se elige un valor al azar. Como se muestra en la siguiente figura:
## Class: mids
## Number of multiple imputations: 5
## Imputation methods:
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## "pmm" "pmm" "pmm" "pmm" "pmm"
## PredictorMatrix:
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## Sepal.Length 0 1 1 1 1
## Sepal.Width 1 0 1 1 1
## Petal.Length 1 1 0 1 1
## Petal.Width 1 1 1 0 1
## Species 1 1 1 1 0
Para observar los datos imputados:
## 1 2 3 4 5
## 2 4.9 4.4 4.8 5.1 5.4
## 4 4.7 4.6 4.7 4.8 5.0
## 15 5.0 4.8 4.8 5.0 5.3
## 28 5.0 5.4 5.0 5.0 4.9
## 30 5.1 5.1 4.8 5.0 5.0
## 37 4.9 5.1 5.0 5.0 5.0
## 60 5.8 5.1 4.9 5.8 5.8
## 65 5.7 5.1 5.1 5.5 5.7
## 71 6.4 6.4 6.7 6.7 6.0
## 72 6.3 5.5 6.3 5.6 6.2
## 74 6.7 6.4 6.4 6.7 6.3
## 82 5.7 5.7 5.5 5.5 5.5
## 96 6.3 6.4 6.1 6.3 6.0
## 109 6.0 6.4 6.7 6.9 6.7
## 111 6.3 6.2 6.0 6.7 6.8
## 121 7.2 6.5 6.4 7.1 6.9
## 122 6.0 5.7 5.6 6.3 6.2
## 126 7.2 6.9 6.3 7.4 7.2
## 128 5.8 5.5 5.8 5.7 5.4
## 136 7.4 7.1 7.2 6.7 6.7
## 144 7.4 7.1 6.7 7.2 6.3
## 150 6.4 5.9 6.1 6.1 6.1
## 1 2 3 4 5
## 19 setosa setosa setosa setosa setosa
## 23 setosa setosa setosa setosa setosa
## 27 setosa setosa setosa setosa setosa
## 40 setosa setosa setosa setosa setosa
## 49 setosa setosa setosa setosa setosa
## 119 virginica virginica virginica virginica virginica
## 123 virginica virginica virginica virginica virginica
## 136 virginica virginica virginica virginica virginica
Para completar los datos a partir de los cálculos anteriores, se utiliza la función “complete” indicando el índice del conjunto de datos imputados con el que se desea trabajar.
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.100 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.400 Median :1.300
## Mean :5.821 Mean :3.048 Mean :3.778 Mean :1.195
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
En ambas gráficas se puede notar la forma en que los valores imputados (magenta) coincide con los valores conocidos (azules), por lo tanto, se puede considerar que esta imputación es plausible. Una forma se aseverar lo que se dijo anteriormente se realiza mediante el diagrama de densidad.
Para poder concluir que las imputaciones son plausibles, se desea que la distribución de los datos conocidos, sea similar a la de los datos imputados, de igual forma si se desea saber qué conjunto de datos seleccionar al momento de utilizar la función complete se puede analizar cuál de las curvar se adapta mejor a los datos conocidos. Finalmente se puede analizar las distribuciones de las variables como puntos individuales mediante la función stripplot().