代码+视频,手把手教你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个内置函数&…

lambda表达式使用和示例

lambda表达式 什么是lambda 学习lamdba有两个结构十分关键&#xff0c;一个是lamdba自己&#xff0c;另一个是函数式接口 lamdba lamdba表达式本质上就是匿名方法&#xff0c;不能独立运行用于实现函数式接口定义的另一个方法&#xff0c;因此lamdba会产生一个匿名类lamdba…

全球海洋数据 (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…

自动驾驶货车编队行驶系统功能规范

货车编队行驶功能规范 Truck Platooning Functional Specification 目录 1 概述... 7 1.1 目的... 7 1.2 范围... 7 1.3 术语及缩写... 7 1.4 参考法规标准... 8 2 功能规范... 9 2.1 功能描述... 9 2.1.1 功能用途…

简述DIV元素和SPAN元素的区别

DIV和SPAN是两种常见的HTML元素&#xff0c;DIV是块元素&#xff0c;默认换行&#xff0c;一般用于排版。SPAN是行内元素&#xff0c;默认不换行&#xff0c;一般用于局部文字样式。通过DISPLAY他们之间可以相互转换&#xff0c;DIV默认是BLOCK&#xff0c;SPAN默认是INLINE. 它…

代码随想录day9-KMP算法

title: 代码随想录Day9 date: 2024-01-04 19:38:32 代码随想录笔记 categories:技术 代码随想录day9-KMP算法|28. 找出字符串中第一个匹配项的下标 宏观 本来使用暴力 O(m*n)的算法&#xff0c;通过KMP方法&#xff0c;基于前缀表构建失败函数next数组&#xff0c;在失败后进…

centos6后台启动docker

如果您正在使用 Docker 1.7 并且希望使用 sudo docker -d --storage-drivervfs & 命令在 CentOS 6 上后台运行 Docker&#xff0c;但发现它没有按预期工作&#xff0c;这里有一些建议可以尝试&#xff1a; 确保使用正确的语法&#xff1a;在 Docker 1.7 中&#xff0c;-d 或…

计算机系统的性能指标

1.字长和数据通路宽度 字长&#xff1a;字长指的是计算机中一个数据字的长度。一个数据字是计算机中进行运算和存储的最小单位&#xff0c;通常由多个二进制位&#xff08;比如8位、16位、32位等&#xff09;组成。 举个例子&#xff0c;假设一个计算机的字长为8位&#xff0…

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模块,…

【动态规划】413. 等差数列划分

413. 等差数列划分 解题思路 定义一个数组 dp&#xff0c;其中 dp[i] 表示以 nums[i] 结尾的等差子数组的个数。 使用一个循环遍历数组 nums&#xff0c;从索引 1 开始&#xff0c;直到 nums.length - 2 结束。这是因为要保证以 nums[i] 结尾的子数组至少包含三个元素&#x…

如何全面、准确地采集各种能耗数据?如何实时监控工厂的能源使用情况?

工厂能源数据采集与实时监控是工厂能耗管理系统&#xff08;EMS&#xff09;的重要组成部分&#xff0c;对于提高能源效率、降低运营成本以及优化生产流程至关重要。通过采用多种方法和工具&#xff0c;全面、准确地采集各种能耗数据&#xff0c;并实时监控工厂的能源使用情况&…

iOS手机查看蓝牙底层日志

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

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——网络数据包分析

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

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

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

2023年山东省职业院校技能大赛高职组信息安全管理与评估-镜像文件取证解析

任务3:镜像文件取证(100分) 目录 任务3:镜像文件取证(100分) 解题方法: Evidence1 Evidence2 Eviden