我在Rpart包中的NA功能上遇到了困难。我得到了以下 Dataframe (代码如下)
Outcome VarA VarB
1 1 1 0
2 1 1 1
3 1 NA 1
4 0 0 1
5 0 0 0
6 0 NA 0
我试图拟合一个能做出完美预测的Rpart对象,逻辑规则应该是它预测:
- 如果VarA=1,则预测=1
- 如果VarA=0,则预测=0
- 如果VarA=NA,则使用VarB(如果VarB=0,则预测=0)
但是,我一直在努力寻找正确的代码,以便以正确的方式将VarA的NA值“传递”到树中。我尝试过使用usesurrogates
和na.control
,但没有效果...请在下面找到我的代码。
PS. rpart工作,如果VarA将读取VarA=c(1,1,2,0,0,2)
,但不幸的是,这不是一个伟大的解决方案,为更大的 Dataframe ,我正在工作。
library(rpart)
Outcome=c(1,1,1,0,0,0)
VarA=c(1,1,NA,0,0,NA)
VarB=c(0,1,1,1,0,0)
dg=as.data.frame(cbind(Outcome, VarA, VarB))
dg
fit=rpart(Outcome ~ VarA + VarB, data=dg, method="class",na.action = na.pass,control=rpart.control(usesurrogate=1, minsplit=1, cp=0.001))
fit
newdata=dg
newpred=predict(fit,newdata=newdata,type = "class")
dh=cbind(dg,newpred)
dh
3条答案
按热度按时间x4shl7ld1#
我使用了您的代码并对其进行了修改,以使用您想要的
NA
处理逻辑。我改了这几行:
其余的都是一样的:
0mkxixxg2#
尝试将VarA自动替换为如下内容:
这应将所有NA替换为2。
0x6upsns3#
这是我从你上面的问题中了解到的,当varA失败时,你想使用VarB:-
但是您的预测完全取决于VarA(fit),因此在将VarA传递到www.example.com之前对其进行更改rpart.you将获得预测输出。