比较特定时间点的生存率

Opo*_*sum 9 r survival-analysis

我有以下生存数据

library(survival)
data(pbc)

#model to be plotted and analyzed, convert time to years
fit <- survfit(Surv(time/365.25, status) ~ edema, data = pbc)

#visualize overall survival Kaplan-Meier curve
plot(fit)
Run Code Online (Sandbox Code Playgroud)

以下是Kaplan-Meier图的结果

在此输入图像描述

我将以这种方式进一步计算1年,2年,3年的生存率:

>     summary(fit,times=c(1,2,3))

Call: survfit(formula = Surv(time/365.25, status) ~ edema, data = pbc)

232 observations deleted due to missingness 
                edema=0 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    1    126      12    0.913  0.0240        0.867        0.961
    2    112      12    0.825  0.0325        0.764        0.891
    3     80      26    0.627  0.0420        0.550        0.714

                edema=0.5 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    1     22       7    0.759  0.0795        0.618        0.932
    2     17       5    0.586  0.0915        0.432        0.796
    3     11       4    0.448  0.0923        0.299        0.671

                edema=1 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    1      8      11    0.421  0.1133       0.2485        0.713
    2      5       3    0.263  0.1010       0.1240        0.558
    3      3       2    0.158  0.0837       0.0559        0.446
Run Code Online (Sandbox Code Playgroud)

如您所见,结果输出显示了不同级别之间95%的置信区间,edema但没有实际p值.无论置信区间是否重叠,我仍然可以很好地了解这些时间点的生存是否显着不同,但我希望得到精确的p值.我怎样才能做到这一点?

Jon*_*ett 7

我认为以下代码可以满足您的需求:

library(survival)
data(pbc)

#model to be plotted and analyzed, convert time to years
fit <- survfit(Surv(time/365.25, status) ~ edema, data = pbc)

#visualize overall survival Kaplan-Meier curve
plot(fit)

threeYr <- summary(fit,times=3)

#difference in survival at 3 years between edema=0 and edemo=1 (for example) is
threeYr$surv[1] - threeYr$surv[3]
#the standard error of this is
diffSE <- sqrt(threeYr$std.err[3]^2 + threeYr$std.err[1]^2)
#a 95% CI for the diff is
threeYr$surv[1] - threeYr$surv[3] - 1.96 *diffSE
threeYr$surv[1] - threeYr$surv[3] + 1.96 *diffSE
#a z-test test statistic is
zStat <- (threeYr$surv[1] - threeYr$surv[3])/diffSE
#and a two-sided p-value testing that the diff. is 0 is
2*pnorm(abs(zStat), lower.tail=FALSE)

Run Code Online (Sandbox Code Playgroud)

或者,可以通过基于估计的概率估计风险比或优势比来进行比较,并在对数风险比或对数优势比尺度上执行推断/测试。一般来说,我预计它会表现得更好(在测试规模和置信区间覆盖范围方面),因为在这些尺度上的正态近似会比在风险差异尺度上更好。


mil*_*lan 5

您的问题是“不同类型水肿的X 年生存率是否不同”。

例如,如果您对 3 年生存率感兴趣;您只需要关注曲线的那部分(随访的前 3 年),如图所示。3 年后仍然存活的患者的随访时间设置为 3 年(即本分析中的最长随访时间):pbc$time[pbc$time > 3*365.25] <- 3*365.25.

coxph使用该数据集的“survival”包(您在分析中已经使用的相同包)计算对数秩检验将为您提供 P 值,该值表明三组之间的三年生存率是否不同(高度在这个例子中很重要)。您还可以使用相同的模型来生成水肿与特定原因生存相关的 P 值和风险比。

最长随访 3 年的 KM 曲线

  • 我不同意这个答案。Cox 回归和对数秩检验(它们是不同的检验,不是一个!)比较整个 0-3 年时间间隔的曲线。但这里我们需要比较 3 年的生存概率,而不是整个区间的生存概率! (2认同)