在这里使用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()
分类模型。
我希望我对尝试运行多变量随机森林模型的询问是有道理的。如果还有其他问题,请告诉我。我也可以回去做一些调整。
答案 0 :(得分:1)
将您的列组合在randomForest公式之外:
data[["y3"]] <- paste0(data$y1, data$y2)
randomForest(y3~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE)