R - 具有两个结果变量的RandomForest

时间:2017-02-13 00:39:21

标签: r classification regression random-forest

在这里使用randomForest统计包非常新。

我试图运行一个包含2个响应变量和7个预测变量的模型,但由于响应变量的长度和/或拟合模型的性质,我似乎无法做到2响应变量。

我们假设这是我的数据和模型:

> table(data$y1)
 0  1  2  3  4 
23 43 75 47 21 

> length(data$y1)
0  4

> table(data$y2)
  0   2   3   4 
104  30  46  29

> length(data$y2)
0  4 

m1<-randomForest(cbind(y1,y2)~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)

当我运行此模型时,我收到此错误:

Error in randomForest.default(m, y, ...) : 
  length of response must be the same as predictors

我做了一些故障排除,并发现cbind()两个响应变量只是将它们的值放在一起,从而使原始长度加倍,并可能导致上述错误。例如,

length(cbind(y1,y2))
> 418
t(lapply(data, length()))
>  a   b   c   d   e   f   g   y1   y2
 209 209 209 209 209 209 209  209  209

然后,我尝试通过在每个响应变量上单独运行randomForest然后在回归模型上应用combine()来解决此问题,但遇到了以下问题:

m2<-randomForest(y1~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)
m3<-randomForest(y2~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)
combine(m2,m3)

Warning message:
In randomForest.default(m, y, ...) :
The response has five or fewer unique values.  Are you sure you want to do regression?

然后我决定将randomForest模型视为分类模型,并在运行as.factor()之前将randomForest应用于两个响应变量,但后来遇到了这个新问题:

m4<-randomForest(as.factor(y1)~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)
m5<-randomForest(as.factor(y2)~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)
combine(m4,m5)

Error in rf$votes + ifelse(is.na(rflist[[i]]$votes), 0, rflist[[i]]$votes) : 
  non-conformable arrays

我的猜测是我不能combine()分类模型。

我希望我对尝试运行多变量随机森林模型的询问是有道理的。如果还有其他问题,请告诉我。我也可以回去做一些调整。

1 个答案:

答案 0 :(得分:1)

将您的列组合在randomForest公式之外:

data[["y3"]] <- paste0(data$y1, data$y2)
randomForest(y3~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)