Kaplan-Meier曲线下面积的时间间隔

问题描述 投票:1回答:3

我想计算一个间隔时间在Kaplan-Meier曲线下的面积。我知道我可以计算从0到t的曲线下面积,也就是使用print.survfit函数限制平均生存时间:

library(survival)
km <- survfit(Surv(futime, fustat) ~ 1, data = ovarian)
print(km, rmean = 600)

但是,我想要的是Kaplan-Meier曲线下一段时间间隔的区域,例如:从t1到t2。有没有办法在Kaplan Meier曲线下截断区域的计算?任何建议都会受到欢迎!

r survival-analysis
3个回答
1
投票

生存曲线“周围”的方差非常类似于二项式过程的比例方差。在您的情况下,您显然能够计算最多t1的数据的方差。因此,在t1截断数据,然后计算到t2的方差。

就像@Oka一样,我想知道为什么你会想要AUC,但后来我意识到AUC只是完整KM曲线的“预期寿命”,单位将是“年”或其他时间单位。

 str(ovarian)
'data.frame':   26 obs. of  6 variables:
 $ futime  : num  59 115 156 421 431 448 464 475 477 563 ...
 $ fustat  : num  1 1 1 0 1 0 1 1 0 1 ...
 $ age     : num  72.3 74.5 66.5 53.4 50.3 ...
 $ resid.ds: num  2 2 2 2 2 1 2 2 2 1 ...
 $ rx      : num  1 1 1 2 1 1 2 2 1 2 ...
 $ ecog.ps : num  1 1 2 1 1 2 2 2 1 2 ...
 t1 = 400;  t2 = 700

 km <- survfit(Surv(futime, fustat) ~ 1, data = ovarian)
 print(km, rmean = 400)
 #---------------
Call: survfit(formula = Surv(futime, fustat) ~ 1, data = ovarian)

         n     events     *rmean *se(rmean)     median    0.95LCL    0.95UCL 
      26.0       12.0      355.6       18.5      638.0      464.0         NA 
    * restricted mean with upper limit =  400 


 km2 <- survfit(Surv(futime, fustat) ~ 1, 
                 data = ovarian[ !(ovarian$futime <=400), ])
 print(km2, rmean = 700)
#-----------------
Call: survfit(formula = Surv(futime, fustat) ~ 1, data = ovarian)

         n     events     *rmean *se(rmean)     median    0.95LCL    0.95UCL 
      26.0       12.0      532.2       41.1      638.0      464.0         NA 
    * restricted mean with upper limit =  700 

0
投票

所以你知道如何获得AUC(0-t1)AUC(0-t2)。正如@missuse在他的评论中指出的那样,AUC(t1-t2) = AUC(0-t2) - AUC(0-t1)

我不确定你是否可以获得相应的差异,因为从技术上讲,你在该线下有一条线和一个区域(AUC)。你能做的是

(1)对Kaplan-Meier绘制95%CI

(2)计算AUC(t1-t2)为上CI

(3)计算AUC(t1-t2)的CI值较低

(4)以与表达正常95%置信区间相同的方式将结果表示为范围。

那会有用吗?而且:你为什么要使用KM曲线下的面积?因为,正如@ 42-指出的那样,你会得到一些时间单位的“预期寿命”,你不需要知识管理到达那里(?)


0
投票

实际上,由于surv2sample包的surv2sampleComp,我最终想出了如何计算t1和t2之间AUC的方差。它通过重新采样来实现。

library("survival")
library("surv2sampleComp")
data(veteran)
# we need a group variable to use the surv2sample function
veteran$group <- as.numeric(veteran$karno < 70) 
rmst <- surv2sample(veteran$time, veteran$status, veteran$group, npert = 500, tau_start= 100, tau = 200)
rmst$group0
#---------------
                             Est.       Lower 95%   Upper 95%          SE
RMST                       43.4025761  32.1207404  55.8039197  6.15988181
# results truncated
© www.soinside.com 2019 - 2024. All rights reserved.