一段时间内 Kaplan-Meier 曲线下的面积
Area under the Kaplan-Meier curve for a time interval
我想计算一段时间内 Kaplan-Meier 曲线下的面积。我知道我可以计算从 0 到 t 的曲线下面积,也就是使用 print.survfit
函数的受限平均生存时间:
library(survival)
km <- survfit(Surv(futime, fustat) ~ 1, data = ovarian)
print(km, rmean = 600)
但是,我想要的是某个时间间隔内 Kaplan-Meier 曲线下的面积,例如从 t1 到 t2。
有没有办法左截断卡普兰迈尔曲线下面积的计算?
欢迎任何建议!
所以你知道如何获得 AUC(0-t1)
和 AUC(0-t2)
。正如@missuse 在他的评论中指出的那样,AUC(t1-t2) = AUC(0-t2) - AUC(0-t1)
。
我不确定您是否可以获得 方差,因为从技术上讲,您在该线下有一条线和一个区域 (AUC)。你能做的是
(1) 为 Kaplan-Myer
绘制 95%CI
(2) 计算 AUC(t1-t2)
上 CI
(3) 为较低的 CI
计算 AUC(t1-t2)
(4) 将结果表示为范围,其方式与表示正常 95% 置信区间的方式相同。
这样行吗?还有:为什么要使用 KM 曲线下的面积?因为,正如@42- 指出的那样,您将以一些时间单位到达 "life expectancy",并且您不需要 KM 到达那里(?)
生存曲线的方差"around"非常类似于二项式过程的比例方差。在您的情况下,您显然能够计算直到 t1 的数据的方差。因此截断 t1 处的数据,然后计算到 t2 的方差。
和@Oka 一样,我想知道你为什么想要 AUC,但后来我意识到 AUC 只是 "life expectancy" 用于完整的 KM 曲线,单位是 "years" 或其他一些时间单位.
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
实际上,由于 surv2sampleComp
包的 surv2sample
,我最终弄清楚了如何计算 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
我想计算一段时间内 Kaplan-Meier 曲线下的面积。我知道我可以计算从 0 到 t 的曲线下面积,也就是使用 print.survfit
函数的受限平均生存时间:
library(survival)
km <- survfit(Surv(futime, fustat) ~ 1, data = ovarian)
print(km, rmean = 600)
但是,我想要的是某个时间间隔内 Kaplan-Meier 曲线下的面积,例如从 t1 到 t2。 有没有办法左截断卡普兰迈尔曲线下面积的计算? 欢迎任何建议!
所以你知道如何获得 AUC(0-t1)
和 AUC(0-t2)
。正如@missuse 在他的评论中指出的那样,AUC(t1-t2) = AUC(0-t2) - AUC(0-t1)
。
我不确定您是否可以获得 方差,因为从技术上讲,您在该线下有一条线和一个区域 (AUC)。你能做的是
(1) 为 Kaplan-Myer
绘制 95%CI(2) 计算 AUC(t1-t2)
上 CI
(3) 为较低的 CI
计算AUC(t1-t2)
(4) 将结果表示为范围,其方式与表示正常 95% 置信区间的方式相同。
这样行吗?还有:为什么要使用 KM 曲线下的面积?因为,正如@42- 指出的那样,您将以一些时间单位到达 "life expectancy",并且您不需要 KM 到达那里(?)
生存曲线的方差"around"非常类似于二项式过程的比例方差。在您的情况下,您显然能够计算直到 t1 的数据的方差。因此截断 t1 处的数据,然后计算到 t2 的方差。
和@Oka 一样,我想知道你为什么想要 AUC,但后来我意识到 AUC 只是 "life expectancy" 用于完整的 KM 曲线,单位是 "years" 或其他一些时间单位.
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
实际上,由于 surv2sampleComp
包的 surv2sample
,我最终弄清楚了如何计算 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