probabilidad - ¿Cómo construir bosques aleatorios en R con valores perdidos(NA)?
introduccion ala probabilidad y estadistica mendenhall 13th pdf (2)
Me gustaría ajustar un modelo de bosque aleatorio, pero cuando llamo
library(randomForest)
cars$speed[1] <- NA # to simulate missing value
model <- randomForest(speed ~., data=cars)
Obtuve el siguiente error
Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, :
missing values in object
Mi reacción inicial a esta pregunta fue que no mostró mucho esfuerzo de investigación, ya que "todos" saben que los bosques aleatorios no manejan los valores perdidos en los predictores. Pero al revisar ?randomForest
debo confesar que podría ser mucho más explícito sobre esto.
(Aunque, el PDF de Breiman vinculado en la documentación dice explícitamente que los valores perdidos simplemente no se manejan del todo).
La única pista obvia en la documentación oficial que pude ver fue que el valor predeterminado para el parámetro na.fail
es na.fail
, que podría ser demasiado críptico para los nuevos usuarios.
En cualquier caso, si sus predictores tienen valores perdidos, tiene (básicamente) dos opciones:
- Use una herramienta diferente (la parte maneja muy bien los valores perdidos).
- Imputar los valores perdidos
No es sorprendente que el paquete randomForest
tenga una función para hacer esto, rfImpute
. La documentación en ?rfImpute
ejecuta a través de un ejemplo básico de su uso.
Si solo un pequeño número de casos tiene valores faltantes, también puede intentar configurar na.action = na.omit
para simplemente descartar esos casos.
Y, por supuesto, esta respuesta es un poco de adivinar que su problema realmente es simplemente tener valores perdidos.
Si existe la posibilidad de que los valores faltantes sean informativos, puede inventar valores perdidos y agregar variables binarias adicionales (con new.vars<-is.na(your_dataset)
) y verificar si se reduce el error, si new.var
es demasiado grande como para your_dataset
a your_dataset
entonces podrías usarlo solo, elegir variables significativas con varImpPlot
y agregarlas a your_dataset
, también podrías intentar agregar una sola variable a your_dataset
que cuente el número de new.var <- rowSums(new.vars)
Esta no es una respuesta fuera de lo común, si las variables faltantes son informativas, la contabilidad podría corregir el aumento del error del modelo debido al procedimiento de imputación de imperfecto solo.
Los valores faltantes son informativos y surgen debido a causas no aleatorias, es especialmente común en los entornos de experimentos sociales.