我使用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