我们在临床研究中,经常要研究疾病与生存率的关系,cox回归是用得比较常见的模型之一。Cox 比例风险模型依赖于风险随时间变化的假设(PH假设),意思是协变量对结局的影响随着时间变化是固定的。然而现实中常有不满足于PH假设的情况。如文章:All-cause and cause-specific mortality associated with diabetes in prevalent hemodialysis patients中报道了一个人的糖尿病状态可能会随着时间而变化,尿毒症患者肾功能随着时间变化加重,因此Cox 比例风险模型用在此处不合适,我们可以选用COX回归模型的扩展,一般有两种内在和外部,见下图

第一种我们可以看到时间t和X有关系,对系数β没什么影响,第二种可以看到时间t对β有影响,随着时间变化β是不同的,即系数是不同的。
对于第一种情况比较少见,今天我们主要来聊聊第二种情况,系数β随时间变化的cox时变系数模型(什么叫法都有,原理大概就是这个意思),使用的是survival包自带的肺癌数据集,我们先导入R包和数据

library(survival)
lung<-lung


我们先来看一下数据,inst机构代码,time以天为单位的生存时间,status:结局变量,1为死亡0为存活,age: 年龄,sex: 男=1 女=2,ph.ecog: 由医师评定的 ECOG 表现评分。 0 = 无症状,1 = 有症状但完全不卧床,2 = 卧床时间 < 50%,3 = 卧床时间 > 50% 但不卧床,4 = 卧床,ph.karno: 由医师评定的 Karnofsky 表现评分(差=0-好=100),pat.karno: 由患者评定的 Karnofsky 性能评分,meal.cal: 用餐时消耗的卡路里,wt.loss: 过去六个月的体重减轻(磅)
我们先来拟合一个cox模型

fit2 <- coxph(Surv(time, status) ~age +ph.karno+sex,data=lung)

survival包自带的cox.zph函数可以用于PH假设的检查

zph <- cox.zph(fit2)
zph


我们可以看到ph.karno的P值小于0.05,表明ph.karno没有通过PH假设,全局显着性检验给出的 P 值 (0.0157) 表明模型缺乏拟合。我们可以通过plot函数对ph.karno这个变量进行可视化

plot(zph[2],lwd=2)
abline(0,0, col=1,lty=3,lwd=2)
abline(h= fit2$coef[2], col=3, lwd=2, lty=2)
legend("bottomright",legend=c('Reference line for null effect',"Average hazard over time","Time-varying hazard"),lty=c(3,2,1), col=c(1,3,1), lwd=2)


其中黑色虚线表示系数为0,就是ph.karno无效的情况,绿色虚线表示的是ph.karno的平均效应值,我们可以看到均线和实际背离是相当大的,因此这个情况使用cox.zph 函数来处理是非常恰当的。
对时变系数建模的一种方法是使用阶跃函数,例如 (g(t) = I ( t ≥ t o )),其中t o是指定值。这种方法的想法是将分析时间分成几个区间,并为这些时间区间分层 Cox 比例模型。随着时间的推移,固定基线协变量的影响会变得更强或更弱,这可以通过时间分层来探索。我们可以看到ph.karno大约在180和350左右有两个转折,我们可以使用survSplit函数进行分段,

lung.split <- survSplit(Surv(time, status) ~ .,data= lung, cut=c(180, 350),episode= "tgroup", id="id")

这样我们就多了一个新指标tgroup,如下图

新指标tgroup对time的时区进行了划分,被分割成 (0, 180), (180, 350) 和 (350, 455) 的区间,tgroup=1 标识第一个时间间隔(0, 180),tgroup=2 标识第二个时间间隔(180, 350),3就是(350, 455)
现在我们把lung.split这个数据拿来重新进行模型拟合,建立一个ph.karno和tgroup的交互分层

fit.split <- coxph(Surv(tstart, time, status) ~age + ph.karno:strata(tgroup)+sex,data=lung.split)
fit.split


我们可以看到tgroup=1的时候ph.karno是P是有意义的,HR=0.965594,其他时候就不行了,我们从新使用cox.zph函数进行PH假设评估

cox.zph(fit.split)


这次全部通过PH假设了,GLOBAL=0.2(大于0.05)表明模型是拟合的。
另一种方法是通过使用用户指定的参数连续函数来构造一个交互项,在 coxph() 函数中,有一个tt参数来指定时间的具体变换。在本例中,tt函数定义为“tt = function(x, t, …) x * log(t+20)”,其中 x 是具有时变效应的固定协变量,t是分析时间。tt() 函数应用于变量ph.karno。模型公式中的karno为“tt(ph.karno)”,为什么是log(t+20),依据参考文献的说法是选择在log(t+20)之上用cox.zph图的时间尺度,使得该图的前200天大致呈线性。

fit.tt <- coxph(Surv(time, status) ~age + ph.karno + tt(ph.karno)+ sex,data=lung,tt = function(x, t, ...) x * log(t+20))
fit.tt


ph.karno 和 tt(ph.karno) 的系数都具有统计显着性,这意味着 ph.karno 的影响随时间而变化。ph.karno 的时变效应可以写为 β(t) = -0.098+0.015×log( t + 20)。
我们可以使用 abline() 函数在 ph.karno 对生存的时变影响的 cox.zph 图中添加一条线。

zph.tt <- cox.zph(fit2,transform=function(t) log(t+20))
plot(zph.tt[2])
abline(coef(fit.tt)[2:3], col=2)


在有些文章中使用的是HR并非系数(如下图),如文章:All-cause and cause-specific mortality associated with diabetes in prevalent hemodialysis patients

我们也可以转换一下

也可以添加一条有意义的参考线,至于什么是有意义的需要你自己研究了

我们也可以使用timereg 包研究时变系数,timereg包附带的 timecox() 函数能够拟合具有时间固定和时变系数的 Cox 模型。时变效应通过重采样方法进行测试,想了解原理的请看参考文献。

library(timereg)
fit.out <- timecox(Surv(time,status)~age+sex+ph.karno,data=lung,n.sim=500,max.time=700)
summary(fit.out)


输出的第一个表显示了非显着效应检验的结果(例如,原假设表明被检验的系数与 0 没有显着差异),这表明sex和ph . karno对生存结果有显着影响。第二个表显示了时间不变效应的检验。Kolmogorov-Smirnov 检验和 Cramer von Mises 检验都用于检验时不变效应,ph.karno 的效果不是固定时间的。

par(mfrow=c(2,2))
plot(fit.out)


ph.karno在开始时很陡,然后在大约 250 之后变平。变量年龄没有显着影响,因为置信区间与零效应参考线相交。变量性别有显着影响,但不能拒绝时不变效应的原假设。通过 const() 函数将性别和年龄设置为时间固定效应变量。

fit.const <- timecox(Surv(time,status)~const(age)+const(sex)+ph.karno,data=lung,n.sim=500,max.time=700)
summary(fit.const)


年龄和性别的常数效应分别为 0.0135 和 -0.6210。

par(mfrow=c(1,2))
plot(fit.const)


参考文献:

  1. Thomas L, Reyes EM. Tutorial: Survival Estimation for Cox Regression Models with Time-Varying Coefficients Using SASand R. Journal of Statistical Software 2014;61:1-23. 10.18637/jss.v061.c01
  2. Terry Therneau, Cynthia Crowson, Elizabeth Atkinson. Using Time Dependent Covariates and Time Dependent Coecients in the Cox Model. November 26, 2018
  3. Gray’s Time-Varying Coefficients Model for Posttransplant Survival of Pediatric Liver Transplant Recipients with a Diagnosis of Cancer
  4. Zhang Z, Reinikainen J, Adeleke KA, Pieterse ME, Groothuis-Oudshoorn CGM. Time-varying covariates and coefficients in Cox regression models. Ann Transl Med. 2018 Apr;6(7):121. doi: 10.21037/atm.2018.02.12. PMID: 29955581; PMCID: PMC6015946.
  5. Tian L, Zucker D, Wei LJ. On the Cox Model With Time-Varying Regression Coefficients. Harvard University Biostatistics Working Paper 2005;100:172-83.
  6. Adeleke KA, Abiodun AA, Ipinyomi RA. Semi-parametric non-proportional hazard model with time varying covariate. Womens Health Journal 2015;14:68-87
  7. Ren Y, Chang CC, Zenarosa GL, Tomko HE, Donnell DM, Kang HJ, Roberts MS, Bryce CL. Gray’s time-varying coefficients model for posttransplant survival of pediatric liver transplant recipients with a diagnosis of cancer. Comput Math Methods Med. 2013;2013:719389. doi: 10.1155/2013/719389. Epub 2013 May 12. PMID: 23762197; PMCID: PMC3665233.
  8. Sattar A, Argyropoulos C, Weissfeld L, Younas N, Fried L, Kellum JA, Unruh M. All-cause and cause-specific mortality associated with diabetes in prevalent hemodialysis patients. BMC Nephrol. 2012 Oct 1;13:130. doi: 10.1186/1471-2369-13-130. PMID: 23025844; PMCID: PMC3519533.

R语言进行COX时变系数模型(含时间依存协变量的Cox回归模型)相关推荐

  1. R语言使用epiDisplay包的mlogit.display函数获取无序多分类logistic回归模型的汇总统计信息(各分组模型对应的系数及标准差、相对危险降低率RRR值及其置信区间、AIC值等)

    R语言使用epiDisplay包的mlogit.display函数获取无序多分类logistic回归模型的汇总统计信息(各分组模型对应的系数及标准差.相对危险降低率RRR值及其置信区间.AIC值等) ...

  2. R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、使用cox模型、并添加协变量、R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的AUC曲线

    R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值.使用cox模型.并添加协变量.R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的AUC曲线 目录

  3. R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

    R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型 目录 R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

  4. R语言计算F1评估指标实战:F1 score、使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标)

    R语言计算F1评估指标实战:F1 score.使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标) 目录

  5. R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

    全文下载链接:http://tecdat.cn/?p=11974 R2WinBUGS软件包提供了从R调用WinBUGS的便捷功能.它自动以WinBUGS可读的格式写入数据和脚本,以进行批处理(自1.4 ...

  6. R语言多元(多变量)GARCH :GO-GARCH、BEKK、DCC-GARCH和CCC-GARCH模型和可视化

    全文链接:http://tecdat.cn/?p=30647 从Engle在1982发表自回归条件异方差(ARCH)模型的论文以来,金融时间序列数据的波动性就倍受关注.同时,近几年又出现了研究股票市场 ...

  7. R语言使用levels()函数来查看factor因子变量水平级别(levels)、使用levels参数重新排序因子水平级别、并可视化柱状图

    R语言使用levels()函数来查看factor因子变量水平级别(levels).使用levels参数重新排序因子水平级别.并可视化柱状图 目录

  8. R语言使用levels()函数来查看factor因子变量水平级别(levels)

    R语言使用levels()函数来查看factor因子变量水平级别(levels) 目录 R语言使用levels()函数来查看factor因子变量水平级别(levels)

  9. R语言使用OptimalCutpoints包的optimal.cutpoints函数对单变量进行ROC分析、计算约登值、寻找最佳阈值、使用plot函数可视化ROC曲线、PROC曲线并在曲线中添加最佳阈

    R语言使用OptimalCutpoints包的optimal.cutpoints函数对单变量进行ROC分析.计算约登值.寻找最佳阈值(threshold.cutoff).使用plot函数可视化ROC曲 ...

最新文章

  1. tar命令使用方法以及.tar.gz文件和.zip文件
  2. 碾压专业机构,27 岁华裔小伙推出美国最准新冠预测模型
  3. (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)决了当时的问题,那时LZ接触JAVA刚几个月,比葫芦画瓢的用了观察者模式。...
  4. C#中的OOP相关概念
  5. Hbase的shell出现wrong number of arguments xxx以及undefined method any?for xxxx
  6. Koa 中间件的执行
  7. 阿里数据库内核月报:2015年06月
  8. C++简单实现 前缀树
  9. [HDU 2096] 小明A+B
  10. 杰理之串口通讯之AT指令集【篇】
  11. Python报错记录之“list indices must be integers or slices, not str”
  12. 一篇文章教你搞懂日志采集利器 Filebeat
  13. 可视化 | Python时间序列化NBA球星赛季数据
  14. [SPRD CAMERA] 4 HAL Camera open流程一
  15. mysql数据库默认密码在哪看_怎么查看mysql数据库的登录名和密码
  16. 2021年暑期训练阶段四Day1
  17. ASR项目实战-从源码开始构建Kaldi
  18. 我的世界斗罗封神服务器怎么注册,我的世界斗罗封神服务器-我的世界斗罗封神mod手机版v1.17.2.01-游戏宝手游网...
  19. pg创建数据库和用户并授权
  20. C语言写个简单的串口调试助手

热门文章

  1. 进程管道:pipe调用
  2. 【HDU 5936 --- Difference】折半枚举+二分
  3. 电子设备辐射EMC整改案例
  4. 女式瑜伽服-市场现状及未来发展趋势
  5. 编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。
  6. 【转载】东方智慧和西方智慧的比较
  7. 组合专机-EHY-112-90汽车变速箱壳体钻孔组合机床(夹具设计+组合机床设计)
  8. 【分享】超越 Everything 文档搜索软件 的 4 款神器!
  9. android动态壁纸1——初步框架(有背景,能使用,仿可爱宝贝)
  10. 苹果uwb_在哪都能找到你!苹果新iPhone将支持UWB高精度室内定位