Una parte importante en la limpieza y procesamiento de los datos que usaremos para hacer nuestros análisis, consiste en detectar si hay datos faltantes y si éstos faltan al azar o siguen un patrón determinado. En el primer caso podemos tomar la decisión de imputar esos valores, pero en el segundo caso la situación es definitivamente delicada. Si los datos faltan siguiendo un patrón tendremos que determinar el impacto de esa situación en el análisis que realizaremos.
R posee varios paquetes que nos ayudan a diagnosticar los valores faltantes en nuestra data. Uno de esos paquete es VIM. Veamos como usarlo, con un caso de estudio.
nv <- read.csv("D:/reni/data/nhLimpio.csv",
header=TRUE, na.strings = "nr")
require(VIM)
require(FactoMineR)
require(tidyr)
require(dplyr)
require(magrittr)
Verifiquemos el patr'on de valores faltantes
aggr(nv, prop=FALSE,
numbers=TRUE, border=NA,
combine=TRUE)
Realmente dif'icil. Se puede observar claramente que muchas personas dejaron de responder preguntas en forma sistem'atica. Si aplicamos la funci'on de R para eliminar casos faltantes, corremos el riesgo de quedarnos sin observaciones. Vamos a seleccionar variables que tengan menos del 25% de los valores faltantes
seleccion <- nv%>%
select(1:8, 16,19:22, 25,26,
27, 32:40, 43:47, 49,50,
55:57)
Veamos el gráfico
aggr(seleccion, numbers=TRUE, border=NA, combine=TRUE)
Quizá podemos eliminar también las variables terreno y coci
seleccion %<>%select(-c(4, 7,8))
Veamos el gráfico nuevamente
aggr(seleccion, numbers=TRUE, border=NA, combine=TRUE)
Este nivel de datos faltantes es aun complicado, pero en definitiva es mucho mejor que el marco de datos inicial. Finalmente, podemos quedarnos con un marco de datos sin ningún dato faltante,e para hacer nuestro análisis
# marco de datos sin valores faltantes
nvMini <- na.omit(seleccion)
#creamos un data frame con la variables que tienen 15 por ciento
# o mas de valores faltantes. Agregamos los consejos
# comunales para facilitar analisis con esta data
conMissing <-nv%>%
select(1,4,7,8, 9:15, 23,24,28:30,41,
48, 51:54)
Confirmamos que nuestro mini marco de datos no tiene valores faltantes
aggr(nvMini, numbers=TRUE, border=NA, combine=TRUE)
Veamos el patrón de datos faltantes en las variables que hemos sacado del análisis
aggr(conMissing, numbers=TRUE, border=NA, combine=TRUE)
Guardamos la data para facilitar el an'alisis espec'ifico con estas variables
# dataframe sin valores faltantes
write.csv(nvMini, 'd:/reni/nvSeleccion.csv',
row.names=FALSE)
# dataframe con niveles minimos de valores faltantess
write.csv(seleccion, 'd:/reni/nvMissing.csv',
row.names=FALSE)
# dataframe con exceso de valores faltantes
write.csv(conMissing, 'd:/reni/nvdescarte.csv',
row.names=FALSE)
Finalmente, tenemos: - un marco de datos de 302 observacione y 32 variabes, nvMini; - un marco de dato de 1159 observaciones y 22 variables, conMissing; y, por último, -un marco de datos con un mínimo de datos faltantes con 1159 observaciones y 32 variables