试图对生存树进行交叉验证

时间:2016-05-05 14:48:42

标签: r validation tree survival-analysis rpart

我正在尝试使用rpart中的决策树进行生存分析,类似于此处:Using a survival tree from the 'rpart' package in R to predict new observations。为了将决策树生存模型与其他模型(如Cox回归)进行比较,我想使用交叉验证来获取Dxy并比较c-index。当我尝试使用包含Surv对象的rpart fit validate.rpart时,我收到错误。借用上一个问题的例子:

library(rms)

# Make Data:
set.seed(4)
dat = data.frame(X1 = sample(x = c(1,2,3,4,5), size = 100, replace=T))
dat$t = rexp(100, rate=dat$X1)
dat$t = dat$t / max(dat$t)
dat$e = rbinom(n = 100, size = 1, prob = 1-dat$t )

# Survival Fit:
sfit = survfit(Surv(t, event = e) ~ 1, data=dat)
plot(sfit)

# Tree Fit:
require(rpart)
tfit = rpart(formula = Surv(t, event = e) ~ X1 , data = dat, model=TRUE, control=rpart.control(minsplit=30, cp=0.01))
plot(tfit); text(tfit)
validate(tfit)

错误:

Error in unclass(x)[i, , drop = FALSE] : 
(subscript) logical subscript too long

是否有解决此问题的方法?有没有其他方法可以从rpart生存模型中获取c-index?

1 个答案:

答案 0 :(得分:2)

R rmsvalidate.rpart函数目前没有实现生存模型(实际上是简单的指数分布模型)。我已经改进了代码来执行此操作,此功能将在几周内发布到CRAN的rms包的下一个版本中。明天可以在https://github.com/harrelfe/rms获得新的源代码,但这不是很有帮助,因为validate.rpart方法

请注意,递归分区的样本大小可能过大,例如在某些情况下为100,000个主题,因为回归树可靠且稳定。