比较特定时间点的生存率
Comparing survival at specific time points
我有以下生存数据
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)
这是生成的 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
如您所见,结果输出显示 edema
不同水平之间的 95% 置信区间,但没有实际的 p 值。无论置信区间是否重叠,我仍然很清楚这些时间点的生存率是否存在显着差异,但我想要精确的 p 值。我该怎么做?
您的问题是'are x-year survival rates different for the different categories of edema'。
例如,如果您对 3 年生存率感兴趣;您只需关注曲线的那部分(前 3 年的后续行动),如图所示。 3年后仍然活着的患者的随访时间设置为3年(即本次分析中的最长随访时间):pbc$time[pbc$time > 3*365.25] <- 3*365.25
.
使用包 'survival' 中的 coxph
(您已经在分析中使用的相同包)为此数据集计算对数秩检验将为您提供 P 值,说明是否三组之间的三年生存率不同(在本例中非常显着)。您还可以使用相同的模型生成 水肿 与特定原因生存率相关的 P 值和风险比。
我认为以下代码可以满足您的需求:
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)
或者,可以根据估计的概率估计风险比或优势比来进行比较,并在对数风险比或对数优势比尺度上执行 inference/test。总的来说,我希望它表现更好(就测试大小和置信区间覆盖率而言),因为正态近似在这些尺度上比在风险差异尺度上更好。
我有以下生存数据
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)
这是生成的 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
如您所见,结果输出显示 edema
不同水平之间的 95% 置信区间,但没有实际的 p 值。无论置信区间是否重叠,我仍然很清楚这些时间点的生存率是否存在显着差异,但我想要精确的 p 值。我该怎么做?
您的问题是'are x-year survival rates different for the different categories of edema'。
例如,如果您对 3 年生存率感兴趣;您只需关注曲线的那部分(前 3 年的后续行动),如图所示。 3年后仍然活着的患者的随访时间设置为3年(即本次分析中的最长随访时间):pbc$time[pbc$time > 3*365.25] <- 3*365.25
.
使用包 'survival' 中的 coxph
(您已经在分析中使用的相同包)为此数据集计算对数秩检验将为您提供 P 值,说明是否三组之间的三年生存率不同(在本例中非常显着)。您还可以使用相同的模型生成 水肿 与特定原因生存率相关的 P 值和风险比。
我认为以下代码可以满足您的需求:
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)
或者,可以根据估计的概率估计风险比或优势比来进行比较,并在对数风险比或对数优势比尺度上执行 inference/test。总的来说,我希望它表现更好(就测试大小和置信区间覆盖率而言),因为正态近似在这些尺度上比在风险差异尺度上更好。