我正在尝试使用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?
答案 0 :(得分:2)
R rms
包validate.rpart
函数目前没有实现生存模型(实际上是简单的指数分布模型)。我已经改进了代码来执行此操作,此功能将在几周内发布到CRAN的rms
包的下一个版本中。明天可以在https://github.com/harrelfe/rms获得新的源代码,但这不是很有帮助,因为validate.rpart
是方法。
请注意,递归分区的样本大小可能过大,例如在某些情况下为100,000个主题,因为回归树可靠且稳定。