掌握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 
用于列分面的可选变量名称


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

目录
相关文章
|
8月前
时标网络图绘制步骤
时标网络图绘制步骤
时标网络图绘制步骤
|
人工智能 数据可视化 Go
R绘图实战|GSEA富集分析图
GSEA(Gene Set EnrichmentAnalysis),即基因集富集分析,它的基本思想是使用预定义的基因,将基因按照在两类样本中的差异表达程度排序,然后检验预先设定的基因集合是否在这个排序表的顶端或者底端富集。
2767 0
R绘图实战|GSEA富集分析图
|
8月前
如何绘制PAD图和N-S图(详细步骤)
如何绘制PAD图和N-S图(详细步骤)
727 0
|
8月前
|
存储 数据可视化 关系型数据库
绘制圆环图/雷达图/星形图/极坐标图/径向图POLAR CHART可视化分析汽车性能数据
绘制圆环图/雷达图/星形图/极坐标图/径向图POLAR CHART可视化分析汽车性能数据
|
8月前
|
存储 人工智能 搜索推荐
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
168 1
|
C++ Python
Python绘制比例直方柱状比重图
Python绘制比例直方柱状比重图
233 1
Python绘制比例直方柱状比重图
|
存储 Go
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
R绘制多彩的森林图:基于ggplot2
R绘制多彩的森林图:基于ggplot2
427 1
|
数据采集 数据可视化 算法
数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)
数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)