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

spo*_*234 6 r random-forest survival-analysis

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
Run Code Online (Sandbox Code Playgroud)

这给了我所有患者的总生存概率.

如何获得不同时间点(例如0-5个月或0-10个月)的每个人的生存概率?

scr*_*les 6

如果您不熟悉该软件包,那么这个文档并不是很明显,但它是可能的.

加载数据

data(pbc, package = "randomForestSRC")
Run Code Online (Sandbox Code Playgroud)

创建试验和测试数据集

pbc.trial <- pbc %>% filter(!is.na(treatment))
pbc.test <- pbc %>% filter(is.na(treatment))
Run Code Online (Sandbox Code Playgroud)

建立我们的模型

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

测试模型

test.pred.rfsrc <- predict(rfsrc_pbc, 
                           pbc.test,
                           na.action="na.impute")
Run Code Online (Sandbox Code Playgroud)

所有好东西都保存在我们的预测对象中.该$survival对象是一个n行的矩阵(每个病人1个)和n列(每个一个time.interest- 这些是自动选择的,虽然你可以使用ntime参数约束它们.我们的矩阵是106x122)

test.pred.rfsrc$survival
Run Code Online (Sandbox Code Playgroud)

$time.interest对象是不同"time.interests"的列表(122,与我们矩阵中的列数相同$surival)

test.pred.rfsrc$time.interest
Run Code Online (Sandbox Code Playgroud)

假设我们希望看到我们5年的预测状态,我们
需要确定哪个时间最接近1825天(因为我们的测量周期是天),当我们查看我们的$time.interest对象时,我们看到第83行= 1827天或大约5年.第83行$time.interest对应于$survival矩阵中的第83 列.因此,为了看到预测的5年生存概率,我们只看一下矩阵的第83列.

test.pred.rfsrc$survival[,83]
Run Code Online (Sandbox Code Playgroud)

然后,您可以针对您感兴趣的任何时间点执行此操作.