La estadística es un problema de NAs.
— Roderick J.A. Little
1 Introducción
El estudio y tratamiento de los NAs en las bases de datos se suele considerar poco importante, lo que puede traer problemas tan graves que invaliden una investigación completa. Éste trabajo comenzará exponiendo los aspectos básicos del problema, nos introduciremos en un breve estudio teórico de los NA y revisaremos los diversos tratamientos que los modelos modernos nos ofrecen para finalizar ofreciendo una propuesta de solución a un problema concreto que nos aqueja.
2 Lo básico
2.1 El problema de los NA
Los cuatro tipos de estructuras de datos en R más utilizadas son:
- vectores: una secuencia de datos del mismo tipo,
- listas: vectores pero con distintos tipos de datos,
- matrices: conjunto de datos del mismo tipo ordenados por filas y columnas \((m \times n)\)
- dataframes: nosotros trabajamos casi exclusivamente con dataframes, que son en esencia, matrices con columnas conteniendo distintos tipos de datos cada una (pero del mismo tipo la misma).
Comencemos por estudiar los problemas más básicos que plantean los NAs:
Inventemos un vector y calculemos su promedio:
<- c(342, 234, 876)
y mean(y)
## [1] 484
Calculemos el mismo promedio introduciendo un NA:
<- c(342, 234, NA)
y mean(y)
## [1] NA
La media ahora ya no está definida, informándonos R de aquello estableciéndola en NA. Para tratar con éste problema podemos agregar un argumento (na.rm = TRUE), para que R ignore todos los NA y trabaje sólo con los existentes.
<- c(342, 234, NA)
y mean(y, na.rm=TRUE)
## [1] 288
Verifiquemos:
342 + 234)/2 (
## [1] 288
na.rm = TRUE
permite calcular un resultado, pero, por supuesto, el conjunto de observaciones sobre el que se basan los cálculos ha cambiado, lo que puede causar problemas en la inferencia e interpretación estadísticas.
Es éste el sentido cuando afirmamos que un modelo (en éste caso algo tan básico como una media, para funcionar requiere que la base de datos sea intervenida. Veremos ésto en más detalle con los modelos de regresión)
2.1.1 Ajustando un modelo de regresión
La situación empeora en el análisis multivariado. Como ejemplo, realicemos una regresión simple, intentemos predecir la concentración diaria de ozono (partes por mil millones) a partir de la velocidad del viento (mph) -variables Ozone y Wind- utilizando el conjunto de datos airquality incorporado por defecto en R. Observemos que existen NAs en la columna Ozone y que el dataframe contiene 153 filas:
datatable(airquality, extensions = 'Buttons', escape = FALSE, rownames = TRUE,
options = list(dom = 'Bfrtip',
buttons = list('colvis', list(extend = 'collection',
buttons = list(
list(extend='copy'),
list(extend='excel',
filename = 'tabla'),
list(extend='pdf',
filename= 'tabla')),
text = 'Download')), scrollX = TRUE))
¿de qué manera afecta la presencia de NAs nuestro tratamiento estadístico?
El siguiente código nos debiese dar un error, pues la variable a predecir contiene NAs, pero R ya ha pensado en ello y lo soluciona por defecto eliminando cualquier fila que contenga a lo menos un NA:
<- lm(Ozone ~ Wind, data = airquality)
fit fit
##
## Call:
## lm(formula = Ozone ~ Wind, data = airquality)
##
## Coefficients:
## (Intercept) Wind
## 96.873 -5.551
summary(fit)
##
## Call:
## lm(formula = Ozone ~ Wind, data = airquality)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.572 -18.854 -4.868 15.234 90.000
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 96.8729 7.2387 13.38 < 2e-16 ***
## Wind -5.5509 0.6904 -8.04 9.27e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 26.47 on 114 degrees of freedom
## (37 observations deleted due to missingness)
## Multiple R-squared: 0.3619, Adjusted R-squared: 0.3563
## F-statistic: 64.64 on 1 and 114 DF, p-value: 9.272e-13
Tracemos la línea de regresión:
plot(Ozone ~ Wind, data = airquality)
abline(fit, col = "blue", pch = 18)
Hagamos un ejercicio y forcemos a R a considerar los valores NA:
<- lm(Ozone ~ Wind, data = airquality, na.rm = F) fit
Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : extra argument ‘na.rm’ will be disregarded
Obtenemos una advertencia que nos indica que la instrucción de remover los valores NAs será ignorada pues se producen singularidades al ejecutar el modelo lineal que se realiza igualmente eliminando las filas que contengan algún NAs entregándonos los mismos coeficientes:
fit
##
## Call:
## lm(formula = Ozone ~ Wind, data = airquality, na.rm = F)
##
## Coefficients:
## (Intercept) Wind
## 96.873 -5.551
R ejecuta el modelo eliminando todas las filas que contienen NAs realizando la regresión sólo con filas que contengan datos en todos sus campos (lo que más adelante llamaremos Listwise deletion).
Como siempre podemos producir test diagnósticos para evaluar la calidad del modelo
plot(fit)
2.1.2 Valores predichos versus valores observados
Ahora deseamos graficar los niveles de ozono pronosticados contra los datos observados, por lo que usamos predict() para calcular los valores predichos y los agregamos a los datos para prepararnos para el trazado.
# airquality4 <- cbind(airquality, predict(fit))
El error que nos da R es:
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 153, 116
Obtenemos un error pues los dos dataframes tienen un número diferente de filas. Los datos de airquality son 153, mientras que sólo hay 116 valores predichos. El problema, por supuesto, es que faltan datos. La función lm() eliminó filas incompletas en los datos.
Número de filas originales:
nrow(airquality)
## [1] 153
Número de datos faltantes:
153 - 116
## [1] 37
El número de valores perdidos por variable en los datos es:
colSums(is.na(airquality))
## Ozone Solar.R Wind Temp Month Day
## 37 7 0 0 0 0
En nuestro modelo de regresión, ozono posee 37 casos NAs.
La eliminación de los casos incompletos antes del análisis se conoce como eliminación por lista (listwise deletion) o análisis sobre casos completos.
Obtengamos el dataset de 116 filas:
<- cbind(na.omit(airquality[, c("Ozone", "Wind")]),predicted = predict(fit)) airquality2
Observemos los 10 primeros registros y observemos que falta el 5 y el 10.
head(airquality2,10)
## Ozone Wind predicted
## 1 41 7.4 55.79607
## 2 36 8.0 52.46551
## 3 12 12.6 26.93127
## 4 18 11.5 33.03728
## 6 28 14.9 14.16414
## 7 23 8.6 49.13496
## 8 19 13.8 20.27016
## 9 8 20.1 -14.70066
## 11 7 6.9 58.57153
## 12 16 9.7 43.02894
Grafiquemos las variables contra todas:
plot(airquality2)
2.1.3 Imputando NAs
El concepto imputación tiene cierta relación con su acepción legal: significa un dato cuestionable (pues no existe) y se lo castiga eliminándolo.
2.1.4 El caso de la eliminación de registros (Listwise)
La eliminación por lista (Listwise) permite hacer los cálculos, pero puede introducir complejidades adicionales en la interpretación. Intentemos mejorar el modelo predictivo incluyendo la radiación solar (Solar.R):
<- lm(Ozone ~ Wind + Solar.R, data = airquality)
fit2 naprint(na.action(fit2))
## [1] "42 observations deleted due to missingness"
Observemos que la cantidad de días eliminados aumenta en 42 ya que algunas filas no tenían valor para Radiación Solar. Por lo tanto, cambiar el modelo puede alterar la muestra sobre el que opera.
Obtengamos la salida de la regresión lineal múltiple.
fit2
##
## Call:
## lm(formula = Ozone ~ Wind + Solar.R, data = airquality)
##
## Coefficients:
## (Intercept) Wind Solar.R
## 77.2460 -5.4018 0.1004
Hay cuestiones metodológicas y estadísticas asociadas con éste procedimiento.
¿Podemos comparar los coeficientes de regresión de ambos modelos?
¿Deberíamos atribuir las diferencias en los coeficientes a cambios en el modelo o a cambios en la submuestra?
¿Los coeficientes estimados se generalizan a la población de estudio?
¿Tenemos suficientes casos para detectar el efecto de interés?
¿Estamos haciendo el mejor uso posible de los datos recopilados?
Hay muchos enfoques para sortear este problema. Cada uno de ellos afecta el resultado final de una manera diferente. Algunas soluciones son claramente mejores que otras y no existe una solución que funcione siempre.
A continuación revisaremos los enfoques principales y analizaremos sus ventajas y limitaciones.
2.1.5 Cambio de perspectiva sobre los datos faltantes
El enfoque estándar para tratar datos faltantes es eliminarlos. Inclinación comprensible, pues aparte de las dificultades técnicas impuestas por los NA, la aparición de datos faltantes se ha considerado durante mucho tiempo un signo de investigación descuidada. Es demasiado fácil para el árbitro de una investigación escribir:
"Este estudio es débil debido a la gran cantidad de datos que faltan."
Es entonces que las posibilidades de que un paper sea publicado mejoren si no tiene indicios de NAs.
Pero es imposible alcanzar este ideal en la empiria, por lo que la práctica científica predominante consiste en restar importancia a los datos que faltan.
En las ciencias sociales, es casi imposible que todos los encuestados participen o respondan a determinadas preguntas. En los estudios médicos, la deserción de pacientes es muy común.
Se han hecho revisiones de éstas prácticas en la presentación de informes en campos tan disímiles como: ensayos clínicos (Wood, White y Thompson 2004; Powney et al. 2014; Díaz-Ordaz et al. 2014; Akl et al. 2015), investigación sobre el cáncer (Burton y Altman 2004), investigación educativa (Peugh y Enders 2004), epidemiología (Klebanoff y Cole 2008; Karahalios et al. 2012), psicología del desarrollo (Jeliĉić, Phelps y Lerner 2009), medicina general (Mackinnon 2010), pediatría del desarrollo (Aylward, Anderson, y Nelson 2010), y otorrinolaringología, cirugía de cabeza y cuello (Netten et al.2017).
Estos estudios comparten en forma consistente lo siguiente:
La presencia de datos faltantes a menudo no se indica explícitamente en el texto.
Los métodos predeterminados, como la eliminación por lista (listwise deletion), se utilizan sin mencionarlos.
Los métodos de tratamiento de datos faltantes basados en modelos, como la probabilidad directa (direct likelihood), la máxima probabilidad de información completa (full information maximum likelihood) y la imputación múltiple, están notablemente infrautilizados.
3 Los conceptos de MCAR, MAR y MNAR
Rubin1 clasificó los problemas de datos faltantes en tres categorías. En su teoría, cada dato tiene alguna probabilidad de faltar. El proceso que gobierna estas probabilidades se denomina mecanismo de datos faltantes o mecanismo de respuesta. El modelo del proceso se denomina modelo de datos faltantes o modelo de respuesta.
3.1 MCAR (missing completely at random)
Si la probabilidad de que falten es la misma para todos los casos, entonces se dice que los datos faltan completamente al azar (MCAR). Esto implica efectivamente que las causas de los datos faltantes no están relacionadas con los datos. En consecuencia, podemos ignorar muchas de las complejidades que surgen con los NA, además de la obvia pérdida de información. Un ejemplo de MCAR es una báscula que se quedó sin baterías. Algunos de los datos faltarán simplemente por mala suerte. Otro ejemplo es cuando tomamos una muestra aleatoria de una población, donde cada miembro tiene la misma probabilidad de ser incluido en la muestra. Los datos (no observados) de los miembros de la población que no se incluyeron en la muestra son MCAR.
3.2 MAR (missing at random)
Si la probabilidad de existencia de datos faltantes es la misma pero sólo dentro de grupos definidos en los datos observados, entonces los datos faltan al azar (MAR). MAR es una clase mucho más amplia que MCAR. Un ejemplo de MAR es cuando tomamos una muestra de una población, donde la probabilidad de ser incluido depende de alguna propiedad conocida. MAR es más general y más realista que MCAR.
Los métodos modernos de datos faltantes generalmente parten del supuesto MAR.
3.3 NMAR (not missing at random) o (MNAR) missing not at random
Si ni MCAR ni MAR se cumplen, entonces hablamos de datos perdidos no al azar (MNAR). MNAR significa que la probabilidad de existencia de NAs varía por razones que desconocemos: siguen un patrón. Por ejemplo, el mecanismo de una balanza puede desgastarse con el tiempo, produciendo más datos faltantes a medida que avanza el tiempo, pero es posible que éste proceso sea tan lento que resulte imperceptible. Si los objetos más pesados se miden más tarde en el tiempo, obtenemos una distribución de las medidas que se distorsionará. MNAR incluye la posibilidad de que la escala produzca más valores perdidos para los objetos más pesados. Un ejemplo de MNAR en la investigación de la opinión pública ocurre si aquellos con opiniones más débiles responden con menos frecuencia. MNAR es el caso más complejo. Las estrategias para manejar MNAR son encontrar más datos sobre las causas de la falta, o realizar análisis hipotéticos para ver qué tan sensibles son los resultados en varios escenarios.
La distinción de Rubin es importante para comprender por qué algunos métodos funcionan y otros no. Su teoría establece las condiciones bajo las cuales un método sobre los NAs puede proporcionar inferencias estadísticas válidas. La mayoría de las soluciones simples sólo funcionan bajo la suposición de MCAR (missing completely at random), restrictiva y a menudo, poco realista. Si MCAR no es plausible, tales métodos pueden proporcionar estimaciones sesgadas.
4 Soluciones Ad-hoc
4.1 Eliminación por lista (Listwise deletion)
Éste procedimiento elimina todos los casos con uno o más valores perdidos en las variables de análisis. Una ventaja importante del análisis de casos completos es la conveniencia. Si los datos son MCAR (missing completely at random), la eliminación por lista produce estimaciones no sesgadas de medias, varianzas y ponderaciones de regresión. Bajo MCAR, la eliminación por lista produce errores estándar y niveles de significancia que son correctos para el subconjunto reducido de datos, pero que a menudo son mayores en relación con todos los datos disponibles.
Una desventaja de la eliminación por listas es que es potencialmente un desperdicio. No es raro en aplicaciones de la vida real que se pierda más de la mitad de la muestra original, especialmente si el número de variables es grande. King y col. (2001) estimaron que el porcentaje de registros incompletos en las ciencias políticas excedía el 50% en promedio, con algunos estudios con más del 90% de registros incompletos. Queda claro que una muestra tan pequeña podría degradar la capacidad de detectar los efectos de interés.
Si los datos no son MCAR, la eliminación por lista puede sesgar severamente las estimaciones de medias, coeficientes de regresión y correlaciones. Little y Rubin (2002, 41–44) mostraron que el sesgo en la media estimada aumenta con la diferencia entre las medias de los casos observados y faltantes, y con la proporción de datos faltantes. Sin embargo, el análisis de casos completos no siempre es malo. Las implicaciones de los datos faltantes son diferentes según el lugar donde ocurren (resultados o predictores) y el parámetro y la forma del modelo de datos completos. En el contexto del análisis de regresión, la supresión listwise posee algunas propiedades únicas que la hacen atractiva en entornos particulares. Hay casos en los que la la supresión listwise puede proporcionar mejores estimaciones que incluso los procedimientos más sofisticados.
La eliminación por listas puede introducir inconsistencias en los informes. Dado que la eliminación por lista se aplica automáticamente al conjunto de variables, los diferentes análisis de los mismos datos a menudo se basan en diferentes submuestras.
En algunos casos, la eliminación por lista puede dar lugar a submuestras sin sentido. Por ejemplo, las filas del conjunto de datos de calidad del aire corresponden a 154 días consecutivos entre el 1 de mayo de 1973 y el 30 de septiembre de 1973. La eliminación de días afecta la base del tiempo. Sería mucho más difícil, si no imposible, realizar análisis que involucren tiempo, por ejemplo, para identificar patrones semanales o para ajustar modelos autorregresivos que predicen de días anteriores.
Las opiniones sobre los méritos de la eliminación por listas varían. Miettinen (1985, 231) describió la eleción listwise como
…el único enfoque que asegura que no se introduzca ningún sesgo bajo ninguna circunstancia …
una declaración incorrecta.
En el otro extremo del espectro encontramos a Enders (2010, 39):
…En la mayoría de las situaciones, las desventajas de la eliminación por listas superan con creces sus ventajas.
Schafer y Graham (2002, 156) cubren el término medio:
…Si un problema de datos faltantes se puede resolver descartando solo una pequeña parte de la muestra, entonces el método puede ser bastante efectivo.
Sin embargo, los principales autores en el campo son cautelosos a la hora de proporcionar consejos sobre el porcentaje de casos faltantes por debajo del cual todavía es aceptable realizar una eliminación por lista. Little y Rubin (2002) argumentan que es difícil formular reglas empíricas, ya que las consecuencias de utilizar la eliminación por listas dependen de algo más que la tasa de datos faltantes por sí sola. Vach (1994, 113) expresó su disgusto por las reglas simplistas de la siguiente manera:
…A menudo se supone que existe algo así como una tasa de falta crítica en la que los valores perdidos no son demasiado peligrosos.
4.2 Eliminación por pares (Pairwise deletion) (análisis de casos disponibles - ACA)
En este caso, sólo se ignoran las observaciones faltantes y se hace un análisis de las variables presentes. Si hay datos que faltan en otra parte del conjunto de datos, se utilizan los valores existentes. Dado que una supresión por pares utiliza toda la información observada, conserva más información que la eliminación por lista.
Se sabe que la eliminación por pares está menos sesgada para los datos faltantes completamente al azar o faltantes al azar. Sin embargo, si hay muchas observaciones que faltan, el análisis será deficiente. El problema de la supresión por pares es que, aunque se toman los casos disponibles, no se pueden comparar los análisis porque la muestra es diferente cada vez.
Resumen
En la eliminación por pares, en vez de descartar todos los casos con algún valor faltante, el investigador sólo usa los casos o encuestados con respuestas completas para cada cálculo. Como resultado, los distintos cálculos del análisis pueden basarse en muestras de diferentes tamaños. Este procedimiento puede ser apropiado cuando:
- el tamaño de la muestra es grande,
- las respuestas faltantes son pocas y
- no hay mucha relación entre las variables.
No obstante, el procedimiento puede producir resultados poco atractivos o incluso poco verosímiles.
La eliminación por pares, también conocida como análisis de casos disponibles, intenta solucionar el problema de pérdida de datos de la eliminación por listas. El método calcula las medias y (co) varianzas de todos los datos observados. Por lo tanto, la media de la variable X se basa en todos los casos con datos observados en X, la media de la variable Y usa todos los casos con valores Y observados, y así sucesivamente. Para la correlación y covarianza, se toman todos los datos en los que tanto X como Y tienen puntuaciones que no faltan. Posteriormente, la matriz de estadísticas resumidas se introduce en un programa para análisis de regresión, análisis factorial u otros procedimientos de modelado.
En R podemos calcular las medias y correlaciones de los datos airquality bajo eliminación por pares en R como:
<- airquality[, c("Ozone", "Solar.R", "Wind")]
data <- colMeans(data, na.rm = TRUE)
mu <- cov(data, use = "pairwise") cv
La función estándar lm() no toma medias y covarianzas como entrada, pero el paquete lavaan (Rosseel 2012) proporciona esta característica:
library(lavaan)
## This is lavaan 0.6-9
## lavaan is FREE software! Please report any bugs.
<- lavaan("Ozone ~ 1 + Wind + Solar.R
fit Ozone ~~ Ozone",
sample.mean = mu, sample.cov = cv,
sample.nobs = sum(complete.cases(data)))
fit
## lavaan 0.6-9 ended normally after 21 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 4
##
## Number of observations 111
##
## Model Test User Model:
##
## Test statistic 0.000
## Degrees of freedom 0
El método es simple y parece utilizar toda la información disponible. Bajo MCAR, produce estimaciones consistentes de media, correlaciones y covarianzas (Little y Rubin 2002, 55). El método también tiene algunas deficiencias. Primero, las estimaciones pueden estar sesgadas si los datos no son MCAR. Además, la matriz de covarianza y/o correlación puede no ser definida positiva, lo cual es un requisito para la mayoría de los procedimientos multivariados. Los problemas son generalmente más graves para las variables altamente correlacionadas (Little 1992). No está claro qué tamaño de muestra se debe utilizar para calcular los errores estándar. Si se toma el tamaño de muestra promedio, se obtienen errores estándar que son demasiado pequeños (Little 1992). Además, la eliminación por pares requiere datos numéricos que siguen una distribución normal aproximada, mientras que en la práctica a menudo tenemos variables de tipos mixtos.
La idea de utilizar toda la información disponible es buena, pero el análisis adecuado de la matriz por pares requiere técnicas de optimización sofisticadas y fórmulas especiales para calcular los errores estándar (Van Praag, Dijkstra y Van Velzen 1985; Marsh 1998), lo que en cierto modo frustra su utilidad. La eliminación por pares funciona mejor si los datos se aproximan a una distribución normal multivariante, si las correlaciones entre las variables son bajas y si la suposición de MCAR es plausible. No se recomienda para otros casos.
4.3 Imputación con la media (Mean imputation)
Una solución rápida para el problema de los NA es reemplazarlos por la media. Podemos usar el modo para datos categóricos. Suponga que queremos imputar la media en Ozono y Solar.R de los datos de calidad del aire. Utilizamos el paquete mice.
Ahora se puede imputar la media en cada variable mediante:
library("mice")
<- mice::mice(airquality, method = "mean", m = 1, maxit = 1) imp
##
## iter imp variable
## 1 1 Ozone Solar.R
El argumento method = “mean” especifica la imputación media, el argumento m = 1 solicita un único conjunto de datos imputados y maxit = 1 establece el número de iteraciones en 1 (sin iteración). Las dos últimas opciones se pueden dejar en sus valores predeterminados con esencialmente el mismo resultado.
Medias
La imputación media distorsiona la distribución de varias formas. La figura muestra la distribución del ozono después de la imputación. En la figura de la izquierda, se destaca la barra roja en la media. La imputación de la media aquí crea en realidad una distribución bimodal. La desviación estándar en los datos imputados es igual a 28,7, mucho menor que la de los datos observados solamente, que es 33. La figura del lado derecho muestra que la relación entre Ozono y Solar.R está distorsionada debido a las imputaciones. La correlación cae de 0,35 en los puntos azules a 0,3 en los datos combinados.
La imputación media es una solución rápida y sencilla para los datos faltantes. Sin embargo, subestimará la varianza, perturbará las relaciones entre variables, sesgará casi cualquier estimación que no sea la media y sesgará la estimación de la media cuando los datos no sean MCAR. La imputación media quizás solo debería usarse como una solución rápida cuando faltan algunos valores, y debería evitarse en general.
4.4 Imputación de regresión (Regression imputation)
La imputación de regresión incorpora el conocimiento de otras variables con la idea de producir imputaciones más inteligentes. El primer paso consiste en construir un modelo a partir de los datos observados. Las predicciones para los casos incompletos se calculan luego bajo el modelo ajustado y sirven como reemplazos para los datos faltantes. Suponga que predecimos el ozono por regresión lineal sobre Solar.R.
<- lm(Ozone ~ Solar.R, data = airquality)
fit <- predict(fit, newdata = ic(airquality)) pred
Regresión
Otra posibilidad para la imputación de regresión usa mice:
<- airquality[, c("Ozone", "Solar.R")]
data <- mice(data, method = "norm.predict", seed = 1,
imp m = 1, print = FALSE)
xyplot(imp, Ozone ~ Solar.R)
Los valores imputados corresponden a los valores más probables del modelo. Sin embargo, el conjunto de valores imputados varía menos que los valores observados. Puede ser que cada uno de los puntos individuales sea el mejor según el modelo, pero es muy poco probable que los valores reales (pero no observados) del ozono hayan tenido esta distribución. La imputación de valores predichos también tiene un efecto sobre la correlación. Los puntos rojos tienen una correlación de 1 ya que están ubicados en una línea. Si se combinan los puntos rojo y azul, la correlación aumenta de 0,35 a 0,39. Tenga en cuenta que este sesgo ascendente crece con el porcentaje de niveles de ozono que faltan (aquí, el 24%).
La imputación de regresión produce estimaciones insesgadas de las medias bajo MCAR, al igual que la imputación de medias, y de las ponderaciones de regresión del modelo de imputación si las variables explicativas están completas. Además, las ponderaciones de regresión son insesgadas bajo MAR si los factores que influyen en la falta son parte del modelo de regresión. En el ejemplo, esto corresponde a la situación en la que Solar.R explicaría cualquier diferencia en la probabilidad de que falte ozono. Por otro lado, las correlaciones están sesgadas al alza y la variabilidad de los datos imputados se subestima sistemáticamente. El grado de subestimación depende de la varianza explicada y de la proporción de casos perdidos (Little y Rubin 2002, 64).
La imputación de valores predichos puede producir imputaciones realistas si la predicción se acerca a la perfección. Si es así, el método reconstruye las partes faltantes a partir de los datos disponibles. En esencia, en realidad no faltaba ninguna información en primer lugar, solo estaba codificada de una forma diferente.
La imputación de regresión, así como sus encarnaciones modernas en el aprendizaje automático, es probablemente el más peligroso de todos los métodos descritos aquí. Se nos puede hacer creer que vamos a hacer un buen trabajo preservando las relaciones entre las variables. En realidad, sin embargo, la imputación de regresión fortalece artificialmente las relaciones en los datos. Las correlaciones están sesgadas al alza. Se subestima la variabilidad. Las imputaciones son demasiado buenas para ser verdad. La imputación de regresión es una receta para relaciones falsas positivas y espurias.
4.5 Imputación de regresión estocástica (Stochastic regression imputation)
La imputación de regresión estocástica es un refinamiento de los intentos de imputación de regresión para abordar el sesgo de correlación agregando ruido a las predicciones. El siguiente código imputa Ozone de Solar.R mediante imputación de regresión estocástica.
<- airquality[, c("Ozone", "Solar.R")]
data <- mice(data, method = "norm.nob", m = 1, maxit = 1,
imp seed = 1, print = FALSE)
Regresión
El argumento method = norm.nob solicita un método de regresión estocástico simple, no bayesiano. Este método primero estima el intercepto, la pendiente y la varianza residual bajo el modelo lineal, luego calcula el valor predicho para cada valor faltante y agrega un sorteo aleatorio del residual a la predicción. El argumento seed hace que la solución sea reproducible. La figura muestra que la adición de ruido a las predicciones abre la distribución de los valores imputados, como se pretendía.
Tenga en cuenta que surgen algunas complejidades nuevas. Hay una imputación con valor negativo. Dichos valores no tienen por qué deberse a extracciones de la distribución residual, sino que también pueden ser una consecuencia del uso de un modelo lineal para datos no negativos. De hecho, la figura muestra varios valores predichos negativos en los datos observados. Dado que las concentraciones negativas de ozono no existen en el mundo real, no podemos considerar los valores negativos como imputaciones plausibles. Tenga en cuenta también que el extremo superior de la distribución no está bien cubierto. Los datos observados forman un cono, es decir, los datos son heterocedásticos, pero el modelo de imputación supone una dispersión igual alrededor de la línea de regresión. La variabilidad del ozono aumenta hasta el nivel de radiación solar de 250 langleys y luego disminuye. Aunque no está claro si se trata de un fenómeno meteorológico genuino, el modelo de imputación no tiene en cuenta esta característica.
No obstante, la imputación por regresión estocástica representa un avance conceptual importante. Algunos analistas pueden encontrar contradictorio “estropear” la mejor predicción agregando ruido aleatorio, pero esto es precisamente lo que la hace adecuada para la imputación. Una imputación de regresión estocástica bien ejecutada conserva no solo los pesos de regresión, sino también la correlación entre las variables. La idea principal para extraer de los residuos es muy poderosa y forma la base de técnicas de imputación más avanzadas.
4.6 LOCF y BOCF
La última observación trasladada (LOCF) y la observación de la línea de base trasladada (BOCF) son métodos de imputación ad-hoc para datos longitudinales. La idea es tomar el valor observado anteriormente como reemplazo de los datos faltantes. Cuando faltan varios valores seguidos, el método busca el último valor observado.
La función fill() del paquete tidyr aplica LOCF completando el último valor conocido. Esto es útil en situaciones en las que los valores se registran solo cuando cambian, como en los datos de tiempo transcurrido hasta el evento. Por ejemplo, podemos usar LOCF para completar el ozono con:
<- tidyr::fill(airquality, Ozone)
airquality2 head(airquality2)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 18 NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
LOCF y BOCF
La muestra los resultados de los primeros 80 días de la serie Ozone. Los tramos de puntos rojos indican las imputaciones y son constantes dentro del mismo lote de niveles de ozono faltantes. Es probable que los valores reales e invisibles varíen dentro de estos lotes, por lo que la aplicación de LOCF aquí dé imputaciones inverosímiles.
LOCF es conveniente porque genera un conjunto de datos completo. Se puede aplicar con confianza en los casos en que tengamos certeza de cuáles deberían ser los valores faltantes, por ejemplo, para las variables administrativas en los datos longitudinales. En cuanto a los resultados, LOCF es dudoso. El método se ha utilizado durante mucho tiempo en ensayos clínicos. La Administración de Drogas y Alimentos de los Estados Unidos (FDA) ha considerado tradicionalmente a LOCF como el método de análisis preferido, considerándolo conservador y menos propenso a la selección que a la eliminación por listas. Sin embargo, Molenberghs y Kenward (2007, 47–50) muestran que el sesgo puede operar en ambas direcciones, y que LOCF puede producir estimaciones sesgadas incluso bajo MCAR. LOCF debe ir seguido de un método de análisis estadístico adecuado que distinga entre los datos reales y los imputados. Sin embargo, esto normalmente no se hace. En Kenward y Molenberghs (2009) se dan preocupaciones adicionales sobre una inversión de la dirección del tiempo.
El Panel sobre Manejo de Datos Faltantes en Ensayos Clínicos recomienda que LOCF y BOCF no se utilicen como el enfoque principal para manejar datos faltantes a menos que las suposiciones subyacentes estén científicamente justificadas (National Research Council 2010, 77).
4.7 Método indicador
Supongamos que queremos ajustar una regresión, pero faltan valores en una de las variables explicativas. El método del indicador (Miettinen 1985, 232) reemplaza cada valor faltante por un cero y extiende el modelo de regresión por el indicador de respuesta. El procedimiento se aplica a cada variable incompleta. El usuario analiza el modelo extendido en lugar del original.
En R, el método del indicador se puede codificar como
<- mice(airquality, method = "mean", m = 1,
imp maxit = 1, print = FALSE)
<- cbind(complete(imp),
airquality2 r.Ozone = is.na(airquality[, "Ozone"]))
<- lm(Wind ~ Ozone + r.Ozone, data = airquality2) fit
Observe que dado que los datos faltantes están en Ozone, necesitábamos invertir la dirección del modelo de regresión.
El método indicador ha sido popular en salud pública y epidemiología. Una ventaja es que el método del indicador conserva el conjunto de datos completo. Además, permite diferencias sistemáticas entre los datos observados y no observados mediante la inclusión del indicador de respuesta, y podría ser más eficiente. White y Thompson (2005) señalaron que el método puede ser útil para estimar el efecto del tratamiento en ensayos aleatorizados cuando se observa parcialmente una covariable inicial.
Digresión: Covariable
Covariables Variables continuas independientes que junto a una o más variables (grupo de tratamiento) sirven para explicar una variable respuesta continua. Supongamos que pretendemos explicar las diferencias existentes en el nivel de cortisol en sangre por grupo de tratamiento A / B, teniendo en cuenta el peso. La variable peso es una covariable.
Si los datos faltantes se limitan a la covariable, si el interés se limita únicamente a la estimación del efecto del tratamiento, si el cumplimiento del tratamiento asignado es perfecto y si el modelo es lineal sin interacciones, entonces el uso del método indicador para esa covariable produce una estimación no sesgada del efecto del tratamiento. Esto es cierto incluso si la ausencia depende de la covariable en sí. Se puede encontrar trabajo adicional en Groenwold et al. (2012; Sullivan et al.2018). Aún no está claro si la cobertura del intervalo de confianza en torno a la estimación del tratamiento será satisfactoria para múltiples covariables iniciales incompletas.
Es posible que en la práctica no se cumplan las condiciones en las que funciona el método de indicadores. Por ejemplo, el método no permite datos faltantes en el resultado y generalmente falla en los datos de observación. Se ha demostrado que el método puede producir estimaciones de regresión severamente sesgadas, incluso bajo MCAR y para pequeñas cantidades de datos faltantes (Vach y Blettner 1991; Greenland y Finkle 1995; Knol et al. 2010). El método del indicador puede tener sus usos en situaciones particulares, pero falla como método genérico para manejar los datos faltantes.
5 Resumen de los supuestos hechos por métodos ad-hoc.
Resumen
La Tabla proporciona un resumen de los métodos discutidos en esta sección. La tabla aborda dos temas: si el método produce los resultados correctos en promedio (imparcialidad) y si produce el error estándar correcto. La imparcialidad se evalúa con respecto a tres tipos de estimaciones: la media, el peso de regresión (con la variable incompleta como dependiente) y la correlación.
La tabla identifica las suposiciones sobre el mecanismo de datos faltantes que debe realizar cada método para producir estimaciones no sesgadas. La primera línea de la tabla debe leerse de la siguiente manera:
La eliminación por lista produce una estimación insesgada de la media siempre que los datos sean MCAR;
La eliminación por lista produce una estimación del error estándar que es demasiado grande.
La interpretación de las otras líneas es similar. El signo “-” en algunas celdas indica que el método no puede producir estimaciones no sesgadas. Observe que ambos métodos de eliminación requieren MCAR para todos los tipos. La imputación de regresión y la imputación de regresión estocástica pueden producir estimaciones insesgadas bajo MAR. Para que funcione, el modelo debe especificarse correctamente. LOCF y el método del indicador son incapaces de proporcionar estimaciones consistentes, incluso bajo MCAR. Tenga en cuenta que algunos casos especiales no se tratan en la Tabla. Por ejemplo, la eliminación por lista no es sesgada en dos escenarios especiales de MNAR.
La eliminación por lista produce errores estándar que son correctos para el subconjunto de casos completos, pero en general demasiado grandes para todo el conjunto de datos. El cálculo de los errores estándar con la eliminación por pares es complicado. Los errores estándar después de la imputación única son demasiado pequeños, ya que los cálculos estándar no hacen distinción entre los datos observados y los datos imputados. Se han desarrollado factores de corrección para algunas situaciones (Schafer y Schenker 2000), pero una solución más conveniente es la imputación múltiple.
6 Imputación múltiple
6.1 Introducción
La imputación múltiple crea \(m > 1\) conjuntos de datos completos. Cada uno se analiza mediante un programa de análisis estándar. Los m resultados se agrupan en una estimación puntual final más el error estándar mediante una la agrupación de reglas (“reglas de Rubin”). La figura ilustra los tres pasos principales de la imputación múltiple: imputación, análisis y agrupación.
La imputación múltiple
Pasos:
El análisis comienza con datos observados e incompletos. La imputación múltiple crea varias versiones completas de los datos reemplazando los valores faltantes por valores de datos plausibles. Estos valores plausibles se extraen de una distribución modelada específicamente para cada entrada faltante. La figura muestra m = 3 conjuntos de datos imputados. En la práctica, m se suele tomar más grande. El número m = 3 se toma aquí sólo para señalar que la técnica crea múltiples versiones de los datos imputados. Los tres conjuntos de datos imputados son idénticos para las entradas de datos observados, pero difieren en los valores imputados. La magnitud de éstas diferencias refleja nuestra incertidumbre sobre qué valor imputar.
El segundo paso es estimar los parámetros de interés de cada conjunto de datos imputados. Por lo general, esto se hace aplicando el método analítico que hubiéramos utilizado si los datos estuvieran estado completos. Los resultados serán diferentes porque sus datos de entrada son diferentes. Es importante darse cuenta de que estas diferencias se deben únicamente a la incertidumbre sobre qué valor imputar.
El último paso es agrupar las estimaciones del parámetro m en una sola estimación y estimar su varianza. La varianza combina la varianza de muestreo convencional (varianza dentro de la imputación) y la varianza adicional causada por los datos faltantes (varianza entre imputación). En las condiciones adecuadas, las estimaciones agrupadas son insesgadas y tienen las propiedades estadísticas correctas.
6.2 Razones para utilizar la imputación múltiple
La imputación múltiple resuelve el problema de los errores estándar “demasiado pequeños”. La imputación múltiple es única en el sentido de que proporciona un mecanismo para hacer frente a la incertidumbre inherente de las imputaciones en sí mismas.
El nivel de confianza en un valor imputado particular se expresa como la variación a través de m conjuntos de datos completados. Por ejemplo, en una encuesta sobre discapacidad, suponga que el encuestado respondió al ítem si podía caminar, pero no respondió al ítem si podía levantarse de una silla. Si la persona puede caminar, es muy probable que también pueda levantarse de la silla. Por lo tanto, para las personas que pueden caminar, podemos sacar un “sí” por faltar “levantarse de una silla” con una probabilidad alta, digamos 0,99, y usar el valor extraído como valor imputado. En el extremo, si estamos realmente seguros, siempre atribuimos el mismo valor a esa persona. Sin embargo, en general, tenemos menos confianza en el valor real. Suponga que, en un estudio de crecimiento, falta la altura de un sujeto. Si sólo sabemos que ésta persona es una mujer, esto proporciona alguna información sobre los valores probables, pero no tanta. Entonces, el rango de valores plausibles que extraer es mucho mayor aquí. Por lo tanto, las imputaciones para esta mujer variarán mucho entre los diferentes conjuntos de datos. La imputación múltiple puede hacer frente a situaciones de alta y baja confianza por igual.
Otra razón para utilizar la imputación múltiple es que separa la solución del problema de los datos faltantes de la solución del problema de los datos completos. El problema de los datos faltantes se resuelve primero, luego el problema de los datos completos. Aunque estas fases no son completamente independientes, la respuesta a la pregunta científicamente interesante ya no se ve oscurecida por los datos faltantes. La capacidad de separar las dos fases simplifica el modelado estadístico y, por lo tanto, contribuye a una mejor comprensión del fenómeno del estudio científico.
Construyamos un subset con los datos originales. Todas sus columnas pero sólo 100 filas.
# los_nas <- readRDS("los_nas.rds")
# los_nas_100 <- los_nas[c(1:100),]
# saveRDS(los_nas_100,"los_nas_100.rds")
# DT::datatable(los_nas, extensions = 'Buttons', escape = FALSE, rownames = TRUE,
# options = list(dom = 'Bfrtip',
# buttons = list('colvis', list(extend = 'collection',
# buttons = list(
# list(extend='copy'),
# list(extend='excel',
# filename = 'tabla'),
# list(extend='pdf',
# filename= 'tabla')),
# text = 'Download')), scrollX = TRUE))
7 Librerías R para la imputación de NAs
Los valores perdidos se consideran el primer obstáculo en el modelado predictivo. Por lo tanto, es importante dominar los métodos para superarlos. Sin embargo, algunos algoritmos de aprendizaje automático afirman tratarlos de manera intrínseca, pero quién sabe qué tan bien sucede dentro de la “caja negra”.
La elección del método para imputar los valores perdidos influye en gran medida en la capacidad predictiva del modelo. En la mayoría de los métodos de análisis estadístico, la eliminación por lista es el método predeterminado que se utiliza para imputar los valores perdidos. Pero no es tan bueno ya que conduce a la pérdida de información.
R tienen algo de qué alegrarse. Estamos dotados de algunos paquetes R increíbles para la imputación de valores perdidos. Estos paquetes vienen con algunas funciones incorporadas y una sintaxis simple para imputar los datos faltantes a la vez. Se sabe que algunos paquetes funcionan mejor con variables continuas y otros con categóricas. Con este artículo, puede tomar una mejor decisión al elegir el paquete que mejor se adapte.
En este artículo, he enumerado 5 paquetes de R conocidos popularmente por la imputación de valor perdido. Puede que haya más paquetes. Pero decidí concentrarme en estos. Intenté explicar los conceptos de manera simplista con ejemplos prácticos en R. imputación de valores perdidos, potentes paquetes R
Tutorial sobre 5 potentes paquetes R utilizados para imputar valores perdidos
Lista de paquetes R
MICE
Amelia
missForest
Hmisc
mi
Paquete MICE
MICE (Imputación multivariante mediante ecuaciones encadenadas) es uno de los paquetes más utilizados por los usuarios de R. La creación de múltiples imputaciones en comparación con una sola imputación (como la media) se encarga de la incertidumbre en los valores perdidos.
MICE asume que los datos faltantes son Missing at Random (MAR), lo que significa que la probabilidad de que falte un valor depende solo del valor observado y se puede predecir usándolos. Imputa datos variable por variable especificando un modelo de imputación por variable.
Por ejemplo: Supongamos que tenemos X1, X2… .Xk variables. Si X1 tiene valores perdidos, entonces se retrocederá en otras variables X2 a Xk. Los valores perdidos en X1 serán reemplazados por los valores predictivos obtenidos. De manera similar, si X2 tiene valores perdidos, las variables X1, X3 a Xk se utilizarán en el modelo de predicción como variables independientes. Posteriormente, los valores perdidos se reemplazarán con valores predichos.
De forma predeterminada, la regresión lineal se utiliza para predecir valores perdidos continuos. La regresión logística se utiliza para valores categóricos perdidos. Una vez que se completa este ciclo, se generan múltiples conjuntos de datos. Estos conjuntos de datos difieren solo en los valores perdidos imputados. En general, se considera una buena práctica crear modelos a partir de estos conjuntos de datos por separado y combinar sus resultados.
Precisamente, los métodos que utiliza este paquete son:
PMM (Coincidencia de media predictiva): para variables numéricas logreg (Regresión logística): para variables binarias (con 2 niveles) polyreg (regresión politómica bayesiana): para variables de factor (> = 2 niveles) Modelo de probabilidades proporcionales (ordenado,> = 2 niveles)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
summary(iris)
## 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
##
##
##
<- prodNA(iris, noNA = 0.1)
iris.mis summary(iris.mis)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.10 setosa :43
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.30 versicolor:46
## Median :5.700 Median :3.000 Median :4.250 Median :1.30 virginica :44
## Mean :5.798 Mean :3.058 Mean :3.697 Mean :1.21 NA's :17
## 3rd Qu.:6.375 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.80
## Max. :7.900 Max. :4.400 Max. :6.600 Max. :2.50
## NA's :16 NA's :7 NA's :14 NA's :21
<- subset(iris.mis, select = -c(Species))
iris.mis summary(iris.mis)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.10
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.30
## Median :5.700 Median :3.000 Median :4.250 Median :1.30
## Mean :5.798 Mean :3.058 Mean :3.697 Mean :1.21
## 3rd Qu.:6.375 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.80
## Max. :7.900 Max. :4.400 Max. :6.600 Max. :2.50
## NA's :16 NA's :7 NA's :14 NA's :21
El paquete MICE tiene una función conocida como md.pattern (). Devuelve una forma tabular del valor perdido presente en cada variable en un conjunto de datos.
md.pattern(iris.mis)
## Sepal.Width Petal.Length Sepal.Length Petal.Width
## 99 1 1 1 1 0
## 16 1 1 1 0 1
## 13 1 1 0 1 1
## 3 1 1 0 0 2
## 10 1 0 1 1 1
## 2 1 0 1 0 2
## 5 0 1 1 1 1
## 2 0 0 1 1 2
## 7 14 16 21 58
Entendamos esta tabla. Hay 98 observaciones sin valores perdidos. Hay 10 observaciones con valores perdidos en Sepal.Length. Del mismo modo, hay 13 valores perdidos con Sepal.Width y así sucesivamente.
Esto se ve feo. Derecha ? También podemos crear una imagen que represente los valores perdidos. También se ve muy bien. Vamos a ver.
<- aggr(iris.mis, col=c('navyblue','yellow'),
mice_plot numbers=TRUE, sortVars=TRUE,
labels=names(iris.mis), cex.axis=.7,
gap=3, ylab=c("Missing data","Pattern"))
##
## Variables sorted by number of missings:
## Variable Count
## Petal.Width 0.14000000
## Sepal.Length 0.10666667
## Petal.Length 0.09333333
## Sepal.Width 0.04666667
Comprendamos esto rápidamente. Hay un 67% de valores en el conjunto de datos sin ningún valor perdido. Hay un 10% de valores perdidos en Petal.Length, un 8% de valores perdidos en Petal.Width y así sucesivamente. También puede ver el histograma que describe claramente la influencia de los valores perdidos en las variables.
Ahora, imputemos los valores faltantes.
Aquí hay una explicación de los parámetros utilizados:
m: se refiere a 5 conjuntos de datos imputados maxit - Se refiere al no. de iteraciones tomadas para imputar valores perdidos método: se refiere al método utilizado en la imputación. utilizamos el emparejamiento de medias predictivo.
$imp$Sepal.Width imputed_Data
## 1 2 3 4 5
## 18 3.5 3.4 3.3 3.6 3.6
## 44 3.5 3.8 3.0 3.9 3.2
## 68 2.7 3.0 2.8 3.0 2.5
## 79 2.2 2.8 2.8 2.8 2.8
## 84 2.7 2.8 2.3 3.0 2.5
## 121 3.0 2.5 3.0 2.8 2.5
## 123 3.2 3.1 3.2 2.5 3.3
Dado que hay 5 conjuntos de datos imputados, puede seleccionar cualquiera usando la función complete().
<- complete(imputed_Data,2)
completeData head(completeData)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 5.1 3.5 1.4 0.4
## 2 4.9 3.0 1.4 0.2
## 3 4.7 3.2 1.3 0.2
## 4 4.6 3.1 1.5 0.2
## 5 5.0 3.6 1.0 0.2
## 6 5.4 3.9 1.7 0.4
8 Imputar los primeros 100 registros de nuestra tabla de trabajo con MICE:
Leamos nuestra tabla original de 238 columnas y 755582 filas:
<- readRDS("C:/Users/chris/OneDrive/Documentos/archivos_grandes/el_dataset_de_trabajo.rds")
a <- as.data.frame(a) a
Hagamos por razones de tiempo un subset de 50 columnas y 100 filas:
<- a[c(1:100),c(1:50)]
nas datatable(nas)
for (i in 2:50) {
== -999.00] <- NA
nas[,i][nas[,i]
}<- as.data.frame(nas)
nas <- nas[,-1] nas
<- colnames(nas)
columnas for (i in 1:49) {
names(nas)[i] <- paste0("a",columnas[i])
}
<- nas[,c(1:49)]
tabla_nas # tabla_nas <- nas
library(mice)
<- mice(tabla_nas, m=5, maxit = 50, method = 'pmm', seed = 500) imputed_Data
## Warning: Number of logged events: 5722
# summary(imputed_Data)
8.1 Veamos nuestra tabla original ya imputada:
<- a[1:100,1]
parcela
<- complete(imputed_Data,3)
completeData <- cbind(parcela,completeData)
z datatable(z, extensions = 'Buttons', escape = FALSE, rownames = FALSE,
options = list(dom = 'Bfrtip',
buttons = list('colvis', list(extend = 'collection',
buttons = list(
list(extend='copy'),
list(extend='excel',
filename = 'tabla'),
list(extend='pdf',
filename= 'tabla')),
text = 'Download')), scrollX = TRUE)) %>%
formatRound(columns=c(colnames(completeData)) ,mark = "", digits=3)
9 Referencias
Tutorial on 5 Powerful R Packages used for imputing missing values/ https://www.analyticsvidhya.com/blog/2016/03/tutorial-powerful-packages-imputing-missing-values/
Todo Sobre El manejo De Datos Faltantes Baijayanta Roy Jul 10, 2020
https://www.datasource.ai/es/data-science-articles/todo-sobre-el-manejo-de-datos-faltantes
https://bookdown.org/yihui/rmarkdown-cookbook/number-lines.html
(1978). Multiple imputations in sample surveys. A phenomenological bayesian approach to nonresponse. Proceedings of the Survey Research Methods Section, American Statistical Association. 20–34.↩︎