我正在为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的NA值”。我试过和usesurrogates和na.control合作,但是没有用.请在下面找到密码。
PS。如果VarA会读VarA=c(1,1,2,0,0,2),那么这个部件就能工作了,但不幸的是,对于我正在研究的更大的数据格式来说,这不是一个很好的解决方案.
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发布于 2013-09-22 20:18:50
我接受了您的代码并对其进行了修改,以使用您想要的NA处理逻辑。
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我改变了这句话:
dg$VarC <- ifelse(is.na(dg$VarA), ifelse(df$VarB == 1, 1, 0), dg$VarA)
fit=rpart(Outcome ~ VarC, 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发布于 2013-08-15 21:00:46
尝试用如下所示自动替换VarA:
VarA [is.na(VarA )] <- 2这应该将所有NA替换为2。
发布于 2013-08-23 07:25:52
我从上面的问题中了解到,每当VarB失败时,您都想使用varA:-
VarA [is.na(VarA )] <-VarB[is.na(VarA )]但是您的预测完全依赖于VarA(fit),因此在将其传递给rpart.you之前对VarA进行更改将得到您的预期输出。
https://stackoverflow.com/questions/15601982
复制相似问题