内容简介:这篇笔记连标题都懒得想了(照搬教程标题。。。),继续接上篇先把我学习的教程放在最上面这篇主要是讲述如何验证Cox回归模型的有效性,主要从三个方面:
这篇笔记连标题都懒得想了(照搬教程标题。。。),继续接上篇 R语言-Cox比例风险模型 和上上篇 Survival analysis(生存分析)
先把我学习的教程放在最上面 Cox Model Assumptions
这篇主要是讲述如何验证Cox回归模型的有效性,主要从三个方面:
- Testing the proportional hazards assumption(检验Cox比例风险模型的前提假设是否成立)
- Examining influential observations (or outliers)(检查是是否有异常值)
- Detecting nonlinearity in relationship between the log hazard and the covariates(检测风险与协变量之间的非线性关系)
Cox比例风险模型的前提是:在某因素下,个体的风险比例在不同时间点都是定值;只有满足这个前提,才能使用Cox回归模型;就像一些假设检验,需要数据总体满足正态分布才能使用一样;本文使用Schoenfeld残差来检验比例风险假设(还可以简单的通过生存曲线是否交叉来粗略判断下)
如果数据满足Cox回归模型,那么则Schoenfeld残差和生存时间的秩次之间无明显的相关性,也就是说Schoenfeld残差与生存时间无明显的一致变化趋势,这里通过survival包的 cox.zph()
函数即可判断
library("survival") library("survminer") res.cox <- coxph(Surv(time, status) ~ age + sex + wt.loss, data = lung) 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
这里对年龄,性别以及体重减少这三个协变量做Cox回归,从test.ph结果中的三个协变量的P值可看出,检验均不显著,说明每个协变量均满足proportional hazards假设,而且模型总体(global)也不显著,因此可得出这Cox回归模型的前提是成立的
此外我们还可以通过Schoenfeld残差与时间的关系图来诊断模型是否满足前提,理论上如果满足的话,Schoenfeld残差应该与时间无明显的趋势,使用 ggcoxzph
函数,非常方便
ggcoxzph(test.ph)
图中实线是散点的平滑拟合线,虚线则代表拟合线的正负两个标准差;从图中也很明显的看出三个协方差均满足proportional hazards假设(如果曲线偏离2个标准差则表示不满足比例风险假定)
如果是分类协变量,则还可以通过绘制log(-log(S(t)))与t(或者log(t))来看是否平行来判断是否满足Cox假设
如果不满足proportional hazards假设,则可以通过以下手段解决:
- Adding covariate*time interaction(增加协变量与时间的交互关系)
- Stratification(分层)
为了检测影响模型的点,或者说是异常值,我们可以通过展示deviance residuals或者dfbeta values图形来实现(也是一种残差图),主要使用 ggcoxdiagnostics
函数,type参数选择残差类型
ggcoxdiagnostics(res.cox, type = "dfbeta", linear.predictions = FALSE, ggtheme = theme_bw())
从上图可看出,尽管一些dfbeta值(相对于回归系数的)很大,但是都不影响模型的估计值
我们还可以通过deviance残差图来检查异常值
ggcoxdiagnostics(res.cox, type = "deviance", linear.predictions = FALSE, ggtheme = theme_bw())
deviance残差一般以标准差为1对称分布在0附近,如果:
Deviance残差如果大于0,提示预测结局发生的时间比实际结局发生的时间少,即风险率会高估。如果Deviance残差小于0,则提示预测结局发生的时间比实际结局发生的时间长,即风险率会低估。得分残差显示了删除某个观测后模型中系数变化的大小,变化越大,表示该观测对模型的影响越大。如果模型中很多观测的残差都较大,提示模型拟合的可能有问题
一般来说我们都假设连续协变量是呈线性的,通过绘制Martingale残差与协变量的散点图来检验非线性
Martingale残差范围一般在(-INF,1),如果其值接近于1则说明预测结局发生的时间比实际结局发生的时间少,即风险率会高估(died too soon);如果其值是极小的负值则说明预测结局发生的时间比实际结局发生的时间长,即风险率会低估(lived too long)
为了评估连续协变量的拟合形式,符合线性拟合形式的话则说明满足Cox模型的假设,可以用 ggcoxfunctional()
函数来查看协变量和martingale残差的分布情况
res.cox <- coxph(Surv(time, status) ~ age + log(age) + sqrt(age), data = lung) ggcoxfunctional(res.cox, data = lung, point.col = "blue", point.alpha = 0.5)
从图中可看出有略微非线性,但是整体还是有线性趋势的
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
- 计算机语言发展的三个阶段:机器语言、汇编语言与高级语言
- 凹 (“Wa”) 语言:可以嵌入 Go 语言环境的脚本语言
- Rust语言恰巧是一门解决了Go语言所有问题的语言
- 获取系统语言/当前 App支持语言
- 【Go 语言教程】Go 语言简介
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
游戏编程算法与技巧
【美】Sanjay Madhav / 刘瀚阳 / 电子工业出版社 / 2016-10 / 89
《游戏编程算法与技巧》介绍了大量今天在游戏行业中用到的算法与技术。《游戏编程算法与技巧》是为广大熟悉面向对象编程以及基础数据结构的游戏开发者所设计的。作者采用了一种独立于平台框架的方法来展示开发,包括2D 和3D 图形学、物理、人工智能、摄像机等多个方面的技术。《游戏编程算法与技巧》中内容几乎兼容所有游戏,无论这些游戏采用何种风格、开发语言和框架。 《游戏编程算法与技巧》的每个概念都是用C#......一起来看看 《游戏编程算法与技巧》 这本书的介绍吧!