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

文章目录

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


前言

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


一、校准曲线是什么?

校准曲线就是实际发生率和预测发生率的散点图。
此文会介绍图中各个点、线背后的数据。这里先看一下一个普通的校准曲线(未更改参数)。
R语言--Cox模型校准曲线原理(一)数据来源_第1张图片

二、校准曲线

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))

R语言--Cox模型校准曲线原理(一)数据来源_第2张图片

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模型校准曲线原理(一)数据来源_第3张图片

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


总结

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

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

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

你可能感兴趣的:(校准曲线,r语言)