gpt4 book ai didi

Rpart - NA 处理

转载 作者:行者123 更新时间:2023-12-04 18:10:14 25 4
gpt4 key购买 nike

我正在努力解决 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)

但是,我正在努力寻找正确的代码以正确的方式为 VarA 在树中“传递 NA 值”。我尝试使用 usesurrogatesna.control,但无济于事...请在下面找到我的代码。

附言。如果 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

最佳答案

我获取了您的代码并将其修改为使用您想要的 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

关于Rpart - NA 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15601982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com