使用randomForestSRC计算特定时间点的生存概率

6

我正在使用 rfsrc 模拟一个生存问题,就像这样:

library(OIsurv)
library(survival)
library(randomForestSRC)

data(burn)
attach(burn)

library(randomForestSRC)

fit <- rfsrc(Surv(T1, D1) ~  ., data=burn)

# predict on the train set
pred <- predict(fit, burn, OOB=TRUE, type=response)
pred$predicted

这给出了所有患者的总体生存率概率。
我如何获得每个人在不同时间点(比如0-5个月或0-10个月)的生存概率?

我注意到"pred$predicted"可以大于100。因此,它不应该是"所有患者的总体生存概率"。有谁知道这是用于生存模型的什么? - Katelynn ruan
1个回答

9
这并不是一份对于非熟悉该软件包的人来说很容易理解的文档,但是它仍然是可以实现的。
加载数据。
data(pbc, package = "randomForestSRC")

创建试用和测试数据集
pbc.trial <- pbc %>% filter(!is.na(treatment))
pbc.test <- pbc %>% filter(is.na(treatment))

建立我们的模型

rfsrc_pbc <- rfsrc(Surv(days, status) ~ .,
                   data = pbc.trial,
                   na.action = "na.impute")

测试模型

test.pred.rfsrc <- predict(rfsrc_pbc, 
                           pbc.test,
                           na.action="na.impute")

所有的有用信息都包含在我们的预测对象中。$survival对象是一个n行(每个患者1行)和n列(每个时间兴趣1列 - 这些是自动选择的,但您可以使用ntime参数进行约束)。我们的矩阵是106x122。

test.pred.rfsrc$survival
< p > $time.interest 对象是一个不同的 "time.interest" 列表 (122 个,与我们从 $surival 得到的矩阵的列数相同)。


test.pred.rfsrc$time.interest

假设我们想要查看在5年时的预测状态,我们需要找出距离1825天(因为我们的测量周期是以天为单位)最接近的时间。当我们查看$time.interest对象时,我们看到第83行= 1827天,大约5年。$time.interest中的第83行对应于我们的$survival矩阵中的第83列。因此,要查看5年后生存的预测概率,我们只需要查看矩阵的第83列。
test.pred.rfsrc$survival[,83]

您可以针对您感兴趣的任何时间点执行此操作。

我认为指责这个文档"非常不好"是不公平的。请查看?predict.rfsrc上的最后一个示例。使用累积风险函数生成生存曲线:exp(-pred.fit$chf) - IRTFM
@BondedDust,你是对的。我已经回复更新了我的帖子。 - scribbles
1
@scribbles 这个话题有一个快速的问题。time.interest变量中的值是对应于总时间还是观察将从现在开始存活的时间?“从现在开始”是指生存算法运行的时间。 - jjreddick
我在使用模型中遇到了因子问题。它根本无法运行,而且似乎非常有 bug。 - Seanosapien
非常好的回答!如果您有时间,能否请看一下我的问题?https://stackoverflow.com/questions/66684292/r-plot-individual-predictions谢谢 - stats_noob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接