我在Rpart包中遇到了NA功能的问题。我得到了以下数据框(请参见下面的代码)
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)
然而,我正在努力寻找正确的代码来以正确的方式“传递NA值”到树中的VarA。我已经尝试使用usesurrogates
和na.control
,但都没有成功...请看下面的代码。
PS.如果VarA读取VarA=c(1,1,2,0,0,2)
,则rpart可以正常工作,但不幸的是这对于我正在处理的更大的数据框架来说并不是一个好的解决方案...
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