文章目录

  • 前言
  • 一、校准曲线是什么?
  • 二、校准曲线
    • 1.怎么画?
    • 2.怎么理解?
    • 3.验证
  • 总结

前言

关于cox模型的校准曲线绘制,大家可以在浏览器中搜索,关于参数设置大部分都已经讲的很明白(这里不过多赘述),但是关于校准曲线的原理,关于校准曲线图上每个点、误差线所代表的意义以及如何计算得来的,相信大部分人不是很明白。通过阅读源码,将我学习到的记录在此,也可以让部分人更加了解自己的数据和模型。


一、校准曲线是什么?

校准曲线就是实际发生率和预测发生率的散点图。
此文会介绍图中各个点、线背后的数据。这里先看一下一个普通的校准曲线(未更改参数)。

二、校准曲线

1.怎么画?

(发文助手说内容太少,我用参数水点长度)
主要是画图参数:

  • x:通过calibrate函数得到的object
  • xlab:x轴标题
  • ylab:y轴标题
  • subtitles = TRUE:次标题,这里指图下方的注释(小文字),默认是TRUE,发文章的时候可能需要设置FALSE以去除。
  • conf.int = TRUE:是否需要绘制误差线,默认是TRUE,绘制
  • cex.subtitles = 0.75:次标题的文字大小
  • riskdist = TRUE:是否绘制图上方的轴须图,就是那一条像长毛的东西
  • add = FALSE,是否新建一个图还是添加在别的图之上。
  • scat1d.opts:这个参数是设置轴须图的,不用过多关注,详情参考scat1d函数的参数。
  • par.corrected:参数类型为list,用于设置误差点的参数。默认是NULL,函数内部会自动赋值为list(col = "blue", lty = 1, lwd = 1, pch = 4),你的新参数会覆盖重复的参数。比如编辑可能会有奇怪的要求,不要那个校准的小x点,你就可以设置par.corrected=list(col='white)
dd=datadist(data)
options(datadist="dd")
f<-cph(Surv(DMFS新,DMFS结局类型)~组织学细分+T亚分级+S100,time.inc=60,data = data,x=TRUE,y=TRUE,surv=TRUE)
cal <- calibrate(f, cmethod="KM", method="boot", u=60, m=  round(nrow(data)/3), B=1000)
cal
plot(cal,xlim=c(0,1),ylim=c(0,1))

2.怎么理解?

从校准曲线图可以发现,存在6个points,3个实心3个x状points,还有3条误差线。结合cal计算结果可以发现。
实心points:横坐标:是calibrate函数(以下简称cal)计算结果中的KM列,纵坐标是:cal中的mean.predicted列。
x points:叉状点的纵坐标是cal中的KM.corrected列。
误差条:误差是根据cal中的std.err列计算出来的具体计算函数是:上端:ifelse(KM == 0, 0, pmin(1, KM * exp(1.959964 * std.err)))。下端:ifelse(KM == 0, 0, KM * exp(1.959964 * (-std.err)))
左右下角注释:可以发现图下面还有部分注释信息,含义分别为:

  1. n=72代表有72数据
  2. d=29代表结局事件发生数为29(即数据中29例的sutus=1)
  3. p=6代表cox模型中系数有6个(注意:这里的系数数目和建模的变量数不是一回事,因为分类变量会有多个系数)
  4. 24 subjects per group表示数据分组(后面将计算的时候再介绍)时,每组24个数据
  5. Gray: ideal表示灰色的线为理想的线
  6. B=1000 再这里表示进行了1000次重采样计算。
  7. Based on observed-predicted表示cal数据中index.orig这一列是怎么计算来的,对于画图没有作用(挖个坑,后面再讲)。

3.验证

那么根据上述运行以下代码看图是否与之相同。

##准备误差线图数据
errl <- ifelse(cal[,"KM"] == 0, 0,  cal[,"KM"] * exp(1.959964 * (-cal[,"std.err"])))
errh <- ifelse(cal[,"KM"] == 0, 0, pmin(1, cal[,"KM"] * exp(1.959964 * cal[,"std.err"])))
##绘制误差线图
errbar(x = cal[,"mean.predicted"],y = cal[,"KM"],yminus = errl,yplus = errh,pch=16,cex=1.2,xlim = c(0,1),ylim = c(0,1),asp=1,xaxs='i',yaxs='i',xlab = 'Fraction surviving 60 Day',ylab = 'Predicted 60 Days Survival')
##添加灰色参考对角线
abline(a = 0,b = 1,col='grey')
##添加连线
lines(x = cal[,"mean.predicted"],y = cal[,"KM"])
##添加校准后的点
points(x = cal[,"mean.predicted"],y = cal[,"KM.corrected"],pch=4)
##绘制轴须图
scat1d(x = attr(cal,"predicted"),nhistSpike = 200)

不能说十分相似,只能说一摸一样了(为了表示我真的不是只改了原画图参数所得,可以明显看出上图中灰色参考线的图层在实现底下)。当然了,由于原函数中坐标比例的问题,观感可能不一样,但图表达的意思真的是一毛一样。


总结

为了更好的理解校准曲线,我去看了相关函数的源代码,算是一个自己的学习记录吧。

这篇只是开个头,还远没有结束,后面会继续更的。

本人小白,如有错误,请批评指正

R语言--Cox模型校准曲线原理(一)数据来源相关推荐

  1. R语言cox回归模型案例(绘制列线图、校正曲线):放疗是否会延长胰脏癌手术患者的生存时间

    R语言cox回归模型案例(绘制列线图.校正曲线):放疗是否会延长胰脏癌手术患者的生存时间 目录

  2. R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错

    笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集.测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证. 模 ...

  3. R语言结构方程模型(SEM)在生态学领域中的应用

    前言:结构方程模型(Sructural Equation Model)是一种建立.估计和检验研究系统中多变量间因果关系的模型方法,它可以替代多元回归.因子分析.协方差分析等方法,利用图形化模型方式清晰 ...

  4. R语言BIOMOD2模型的物种分布模拟

    随着生物多样性全球大会的举办,不论是管理机构及科研单位.高校都在积极准备,根据国家林草局最新工作指示,我国将积极整合.优化自然保护地,加快推进国家公园体制试点,构建以国家公园为主体的自然保护地体系.针 ...

  5. R语言结构方程模型(SEM)在生态学领域中的实践

    结构方程模型(Sructural Equation Model)是一种建立.估计和检验研究系统中多变量间因果关系的模型方法,它可以替代多元回归.因子分析.协方差分析等方法,利用图形化模型方式清晰展示研 ...

  6. R语言分类模型:逻辑回归模型LR、决策树DT、推理决策树CDT、随机森林RF、支持向量机SVM、Rattle可视化界面数据挖掘、分类模型评估指标(准确度、敏感度、特异度、PPV、NPV)

    R语言分类模型:逻辑回归模型LR.决策树DT.推理决策树CDT.随机森林RF.支持向量机SVM.Rattle可视化界面数据挖掘.分类模型评估指标(准确度.敏感度.特异度.PPV.NPV) 目录

  7. R语言回归模型构建、回归模型基本假设(正态性、线性、独立性、方差齐性)、回归模型诊断、car包诊断回归模型、特殊观察样本分析、数据变换、模型比较、特征筛选、交叉验证、预测变量相对重要度

    R语言回归模型构建.回归模型基本假设(正态性.线性.独立性.方差齐性).回归模型诊断.car包诊断回归模型.特殊观察样本分析.数据变换.模型比较.特征筛选.交叉验证.预测变量相对重要度 目录

  8. R语言KNN模型数据分类实战

    R语言KNN模型数据分类实战 目录 R语言KNN模型数据分类实战 #KNN基本原理 #案例分析 ​#数据集说明

  9. R语言xgboost模型构建:基于prima糖尿病数据集

    R语言xgboost模型构建:基于prima糖尿病数据集 目录 R语言xgboost模型构建:基于prima糖尿病数据集

  10. R语言回归模型协方差分析(Analysis of Covariance)

    R语言回归模型协方差分析(Analysis of Covariance) 目录 R语言回归模型协方差分析(Analysis of Covariance) 输入数据 ANCOVA分析

最新文章

  1. oracle经常使用函数(1)
  2. C++ 虚函数在基类与派生类对象间的表现及其分析
  3. js实现图片无缝循环跑马灯
  4. 职业经理人应该如何处理如下问题
  5. JavaWeb笔记05-解决线程安全问题
  6. 双线性插值算法c 语言实现,双线性插值 - CristianoC的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. 暑期训练日志----2018.8.24
  8. showmount -e (CVE-1999-0554) NFS漏洞解决方案
  9. Tensorflow实践:用神经网络训练分类器
  10. 图像主观质量评价 评分_图像质量分析工具哪家强?
  11. JavaScript—当前时间
  12. 艾宾浩斯记忆表格excel_【日常福利】NAWL-最重要、最高频的学术词汇表【Anki+Excel资源免费送】...
  13. 架构师的主要职责是什么?
  14. 做潮人,还是outman?
  15. 【Django下载文件-Kml文件下载】
  16. java date dec_java – 将日期从“2009-12 Dec”格式转换为“31-DEC-2009”
  17. 骚操作之Python微信远程控制摄像头!然后嘿嘿嘿!
  18. 装机春天时刻,盘点4月高性价比国产SSD
  19. php偷单,最简单的PHP小偷源码
  20. iOS开发之Runtime常用示例总结

热门文章

  1. 计算机输入网站打不开,电脑打不开网页怎么办
  2. windows系统升级
  3. 关于while循环终止循环的三种方式
  4. 全球5G无线接入网络(RAN)行业调研及趋势分析报告
  5. 5G无线关键技术 — 新型传输波形技术和先进编码与调制技术
  6. 深入浅出java web_深入浅出javaWeb实战第1讲Web的概念及其演变(上)
  7. css扁平化设计,从一个web前端开发者的角度来看扁平化设计的5大优点
  8. Mybatis Plus分页Page total始终为0
  9. DCT--离散余弦变换
  10. 【转】央行首发27家企业第三方支付牌照