2011-12-03 78 views
61

我想,以适应随机森林模型,但是当我打电话如何在R中创建具有缺失(NA)值的随机森林?

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

我收到以下错误

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

在目前的状态下,这个问题很难回答。你能用一些样本数据更新你的问题吗? – Chase

+1

@ MattO'Brien还有趣的是,问题的质量是基于观点数而不是问题本身的优点来讨论的。答案是,因为@Joran不知道要问什么,并且为提问者的问题提供了一个很好的解决方案。 – user7610

回答

101

我对这个问题的第一反应是,它并没有表现出多大的研究因为“每个人”都知道随机森林不能处理预测变量中的缺失值。但是在检查?randomForest时,我必须承认它可以更明确地说明这一点。

(虽然,Breiman的PDF链接到文档中并明确地说,遗漏值只是没有得到处理的)。

的官方文档,我可以看到的唯一明显的线索是默认值na.action参数为na.fail,这对新用户来说可能太神秘了。

在任何情况下,如果你的预测有缺失值,你有(基本)两种选择:

  1. 使用不同的工具(rpart手柄缺失值很好。)
  2. 归咎于缺少的值

毫不奇怪,randomForest包具有这样做的功能,rfImpute?rfImpute的文档贯穿其使用的基本示例。

如果只有少数情况下缺少值,您也可以尝试设置na.action = na.omit来简单地删除这些情况。

当然,这个答案有点猜测你的问题确实只是缺少了值。

+0

你碰巧知道在OP的第一个参数中有什么'WIN〜.'意思?这当然不是提问的最佳地点,但想知道你是否会知道。谢谢。 –

+4

@ user273158这是模型公式,在'?randomForest'和'formula'参数下记录。它告诉R使用'WIN'作为响应变量,'.'是速记,意思是“数据帧中的所有其他变量”。所以它告诉R使用'WIN'作为响应变量,所有其他可用变量都是预测变量。有关更多详细信息,请参阅“?公式”。 – joran

3

如果有可能缺失值的信息,那么你可以inpute缺失值,并增加额外的二元变量(与new.vars<-is.na(your_dataset)),并检查它是否降低误差,如果new.var过大集将它添加到your_dataset那么你可以使用唯有它,挑significiant变量与varImpPlot并将它们添加到your_dataset,你也可以尝试单变量添加到your_dataset,其对NAnew.var <- rowSums(new.vars)

的数字。这是不是离topick回答,如果缺少变量信息会计因为他们可以单独纠正由于不完美的插补程序导致的模型误差增加。

缺失值是信息性的,然后它们是由于非随机原因引起的,它在社会实验环境中尤其常见。