1
我試圖使用rpart中的決策樹進行生存分析,類似於這裏:Using a survival tree from the 'rpart' package in R to predict new observations。爲了將決策樹生存模型與其他模型(如Cox迴歸)進行比較,我想使用交叉驗證來獲得Dxy並比較c指數。當我嘗試將validate.rpart與包含Surv對象的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?
感謝您的代碼更新,它現在看起來給我一個合理的結果,但是您的意思是「這不會有什麼幫助,因爲validate.rpart是一種方法」?它似乎非常有幫助!如果您是以我的例子中的數據爲例,那麼我的生產數據中實際上有25萬個科目。 –
對不起,我沒有寫清楚。我的意思是,如果你只是在新版本的函數中使用source(),而不重新編譯軟件包,或者在軟件包中有更多的代碼文件,系統會忽略'validate.rpart'的新版本。 –
如果你只是在'source()'後添加了一個額外的命令:'environment(validate.rpart)< - environment(cph)',那麼rms 4.5-1版本的新代碼就完好無損。 –