Ir al contenido principal

R: Valores Faltantes en un Data Frame (Missing Values)


Son muy pocas las ocasiones en que las variables de un conjunto de datos están libres de observaciones faltantes (NAs o missing values). Es usual que al abordar una data nos interese saber la cantidad de ausencias, y también su caracterización, es decir, si esa (no respuesta) obedece a un patrón específico o es atribuible a causas aleatorías.
El conteo de valores faltantes por variable, en un data frame, puede realizarse con pocas líneas de código como en el siguiente ejemplo, hecho con una data ficticia y funciones de la familia apply:

# datos ficticios

set.seed(4363)

datos <- replicate(100, sample(c(rchisq(5, runif(1, 1, 100)), NA), 
                               10, replace = TRUE), simplify = FALSE)

datos <- do.call(rbind, datos)

Luego el total de no respuesta por variable sería:

datos <- data.frame(datos)

unlist(lapply(datos, function(x) sum(is.na(x))))

# V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 
# 18  18  18  15  15  19  14  14  15  14
El paquete magritr puede hacer más cómoda la escritura de códigos como este:
library(magrittr)# pipeline

datos %>% 
  lapply(., function(x) sum(is.na(x))) %>% 
  unlist()


# o con la función más estricta vapply

datos %>% 
  vapply(., function(x) sum(is.na(x)), numeric(1))

#  V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 
#  18  18  18  15  15  19  14  14  15  14 
En caso de requerir un gráfico:
n <- length(datos) 

cols <- colorRamps::blue2yellow(n) # seleccionar colores

mp <- datos %>% 
  vapply(., function(x) sum(is.na(x)), numeric(1)) %>% 
  sort() %>% 
  barplot(., axes = FALSE, 
          horiz = TRUE, las = 1, col = rev(cols),
          main = "Valores Faltantes\nEn El Dataset")

height <- vapply(datos, 
                 function(x) sum(is.na(x)), numeric(1)) %>% 
  sort()

text(height, mp, labels = height, 
     col =  ifelse(height >= median(height), "#FFFFFF",
                   "#8B0000"),
     pos = 2, cex = 1.5) # disponer los resultados en las barras


La caracterización involucra más cosas, por supuesto el conocimiento acerca del método en que se generaron los datos puede ser crucial, son usuales tambien análisis descriptivos en los que paquetes cómo car o rpart pueden resultar bastante útiles. Por ejemplo, el paquete Hmisc ofrece la posibilidad de efectuar un rápido cluster de las observaciones faltantes usando Hmisc::naclus(datos), pero en este caso no añadiría informacion alguna, dada la forma en que fueron generados estos datos, lo cual siempre resulta ser bastante relevante.

Comentarios

Entradas populares de este blog

R: Simulacion de Variables Correlacionadas

En muchas situaciones suele ser conveniente generar un conjunto de variables con una correlación deseada. Algunos paquetes ofrecen medios para este fin de producir fake data ; pero también es perfectamente posible obtenerlas a través de métodos como la factorización (descomposicion) de Cholesky o la Descomposicion del Valor Singular (SVD: Singular Value Decomposition ). En el paquete de base de R existen funciones para hacer estos cálculos. La factorización de Cholesky, es un método con el que una matriz definida positiva y simetrica, es descompuesta en el producto de dos matrices triangulares (triangular inferior o superior) A = LL' (L es una matriz triangular inferior) A = U'U (U es una matriz triangular superior) siendo U' la traspuesta de U Mientras que la SVD (descomposición de valor singular) es una factorización de la forma: A = UΣV , la cuál generaliza la descomposición de autovalores. La implementación consiste simplemente en obtener el producto entre un vector

Optimizadores y Máximo Verosimil en R.

El proceso mediante el cual se obtienen estimaciones a partir de un conjunto de datos, frecuentemente involucra también un proceso de optimización. En lo más básico, por ejemplo, estimadores como la media o la mediana minimizan la suma de desviaciones al cuadrado y la suma de las desviaciones absolutas respectivamente Generalmente, se admite como un esquema rutinario del trabajo estadístico al momento de indagar sobre algún aspecto atinente a una población, asumir un modelo probabilístico, cuyos parámetros, siendo desconocidos, deben estimarse mediante la obtención de datos y posterior cálculo de los valores que mejor representen la data previamente recolectada. En ese último punto se halla frecuentemente implicada la optimización. La estimación por Máximo Verosimil, es generalmente obtenida mediante la aplicación de optimizadores no lineales, que son algoritmos que, por lo general, minimizan la función que se les pasa como argumento, debido a esto, para maximizar la función de verosi