Rpart将观测值分配给内部节点

时间:2018-07-20 19:52:20

标签: r tree rpart

当我在数据上运行rpart并缺少一些解释变量时,我在fit$where向量中得到了一些内部节点。我知道usesurrogate=2是默认设置,但为了确定起见我写了它。

基于有限的测试,此行为似乎发生在具有ncompete > 1 (in fit$frame)的节点上。我以为我可能会错误地从fit$frame中获取变量名(使用$where作为行索引),但是似乎还有其他事情发生:唯一$where分配的数量是大于树中终端节点的数量。

为显示该行为,我整理了一个简单的示例。在这段代码中,我只得到一个额外分配的节点;在我的实际数据集中(专有的),我得到了更多(包括对根节点的一些分配)。似乎不是替代治疗的失败;分配给内部节点的某些观察结果并没有缺少split变量(在某些情况下是)。我误解了$where向量吗?

set.seed(40)
library(survival)
library(rpart)
pbc <- pbc

# changing the status variable to simplify the example
pbc[which(pbc$status == 1), 3] <- 0
pbc[which(pbc$status == 2), 3] <- 1
pbc.miss <- as.data.frame(
  lapply(pbc, function(x) x[(sample(c(TRUE, NA), prob=c(0.3, 0.7), 
                                    size=length(x), replace=TRUE))]))     
pbc.miss$time <- pbc$time
pbc.miss$status <- pbc$status                                   
rpart.test <- rpart(Surv(time, status)~., pbc.miss, 
                    control=rpart.control(cp=0, minbucket=10, usesurrogate=2))
node.assign <- rpart.test$frame[unique(rpart.test$where), ]

0 个答案:

没有答案