我将通过一个闪亮的应用程序进行生存分析,因此输出将经常变化。我有运行生存分析的代码,然后每26个月打印一次摘要(截至目前为随机选择的数字),然后执行10次。
km_fit <- survfit(Surv(Life_Time_Months, Is_Closed) ~ 1, data = My_Data)
summary(km_fit, times = c(25 * (1:10)))
摘要的输出大致如下所示:
time n.risk n.event survival std.err lower 95% CI upper 95% CI
26 99910 19897 0.841 0.00104 0.839 0.843
52 72512 15084 0.704 0.00134 0.701 0.707
78 52153 10037 0.598 0.00150 0.595 0.601
104 39170 5106 0.534 0.00159 0.531 0.537
130 30783 3394 0.484 0.00165 0.481 0.487
156 24563 2404 0.444 0.00171 0.440 0.447
182 19351 1625 0.412 0.00176 0.408 0.415
208 15463 1154 0.385 0.00182 0.382 0.389
234 11924 796 0.363 0.00187 0.359 0.367
260 9179 512 0.346 0.00194 0.342 0.349
而不是要获得10个打印结果,是26的倍数,我真的只希望其中一个结果在生存百分比为0.5或尽可能接近时才具有。
我将如何去做?
与存活百分比中位数相对应的时间可以在拟合摘要中获得。
例如,如果您使用数据集lung
:
library(survival)
library(survminer)
data("lung")
fit <- survfit(Surv(time, status) ~ sex, data = lung)
[fit
的输出是:
> fit
Call: survfit(formula = Surv(time, status) ~ sex, data = lung)
n events median 0.95LCL 0.95UCL
sex=1 138 112 270 212 310
sex=2 90 53 426 348 550
如您所见,中位数是每种情况下生存百分比等于0.5的时间。要提取此值,可以对摘要表进行排序:
> summary(fit)$table
records n.max n.start events *rmean *se(rmean) median 0.95LCL 0.95UCL
sex=1 138 138 138 112 325.0663 22.59845 270 212 310
sex=2 90 90 90 53 458.2757 33.78530 426 348 550
并通过执行操作仅提取median
:
> summary(fit)$table[,"median"]
sex=1 sex=2
270 426
适应您的代码,您应该尝试:
summary(km_fit)$table[,"median"]
它回答了您的问题吗?
如果没有,请考虑提供数据的可复制示例(How to make a great R reproducible example)