代码+视频,手把手教你R语言使用forestploter包绘制单组及双组森林图

森林图在论文中很常见,多用于表示多因素分析中的变量与结果变量的比值效应,可以用图示的方法比较直观的绘制出来。既往我们在文章《R语言快速绘制多因素回归分析森林图(1)》已经介绍了怎么绘制森林图,但是绘图比较简单,不够美观,不能绘制相对复杂的森林图。今天我们来介绍一下forestploter包,它等于是在forestplot包的基础上进一步强化功能,制作方法也相对简单一点,而且加强了对图形的精细控制,而且可以绘制单组和多组森林图。
在这里插入图片描述

R语言使用forestploter包绘制单组及双组森林图

代码:

library(grid)
library(forestploter)
dt<-read.csv("E:/r/test/forest2.csv",sep=',',header=TRUE)
# 公众号回复:森林图数据2,可以获得数据dt <- dt[,1:6]#缩进一格
dt$Subgroup <- ifelse(is.na(dt$Placebo), dt$Subgroup,paste0("   ", dt$Subgroup))#把治疗组和对照组NA(有缺失)的地方变成一个空格
dt$Treatment <- ifelse(is.na(dt$Treatment), "", dt$Treatment)
dt$Placebo <- ifelse(is.na(dt$Placebo), "", dt$Placebo)#生成一个变量se,它在绘图的时候表示正方形的大小
dt$se <- (log(dt$hi) - log(dt$est))/1.96#生成一个绘图区间,等下用来绘图
dt$` ` <- paste(rep(" ", 20), collapse = " ")#生成HR和可信区间
dt$`HR (95% CI)` <- ifelse(is.na(dt$se), "",sprintf("%.2f (%.2f to %.2f)",dt$est, dt$low, dt$hi))#sprintF返回字符和可变量组合
#单组绘图
p <- forest(dt[,c(1:3, 8:9)],est = dt$est,       #效应值lower = dt$low,     #可信区间下限upper = dt$hi,      #可信区间上限sizes = dt$se,     #黑框的大小ci_column = 4,   #在那一列画森林图,要选空的那一列ref_line = 1,arrow_lab = c("Placebo Better", "Treatment Better"),xlim = c(0, 4),ticks_at = c(0.5, 1, 2, 3),footnote = "This is the demo data. Please feel free to change\nanything you want.")
p#没有P值怎么办,我们可以给它加上去
dt$p <- paste(rep("<0.05", 22))p <- forest(dt[,c(1:3, 8:10)],est = dt$est,       #效应值lower = dt$low,     #可信区间下限upper = dt$hi,      #可信区间上限sizes = dt$se,     #黑框的大小ci_column = 4,   #在那一列画森林图,要选空的那一列ref_line = 1,arrow_lab = c("Placebo Better", "Treatment Better"),xlim = c(0, 4),ticks_at = c(0.5, 1, 2, 3),footnote = "This is the demo data. Please feel free to change\nanything you want.")
p#图形进行细节调整
dt_tmp <- rbind(dt[-1, ], dt[1, ])
dt_tmp[nrow(dt_tmp), 1] <- "Overall"
dt_tmp <- dt_tmp[1:11, ]
tm <- forest_theme(base_size = 10,  #文本的大小# Confidence interval point shape, line type/color/widthci_pch = 15,   #可信区间点的形状ci_col = "#762a83",    #CI的颜色ci_fill = "blue",     #ci颜色填充ci_alpha = 0.8,        #ci透明度ci_lty = 1,            #CI的线型ci_lwd = 1.5,          #CI的线宽ci_Theight = 0.2, # Set an T end at the end of CI  ci的高度,默认是NULL# Reference line width/type/color   参考线默认的参数,中间的竖的虚线refline_lwd = 1,       #中间的竖的虚线refline_lty = "dashed",refline_col = "grey20",# Vertical line width/type/color  垂直线宽/类型/颜色   可以添加一条额外的垂直线,如果没有就不显示vertline_lwd = 1,              #可以添加一条额外的垂直线,如果没有就不显示vertline_lty = "dashed",vertline_col = "grey20",# Change summary color for filling and borders   更改填充和边框的摘要颜色summary_fill = "yellow",       #汇总部分大菱形的颜色summary_col = "#4575b4",# Footnote font size/face/color  脚注字体大小/字体/颜色footnote_cex = 0.6,footnote_fontface = "italic",footnote_col = "red")
pt <- forest(dt_tmp[,c(1:3, 8:9)],est = dt_tmp$est,lower = dt_tmp$low, upper = dt_tmp$hi,sizes = dt_tmp$se,is_summary = c(rep(FALSE, nrow(dt_tmp)-1), TRUE),ci_column = 4,ref_line = 1,arrow_lab = c("Placebo Better", "Treatment Better"),xlim = c(0, 4),ticks_at = c(0.5, 1, 2, 3),footnote = "This is the demo data. Please feel free to change\nanything you want.",theme = tm)pt#多组的森林图
dt<-read.csv("E:/r/test/forest2.csv",sep=',',header=TRUE)dt$Subgroup <- ifelse(is.na(dt$Placebo), dt$Subgroup,paste0("   ", dt$Subgroup))#######如果变量没有缺失,就缩进一格,也就是前进一格#因为是双组变量,所以要设置2个n,这步和前面基本一样
dt$n1 <- ifelse(is.na(dt$Treatment), "", dt$Treatment)###将缺失的部分变为空格
dt$n2 <- ifelse(is.na(dt$Placebo), "", dt$Placebo)#因为是要画两个森林图,所以要增加两个空地方来画图
dt$`CVD outcome` <- paste(rep(" ", 20), collapse = " ")
dt$`COPD outcome` <- paste(rep(" ", 20), collapse = " ")#设置一些森林图的基本参数,这步和前面是一样的
tm <- forest_theme(base_size = 10,refline_lty = "solid",   #参考线类型ci_pch = c(15, 18),ci_col = c("#377eb8", "#4daf4a"),footnote_col = "blue",legend_name = "Group",   #设置标题名字legend_value = c("Trt 1", "Trt 2"),   #设置分组名字vertline_lty = c("dashed", "dotted"),vertline_col = c("#d6604d", "#bababa"))
#最后绘图 ci_column = c(3, 5)是指在第3和5列绘图,est_gp1和est_gp2为一组,est_gp3和est_gp4为一组,其他的依次类推p <- forest(dt[,c(1, 19, 21, 20, 22)],est = list(dt$est_gp1,dt$est_gp2,dt$est_gp3,dt$est_gp4),lower = list(dt$low_gp1,dt$low_gp2,dt$low_gp3,dt$low_gp4), upper = list(dt$hi_gp1,dt$hi_gp2,dt$hi_gp3,dt$hi_gp4),ci_column = c(3, 5),ref_line = 1,vert_line = c(0.5, 2),nudge_y = 0.2,theme = tm)p

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启Android学习之旅-2-架构组件实现数据列表及添加(kotlin)

Android Jetpack 体验-官方codelab 1. 实现功能 使用 Jetpack 架构组件 Room、ViewModel 和 LiveData 设计应用&#xff1b;从sqlite获取、保存、删除数据&#xff1b;sqlite数据预填充功能&#xff1b;使用 RecyclerView 展示数据列表&#xff1b; 2. 使用架构组件 架构组…

Python从入门到网络爬虫(内置函数详解)

前言 Python 内置了许多的函数和类型&#xff0c;比如print()&#xff0c;input()等&#xff0c;我们可以直接在程序中使用它们&#xff0c;非常方便&#xff0c;并且它们是Python解释器的底层实现的&#xff0c;所以效率是比一般的自定义函数更有效率。目前共有71个内置函数&…

全球海洋数据 (GLODAP) v2.2023(海洋碳数据产品)

全球海洋数据分析项目 (GLODAP) v2.2023 全球海洋数据分析项目 (GLODAP) v2.2023 代表了海洋生物地球化学瓶数据合成方面的重大进步。此更新主要关注海水无机碳化学&#xff0c;以 GLODAPv2.2022 为基础&#xff0c;包含多项关键增强功能。值得注意的是&#xff0c;增加了 43 …

CISSP 第9章:安全脆弱性、威胁和对策

第九章 安全脆弱性、威胁和对策 9.1 评估和缓解安全脆弱性 9.1 硬件 处理器 执行类型 多任务处理&#xff1a; 同时处理两个或更多任务 多处理&#xff1a; 利用多个处理器完成一个应用程序的处理能力 多程序设计&#xff1a;通过操作系统对单个处理器上的两个任务进行协调&…

Node.js+Express+Mysql实现分页查询

根据记录数总数和分页数获到页总数 function pageCount (totalnum,limit){return totalnum > 0 ? ((totalnum < limit) ? 1 : ((totalnum % limit) ? (parseInt(totalnum / limit) 1) : (totalnum / limit))) : 0; } 接收请求代码 router.get(/api/user/page, asy…

SSCI及SCI撰写|查找文献doi的八大方法

一、前言 (一)文献DOI概念介绍 DOI&#xff08;Digital Object Identifier&#xff09;是一种用于标识数字对象的持久性标识符系统。在学术出版领域&#xff0c;DOI通常用于标识和定位学术文献&#xff0c;包括期刊文章、会议论文、报告等。以下是 DOI 的一些重要特点和介绍&a…

【网络】网络层IP地址和IP数据报的格式

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

【Python小游戏】贪吃蛇丨名侦探柯南(完整代码)

文章目录 写在前面PyGame入门贪吃蛇注意事项写在后面写在前面 本期内容:基于pygame的贪吃蛇小游戏 实验环境 python3.11及以上pycharmpygame安装pygame的命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygamePyGame入门 pygame是一个开源的Python模块,…

iOS手机查看蓝牙底层日志

文章目录 一、需要的环境二、在iOS设备上安装Profiles文件三、安装Xcode四、安装packetLogger五、启动蓝牙数据包分析 参考文档&#xff1a;A New Way to Debug iOS Bluetooth Applications 一、需要的环境 iOS 13 device and cableMac computer/laptopApple Developer Progr…

顶顶通呼叫中心中间件配置指定振铃时间挂断(mod_cti基于FreeSWITCH)

介绍 一般情况默认是振铃60秒挂断&#xff0c;但是如果想振铃10秒就挂断可以根据下方配置方法一步步去配置。 一、通过线路控制振铃时间 打开ccadmin-》点击线路-》点击你需要控制振铃时间的线路-》配置呼叫超时-》点击更新。 二、通过队列外呼控制振铃时间 打开ccadmin-》…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑分布式资源交易的气电综合能源配网系统出清模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的免费专栏栏目《论文与完整程序》 这个标题涉及到气电综合能源配网系统的出清模型&#xff0c;特别强调了对分布式资源交易的考虑。以下是对标题中关键术语的解读&#xff1a; 气电综合能…

paddlehub 文本检测使用

PaddleHub负责模型的管理、获取和预训练模型的使用。 参考&#xff1a;https://github.com/PaddlePaddle/PaddleHub/tree/develop/modules/image/text_recognition/chinese_text_detection_db_server import paddlehub as hub import cv2 # from utils import cv_show import…

《网络是怎样连接的》2.1节图表(自用)

图3.1&#xff1a;协议栈的组成 图3.2&#xff1a;netstat命令查看套接字 上图中每一行就是一个套接字 图3.3&#xff1a;协议栈在浏览器访问DNS服务器与web服务器时的具体工作流程 套接字由协议栈创建 应用程序通过Socket库中的程序组件与协议栈交互 图3.4&#xff1a;TCP头…

【JAVA】深入了解 Java 中的 DelayQueue

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 Java中的DelayQueue是一个强大的工具&#xff0c;常用于处理需要延迟执行的任务或具有过期时间的元素。通过实现Delayed接口&#x…

丰田凯美瑞雾灯改双光透镜解决方案

丰田凯美瑞大灯采用CAN总线控制车灯的近光、远光、日行灯、转向灯信号&#xff0c;无法直接从车灯插头上直接获取近光远光信号。传统改灯需要拆开车灯通过光耦线阻取得近远光开光信号&#xff0c;工序繁琐且不美观。 厦门市创宇致诚电子科技推出一款丰田凯美瑞车灯信号解码器&a…

Halcon粘连木材图像的目标分割计数

Halcon粘连木材图像的目标分割计数 文章目录 Halcon粘连木材图像的目标分割计数1. 提取面积较小区域2. 分割较大区域3. 区域合并与计数 本文以一个实际场景图片为例&#xff0c;介绍阈值处理与形态学计算的应用。案例图像如图所示,图&#xff08;a&#xff09;为输入的原始图像…

MacOS M1/M2 Go Debug 配置

前言 换电脑&#xff0c;Go 环境带来一些麻烦&#xff0c;耽误很多时间&#xff0c;稍作记录。 原始电脑是 Mac 旧款&#xff0c;CPU x86 构型&#xff0c;新电脑 M2&#xff0c;因为旧电脑里本地文件很多&#xff0c;为了简化搬迁&#xff0c;还是用了 Mac 自带的迁移&#x…

Spring的依赖注入(DI)

1.DI 概述&#xff1a;DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;在Spring创建对象的同时&#xff0c;为其属性赋值&#xff0c;称之为依赖注入。 1.1构造函数注入 顾名思义&#xff0c;就是使用类中的构造函数&#xff0c;给成员变量赋值。注意&…

Java ArrayList 面试题

Java ArrayList 面试题 文章目录 Java ArrayList 面试题ArrayList源码分析成员变量构造方法ArrayList源码分析面试题-ArrayList listnew ArrayList(10)中的list扩容几次面试题-如何实现数组和List之间的转换 ArrayList源码分析 分析ArrayList源码主要从三个方面去翻阅&#xf…

大语言模型占显存的计算和优化

可以优化的地方&#xff1a; per_device_train_batch_size&#xff08;相当于batch size&#xff0c;越小显存占的越小&#xff09; gradient_accumulation_steps&#xff08;per_device_train_batch_size*gradient_accumulation_steps计算梯度的数据数&#xff09; gradien…