我正在遵循https://cran.r-project.org/web/packages/survival/vignettes/compete.pdf中列出的示例,尽管这个问题是在真实的数据集上。
我有一个竞争风险场景,患者可能死于两种原因之一。可以使用以下方法设置示例数据集:
library(survival)
data(cancer)
mgus2$etime <- with(mgus2, ifelse(pstat == 0, futime, ptime))
event <- with(mgus2, ifelse(pstat == 0, 2 * death, 1))
mgus2$event <- factor(event, 0:2, labels = c("censor", "pcm", "death"))
在此示例中,患者可能患有
pcm
或 death
,但不能同时患有这两种疾病 - 因此是传统的竞争风险情况。可以使用以下方法拟合多状态模型:
coxph(Surv(etime, event) ~ sex, data = mgus2, id = id)
给出:
Call:
coxph(formula = Surv(etime, event) ~ sex, data = mgus2, id = id)
1:2 coef exp(coef) se(coef) robust se z p
sexM -0.05938 0.94235 0.18723 0.18733 -0.317 0.751
1:3 coef exp(coef) se(coef) robust se z p
sexM 0.22800 1.25608 0.06900 0.06869 3.319 0.000902
States: 1= (s0), 2= pcm, 3= death
Likelihood ratio test=11.11 on 2 df, p=0.003866
n= 1384, number of events= 975
我的理解是,这将两个单独的特定原因 cox 模型与数据相匹配。如果这是真的,我将能够使用以下方法对数据进行等效建模:
coxph(Surv(etime, event == "pcm") ~ sex, data = mgus2, id = id)
coxph(Surv(etime, event == "death") ~ sex, data = mgus2, id = id)
这给出了非常相似但不相同的结果:
> coxph(Surv(etime, event == "pcm") ~ sex, data = mgus2, id = id)
Call:
coxph(formula = Surv(etime, event == "pcm") ~ sex, data = mgus2,
id = id)
coef exp(coef) se(coef) z p
sexM -0.05938 0.94235 0.18723 -0.317 0.751
Likelihood ratio test=0.1 on 1 df, p=0.7511
n= 1384, number of events= 115
> coxph(Surv(etime, event == "death") ~ sex, data = mgus2, id = id)
Call:
coxph(formula = Surv(etime, event == "death") ~ sex, data = mgus2,
id = id)
coef exp(coef) se(coef) z p
sexM 0.228 1.256 0.069 3.304 0.000952
Likelihood ratio test=11.01 on 1 df, p=0.0009061
n= 1384, number of events= 860
我的问题是,为什么这两个结果不同?我是否实际上一开始就没有拟合特定原因的模型,或者我是否误解了拟合这些模型所需的内容?我想分别对它们进行建模的原因是我将进行子组分析,然后使用
emmeans
进行后估计。到目前为止,我无法使用多状态方法来完成这项工作,只能使用单故障 cox 模型。
不同之处在于,在竞争风险模型中,正在计算稳健方差。然后将它们用于 z 分数和 p 值。各个端点模型的情况并非如此。您可以在多端点模型中设置
robust = FALSE
以使系数表与各个端点模型完全匹配:
coxph(Surv(etime, event) ~ sex, data = mgus2, id = id, robust = FALSE)
#> Call:
#> coxph(formula = Surv(etime, event) ~ sex, data = mgus2, robust = FALSE,
#> id = id)
#>
#>
#> 1:2 coef exp(coef) se(coef) z p
#> sexM -0.05938 0.94235 0.18723 -0.317 0.751
#>
#>
#> 1:3 coef exp(coef) se(coef) z p
#> sexM 0.228 1.256 0.069 3.304 0.000952
#>
#> States: 1= (s0), 2= pcm, 3= death
#>
#> Likelihood ratio test=11.11 on 2 df, p=0.003866
#> n= 1384, number of events= 975
coxph(Surv(etime, event == "pcm") ~ sex, data = mgus2, id = id)
#> Call:
#> coxph(formula = Surv(etime, event == "pcm") ~ sex, data = mgus2,
#> id = id)
#>
#> coef exp(coef) se(coef) z p
#> sexM -0.05938 0.94235 0.18723 -0.317 0.751
#>
#> Likelihood ratio test=0.1 on 1 df, p=0.7511
#> n= 1384, number of events= 115
coxph(Surv(etime, event == "death") ~ sex, data = mgus2, id = id)
#> Call:
#> coxph(formula = Surv(etime, event == "death") ~ sex, data = mgus2,
#> id = id)
#>
#> coef exp(coef) se(coef) z p
#> sexM 0.228 1.256 0.069 3.304 0.000952
#>
#> Likelihood ratio test=11.01 on 1 df, p=0.0009061
#> n= 1384, number of events= 860