我正在使用survival
库。在计算生存函数的Kaplan-Meier估计器之后:
km = survfit(Surv(time, flag) ~ 1)
我知道如何计算百分位数:
quantile(km, probs = c(0.05,0.25,0.5,0.75,0.95))
但是,我该如何计算平均生存时间?
我正在使用survival
库。在计算生存函数的Kaplan-Meier估计器之后:
km = survfit(Surv(time, flag) ~ 1)
我知道如何计算百分位数:
quantile(km, probs = c(0.05,0.25,0.5,0.75,0.95))
但是,我该如何计算平均生存时间?
平均生存时间一般取决于最大生存时间的取值。您可以使用print(km, print.rmean=TRUE)
获取受限平均生存时间。默认情况下,它假定最长的生存时间等于数据中最长的生存时间。您可以通过添加rmean
参数(例如:print(km, print.rmean=TRUE, rmean=250)
)将其设置为不同的值。
针对您的评论:我最初认为可以通过查看print(km, print.rmean=TRUE)
返回的对象来提取平均生存时间,但事实证明print.survfit
没有返回列表对象,而只是向控制台返回文本。
相反,我查看了print.survfit
的代码(您可以在控制台中键入getAnywhere(print.survfit)
查看代码),以查看平均生存时间是如何计算的。结果发现,一个名为survmean
的函数处理了这个问题,但它不是一个导出函数,这意味着当您尝试像运行“正常”函数一样运行它时,R将无法识别该函数。因此,要访问该函数,您需要运行下面的代码(其中您需要明确设置rmean
):
survival:::survmean(km, rmean=60)
您会发现该函数返回一个列表,其中第一个元素是一个包括多个命名值的矩阵,包括平均值和平均标准误差。因此,如果想要提取例如平均生存时间,您可以执行以下操作:
您将看到该函数返回一个列表,其中第一个元素是一个矩阵,其中包含多个命名值,包括平均值和平均标准误差。所以,如果要提取例如平均生存时间,您可以执行以下操作:
survival:::survmean(km, rmean=60)[[1]]["*rmean"]
print.survfit
的帮助文档提供了有关选项以及如何计算受限平均值的详细信息:
?print.survfit
均值及其方差是基于截尾估计的。也就是说,如果最后一次观测不是死亡事件,则生存曲线估计不会趋近于零,均值将无法定义。有四种可能的方法来解决这个问题,这些方法由rmean选项选择。第一种方法是将上限设置为常数,例如rmean=365。在这种情况下,报告的平均数将是每组前365天预期经历的天数。如果关注的是一个固定的时间段,这是有用的。其他选项包括“none”(没有估计)、“common”和“individual”。“common”选项使用对象中所有曲线的最长时间作为auc计算的公共上限。对于“individual”选项,平均值被计算为每条曲线在从0到该曲线的最大观测时间范围内的面积。由于终点是随机的,不同曲线的值不可比较,并且打印的标准误差低估了随机变化。此选项主要是为向后兼容提供的,因为在早期版本的代码中,该估计值是默认(唯一)的估计值。请注意,SAS(截至9.3版)使用每个个体曲线的最后事件时间之前的积分;我们认为这是最糟糕的选择,因此不提供该计算的选项。print(km, print.rmean=TRUE) # print function
sum(diff(c(0,km$time))*c(1,km$surv[1:(length(km$surv)-1)])) # manually
print(km, print.rmean=TRUE, rmean=4) # gives out 1.247
print(km, print.rmean=TRUE, rmean=4+2) # gives out 1.560
1.247+2*min(km$surv) # gives out 1.560
survival
库中可以为我计算的选项。 - isekaijin不需要使用"hidden" survival:::survmean(km, rmean=60)
。
只需使用summary(km)$table[,5:6]
,它会给出RMST及其SE。可以使用正态分布的适当分位数来计算CI。
survival:::survmean(km, rmean=60)
。只需使用summary(km)$table[,5:6]
即可,它会给出RMST及其SE。可以使用正态分布的适当分位数来计算CI。 - Bastiansummary(km)$table[5:6]
,对于整个生存曲线的RMST工作正常。但是,如果我们想提取特定时间点的RMST,我们仍然没有其他解决方案,只能使用survival:::survmean(km, rmean = 60)
。 - SeanosapiengetAnywhere(print.survfit)
时,我可以看到survmean
。任何帮助都将不胜感激。 - gladys_c_hughsummary(km, rmean = 60)$table[,"rmean"]
- 我猜这就是 @Bastian 的意思,只是在总结调用中缺少了rmean = 60
参数。 - gladys_c_hugh