提问人:EI_Stats 提问时间:9/26/2023 最后编辑:ProgmanEI_Stats 更新时间:9/26/2023 访问量:39
在 Cox 回归分析中使用 R 进行瞬态协变量
Utilizing Time-Dependent Covariates in Cox Regression Analysis with R
问:
我正在处理急性髓系白血病 (AML) 数据。我想研究接受同种异体移植的患者和未接受同种异体移植的患者之间的总生存期是否存在差异。我已经执行了 Cox 回归检验的比例风险假设并绘制了残差,我们可以观察到该假设没有得到满足。代码如下:
library(survival)
library(survminer)
OS_AlloHCT <- coxph(Surv(SGmesos, Estadoactual) ~ AlloTPH, data = AML)
test.ph <- cox.zph(OS_AlloHCT)
test.ph
# chisq df p
# AlloTPH 93.3 1 <2e-16
# GLOBAL 93.3 1 <2e-16
ggcoxzph(test.ph)
残差图使我们得出结论,不符合比例风险假设。出于这个原因,并出于临床考虑,我决定将此变量视为瞬态协变量。为此,我在数据库中创建了新变量:、 和 。txtime
start
stop
FechaAloTPH
表示移植日期,是诊断日期,是最后一次随访。 表示诊断日期 (Fechadiagnóstico) 和移植日期 (FechaAloTPH) 之间的差值(以天为单位)。它必须是一个数值变量:Fechadiagnóstico
Fechaúltimavisita
txtime
AML$txtime <- difftime(AML$FechaAloTPH, AML$Fechadiagnóstico,"days")
AML$txtime <- as.numeric(AML$txtime)
AloTPH
是一个二元变量,如果患者已接受骨髓移植,则取值 1,如果没有,则取值 0。如果患者已接受骨髓移植,并且总生存天数大于移植前的天数(这是合乎逻辑的),则开始日期将设置为 txtime(距离移植日期的天数)。否则,开始日期将设置为 0。
如果患者接受了骨髓移植,并且总生存期的天数大于移植前的天数(同样,这是合乎逻辑的),则停止日期将设置为 SGdies(距离最后一次就诊的天数)。否则,停止日期将设置为 txtime 的值。
AML$start <- ifelse(AML$AloTPH ==1 & (AML$SGdies > AML$txtime),AML$txtime,0)
AML$stop <- ifelse(AML$AloTPH ==1 & (AML$SGdies > AML$txtime),AML$SGdies, AML$txtime)
AML$stop <- ifelse(is.na(AML$stop),AML$SGdies, AML$stop)
在这里,我们可以看到分析所需的变量:
前面已经描述了所有变量,如果患者死亡,则取值 1,如果患者还活着,则取值 0。Estadoactual
我创建了 Simon-Makuch 图:
library(survival)
library(survminer)
library(ggplot2)
model <- survfit(Surv(start,stop,Estadoactual)~AloTPH, data=AML)
ggsurvplot(model)
Cox 回归模型(将变量视为瞬态协变量)如下所示:AloTPH
AML$Surv <- Surv(AML$start,AML$stop,AML$Estadoactual)
AML$AloTPH<- relevel(as.factor(AML$AloTPH), ref = "1")
cox_OS_AloTPH<- coxph(Surv~AloTPH,data=AML)
summary(cox_OS_AloTPH)
# coef exp(coef) se(coef) z Pr(>|z|)
# AloTPH0 -0.1831 0.8327 0.1082 -1.691 0.0908 .
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# exp(coef) exp(-coef) lower .95 upper .95
# AloTPH0 0.8327 1.201 0.6736 1.029
# Concordance= 0.518 (se = 0.009 )
# Likelihood ratio test= 2.82 on 1 df, p=0.09
# Wald test = 2.86 on 1 df, p=0.09
# Score (logrank) test = 2.87 on 1 df, p=0.09
我发现了一种创建 Simon-Makuch 图和进行 Mantel-Byar 测试的替代方法:
#install.packages("aod")
library(aod)
#install.packages("RcmdrPlugin.EZR")
library(RcmdrPlugin.EZR)
library(Rcmdr)
TempTD <- AML
Mantel.Byar(Group = "AloTPH", Event = TempTD$Estadoactual,
StartTime = TempTD$start, StopTime = TempTD$stop,
method = c("SAS", "Tominaga"), plot=0, landmark=0)
您如何看待这一分析?这是对的吗?
答: 暂无答案
评论