掌握ggstats包绘制森林图,让你的数据更有说服力

简介: 通常情况下,森林图中是垂直放置的一条线,线的左侧为比较指标的最小值,右侧为最大值。而灰色的长方体就代表置信区间的范围,以及平均值所在的位置,长方体越长代表数据的不确定性越大,也就意味着置信区间范围越广。通过比较不同组别的森林图,就可以看到差异显著性的程度是大还是小。

一、引言



当我们需要比较不同组别之间的差异时,森林图是一种常见的可视化方式。通常情况下,森林图展示的是平均值和置信区间(confidence interval),置信区间代表了一个值的不确定性范围。对于基于样本的情况,置信区间通常由样本的标准误差计算得出。因此组别之间的置信区间重合情况,可以反映出差异显著性的程度。


通常情况下,森林图中是垂直放置的一条线,线的左侧为比较指标的最小值,右侧为最大值。而灰色的长方体就代表置信区间的范围,以及平均值所在的位置,长方体越长代表数据的不确定性越大,也就意味着置信区间范围越广。通过比较不同组别的森林图,就可以看到差异显著性的程度是大还是小。


二、数据集



  1. 包安装
install.packages("ggstats")
library(ggstats)
library(survival)
library(dplyr)


  1. 数据集加载
data(colon)
str(colon)


数据集展示:

'data.frame':   1858 obs. of  16 variables:
 $ id      : num  1 1 2 2 3 3 4 4 5 5 ...
 $ study   : num  1 1 1 1 1 1 1 1 1 1 ...
 $ rx      : Factor w/ 3 levels "Obs","Lev","Lev+5FU": 3 3 3 3 1 1 3 3 1 1 ...
 $ sex     : num  1 1 1 1 0 0 0 0 1 1 ...
 $ age     : num  43 43 63 63 71 71 66 66 69 69 ...
 $ obstruct: num  0 0 0 0 0 0 1 1 0 0 ...
 $ perfor  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ adhere  : num  0 0 0 0 1 1 0 0 0 0 ...
 $ nodes   : num  5 5 1 1 7 7 6 6 22 22 ...
 $ status  : num  1 1 0 0 1 1 1 1 1 1 ...
 $ differ  : num  2 2 2 2 2 2 2 2 2 2 ...
 $ extent  : num  3 3 3 3 2 2 3 3 3 3 ...
 $ surg    : num  0 0 0 0 0 0 1 1 1 1 ...
 $ node4   : num  1 1 0 0 1 1 1 1 1 1 ...
 $ time    : num  1521 968 3087 3087 963 ...
 $ etype   : num  2 1 2 1 2 1 2 1 2 1 ...


三、绘制森林图



3.1 数据预处理


mycolon <- colon %>%
  transmute(time,
            status,
            Age = age,
            Sex = factor(sex, levels = c(0, 1),
                         labels = c("Female", "Male")),
            Obstruct = factor(obstruct, levels = c(0, 1),
                              labels = c("No", "Yes")),
            Differ = factor(differ, levels = c(1, 2, 3),
                            labels = c("well", "moderate", "poor")),
            Extent = factor(extent, levels = c(1, 2, 3, 4),
                            labels = c("submucosa", "muscle", "erosa", "contiguous structures"))
            )


结果展示


time status Age    Sex Obstruct   Differ Extent
1 1521      1  43   Male       No moderate  erosa
2  968      1  43   Male       No moderate  erosa
3 3087      0  63   Male       No moderate  erosa
4 3087      0  63   Male       No moderate  erosa
5  963      1  71 Female       No moderate muscle
6  542      1  71 Female       No moderate muscle


3.2 逻辑回归拟合


fit <- glm(status ~ Age + Sex +  Differ + Obstruct + Extent,
                binomial(link="logit"), data = mycolon)
summary(fit)


结果展示


Call:
glm(formula = status ~ Age + Sex + Differ + Obstruct + Extent, 
    family = binomial(link = "logit"), data = mycolon)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6401  -1.1635  -0.6875   1.1829   1.7821  
Coefficients:
                             Estimate Std. Error z value Pr(>|z|)    
(Intercept)                 -1.178450   0.462241  -2.549 0.010790 *  
Age                         -0.002182   0.004004  -0.545 0.585738    
SexMale                     -0.043452   0.095669  -0.454 0.649689    
Differmoderate               0.008928   0.160204   0.056 0.955559    
Differpoor                   0.413460   0.191356   2.161 0.030720 *  
ObstructYes                  0.190504   0.121687   1.566 0.117460    
Extentmuscle                 0.580586   0.408774   1.420 0.155518    
Extenterosa                  1.285277   0.384588   3.342 0.000832 ***
Extentcontiguous structures  1.798638   0.449425   4.002 6.28e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
    Null deviance: 2511.9  on 1811  degrees of freedom
Residual deviance: 2456.0  on 1803  degrees of freedom
  (因为不存在,46个观察量被删除了)
AIC: 2474
Number of Fisher Scoring iterations: 4


3.3 画森林图


  1. 基本绘图
ggcoef_model(fit)

640.png


  1. 修改横坐标的参数为OR
ggcoef_model(fit.cox, exponentiate = TRUE)

640.png


3. ggcoef_model参数解释


函数如下:


ggcoef_model(
  model,
  tidy_fun = broom.helpers::tidy_with_broom_or_parameters,
  tidy_args = NULL,
  conf.int = TRUE,
  conf.level = 0.95,
  exponentiate = FALSE,
  variable_labels = NULL,
  term_labels = NULL,
  interaction_sep = " * ",
  categorical_terms_pattern = "{level}",
  add_reference_rows = TRUE,
  no_reference_row = NULL,
  intercept = FALSE,
  include = dplyr::everything(),
  add_pairwise_contrasts = FALSE,
  pairwise_variables = broom.helpers::all_categorical(),
  keep_model_terms = FALSE,
  pairwise_reverse = TRUE,
  emmeans_args = list(),
  significance = 1 - conf.level,
  significance_labels = NULL,
  show_p_values = TRUE,
  signif_stars = TRUE,
  return_data = FALSE,
  ...
)


参数解释:


model 
回归模型对象
tidy_fun 
用于指定自定义整理器函数的选项
tidy_args 
传递给和传递给的其他参数broom.helpers::tidy_plus_plus()tidy_fun
conf.int 
是否应计算置信区间?(见broom::tidy())
conf.level 
用于置信度的置信水平 间隔如果 ;必须严格大于 0 小于 1;默认值为 0.95,对应于 95 百分比置信区间conf.int = TRUE
exponentiate 
如果对数刻度将 用于 x 轴TRUE
variable_labels 
自定义变量标签的命名列表或命名向量
term_labels 
自定义术语标签的命名列表或命名向量
interaction_sep 
交互项的分隔符
categorical_terms_pattern 
一种胶水图案 带有处理或总和对比的分类术语标签 (见model_list_terms_levels())
add_reference_rows 
是否应添加引用行?
no_reference_row 
变量(接受整洁选择表示法) 对于那些不应添加引用行,当add_reference_rows = TRUE
intercept 
是否应包括拦截?
include 
要包含的变量。接受整洁选择语法。用于删除变量。默认值为 。 另请参见、和-everything()all_continuous()all_categorical()all_dichotomous()all_interaction()
add_pairwise_contrasts 
应用?tidy_add_pairwise_contrasts()[Experimental]
pairwise_variables 
用于添加成对对比的变量 (接受整理选择符号)
keep_model_terms 
保留变量的原始模型项,其中 添加了成对对比?(默认值为FALSE)
pairwise_reverse 
确定是否使用 (如果) 或 (如果 ) ,请参阅"pairwise"TRUE"revpairwise"FALSEemmeans::contrast()
emmeans_args 
计算成对对比度时要传递到的其他参数列表emmeans::emmeans()
significance 
级别(介于 0 和 1 之间),低于此级别 系数被认为与 0 显著不同 (或 1 如果 ),表示未突出显示 这样的系数exponentiate = TRUENULL
significance_labels 
带有自定义标签的可选矢量 对于显著性变量
show_p_values 
如果 ,将 p 值添加到标签TRUE
signif_stars 
如果 ,将重要星号添加到标签TRUE
return_data 
如果 ,将返回使用的数据帧 用于绘图而不是绘图TRUE
... 
传递给的参数ggcoef_plot()
models 
命名模型列表
type 
躲避的情节还是多面的情节?
y.level_label 
用于标记的可选命名向量(请参阅示例)y.level
data 
包含要绘制的数据的数据框, 通常为 的输出,或带有选项ggcoef_model()ggcoef_compare()ggcoef_multinom()return_data = TRUE
x, y 
映射到 X 轴和 Y 轴的变量
point_size 
点的大小
point_stroke 
点的厚度
point_fill 
填充点的颜色
colour 
要映射到的可选变量名称 色彩美学
colour_guide 
是否应显示颜色指南 在传说中?
colour_lab 
图例中色彩美学的标签
colour_labels 
传递给 和 的标签参数ggplot2::scale_colour_discrete()ggplot2::discrete_scale()
shape 
要映射到的可选变量名称 形状美学
shape_values 
要在中使用的不同形状的值ggplot2::scale_shape_manual()
shape_guide 
形状参考线是否应该显示在图例中?
shape_lab 
图例中形状美学的标签
errorbar 
应该绘制误差线吗?
errorbar_height 
误差线的高度
errorbar_coloured 
误差线应该被着色为点吗?
stripped_rows 
是否应该在后台显示剥离的行?
strips_odd 
奇数行的颜色
strips_even 
偶数行的颜色
vline 
是否应该在 0 处绘制一条垂直线(如果为 1)?exponentiate = TRUE
vline_colour 
垂直线的颜色
dodged 
应该躲避点数(根据颜色美学)吗?
dodged_width 
的宽度值ggplot2::position_dodge()
facet_row 
用于行分面的变量名称
facet_col 
用于列分面的可选变量名称


可以通过修改参数来美化森林图!这个就自己探索吧,不再一一赘述!

目录
相关文章
|
1月前
时标网络图绘制步骤
时标网络图绘制步骤
时标网络图绘制步骤
|
1月前
如何绘制PAD图和N-S图(详细步骤)
如何绘制PAD图和N-S图(详细步骤)
108 0
|
1月前
|
存储 数据可视化 关系型数据库
绘制圆环图/雷达图/星形图/极坐标图/径向图POLAR CHART可视化分析汽车性能数据
绘制圆环图/雷达图/星形图/极坐标图/径向图POLAR CHART可视化分析汽车性能数据
|
1月前
|
存储 数据可视化
创建乐高版马赛克图
创建乐高版马赛克图
57 0
|
8月前
|
数据可视化
R绘图 | 云雨图+双向条形图
R绘图 | 云雨图+双向条形图
103 0
R绘制多彩的森林图:基于ggplot2
R绘制多彩的森林图:基于ggplot2
196 1
|
11月前
L2-023 图着色问题 (25 分)(图的遍历)
L2-023 图着色问题 (25 分)(图的遍历)
51 0
|
数据可视化 Go
R-forestplot包| HR结果绘制森林图
R-forestplot包| HR结果绘制森林图
226 0
|
数据可视化
利用ggcor包绘制相关性组合图及环状热图
ggcor包最初是因为能快速实现19年Science一组合相关性图(上图所示)变得流行起来,除此该包对热图、热图等等的可视化都是很方便快捷的,除了之前介绍过的几种相关性图几种方式,此包也是个不错的选择,且具独特的风格(特别是组合相关性图、环形热图)。但是不知道因为何种原因此包在Github上消失了....,到作者(厚缊)个人博客上瞅了瞅发现关于包的参数介绍示例等也都没有了,在评论区里看到作者回答项目已不再提供任何代码和任何资料,需要的可以去国内的gitee和国外的github搜索看看有没有别人存的代码。
467 0
python 如何通过海表面高度数据计算海表地转流速、并绘制流线图
最近,学习海气相互作用时,老师布置了一个小作业。通过卫星高度计测得的海表面高度异常数据,计算其表层地转流速,并研究其与海表面高度异常的关系。
python 如何通过海表面高度数据计算海表地转流速、并绘制流线图