Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得每个实例的Kaplan-Meier生存风险 问题_R_Data Mining_Probability_Survival Analysis - Fatal编程技术网

获得每个实例的Kaplan-Meier生存风险 问题

获得每个实例的Kaplan-Meier生存风险 问题,r,data-mining,probability,survival-analysis,R,Data Mining,Probability,Survival Analysis,考虑到n例患者记录中的时间和状态变量(除其他变量外),我想获得他们在2、4、6、8、10年内的生存风险 我有一个划分为24-47个月(2年)、48-83个月(4年)、84-107个月(6年)、108-119个月(8年)和120个“最多可用”月(10年) 从个人角度来看,一名生存月数为30个月的患者将被纳入两年期,我希望与其他预测变量一起了解该患者两年内的生存风险 我的方法 我正在使用检索数据的生存风险百分比 我的问题是:这些是我需要使用survest(0:300000)的300000个个人记录的

考虑到n例患者记录中的
时间
状态
变量(除其他变量外),我想获得他们在2、4、6、8、10年内的生存风险

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

从个人角度来看,一名生存月数为30个月的患者将被纳入两年期,我希望与其他预测变量一起了解该患者两年内的生存风险

我的方法 我正在使用检索数据的生存风险百分比


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

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

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

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

库(pec);图书馆(rms)
#模拟数据
种子(1)

为了确保我正确理解您的意思,您是在尝试获取人群或个别患者的KM估计值?我认为不可能得到单个患者的KM估计值,因为KM估计值给出了在人群水平上某个时间点观察到的存活概率。个人的“观察风险”为0(活着)或1(死亡)。为了得到一个个体的预测生存概率,你必须使用某种模型。您提供的代码给出了不同时间点人群水平上的KM估计值。@Rob,我正在尝试获取单个患者的KM估计值。你知道我怎样才能达到我的目标吗?非常感谢。你能解释一下我可以利用的模型吗,比如可能的R函数?我计划使用WEKA并将我的个体患者风险作为结果变量,但我现在不能,因为我还没有该变量。@llorgge事实上,X1+X2是数据集中的预测因子。如果您希望在特定数据集中获得最佳预测,您可能希望添加所有潜在的预测因子,但是如果您的目标是在新数据集中或在现实生活中的患者中使用该模型,您应该考虑过度乐观。有关详细信息,请参阅《圣经》,这本书对预测研究非常有帮助。@llorgge关于分位数:我刚才举了你的例子。这些确实是实际的时间点(在本例中为五分位数)。如果我是你,我会选择更多(临床上)相关的时间点,比如你在问题2,4,6,8,10年中提到的时间点,你可以在
times
参数中填写
c(2,4,6,8,10)
(当然,如果数据集中
time
变量的比例是年)。你也可以使用月份,但是如果你想把它改成年,我不会把它改成它们在范围内的年,因为那样你就会失去一些信息。把它除以12。五分位数中的25%意味着数据集中25%的生存时间低于该值。例如,在我的回答中的例子:25%的个体的时间低于9.505409,50%的个体的时间低于30.77284,等等。是的,每列包含数据中每个个体的生存概率,不同的时间点有单独的列。
km <- survfit(Surv(time, status)~1, data=mydata)
survest <- stepfun(km$time, c(1, km$surv))
> 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
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