关于cox模型的校准曲线绘制,大家可以在浏览器中搜索,关于参数设置大部分都已经讲的很明白(这里不过多赘述),但是关于校准曲线的原理,关于校准曲线图上每个点、误差线所代表的意义以及如何计算得来的,相信大部分人不是很明白。通过阅读源码,将我学习到的记录在此,也可以让部分人更加了解自己的数据和模型。
校准曲线就是实际发生率和预测发生率的散点图。
此文会介绍图中各个点、线背后的数据。这里先看一下一个普通的校准曲线(未更改参数)。
(发文助手说内容太少,我用参数水点长度)
主要是画图参数:
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))
从校准曲线图可以发现,存在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)))
。
左右下角注释:可以发现图下面还有部分注释信息,含义分别为:
那么根据上述运行以下代码看图是否与之相同。
##准备误差线图数据
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)
不能说十分相似,只能说一摸一样了(为了表示我真的不是只改了原画图参数所得,可以明显看出上图中灰色参考线的图层在实现底下)。当然了,由于原函数中坐标比例的问题,观感可能不一样,但图表达的意思真的是一毛一样。
为了更好的理解校准曲线,我去看了相关函数的源代码,算是一个自己的学习记录吧。
这篇只是开个头,还远没有结束,后面会继续更的。
本人小白,如有错误,请批评指正