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编码及详细说明,为了方便重复,所以采用程序包自带的数据库:

  1. ## 绘制nomogram图
  2. ## 第一步 读取rms程序包及辅助程序包
  3. library(Hmisc); library(grid); library(lattice);library(Formula); library(ggplot2)
  4. library(rms)
  5. ## 第二步 读取数据,以survival程序包的lung数据来进行演示
  6. ## 列举survival程序包中的数据集
  7. library(survival)
  8. data(package = "survival")
  9. ## 读取lung数据集
  10. data(lung)
  11. ## 显示lung数据集的前6行结果
  12. head(lung)
  13. ## 显示lung数据集的变量说明
  14. help(lung)
  15. ## 添加变量标签以便后续说明
  16. lung$sex <-
  17. factor(lung$sex,
  18. levels = c(1,2),
  19. labels = c("male", "female"))
  20. ## 第三步 按照nomogram要求“打包”数据,绘制nomogram的关键步骤,??datadist查看详细说明
  21. dd=datadist(lung)
  22. options(datadist="dd")
  23. ## 第四步 构建模型
  24. ## 构建logisitc回归模型
  25. f1 <- lrm(status~ age + sex, data = lung)
  26. ## 绘制logisitc回归的风险预测值的nomogram图
  27. nom <- nomogram(f1, fun= function(x)1/(1+exp(-x)), # or fun=plogis
  28. lp=F, funlabel="Risk")
  29. plot(nom)
  30. ## 构建COX比例风险模型
  31. f2 <- psm(Surv(time,status) ~ age+sex, data =  lung, dist='lognormal')
  32. med <- Quantile(f2) # 计算中位生存时间
  33. surv <- Survival(f2) # 构建生存概率函数
  34. ## 绘制COX回归中位生存时间的Nomogram图
  35. nom <- nomogram(f2, fun=function(x) med(lp=x),
  36. funlabel="Median Survival Time")
  37. plot(nom)
  38. ## 绘制COX回归生存概率的Nomogram图
  39. ## 注意lung数据的time是以”天“为单位
  40. nom <- nomogram(f2, fun=list(function(x) surv(365, x),
  41. function(x) surv(730, x)),
  42. funlabel=c("1-year Survival Probability",
  43. "2-year Survival Probability"))
  44. plot(nom, xfrac=.6)
  45. ## 评价COX回归的预测效果
  46. ## 第一步 计算c-index
  47. rcorrcens(Surv(time,status) ~ predict(f2), data =  lung)
  48. ## 第二步 绘制校正曲线
  49. ## 参数说明:
  50. ## 1、绘制校正曲线前需要在模型函数中添加参数x=T, y=T,详细参考帮助
  51. ## 2、u需要与之前模型中定义好的time.inc一致,即365或730;
  52. ## 3、m要根据样本量来确定,由于标准曲线一般将所有样本分为3组(在图中显示3个点)
  53. ## 而m代表每组的样本量数,因此m*3应该等于或近似等于样本量;
  54. ## 4、b代表最大再抽样的样本量
  55. ## 重新调整模型函数f2,也即添加x=T, y=T
  56. f2 <- psm(Surv(time,status) ~ age+sex, data =  lung, x=T, y=T, dist='lognormal')
  57. ## 构建校正曲线
  58. cal1 <- calibrate(f2, cmethod='KM', method="boot", u=365, m=76, B=228)
  59. ## 绘制校正曲线,??rms::calibrate查看详细参数说明
  60. par(mar=c(8,5,3,2),cex = 1.0)
  61. plot(cal1,lwd=2,lty=1,
  62. errbar.col=c(rgb(0,118,192,maxColorValue=255)),
  63. xlim=c(0.25,0.6),ylim=c(0.15,0.70),
  64. xlab="Nomogram-Predicted Probability of 1-Year DFS",
  65. ylab="Actual 1-Year DFS (proportion)",
  66. col=c(rgb(192,98,83,maxColorValue=255)))
  67. ## rms::nomogram的完整示例详见rms程序包的帮助文件
  68. ## rms程序包的帮助文件下载网址:https://cran.r-project.org/web/packages/rms/rms.pdf
  69. ## 代表性参考文献1:http://jco.ascopubs.org/content/26/8/1364.long
  70. ## 代表性参考文献2:http://jco.ascopubs.org/content/31/9/1188.long

R绘制Nomogram图的学习笔记相关推荐

  1. R绘制Nomogram图

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

  2. R语言与函数估计学习笔记(函数模型的参数估计)

    R语言与函数估计学习笔记 毫无疑问,函数估计是一个比参数估计要复杂得多的问题,当然也是一个有趣的多的问题.这个问题在模型未知的实验设计的建模中十分的常见,也是我正在学习的内容的一部分. 关于函数估计我 ...

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

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

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

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

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

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

  6. 《富爸爸,穷爸爸》思维导图和学习笔记

    <富爸爸,穷爸爸>思维导图和学习笔记 前言 本来想梳理数据分析师的技术栈,不过有段时间没写技术博客了,容易卡文,所以写点其他的.碰巧看了一本书<富爸爸,穷爸爸>,里面的内容挺有 ...

  7. R语言与抽样技术学习笔记(Jackknife)

    R语言与抽样技术学习笔记(Randomize,Jackknife,bootstrap) Jackknife算法 Jackknife的想法在我很早的一篇博客<R语言与点估计学习笔记(刀切法与最小二 ...

  8. 绘制多个折线图_学习笔记第一页 | 常用统计图绘制及描述规范

    一次学习,一次成长!!! 假期参加了狗熊会的一个基础课程(后文简称"课程"),学习了怎么绘制规范的图,怎么写出规范的数据分析报告.蹭着空闲,简单整理本次学习的感受及干货笔记.Tru ...

  9. 协整检验r语言代码_R语言学习笔记(一):时间序列分析

    ARIMA(p,d,q)模型全称为差分自回归移动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),AR是自回归, p为自回归项: ...

最新文章

  1. Codeforces Round #648 (Div. 2)题解 A-D
  2. python对接微信支付_python3接入微信企业支付实现小程序提现
  3. Sublime-text
  4. SpringBoot使用security和jwt进行鉴权设计
  5. BurpSuite pro v2.0.11版
  6. linux 修改超级权限密码,linux 修改用户密码
  7. 互联网协议IP抓包分析 -- wireshark
  8. word中中文保持正体,英文用斜体的方法.
  9. 监督学习 | 线性分类 之Logistic回归原理及Sklearn实现
  10. CentOS7安装软件包的方法
  11. 更改tomcat的根目录路径
  12. 深入理解SpringCloud之Eureka注册过程分析
  13. android edittext不可复制_Android 禁止输入框 EditText 复制粘贴
  14. PHP DeepL翻译API
  15. SQL 2008安装时反复提示重启和安装.net framework 3.5
  16. 如何下载石家庄市卫星地图高清版大图
  17. 使用jQuery实现旋转木马效果
  18. 前端模板template-web简单使用
  19. 密码学 BugKu 这不是摩斯密码
  20. C++中使用ODBC连接SQL Server数据库

热门文章

  1. 【笔记】uWSGI + Nginx
  2. 前端点击下载压缩包zip,后端返回文件流
  3. 安装LNMP环境并跑一个CI框架demo
  4. 【转载】VBoxManage相关命令
  5. 一直没看的无人机定高
  6. python图像合成代码_python使用pil库实现图片合成实例代码
  7. 4月4日王者服务器维护到几点,王者荣耀7月4日几点开服 王者荣耀7月4日更新维护到几点...
  8. ICEY攻略 论如何获得所有奖杯达成成就(没错,我就是拿CSDN写了游戏攻略)
  9. Fiber架构的简单理解与实现
  10. Mac电脑如何优化电池续航