当前位置:网站首页>R语言--Cox模型校准曲线原理(一)数据来源
R语言--Cox模型校准曲线原理(一)数据来源
2022-07-17 16:53:00 【一口吃两口饭】
前言
关于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)))。
左右下角注释:可以发现图下面还有部分注释信息,含义分别为:
- n=72代表有72数据
- d=29代表结局事件发生数为29(即数据中29例的sutus=1)
- p=6代表cox模型中系数有6个(注意:这里的系数数目和建模的变量数不是一回事,因为分类变量会有多个系数)
- 24 subjects per group表示数据分组(后面将计算的时候再介绍)时,每组24个数据
- Gray: ideal表示灰色的线为理想的线
- B=1000 再这里表示进行了1000次重采样计算。
- 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)

不能说十分相似,只能说一摸一样了(为了表示我真的不是只改了原画图参数所得,可以明显看出上图中灰色参考线的图层在实现底下)。当然了,由于原函数中坐标比例的问题,观感可能不一样,但图表达的意思真的是一毛一样。
总结
为了更好的理解校准曲线,我去看了相关函数的源代码,算是一个自己的学习记录吧。
这篇只是开个头,还远没有结束,后面会继续更的。
本人小白,如有错误,请批评指正
边栏推荐
- 结构体内存对齐、位段、联合
- Opencv tutorial 03: how to track an object in a video
- Acwing785. Quick sort
- When will the deflationary market reverse? How should we operate? 2020-03-13
- 关于“抄底”心态,让你筋疲力尽 2020-03-15
- 2022 low voltage electrician examination questions and online simulation examination
- ros(26):ros::Time::now(),ros::Duration,toSec(),toNSec(); Calculate program execution time
- Will the market halve? What investment opportunities are there? 2020-03-11
- How to run SH script file
- 备赛笔记:matplotlib学习笔记a
猜你喜欢

Investment logic in market "uncertainty" 2020-03-18

String correlation function (II)

新一代云数据库的引领者---AWS

Arbitrum Nova 发布!打造低成本高速度的游戏社交领域专用链

云犀聚焦店播解决方案,加速全球化布局

Experiment the next day

Dynamic memory planning

Detailed explanation of RAID disk array, raid classification, advantages and disadvantages

RAID 磁盘阵列详解,RAID分类及优缺点

减半行情会不会来?有何投资机会?2020-03-11
随机推荐
招生宣传-江南大学
Binary tree 2-symmetry recursion problem
ASP.NET协同OA办公服务管理平台源码
Knowledge sorting of MySQL
动态内存规划
结构体内存对齐、位段、联合
My favorite 10 machine learning official account
Opencv:06 morphology
Acwing4405. 统计子矩阵
hcip第四天笔记
PyTorch版:集成注意力和MobileNet的YOLOv4
LeetCode_前缀和_中等_523.连续的子数组和
Three minutes to understand the primary key, foreign key, non empty, unique and default constraints in mysql, and how to create a table
我最喜欢的10个机器学习公众号
Day 4 homework
ATT&CK实战系列——红队实战(—)
Can you view MySQL data table structure in two ways?
10 minutes to customize the pedestrian analysis system, detection and tracking, behavior recognition, human attributes all in one!
Opencv based on DLCO descriptor matching
Talk about the redis cache penetration scenario and the corresponding solutions