基于R语言实现COX模型诊断
一般在建立好Cox模型之后,需要对模型进行诊断。诊断内容包括模型的前提条件,诸如Cox模型的PH假定(比例风险假定),共线性假定等。本篇我们通过合实际例子讲解Cox模型诊断过程,实现软件R语言。
1.1 COX模型的诊断内容
Cox模型的诊断一般包括三方面的内容:
比例风险假定;
模型影响点(异常值)识别;
比例风险的对数值与协变量之间的非线性关系识别;
对上述三方面的诊断,常见的方法为残差法。
Schoenfeld残差用于检验比例风险假定;
Deviance残差用于影响点(异常值)识别;
Martingale残差用于非线性检验;
1.2 R中用于评估Cox模型的包
我们将会用到以下两个包:
survival #用于cox模型建立
survminer #用于cox模型诊断结果的可视化
安装包
install.packages(c("survival","survminer"))
加载包
library("survival")
library("survminer")
1.3 建立Cox模型
我们利用survial包中自带的肺癌数据“data(lung)”建立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)
coefexp(coef) se(coef) z p
age 0.02009 1.02029 0.00966 2.08 0.0377
sex -0.52103 0.59391 0.17435 -2.99 0.0028
wt.loss 0.00076 1.00076 0.00619 0.12 0.9024
Likelihood ratio test=14.7 on 3 df, p=0.00212
n= 214, number of events= 152
(14 observationsdeleted due to missingness)
1.4 模型诊断——PH假定
PH假定可通过假设检验和残差图检验。正常情况下,Schoenfeld残差应该与时间无关,如果残差与时间有相关趋势,则违反PH假设的证据。残差图上,横轴代表时间,如果残差均匀的分布则,表示残差与时间相互独立。
R语言survival包中的函数cox.zph()可以实现这一个检验过程。
test.ph <- cox.zph(res.cox)
test.ph
rhochisq p
age -0.0483 0.3780.538
sex 0.1265 2.3490.125
wt.loss 0.0126 0.0240.877
GLOBAL NA 2.8460.416
从上面的结果可以看出,三个变量的P值都大于0.05,说明每个变量均满足PH检验,而模型的整体检验P值0.416,模型整体满足PH检验。
在R语言 survminer中ggcoxzph( )函数可以画出Schoenfeld残差图。
ggcoxzph(test.ph)
上图中实线是拟合的样条平滑曲线,虚线表示拟合曲线上下2个单位的标准差。如果曲线偏离2个单位的标准差则表示不满足比例风险假定。从上图中可见,各协变量满足PH风险假设。
另一种检查比例风险假定的图形方法是绘制log(-log(S(t)))与t或log(t)是非平行,这个方法只能用于协变量是分类变量的情形。
如果违反比例风险假设可以通过以下方式解决:
模型中添加协变量与时间的交互相应;
分层分析;
至于如何实现,我们后期再做介绍。
1.5 模型诊断——模型影响点(异常值)识别
我们可以通过绘制Deviance残差图或者dfbeta值实现上述诊断。在R语言survminer中ggcoxdiagnostics()函数可以画出Deviance残差图。
ggcoxdiagnostics(res.cox,type = "deviance",
linear.predictions = FALSE,ggtheme = theme_bw())
残差值均匀的分布在0上下,表明满足上述假定。
ggcoxdiagnostics(res.cox,type = "dfbeta",
linear.predictions = FALSE,ggtheme = theme_bw())
影响点的可能来源于数据录入错误,样本中的极值点、协变量不均衡,数据不足等。对本例,上图显示,将dfbeta值大小与回归系数比较表明,即使某些dfbeta值非常大,但它们不足以对模型系数的估计值产生影响。
1.6 模型诊断——非线性诊断
一般情况下,我们假设协变量与-log(s(t))之间是线性关系。通过绘制Martingale残差图可以实现模型协变量的非线性诊断。非线性诊断一般是针对模型中的连续型变量。
在R语言survminer中ggcoxfunctional()函数可以画出Martingale残差图。
ggcoxfunctional(Surv(time, status) ~ age + log(age) + sqrt(age),data = lung)
图中显示年龄局部有非线性趋势,但整体表现出线性趋势。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析领域,Excel作为一种普及率极高且功能强大的工具,无疑为无数专业人士提供了便捷的解决方案。尽管Excel自带了丰富的功 ...
2025-01-17在这个瞬息万变的时代,许多人都在寻找能让他们脱颖而出的职业。而数据分析师,作为大数据和人工智能时代的热门职业,自然吸引了 ...
2025-01-14Python作为一门功能强大的编程语言,已经成为数据分析和可视化领域的重要工具。无论你是数据分析的新手,还是经验丰富的专业人士 ...
2025-01-10完全靠数据决策,真的靠谱吗? 最近几年,“数据驱动”成了商界最火的关键词之一,但靠数据就能走天下?其实不然!那些真正成功 ...
2025-01-09SparkSQL 结构化数据处理流程及原理是什么?Spark SQL 可以使用现有的Hive元存储、SerDes 和 UDF。它可以使用 JDBC/ODB ...
2025-01-09在如今这个信息爆炸的时代,数据已然成为企业的生命线。无论是科技公司还是传统行业,数据分析正在深刻地影响着商业决策以及未来 ...
2025-01-08“数据为王”相信大家都听说过。当前,数据信息不再仅仅是传递的媒介,它成为了驱动经济发展的新燃料。对于企业而言,数据指标体 ...
2025-01-07在职场中,当你遇到问题的时候,如果感到无从下手,或者抓不到重点,可能是因为你掌握的思维模型不够多。 一个好用的思维模型, ...
2025-01-06在现代企业中,数据分析师扮演着至关重要的角色。每天都有大量数据涌入,从社交媒体到交易平台,数据以空前的速度和规模生成。面 ...
2025-01-06在职场中,许多言辞并非表面意思那么简单,有时需要听懂背后的“潜台词”。尤其在数据分析的领域里,掌握常用术语就像掌握一门新 ...
2025-01-04在当今信息化社会,数据分析已成为各行各业的核心驱动力。它不仅仅是对数字进行整理与计算,而是在数据的海洋中探寻规律,从而指 ...
2025-01-03又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-03在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-03在数据分析的江湖里,有两个阵营总是争论不休。一派信奉“大即是美”,认为数据越多越好;另一派坚守“小而精”,力挺质量胜于规 ...
2025-01-02数据分析是一个复杂且多维度的过程,从数据收集到分析结果应用,每一步都是对信息的提炼与升华。可视化分析结果,以图表的形式展 ...
2025-01-02在当今的数字化时代,数据分析师扮演着一个至关重要的角色。他们如同现代企业的“解密专家”,通过解析数据为企业提供决策支持。 ...
2025-01-02数据分析报告至关重要 一份高质量的数据分析报告不仅能够揭示数据背后的真相,还能为企业决策者提供有价值的洞察和建议。 年薪 ...
2024-12-31数据分析,听起来好像是技术大咖的专属技能,但其实是一项人人都能学会的职场硬核能力!今天,我们来聊聊数据分析的核心流程,拆 ...
2024-12-31提到数据分析,你脑海里可能会浮现出一群“数字控”抱着电脑,在海量数据里疯狂敲代码的画面。但事实是,数据分析并没有你想象的 ...
2024-12-31关于数据分析师是否会成为失业高危职业,近年来的讨论层出不穷。在这个快速变化的时代,技术进步让人既兴奋又不安。今天,我们从 ...
2024-12-30