R语言生存分析04-Cox比例风险模型诊断

作者:白介素2

相关阅读:
R语言生存分析04-Cox比例风险模型诊断
R语言生存分析03-Cox比例风险模型
R语言生存分析-02-ggforest
R语言生存分析-01
ggpubr-专为学术绘图而生(二)
ggstatsplot-专为学术绘图而生(一)
生存曲线
R语言GEO数据挖掘01-数据下载及提取表达矩阵
R语言GEO数据挖掘02-解决GEO数据中的多个探针对应一个基因
R语言GEO数据挖掘03-limma分析差异基因
R语言GEO数据挖掘04-功能富集分析

如果没有时间精力学习代码,推荐了解:零代码数据挖掘课程

Cox比例风险模型诊断

Cox比例风险模型的建立是基于几个假设之上的,因此一般建好模型后需要进行诊断,评估拟合的模型是否能够用于描述数据

诊断的内容包括:

  • 比例风险假定;

  • 模型影响点(异常值)识别;

  • 比例风险的对数值与协变量之间的非线性关系识别;

对上述三方面的诊断,常见的方法为残差法。

  • Schoenfeld 残差用于检验比例风险假定;

  • Deviance 残差用于影响点(异常值)识别;

  • Martingale残差用于非线性检验;

载入survival and survminer

library("survival")
library("survminer")

计算cox模型

library("survival")
res.cox <- coxph(Surv(time, status) ~ age + sex + wt.loss, data =  lung)
res.cox
## Call:
## coxph(formula = Surv(time, status) ~ age + sex + wt.loss, data = lung)
## 
##               coef  exp(coef)   se(coef)      z      p
## age      0.0200882  1.0202913  0.0096644  2.079 0.0377
## sex     -0.5210319  0.5939074  0.1743541 -2.988 0.0028
## wt.loss  0.0007596  1.0007599  0.0061934  0.123 0.9024
## 
## Likelihood ratio test=14.67  on 3 df, p=0.002122
## n= 214, number of events= 152 
##    (14 observations deleted due to missingness)

检验比例风险假设-PH假设

  • PH假设可通过假设检验和残差图检验。正常情况下,Schoenfeld残差应该与时间无关,如果残差与时间有相关趋势,则违反PH假设的证据。残差图上的横轴代表时间,如果残差均匀的分布则表示残差与时间相互独立。
  • R语言survival包中的函数cox.zph函数提供简便的实现这一过程的方法
test.ph <- cox.zph(res.cox)
test.ph
##             rho chisq     p
## age     -0.0483 0.378 0.538
## sex      0.1265 2.349 0.125
## wt.loss  0.0126 0.024 0.877
## GLOBAL       NA 2.846 0.416
  • 从输出的结果看,三个协变量的P值都大于0.05,说明每个变量均满足PH检验,而模型的整体检验P值0.416也没有统计学意义,因此我们认为模型整体满足PH检验。

图形诊断

survminer包中的ggcoxzph()函数可以绘制每个协变量随时间变化的Schoenfeld残差图

ggcoxzph(test.ph)
image.png
  • 上图中实线是与曲线拟合的平滑样条曲线,虚线表示拟合周围的+/- 2标准误差带。
  • 没有与时间相关变化模式,个各个协变量满足风险比例假设

检验异常的的观测

  • 绘制Deviance残差图或者dfbeta值实现,以下选择dfbeta,改为deviance即残差图
  • survminer中的ggcoxdiagnostics()函数
ggcoxdiagnostics(res.cox, type = "dfbeta",
                 linear.predictions = FALSE, ggtheme = theme_bw())
image.png

上图表示,将最大dfbeta值的大小与回归系数进行比较表明,没有一个观察结果是单独影响的,即使年龄和重量损失的某些dfbeta值与其他值相比较大。

非线性诊断- non linearity

  • 通常,我们假设连续协变量具有线性形式。但是,应该检验这个假设是否成立。 使用连续协变量绘制Martingale残差是用于检测非线性的常用方法,或者换句话说,用于评估协变量的函数形式。对于给定的连续协变量,图中的模式可能表明变量不适合。
  • R语言survminer中的ggcoxfunctional()函数可以绘图
  • 例如我们检验age变量,可使用如下代码
ggcoxfunctional(Surv(time, status) ~ age + log(age) + sqrt(age), data = lung)
image.png
  • 结果显示,有一定程度的非线性存在

参考资料

推荐阅读更多精彩内容