手把手教你绘制和解读实用R列线图(Nomogram):从入门到精通

一、引言

列线图(Nomogram)是一种常用的数据可视化工具,它能够直观地展示多个变量之间的关系,并帮助我们理解和解释复杂的数据模式。通过绘制列线图,我们可以将各种变量的影响和相互关联转化为图形化的表示,使得数据解读更加直观和易于理解。

在数据可视化和解释方面,列线图有着独特的优势。首先,它可以帮助我们观察和发现变量之间的线性关系、非线性关系以及交互作用,从而提供更全面的数据分析结果。其次,列线图能够直接计算和显示各个变量对结果的贡献度,帮助我们评估其重要性和影响程度。此外,列线图还可以用于预测和决策支持,帮助我们做出更准确和可靠的预测或判断。

本文旨在通过R语言为工具,手把手教读者如何绘制和解读列线图。我们将提供详细的步骤和示例代码,以帮助读者快速上手并灵活运用列线图技术。通过学习本文,读者将能够在数据分析中充分利用列线图的优势,提升数据解读和决策的准确性和效果。

二、列线图基础

2.1 列线图的基本概念和用途

列线图(Nomogram),也叫做协方差图,是一种用来描述多个变量之间关系的图形化工具。它通常由一条直线和数条刻度线组成,每条刻度线代表一个变量,而每个刻度线上都标记有该变量取值的范围或者数值。通过在不同的刻度线上作出点的位置,可以表示不同变量之间的关系和相互作用。

列线图可以用于许多不同的目的,例如:

  • 探究多个变量之间的关系和交互作用;
  • 评估不同变量对某个结果的影响程度;
  • 预测未知变量的取值或者结果的发生概率;
  • 优化决策制定,帮助我们做出更好的决策。

2.2 数据准备以及数据格式的要求

为了绘制一张列线图,我们需要准备一些数据,并按照特定的格式进行存储。通常来说,列线图所需的数据应该是连续型的或者是已经经过分组、离散化处理的分类型变量。此外,数据还需要满足一些特定的格式要求,以便能够被R语言中的相关包或函数所识别和绘制。

下面是一些基本的数据格式要求:

  • 列线图通常需要至少2个变量,其中一个是目标变量(也叫做响应变量),其余的是预测变量。
  • 目标变量和预测变量必须是连续型的或者是已经离散化过的分类型变量。
  • 每个变量都需要有一个可供绘图的范围或者数值,通常用最小值和最大值来表示。
  • 数据应该被组织为一个数据框或矩阵的形式,其中每列代表一个变量,每行代表一个样本。

三、绘制列线图

  • 「安装和加载包」
library(rms)
library(survival) 
  • 「数据集准备」
library(survival)
head(gbsg)

结果展示:

   pid age meno size grade nodes pgr er hormon rfstime status
1  132  49    0   18     2     2   0  0      0    1838      0
2 1575  55    1   20     3    16   0  0      0     403      1
3 1140  56    1   40     3     3   0  0      0    1603      0
4  769  45    0   25     3     1   0  4      0     177      0
5  130  65    1   30     2     5   0 36      1    1855      0
6 1642  48    0   52     2    11   0  0      0     842      1
  • 「示例数据集介绍」
> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1"1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 「拟合模型」

在绘制列线图之前,我们需要先拟合一个模型,以获得变量之间的关系和影响程度。这里我们使用逻辑回归模型作为例子。

ddist <- datadist(gbsg[,-1]); 
options(datadist='ddist')
# 拟合逻辑回归模型
model <- lrm(status ~ ., data = gbsg[,-1])
  • 「绘制列线图」
nomogram <- nomogram(model, fun = function(x)1/(1+exp(-x))) # 逻辑回归计算公式
# 绘制列线图
plot(nomogram)

四、结果解读

为了方便解释和演示过程,我们把列线图的自变量减少几个,我们以age,meno和nodes为自变量生成列线图。

model <- lrm(status ~ age + meno + nodes, data = gbsg[,-1])
nomogram <- nomogram(model, fun = function(x)1/(1+exp(-x))) # 逻辑回归计算公式
# 绘制列线图
plot(nomogram)

我们以第一行数据为例:

> head(gbsg,1)
  pid age meno size grade nodes pgr er hormon rfstime status
1 132  49    0   18     2     2   0  0      0    1838      0

从上面可以看出数据是age = 49,meno = 0;nodes = 2。

从图中可以看出,age 49时对应的分数是11分,然后meno为0对应的分值为0,nodes为2时对应的分数为3分,总分值为14分,总分值对应的预测值是0.3-0.4之间,小于0.5,所以其预测值应该是0,和实际结果一致。除了这些我们还可以看到哪些信息呢?

  1. 特征的取值范围:比如age的取值范围是20-80,meno取值范围是0-1(分类变量),nodes取值范围是0-55.
  2. 特征的权重(特征重要性):线越长代表权重越大,从图中可以看出: nodes > age > meno;
  3. 特征的影响趋势(正向、负向):age越大,发生事件的概率越低,所以是负向趋势;meno和nodes都是随着值越大发生事件的概率越大,所以是正向趋势;
  4. 得分:可以通过point得出单个病人某个指标对应的分值,然后通过分值累加即可获得total point;
  5. 预测概率:我们可以通过计算得出的total point比对出事件发生的概率。

五、高级技巧与应用

5.1 修改预测值的标签和刻度

ddist <- datadist(gbsg[,-1]); 
options(datadist='ddist')
model <- lrm(status ~ ., data = gbsg[,-1])
nomogram <- nomogram(model, fun = function(x)1/(1+exp(-x)),funlabel="Risk of Event",conf.int=F,lp=F,fun.at=c(.001,.01,.05,seq(.1,.9,by=.1),.95,.99,.99)) # 逻辑回归计算公式
# 绘制列线图
plot(nomogram)

5.2 添加高中低风险的色条

ddist <- datadist(gbsg[,-1]); 
options(datadist='ddist')
model <- lrm(status ~ ., data = gbsg[,-1])
nomogram <- nomogram(model, fun = function(x)1/(1+exp(-x)),funlabel="Risk of Event",conf.int=F,lp=F,fun.at=c(.001,.01,.05,seq(.1,.9,by=.1),.95,.99,.99)) # 逻辑回归计算公式
# 绘制列线图
plot(nomogram)
rect(0.191,0.095,0.65,0.11,col = "green"# 添加彩色条带
rect(0.65,0.095,0.705,0.11,col = "yellow"# 添加彩色条带
rect(0.705,0.095,1.003,0.11,col = "red"# 添加彩色条带
text(0.4,0.125,"Low")
text(0.68,0.125,"Medium")
text(0.85,0.125,"High")

5.3 动态nomogram

library(regplot)
ddist <- datadist(gbsg[,-1]); 
options(datadist='ddist')
model <- lrm(status ~ ., data = gbsg[,-1])
nomogram <- regplot(model,plots=c('violin','boxes'),observation=gbsg[2,-1],center=T,subticks=T,droplines=T,title='nomogram',points=T,odds=T,showP=T,rank='sd',interval='confidence',clickable=F)
plot(nomogram)

六、总结

在本文中,我们介绍了列线图的基本概念、绘制方法和应用场景。列线图是一种常用的数据可视化工具,它可以帮助我们探索变量之间的关系,解释模型的预测效果,并支持数据驱动的决策。

我们提供了一些实用的技巧和建议,如如何解释列线图的结果、如何定制样式、如何探索非线性关系和如何使用交互式可视化工具等。这些技巧可以帮助读者更好地理解和利用列线图。

未来,我们预计列线图将在数据分析中发挥更重要的作用。随着数据量的不断增加和机器学习的广泛应用,列线图将成为处理大规模数据和评估复杂模型的有力工具。我们鼓励读者继续学习和实践列线图的应用,以应对数据分析领域的挑战。

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/282944.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024-01-01 事业-代号s-科特勒《营销管理》-分析

摘要: 2024-01-01 事业-代号s-科特勒《营销管理》-分析 科特勒《营销管理》-分析 营销管理 - 思维导图 01 理解营销管理 这本书不仅从概念出发介绍了营销管理的定义、职能和计划&#xff0c;还拆解了每一个管理环节策划的具体实施方法。通过下面这张思维导图&#xff0c;我们…

考研后SpringBoot复习2—容器底层相关注解

考研后SpringBoot复习2 SpringBoot底层注解学习 与容器功能相关的注解与springboot的底层原理密切相关 组件添加注解configuration Spring Ioc容器部分回顾 包括在配置中注册&#xff0c;开启包扫描和注解驱动开发等需要在进行重新的学习回顾 实例 package com.dzu.boot;imp…

2022–2023学年2021级计算机科学与技术专业数据库原理 (A)卷

一、单项选择题&#xff08;每小题1.5分&#xff0c;共30分&#xff09; 1、构成E—R模型的三个基本要素是&#xff08; B &#xff09;。 A&#xff0e;实体、属性值、关系 B&#xff0e;实体、属性、联系 C&#xff0e;实体、实体集、联系 D&#xff0e;实体、实体…

【第5期】前端Vue使用Proxy+Vuex(store、mutations、actions)跨域调通本地后端接口

本期简介 本期要点 本地开发前后端如何跨域调用全局请求、响应处理拦截器处理封装HTTP请求模块编写API请求映射到后端API数据的状态管理 一、 本地开发前后端如何跨域调用 众所周知&#xff0c;只要前端和后端的域名或端口不一样&#xff0c;就存在跨域访问&#xff0c;例如&…

模型量化之AWQ和GPTQ

什么是模型量化 模型量化&#xff08;Model Quantization&#xff09;是一种通过减少模型参数表示的位数来降低模型计算和存储开销的技术。一般来说&#xff0c;模型参数在深度学习模型中以浮点数&#xff08;例如32位浮点数&#xff09;的形式存储&#xff0c;而模型量化可以…

appium入门基础

介绍 appium支持在不同平台的UI自动化&#xff0c;如web,移动端,桌面端等。还支持使用java&#xff0c;python&#xff0c;js等语言编写自动化代码。主要用于自动化测试脚本&#xff0c;省去重复的手动操作。 Appium官网 安装 首先必须环境有Node.js用于安装Appium。 总体来…

OpcUaHelper实现西门子OPC Server数据交互

Opc ua客户端类库,基于.net 4.6.1创建,基于官方opc ua基金会跨平台库创建,方便的实现和OPC Server进行数据交互。 FormBrowseServer 在开发客户端之前,需要使用本窗口来进行查看服务器的节点状态,因为在请求服务器的节点数据之前,必须知道节点的名称,而节点的名称可以…

Docker之网络配置

目录 1.网络概念 网络相关的有ip,子网掩码,网关,DNS,端口号 1.1 ip是什么? ip是唯一定位一台网上计算机 Ip地址的分类: IPV4: 4字节32位整数&#xff0c;并分成4段8位的二进制数&#xff0c;每8位之间用圆点隔开&#xff0c;每8位整数可以转换为一个0~255的十进制整数 【例…

在香橙派5 Plus上搭建Gitlab

作为一个码农&#xff0c;一定知道Github这个最大的成人交友网站。但是Github在国内不稳定&#xff0c;经常拉不下来代码&#xff0c;也就无法推送代码。为了更方便的使用&#xff0c;顺便更好地了解Git工具&#xff0c;决定在香橙派5 Plus上搭建一个属于自己的代码仓库。 1、…

windows怎么在cmd中通过命令关闭防火墙

windows怎么在cmd中通过命令关闭防火墙 1.打开终端&#xff08;cmd&#xff09; 2.关闭防火墙 输入命令&#xff1a; netsh advfirewall set allprofiles state off

redis—List列表

目录 前言 1.常见命令 2.使用场景 前言 列表类型是用来存储多个有序的字符串&#xff0c;如图2-19所示&#xff0c;a、b、C、d、e五个元素从左到右组成 了一个有序的列表&#xff0c;列表中的每个字符串称为元素(element) &#xff0c;一个列表最多可以存储2^32 - 1 个元素…

FA对接FC流程

2、FA进行对接 &#xff08;1&#xff09;首先安装好AD域控服务器DHCPDNS&#xff08;注意&#xff0c;不要忘记了做DNS正反向解析&#xff0c;就是把已经安装了ITA的主机做解析&#xff09;&#xff0c;在里面创建域用户 &#xff08;2&#xff09;安装ITA和VAG/VLB&#xf…

ES应用_ES实战

依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式&#xff0c;通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5&#xff0c;副本分片为1的ES结构。ES本身是一种noschema的结构&#xff0c;但是可以通过指定mapping编程schema的…

遇见sql语句拼装报错 sql injection violation, syntax error: syntax error, expect RPAREN

在使用PostgreSql瀚高数据库时&#xff0c;相同的语句 select * from public.files_info fi where fi.file_size notnull 在DBever能执行&#xff0c;但是在spring中报错 在spring中JPA版本问题导致&#xff0c;不支持这种写法&#xff0c;会识别为sql注入风险&#xff0c;应…

[python]python利用pyaudio录制系统声音没有立体声混音怎么录制系统音频

当电脑没有立体声混音导致Python写代码无法使用pyaudio进行录制系统声音怎么办&#xff1f;查阅资料和安装驱动等方法都不行&#xff0c;难道没办法了吗&#xff1f;那为什么电脑其他软件可以做到呢&#xff1f;因此研究了一下pyaudio在没有立体声混音情况下确实无法录制声音&a…

FreeRTOS学习--41讲 信号量

信号量的定义 是一种解决同步问题的机制&#xff0c;实现对共享资源的有序访问 信号量特点&#xff1a; 当计数值大于0&#xff0c;代表有信号量资源&#xff1b;释放信号量&#xff0c;信号量计数值1;获取则-1 队列和信号量的差异 二值信号量&#xff1a; a.相当于队列长度等…

【C++】STL 容器 - map 关联容器 ① ( std::map 容器简介 | std::map 容器排序规则 | std::map 容器底层实现 )

文章目录 一、std::map 容器1、std::map 容器简介2、std::map 容器排序规则3、std::map 容器底层实现 二、代码示例 - std::map 容器1、代码示例2、执行结果 一、std::map 容器 1、std::map 容器简介 std::map 容器 是 C 语言 标准模板库 ( STL , Standard Template Library ) …

CGAL的AABB tree

1、介绍 AABB树组件提供了一种静态数据结构和算法&#xff0c;用于对有限的三维几何对象集进行高效的交集和距离查询。可以查询数据结构中存储的几何对象集&#xff0c;以进行交集检测、交集计算和距离计算。 交集查询可以是任何类型的&#xff0c;只要在traits类中实现了相应的…

Docker 部署RAP2

1、Github介绍 https://github.com/thx/rap2-delos 2、安装Docker环境 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce systemctl enable…

华为商城秒杀时加密验证 device_data 的算法研究

前言 之前华为商城放出 Mate60 手机时, 想给自己和家人抢购一两台&#xff0c;手动刷了好几天无果后&#xff0c;决定尝试编写程序&#xff0c;直接发送 POST 请求来抢。通过抓包和简单重放发送后&#xff0c;始终不成功。仔细研究&#xff0c;发现 Cookie 中有一个名为 devic…