R实战 | Nomogram(诺莫图/列线图)及其Calibration校准曲线绘制

简介: R实战 | Nomogram(诺莫图/列线图)及其Calibration校准曲线绘制

R实战|Nomogram(诺莫图/列线图)及其Calibration校准曲线绘制


Nomogram,中文常称为诺莫图或者列线图。简单的说是将Logistic回归或Cox回归的结果进行可视化呈现。它根据所有自变量回归系数的大小来制定评分标准,给每个自变量的每个取值水平一个评分;对于每个患者,就可计算得到一个总分,再通过得分与结局发生概率之间的转换函数来计算每个患者的结局时间发生的概率。


读图


随遍找一篇文章的图作为示例。


Nomogram

image.png

Jin C, Cao J, Cai Y, et al. A nomogram for predicting the risk of invasive pulmonary adenocarcinoma for patients with solitary peripheral subsolid nodules. J Thorac Cardiovasc Surg. 2017;153(2):462-469.e1.


红色箭头为我手动标注。


列线图的名称主要包括三个部分:


预测模型中的变量名称


例如图中的vascular convergence signs,pleural tag,computed tomography等信息,每一个变量对应的线段上都标注了刻度,代表了该变量的可取值范围,而线段的长度则反映了该因素对结局事件的贡献大小。


得分


单项得分,即图中的Points,表示每个变量在不同取值下所对应的单项分数,


总得分,即Total Point,表示所有变量取值后对应的单项分数加起来合计的总得分。


预测概率


例如图中的Risk of invasive pulmonary adenocarcinoma,表示侵袭性肺腺癌的患病风险。


如何计算呢?


如红色箭头所示,找出该患者每个变量对应的单项得分。最后将所有变量的单项得分相加,得到患者的总得分,并以总得分为基础,再向下画一条垂直线,就可以知道该患者侵袭性肺腺癌的患病风险。

image.png

列线图的Calibration校准曲线


X轴表示诺模图预测的概率,y轴表示侵袭性腺癌的实际概率。完美的预测对应绿色虚线。红色虚线表示整个队列,蓝色实线通过Bootstrapping(1000次重复)进行偏差校正,表示观察到的诺模图性能。


分析并绘制

rm(list = ls())
library(survival)
library(survminer)
data(lung)
head(lung) #示例数据
## 添加变量标签
lung$sex <- factor(lung$sex,
         levels = c(1,2),
         labels = c("male", "female"))
head(lung)
## 根据nomogram要求处理数据
dd=datadist(lung)
options(datadist="dd")

Logisitc回归模型

## 构建模型
## 构建logisitc回归模型,以age、sex为因子
f1 <- lrm(status~ age + sex, data = lung) 
## 绘制logisitc回归的风险预测值的nomogram图
nom <- nomogram(f1, fun= function(x)1/(1+exp(-x)), # or fun=plogis
                lp=F, funlabel="Risk")
plot(nom)

image.png

logisitc回归模型nomogram


COX比例风险模型

f2 <- psm(Surv(time,status) ~ age+sex, data =  lung, dist='lognormal') 
med <- Quantile(f2) # 计算中位生存时间
surv <- Survival(f2) # 构建生存概率函数
## 绘制COX回归中位生存时间的Nomogram图
nom <- nomogram(f2, fun=function(x) med(lp=x),
                funlabel="Median Survival Time")
plot(nom)
## 绘制COX回归生存概率的Nomogram图
## 注意lung数据的time是以’天‘为单位
nom <- nomogram(f2, fun=list(function(x) surv(365, x),
                             function(x) surv(730, x)),
                funlabel=c("1-year Survival Probability",
                           "2-year Survival Probability"))
plot(nom, xfrac=.6)

image.png

COX比例风险模型nomogram

## 评价COX回归的预测效果
## 计算c-index
rcorrcens(Surv(time,status) ~ predict(f2), data =  lung)
Somers' Rank Correlation for Censored Data    Response variable:Surv(time, status)
                C   Dxy  aDxy    SD    Z     P   n
predict(f2) 0.601 0.203 0.203 0.051 3.98 1e-04 228

C-index,concordance index,一致性指数,主要用于计算生存分析中的COX模型预测值与真实之间的区分度,常用在评价患者预后模型的预测精度中。


C-index在0.5-1之间(任意配对随机情况下一致与不一致刚好是0.5的概率)。0.5为完全不一致,说明该模型没有预测作用,1为完全一致,说明该模型预测结果与实际完全一致。一般情况下C-index在0.50-0.70为准确度较低:在0.71-0.90之间为准确度中等;而高于0.90则为高准确度。


Calibration校准曲线

## 绘制校正曲线
## 重新调整模型函数f2,也即添加x=T, y=T
f2 <- psm(Surv(time,status) ~ age+sex, data =  lung, x=T, y=T, dist='lognormal') 
## 构建校正曲线
cal1 <- calibrate(f2, 
                  cmethod='KM', 
                  method="boot", 
                  u=365, # u需要与之前模型中定义好的time.inc一致,即365或730;
                  m=76, #每次抽样的样本量,
                  B=1000) #抽样次数
## m要根据样本量来确定,由于标准曲线一般将所有样本分为3组(在图中显示3个点)
## 绘制校正曲线
plot(cal1,lwd=2,lty=1,
     conf.int=T,# 是否显示置信区间
     errbar.col="blue",#直线曲线bar颜色
     col="red", # 曲线颜色
     xlim=c(0.25,0.6),ylim=c(0.15,0.70),
     xlab="Nomogram-Predicted Probability of 1-Year DFS",
     ylab="Actual 1-Year DFS (proportion)",
     subtitles = F)#不显示副标题

image.png

相关文章
|
机器学习/深度学习 算法 决策智能
选址问题-精确重心法和遗传算法
选址问题-精确重心法和遗传算法
2671 0
|
Shell Linux Python
基于远程服务器安装配置Anaconda环境及创建python虚拟环境详细方案(一)
基于远程服务器安装配置Anaconda环境及创建python虚拟环境详细方案
8506 0
基于远程服务器安装配置Anaconda环境及创建python虚拟环境详细方案(一)
|
人工智能 自然语言处理 算法
AI-Researcher:告别熬夜肝论文!港大开源AI科研神器,从选题到发表全自动
AI-Researcher 是香港大学数据科学实验室推出的开源自动化科研工具,基于大型语言模型(LLM)代理,支持从研究想法到论文发表的全流程自动化,涵盖文献综述、算法设计、实验验证和论文撰写等功能。
1425 8
AI-Researcher:告别熬夜肝论文!港大开源AI科研神器,从选题到发表全自动
|
机器学习/深度学习 存储 数据可视化
手把手教你绘制和解读实用R列线图(Nomogram):从入门到精通
手把手教你绘制和解读实用R列线图(Nomogram):从入门到精通
3801 1
|
机器学习/深度学习 存储 算法
机器学习面试笔试知识点-线性回归、逻辑回归(Logistics Regression)和支持向量机(SVM)
机器学习面试笔试知识点-线性回归、逻辑回归(Logistics Regression)和支持向量机(SVM)
838 0
机器学习面试笔试知识点-线性回归、逻辑回归(Logistics Regression)和支持向量机(SVM)
|
数据可视化 数据挖掘 Go
GOplot|宝藏R包,拯救你的GO富集结果,杜绝平庸的条形图
`GOplot`是R中的一个宝藏包,用于GO富集分析的创新可视化。它提供多种图表类型,如GOBar、GOBubble、GOCircle、GOChord、GOHeat和GOCluster,以及GOVenn。通过调整参数,用户可自定义颜色、大小和排序。例如,GOBar和GOBubble展示富集条形和气泡,GOCircle以环形图表示,GOChord描绘基因和过程间关系,而GOHeat和GOCluster提供热图和聚类视图。此外,还有GOVenn用于绘制Venn图。包简化了数据准备和绘图过程,适合快速高效地展示复杂分析结果。别忘了引用创始人Walter等人的工作。
1886 1
|
存储 缓存 Linux
探秘Linux块设备驱动程序:成为内核开发大师的第一步
探秘Linux块设备驱动程序:成为内核开发大师的第一步
1317 1
|
搜索推荐
代码分享|GPL平台没有基因注释什么办?别慌,基因ID注释万能公式!
本文介绍了处理无基因注释的GEO数据集的方法。当遇到GPL平台无基因注释时,可以通过以下步骤解决:1) 查看数据集补充文件中是否已有注释矩阵;2) 使用搜索引擎或官网查找相关资源;3) 如数据集较新,尝试联系平台官方;4) 利用已有经验进行转换。文中通过多个GSE示例详细解释了如何处理不同情况,并提醒读者注意检查数据集中可能隐藏的注释信息。作者提供了转换ID的代码,并在公众号“多线程核糖体”分享了相关资源。
2756 0
|
数据可视化
Nomogram(诺莫图) | Logistic、Cox生存分析结果可视化
Nomogram(诺莫图) | Logistic、Cox生存分析结果可视化
771 0
|
网络协议 C++ Docker
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
69265 2