2011-12-03 20 views
61

me gustaría para adaptarse a un modelo de bosque aleatorio, pero cuando llamo¿Cómo construir bosques aleatorios en R con valores faltantes (NA)?

library(randomForest) 
cars$speed[1] <- NA # to simulate missing value 
model <- randomForest(speed ~., data=cars) 

me sale el siguiente error

Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, : 
    missing values in object 
+0

En su estado actual, esta pregunta será muy difícil de responder. ¿Puedes actualizar tu pregunta con algunos datos de muestra? – Chase

+1

@ MattO'Brien También es divertido que la calidad de una pregunta se discuta en función de la cantidad de reproducciones y no de los méritos de la pregunta en sí. Y la respuesta, ya que @ Joran no tuvo problemas para averiguar qué se le estaba pidiendo y proporcionó lo que parece ser una buena solución para el problema del que hace la pregunta. – user7610

Respuesta

101

Mi reacción inicial a esta pregunta es que no mostró mucha investigación esfuerzo, ya que "todos" saben que los bosques aleatorios no manejan los valores faltantes en los predictores. Pero al verificar ?randomForest debo confesar que podría ser mucho más explícito al respecto.

(Aunque, Breiman de PDF relacionado con la documentación Qué dice explícitamente que los valores perdidos simplemente no se manejan en absoluto.)

La única pista obvia en la documentación oficial que pude ver fue que el valor por defecto para el parámetro na.action es na.fail, que puede ser demasiado críptico para los usuarios nuevos.

En cualquier caso, si los predictores tienen valores que faltan, que tiene (básicamente) dos opciones:

  1. utilizar una herramienta diferente (rpart asas valores que faltan muy bien.)
  2. Imputar los valores que faltan

No es sorprendente que el paquete randomForest tenga una función para hacer esto, rfImpute. La documentación en ?rfImpute se ejecuta a través de un ejemplo básico de su uso.

Si solo un pequeño número de casos tienen valores faltantes, también puede intentar configurar na.action = na.omit para simplemente soltar esos casos.

Y, por supuesto, esta respuesta es un poco de adivinar que su problema es simplemente tener valores perdidos.

+0

¿Por casualidad sabes qué significa 'WIN ~ .' en el primer argumento en el OP?Este ciertamente no es el mejor lugar para hacer la pregunta, pero me preguntaba si sabría. Gracias. –

+4

@ user273158 Esa es la fórmula del modelo, como se documenta en '? RandomForest' con el argumento' formula'. Le dice a R que use 'WIN' como la variable de respuesta, y' .' es una abreviatura que significa "todas las otras variables en el marco de datos". Así que le está diciendo a R que use 'WIN' como variable de respuesta y que todas las demás variables disponibles sean predictores. Ver '? Formula' para más detalles. – joran

3

Si hay posibilidad de que los valores que faltan son informativos, entonces puede Inpute valores perdidos y añadir variables binarias adicionales (con new.vars<-is.na(your_dataset)) y comprobar si se reduce el error, si new.var es demasiado grande conjunto para añadirlo a your_dataset entonces se podría utilizar solo, recoger las variables significiant con varImpPlot y añadirlos a your_dataset, también se puede tratar de añadir una sola variable para your_dataset que cuenta el número de NA 's new.var <- rowSums(new.vars)

Esto no es fuera de topick responder, si las variables que faltan son la contabilidad informativa para ellos podría corregir el aumento del error del modelo debido al procedimiento de imputación de imperfec solo.

Los valores faltantes son informativos y surgen debido a causas no aleatorias, es especialmente común en las configuraciones de experimentos sociales.

Cuestiones relacionadas