【问题标题】:Obtain Kaplan-Meier survival risk per individual instance获得每个个体实例的 Kaplan-Meier 生存风险
【发布时间】:2013-12-19 03:43:47
【问题描述】:

问题

鉴于 n-具有 time 和 status 变量(以及其他)的患者记录,我想获得他们在 2、4 内的时间段内的生存风险, 6、8、10 年。

我有 24 - 47 个月 (2 年)、48 - 83 个月 (4 年)、84 - 107 个月 (6 年)、108 - 119 个月 (8 年) 和 120 - “最多可用”个月(10 年)。

从个人的角度来看,一个生存月数为 30 个月的患者将被包括在两年期间内,并与其他预测变量一起我想知道该患者在两年内的生存风险。

我的方法

我正在使用R code described in this thread 检索我的数据的生存风险百分比。

km <- survfit(Surv(time, status)~1, data=mydata)
survest <- stepfun(km$time, c(1, km$surv))

time 变量是生存月份,status 的值 1 和 0 分别表示存活和死亡。

代码输出如下(取自here):

> survest(0:100)
 [1] 1.0000000 0.9854015 0.9781022 0.9708029 0.9635036 0.9635036 0.9635036
 [8] 0.9416058 0.9124088 0.9124088 0.8978102 0.8905109 0.8759124 0.8613139
 [15] 0.8613139 0.8467153 0.8394161 0.8394161 0.8175182 0.8029197 0.7883212
 [22] 0.7737226 0.7664234 0.7664234 0.7518248 0.7299270 0.7299270 0.7225540
 [29] 0.7225540 0.7151810 0.7004350 0.6856890 0.6856890 0.6783160 0.6783160

我的问题是:这些是我需要使用 survest(0:300000) 的 300,000 条个人记录的实际生存估计吗?我尝试了survest(0:1000),但结果已经收敛到某个值,这并不能解决我的问题。

【问题讨论】:

  • 只是为了确保我对您的理解正确:您是要为人群或个别患者获取 KM 估计值吗?我认为不可能获得个体患者的 KM 估计值,因为 KM 估计值给出了在人口水平的某个时间点观察到的生存概率。个人的“观察到的风险”为 0(活着)或 1(死亡)。要获得个人的预测生存概率,您必须使用某种模型。您提供的代码给出了不同时间点的人口水平的 KM 估计值。
  • @Rob,我正在尝试获取个别患者的 KM 估计值。你知道我怎样才能实现我的目标吗?

标签: r data-mining probability survival-analysis


【解决方案1】:

正如我在评论中提到的,我认为不可能获得个体患者的 KM 估计值。 KM 估计器给出了在种群水平上某个时间点观察到的生存概率。然而,观察到的个体生存概率为 0(死亡)或 1(活着),两者之间没有任何关系。

您必须使用某种模型(例如 Cox PH、加速故障时间模型、神经网络等)来获得预测的生存概率,而不是观察到的生存概率。这些概率会告知您具有该特定变量组合的个体在特定时间点存活的风险。

更新:示例代码基于 OP 提供的代码here

library(pec) ; library(rms)

# Simulate data
set.seed(1)
examp.data <- SimSurv(3000)

# fit a Cox model with predictors X1+X2
coxmodel <- cph(Surv(time,status)~X1+X2, data=examp.data, surv=TRUE) 

# predicted survival probabilities can be extracted at selected time-points:
ttt <- quantile(examp.data$time)
ttt
#          0%          25%          50%          75%         100% 
#6.959458e-03 9.505409e+00 3.077284e+01 7.384565e+01 7.100556e+02 

# Get predicted survival probabilities at selected time-points:
preds <- predictSurvProb(coxmodel, newdata=examp.data, times=ttt)

# Store in original data
examp.data$predict.surv.prob.Q1 <- preds[,1] # pred. surv. prob. at  0.006959458
examp.data$predict.surv.prob.Q2 <- preds[,2] # pred. surv. prob. at  9.505409
examp.data$predict.surv.prob.Q3 <- preds[,3] # pred. surv. prob. at  30.77284
examp.data$predict.surv.prob.Q4 <- preds[,4] # pred. surv. prob. at  73.84565
examp.data$predict.surv.prob.Q5 <- preds[,5] # pred. surv. prob. at  710.0556

现在您可以预测数据中每个人在这 5 个时间点的生存概率。当然,您确实需要根据区分(例如使用 pec-package 中的函数 cindex)和校准(使用校准图,请参阅 rms-package)来评估模型的预测性能。

【讨论】:

  • 非常感谢。你能解释一下我可以使用的模型吗,比如可能的 R 函数?我计划使用 WEKA 并使用我的个体患者风险作为结果变量,但我现在不能,因为我还没有那个变量。
  • @llorgge 实际上,X1+X2 是数据集中的预测变量。如果您希望在特定数据集中获得可能的最佳预测,您可能需要添加所有潜在的预测变量,但是如果您的目标是在新数据集或现实生活中的患者中使用该模型,则应该考虑过度乐观。详见Steyerberg的书,对预测研究很有帮助。
  • @llorgge 关于分位数:我只是举了你的例子。这些确实是实际的时间点(在这种情况下是五分位数)。如果我是你,我会采取更多(临床)相关时间点,例如你在问题中提到的时间点 2、4、6、8、10 年,你可以在times 参数中填写为c(2,4,6,8,10)(如果您的数据集中time 变量的规模当然是以年为单位)。
  • 您也可以只使用月份,但是如果您想将其更改为年份,我不会将其更改为它们范围内的年份,因为那样您会丢失一些信息。只需将其除以 12。五分位数中的 25% 意味着数据集中 25% 的生存时间低于该值。例如。以我的回答为例:25% 的人的时间低于 9.505409,50% 的时间低于 30.77284,等等。
  • 是的,每一列都包含数据中每个人的个体生存概率,不同的时间点有单独的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多