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

下图显示的logisitc回归的诺曼图。比如想知道年龄70岁的男性的患病风险,只需要将age=70岁向points轴投射,则points≈70;同理sex=male时,points≈65。两者相加则Total points=135;将此数值在Total points轴上向Risk概率轴投射,则可知风险大概为0.83左右。
 

对于Cox回归,则可以简便地获得不同预测变量单独或组合情况下的中位生存时间或预测的生存概率。

下图显示的中位生存时间的诺曼图,比如想看60岁女性的中位生存时间,同样,首先找到60岁女性对应的总点数,约为116分,对应的中位生存时间约为550天

同理,可以通过下面生存概率的诺曼图,找到60岁女性的1年及2年的生存概率分别约为65%和40%

从上可以看到,诺曼图相当于一个预测工具,预测效果的好坏则可以通过C-index(意义上等价于AUC,由于算法的不同,两者结果略有差异)和下面的校正曲线来评价:

以下是绘制上述图形的R编码及详细说明,为了方便重复,所以采用程序包自带的数据库:

## 绘制nomogram图
## 第一步 读取rms程序包及辅助程序包
library(Hmisc); library(grid); library(lattice);library(Formula); library(ggplot2)
library(rms)## 第二步 读取数据,以survival程序包的lung数据来进行演示
## 列举survival程序包中的数据集
library(survival)
data(package = "survival")## 读取lung数据集
data(lung)## 显示lung数据集的前6行结果
head(lung)## 显示lung数据集的变量说明
help(lung)## 添加变量标签以便后续说明
lung$sex <- factor(lung$sex,levels = c(1,2),labels = c("male", "female"))## 第三步 按照nomogram要求“打包”数据,绘制nomogram的关键步骤,??datadist查看详细说明
dd=datadist(lung)
options(datadist="dd") ## 第四步 构建模型
## 构建logisitc回归模型
f1 <- lrm(status~ age + sex, data = lung) ## 绘制logisitc回归的风险预测值的nomogram图
nom <- nomogram(f1, fun= function(x)1/(1+exp(-x)), # or fun=plogislp=F, funlabel="Risk")
plot(nom)## 构建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)## 评价COX回归的预测效果
## 第一步 计算c-index
rcorrcens(Surv(time,status) ~ predict(f2), data =  lung)## 第二步 绘制校正曲线
## 参数说明:
## 1、绘制校正曲线前需要在模型函数中添加参数x=T, y=T,详细参考帮助
## 2、u需要与之前模型中定义好的time.inc一致,即365或730;
## 3、m要根据样本量来确定,由于标准曲线一般将所有样本分为3组(在图中显示3个点)
## 而m代表每组的样本量数,因此m*3应该等于或近似等于样本量;
## 4、b代表最大再抽样的样本量## 重新调整模型函数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, m=76, B=228)## 绘制校正曲线,??rms::calibrate查看详细参数说明
par(mar=c(8,5,3,2),cex = 1.0)
plot(cal1,lwd=2,lty=1,errbar.col=c(rgb(0,118,192,maxColorValue=255)),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)",col=c(rgb(192,98,83,maxColorValue=255)))## rms::nomogram的完整示例详见rms程序包的帮助文件
## rms程序包的帮助文件下载网址:https://cran.r-project.org/web/packages/rms/rms.pdf
## 代表性参考文献1:http://jco.ascopubs.org/content/26/8/1364.long
## 代表性参考文献2:http://jco.ascopubs.org/content/31/9/1188.long

转载自:http://bbs.pinggu.org/thread-4115525-1-1.html

其他链接:

http://www.dxy.cn/bbs/thread/27318323#27318323

R绘制Nomogram图相关推荐

  1. R绘制Nomogram图的学习笔记

    Nomogram,中文常称为诺莫图或者列线图,简单的说是将Logistic回归或Cox回归的结果进行可视化呈现.它根据所有自变量回归系数的大小来制定评分标准,给每个自变量的每种取值水平一个评分,对每个 ...

  2. R绘制坡度图(Slope Chart)

    R绘制坡度图(Slope Chart) 坡度图(Slope Chart)可以高效地可视化同一个核心指标随着时间推移的变化情况.目前,还没有现成的构建函数来绘制坡度图. 下面的代码可以作为一个抛砖引玉的 ...

  3. R绘制面积图(area plot)

    R绘制面积图(area plot) 面积图 面积图与折线图.柱形图.散点图一样,都是属于常用的商务图表.面积图是一种随时间变化而改变范围的图表,主要强调数量与时间的关系.例如,用某企业每个月销售额绘制 ...

  4. R绘制QQ图并解读QQ图

    R绘制QQ图并解读QQ图 目录 R绘制QQ图并解读QQ图 Q-Q图 R绘制QQ图 美化Q-Q图

  5. 【数据可视化应用】绘制森林图(附Python和R语言代码)

    森林图(Forest Plot)的简单介绍 森林图(Forest Plot) 常用于Meta分析结果展示使用.森林图(可以将观察到的效果.置信区间以及每个研究对象的权重等信息全部表示出来,是一种简单直 ...

  6. R | 可视化 | 热图(Heatmap)

    1 基础绘制 R绘制热图时,数据需要输入一个矩阵,可以用as.matrix()把它转换成矩阵.这里利用R自带的数据集绘制热图. > # 数据 > data <- as.matrix( ...

  7. R EnhancedVolcano 绘制火山图

    火山图是用于差异表达分析结果可视化的一种有效方法.今天,我们来介绍一个用于增强火山图绘制的强大 R 包:EnhancedVolcano ,该包拥有强大的绘图功能,用户可以简单的通过设置颜色.形状.大小 ...

  8. R 绘制 GWAS 研究的 Manhattan 图

    曼哈顿图本质上是一个散点图,用于显示大量非零大范围波动数值,最早应用于全基因组关联分析(GWAS)研究展示高度相关位点.它得名源于样式与曼哈顿天际线相似(如下图). 近几年,在宏基因组领域,尤其是差异 ...

  9. R绘制带显著性标记的热图

    今天小编接着来介绍R绘制带有显著性的热图. 测试数据文件: ①table1.txt ②col_group.txt ③row_group.txt 1.导入pheatmap包,读取数据: #导入包 lib ...

最新文章

  1. Android源码学习之handler
  2. hdu5438(2015长春网络赛B题)
  3. 这6个高效的Java库,你知道吗?
  4. openstack安装rabbitmq-server消息队列时出现错误
  5. android之APP模块编译
  6. Android 系统(165)---在apns-conf文件中配置一个read_only字段,使APN不可被编辑
  7. 重装系统计算机名称回对ug,电脑重装系统后UG软件没有卸载的情况下重新启动UG软件的方法...
  8. linux clang安装,linux 配置 clang++ SDL 开发环境 (新手向)
  9. python查找字符串数量_python如何实现从字符串中找出字符1的位置以及个数的示例...
  10. 面试官最后说,你还有什么要问的吗?
  11. 深挖AI价值与温度,AETA地震预测AI算法大赛开启
  12. 三菱Q系列PLC项目资料 本系统采用三菱Q系列PLC,本系统中用到16个伺服电机
  13. 怎样在php中退出登录,php如何实现退出登录功能
  14. 使用Pyppeteer进行gmail模拟登录
  15. tftp刷路由器 linux,路由器TFTP配置的四个步骤
  16. Timer延时任务和ScheduledThreadPool执行延时任务
  17. 没有人比我更懂集群调度器---之流行集群调度器综述
  18. ‘XXX‘ is missing the class attribute ‘ExtensionOfNativeClass‘!
  19. SIMCA的OPLS-DA相关
  20. truecrypt mac win10下无法使用的解决

热门文章

  1. nginx+uwsgi+django配置文档
  2. Java实现游戏匹配
  3. Mx-yolov3+Maixpy+ K210进行本地模型训练和目标检测
  4. snowflake改进_从一次 Snowflake 异常说起
  5. JS数组合并(5种)
  6. jpg照片太大怎么压缩变小?jpg如何缩小图片大小kb?
  7. 服务器商店无限量指令,我的世界服务器商店指令怎么用 我的世界商店指令代码介绍...
  8. 扎实耐用,体验ITX平台的平价选择,铭瑄MS挑战者H510 ITX主板体验
  9. laydate在火狐,360极速模式下,多个时间插件,只有一个可以用问题
  10. 传统栅格地图的构建和自定义地图栅格化