Detección de datos perdidos
Last updated
Last updated
Uno de los problemas que aparece en el análisis de datos con frecuencia es la existencia de datos faltantes o ausentes, también llamados datos missing (en inglés).
Se producen cuando las observaciones de nuestros datos no están completas. La presencia de datos missing en una muestra puede ser debida a numerosas causas:
Ausencia natural de la información que se busca
Una observación errónea o dato atípico que habremos convertido en missing en el proceso de detección y tratamiento
Una falta de respuesta, por ejemplo en una encuesta
Será importante un buen diseño de la muestra para impedir en lo posible esta información faltante. Por ejemplo, si se trabaja con cuestionarios, es fundamental además de elaborarlos adecuadamente, enseñar al personal para que todas las preguntas sean respondidas.
NA
Es como se representa en R los datos perdidos o missing. Recuerda que en el vimos que los datos missing pueden estar representados de muchas formas ("99", "Missing", "Unknown", " ") y hay que detectarlos y convertirlos en NA
Versiones especiales de NA:
NULL
Es un valor reservado en R que se usa para devolver de una expressión o función si el valor está definido. Por ejemplo si tratamos de recuperar la edad de una persona encuestada que no existe.
NaN
Son valores imposibles, por ejemplo cuando fuerzas a R a dividir 0 por 0.
Inf
Representa un valor infinito, como por ejemplo si fuerzas a R a dividir un número por 0
Ejemplo ilustrativo de como esto puede afectar a tus análisis:
“NAs introduced by coercion” es un warning común en R. Por ejemplo, si intenta convertir en numérico un vector que tiene caracteres:
is.na()
y !is.na()
Estas funciones devuelven un valor lógico (TRUE
or FALSE
)
na.omit()
Esta función quitará los datos missing, si lo aplicas a un vector quitará los datos NA
y si es sobre un data frame quitará las filas donde haya un valor missing.
na.rm = TRUE
Cuando se utilizan funciones matemáticas como
max()
, min()
, sum()
or mean()
si hay valores NA los eliminara para hacer el cálculo
Para ello vamos a usar una base de datos de simulación de una epidemia de Ebola
y un paquete de R que se llama naniar
Los datos missing no se han leido como NA sino como un dato vacío sin nada " "
Las fechas están declaradas como caracteres en vez de formato fecha
Para saber el número y porcentaje de valores que son missing usamos las funciones pct_miss()
y n_miss()
:
Para visualizar los datos missing podemos hace usop de la función gg_miss_var() o vis_miss()
que nos muestra el % de valores missing que hay en cada columna. Con esta función se puede:
Si queremos visualizar los datos missing por sexo haríamos uso del arguemnto facet =
Una cosa interesante que vemos al clasificar los datos por sexo, es que los valores perdidos de la variable edad corresponden a los valores perdidos de la variable sexo.
TExploración y visualización de datos missing entre dos variables
¿Cómo visualizamos algo que está perdido? ggplot()
por ejemplo elimina las observaciones con valores missing.
El paquete naniar
ofrece una solución con geom_miss_point()
. Al crear un gráfico de dispersión de dos columnas, los registros con uno de los valores faltantes y el otro valor presente se muestran configurando los valores faltantes en un 10% menos que el valor más bajo en la columna, y se les asigna un color distintivo.
En el gráfico de dispersión a continuación, los puntos rojos representan registros donde el valor de una columna está presente, pero el valor de la otra columna falta. Esto permite visualizar la distribución de los valores faltantes en relación con los valores no faltantes.
Para evaluar la ausencia de datos estratificados por otra variable, podemos utilizar gg_miss_fct()
, que devuelve un heatmap del porcentaje de datos faltantes según la variable categórica que le digamos:
Esta función también la podemos usar para ver la evolución de los datos missing en el tiempo si tenemos variables que nos indiquen fechas:
También se puede hacer uso de la función bind_shadow()
para ver la proporción de missing de una variable respecto a la distribución de otra variable. Esta función crea una columna binaria NA/no_NA
para cada columna existente y une todas estas nuevas columnas al conjunto de datos original con el apéndice "_NA"
.
Con ggplot se puede representar cada variable con su variable_NA y así ver diferencias en la distribución
Lo primero que vamos a hacer es trabjar la base de datos como hemos visto en el
You can use vis_miss()
to visualize the data frame as a heatmap, showing whether each value is missing or not. You can also certain columns from the data frame and provide only those columns to the function.