【问题标题】:Rpart - NA handlingRpart - NA 处理
【发布时间】:2013-03-14 04:15:16
【问题描述】:

我正在为 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,但无济于事……请在下面找到我的代码。

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

【问题讨论】:

    标签: r na rpart


    【解决方案1】:

    尝试用类似这样的方式自动替换 VarA:

    VarA [is.na(VarA )] <- 2
    

    这应该用 2 替换所有 NA。

    【讨论】:

      【解决方案2】:

      我从您的上述问题中了解到,当 varA 失败时您想使用 VarB:-

      VarA [is.na(VarA )] <-VarB[is.na(VarA )]
      

      但您的预测完全取决于 VarA(fit),因此在将 VarA 传递给 rpart 之前对其进行更改。您将获得预测的输出。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-01-04
          • 2020-12-15
          • 2012-07-17
          • 2015-06-09
          • 2021-09-03
          • 2021-12-08
          • 2015-10-10
          • 2014-12-28
          • 1970-01-01
          相关资源
          最近更新 更多