r语言 - RandomForestSRC:如何获得任何时间点的生存概率?



我使用randomForestSRC包来建模一些生存数据。我使用rfsrc函数来训练模型。我的火车数据经过严格审查,这种情况只发生在1%的情况下。观测时间从3个月到13年不等,但所有事件都发生在前2年内,其余的都是经过正确审查的数据。我想使用该模型来预测测试数据集上的生存概率,我对不同时间点(患者参加研究后1年、3年、5年)的预测概率感兴趣。使用随机生存森林是否可能,因为预测函数返回的生存概率只参考观察到的事件时间?


我在老兵数据集上演示了我的过程,我们可以看到结果预测矩阵的维度为37x63(测试数据集中的个体数x火车数据集中的唯一事件次数),预测的生存概率对应于火车数据集中的事件时间。我的问题是:在观察到的最大事件时间之后,我如何预测生存概率?更具体地说:以老兵为例,如何预测时间= 500?

data(veteran, package = "randomForestSRC")
# order dataset by time and take first 100/137 rows as train data
# just for the sake of demonstrating the problem
veteran <- veteran[order(veteran$time), ]
train_dat <- veteran[1:100, ]
test_dat <- veteran[101:nrow(veteran), ]
# train model
veteran.grow <- rfsrc(Surv(time, status) ~ ., train_dat, ntree = 100)
# make predictions 
veteran.pred <- predict(veteran.grow, test_dat)
# Check dimensions of the matrix that predicts survival probabilities
dim(veteran.pred$survival)
[1] 37 63
# Check maximum survival time corresponding to the predicted probabilities
max(veteran.grow$time.interest)
[1] 139
# how to do predictions for time = 500?

您所要求的功能在randomForestSRC包中没有实现,也就是说您只能预测存在于训练数据集中的生存函数。

然而,主要用于解释生存模型的survex包也提供了统一界面进行预测的功能。可以按照下面的示例完成:

library(randomForestSRC)
library(survex)
data(veteran, package = "randomForestSRC")
veteran <- veteran[order(veteran$time), ]
train_dat <- veteran[1:100, ]
test_dat <- veteran[101:nrow(veteran), ]
veteran.grow <- rfsrc(Surv(time, status) ~ ., train_dat, ntree = 100)
explainer <- explain(veteran.grow)
pred <- predict(explainer, test_dat, output_type="survival", times=500)
dim(pred)
[1] 37  1

最新更新