箱线图

基本箱线图

ggsignif

以下是使用ggplot2ggsignif库创建带有统计学标记的箱线图的示例。首先,请确保你已经安装了这些包,如果没有,可以使用以下命令安装:

install.packages("ggplot2")
install.packages("ggsignif")

接下来,加载必要的包:

library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.3.2
library(ggsignif)
Warning: package 'ggsignif' was built under R version 4.3.2

现在假设你有一些数据集,我们将使用内置的mtcars数据集进行演示。我们将以气缸数(cyl)作为X轴变量,以每加仑英里数(mpg)作为Y轴变量绘制箱线图,并在不同气缸组别之间添加统计学显著性标记。

# 使用mtcars数据集
data(mtcars)
mtcars$cyl <- as.factor(mtcars$cyl)  # 将cyl转换为因子,以便绘制分类箱线图

mtcars
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
# 创建箱线图
p <- ggplot(mtcars, aes(x=cyl, y=mpg)) +
  geom_boxplot() +
  labs(x="Number of Cylinders", y="Miles per Gallon")

# 添加统计显著性标记
p + geom_signif(comparisons = list(c("4", "6"), c("6", "8"), c("4", "8")),
                map_signif_level=TRUE,
                y_position=c(35, 38, 41))  # 为每个比较手动设置y坐标位置
Warning in wilcox.test.default(c(22.8, 24.4, 22.8, 32.4, 30.4, 33.9, 21.5, :
cannot compute exact p-value with ties
Warning in wilcox.test.default(c(22.8, 24.4, 22.8, 32.4, 30.4, 33.9, 21.5, :
cannot compute exact p-value with ties
Warning in wilcox.test.default(c(21, 21, 21.4, 18.1, 19.2, 17.8, 19.7), :
cannot compute exact p-value with ties

在这段代码中:

  • geom_boxplot() 创建了基本的箱线图。

  • geom_signif() 添加了统计学显著性标记,comparisons参数是一个列表,定义了需要比较的组别。

  • map_signif_level=TRUE 自动在图表上标注显著性水平。

  • y_position 参数用于设置每个显著性标记的y轴位置。你需要根据你的数据点和图表的具体情况来调整这些值,以确保标记不会重叠并且清晰可见。

上面的代码会创建一个包含四缸、六缸和八缸汽车的箱线图,并在这些组别间进行统计学显著性测试,然后在图上显示显著性标记。这些显著性标记通常是星号(*),数量取决于p值的大小。

如果显著性注释依旧重叠,可能需要进一步调整y坐标的值,或者可能需要调整图表的y轴限制,以便为显著性注释提供更多的空间。这可以通过添加 ylim() 函数到你的ggplot对象来实现。例如:

p + ylim(0, 45)  # 根据需要调整这些值以为显著性标记腾出空间

ggpubr

ggpubr 是一个扩展包,它提供了一个简便的方式来添加统计注释。它包含stat_compare_means函数,用于在箱线图上添加两组或多组之间的比较。首先确保你已经安装了 ggpubr 包。如果还没有安装,可以使用以下命令安装:

install.packages("ggpubr")

接下来,加载必要的包:

library(ggplot2)
library(ggpubr)
Warning: package 'ggpubr' was built under R version 4.3.2

现在,让我们继续使用mtcars数据集来创建一个箱线图并添加统计学比较。

# 转换气缸数为因子类型以便进行分组
mtcars$cyl <- as.factor(mtcars$cyl)

# 创建箱线图并添加统计比较
p <- ggplot(mtcars, aes(x=cyl, y=mpg, fill=cyl)) +
  geom_boxplot() +
  labs(x="Number of Cylinders", y="Miles per Gallon") +
  theme_minimal()

# 使用stat_compare_means添加t检验的统计比较
# method参数决定了使用哪种统计检验,默认为t检验
p + stat_compare_means()

默认情况下,stat_compare_means()会执行t检验并将比较结果添加到图中。如果你有多个分组并希望比较所有组合,可以使用参数comparisons来指定哪些组需要进行比较。例如,比较四缸和八缸汽车:

p + stat_compare_means(comparisons = list(c("4", "8")))
Warning in wilcox.test.default(c(22.8, 24.4, 22.8, 32.4, 30.4, 33.9, 21.5, :
cannot compute exact p-value with ties

如果你想执行不同类型的统计检验,如 ANOVA,可以这样:

p + stat_compare_means(method = "anova")

请注意,ANOVA适用于比较两个以上的样本均数是否有显著性差异。如果只有两个组别,应该使用t检验或类似的检验。

进行两两比较:

# 定义两两比较的组合
comparisons <- list(c("4", "6"), c("6", "8"), c("4", "8"))

# 使用stat_compare_means添加t检验的统计比较
# 添加comparisons参数进行指定的两两比较
p + stat_compare_means(comparisons=comparisons,
                       label = "p.signif") # 显示显著性水平标签
Warning in wilcox.test.default(c(22.8, 24.4, 22.8, 32.4, 30.4, 33.9, 21.5, :
cannot compute exact p-value with ties
Warning in wilcox.test.default(c(22.8, 24.4, 22.8, 32.4, 30.4, 33.9, 21.5, :
cannot compute exact p-value with ties
Warning in wilcox.test.default(c(21, 21, 21.4, 18.1, 19.2, 17.8, 19.7), :
cannot compute exact p-value with ties

ggpubr提供的stat_compare_means()函数是非常灵活的,可以根据你的数据和需要进行调整。通过阅读该函数的帮助文档(在R中运行?stat_compare_means),你可以了解到更多的自定义选项,如显著性水平的调整、标签的自定义等。

分组箱线图

作图

首先,我们需要一个数据集,其中包含至少一个分类变量和一个数值变量。在这个示例中,我们将使用ToothGrowth数据集,它是R中的内置数据集,包含维生素C对豚鼠牙齿生长影响的数据。

library(ggplot2)

# 创建示例数据
set.seed(123)
df <- data.frame(
  group = rep(c("Group 1", "Group 2"), each = 40),
  subgroup = rep(c("Subgroup A", "Subgroup B"), times = 40),
  value = c(rnorm(20, mean = 100, sd = 15), rnorm(20, mean = 110, sd = 15),
            rnorm(20, mean = 100, sd = 15), rnorm(20, mean = 130, sd = 15))
)

# 用ggplot2画分组箱线图
p <- ggplot(df, aes(x = group, y = value, fill = subgroup)) + 
  geom_boxplot(position = position_dodge(0.8)) + # position_dodge用于避免箱子重叠
  theme_minimal() +
  labs(x = "Group", y = "Value", fill = "Subgroup") +
  scale_fill_brewer(palette = "Pastel1")

p

添加统计学标记

为了在Group 1组内进行显著性分析并添加显著性标记,你可以使用ggpubr包中的stat_compare_means函数。这个函数可以直接在ggplot2对象上添加显著性测试的结果。下面是如何在你的代码中实现这一点:

library(ggplot2)
library(ggpubr)

# 创建示例数据
set.seed(123)
df <- data.frame(
  group = rep(c("Group 1", "Group 2"), each = 40),
  subgroup = rep(c("Subgroup A", "Subgroup B"), times = 40),
  value = c(rnorm(20, mean = 100, sd = 15), rnorm(20, mean = 110, sd = 15),
            rnorm(20, mean = 100, sd = 15), rnorm(20, mean = 130, sd = 15))
)

# 用ggplot2画分组箱线图
p <- ggplot(df, aes(x = group, y = value, fill = subgroup)) + 
  geom_boxplot(position = position_dodge(0.8)) + # position_dodge用于避免箱子重叠
  theme_minimal() +
  labs(x = "Group", y = "Value", fill = "Subgroup") +
  scale_fill_brewer(palette = "Pastel1")

# 添加Group 1和Group 2的显著性标记
# 使用group和subgroup进行分组,进行t-test比较
p + stat_compare_means(
  aes(label = ..p.format.., group = interaction(group, subgroup)), 
  method = "t.test",
  label.y = c(180, 180), # 可以通过调整这个值来改变标签的垂直位置
  label = "p.signif" # 显示显著性水平标签
)

在这个代码中,label.y是手动设置的y轴位置,用于显示统计标记。你可能需要根据你的数据的实际范围调整这个值以避免标记重叠。

  • interaction(group, subgroup)确保了在每个主要组别内部的子组别间进行比较。

  • ..p.format..自动格式化p值。

工作环境

devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.3.1 (2023-06-16 ucrt)
 os       Windows 11 x64 (build 22621)
 system   x86_64, mingw32
 ui       RTerm
 language (EN)
 collate  Chinese (Simplified)_China.utf8
 ctype    Chinese (Simplified)_China.utf8
 tz       Asia/Hong_Kong
 date     2023-11-08
 pandoc   3.1.9 @ C:/Users/HANWAN~1/AppData/Local/Pandoc/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package      * version date (UTC) lib source
 abind          1.4-5   2016-07-21 [1] CRAN (R 4.3.0)
 backports      1.4.1   2021-12-13 [1] CRAN (R 4.3.0)
 broom          1.0.5   2023-06-09 [1] CRAN (R 4.3.2)
 cachem         1.0.8   2023-05-01 [1] CRAN (R 4.3.1)
 callr          3.7.3   2022-11-02 [1] CRAN (R 4.3.1)
 car            3.1-2   2023-03-30 [1] CRAN (R 4.3.2)
 carData        3.0-5   2022-01-06 [1] CRAN (R 4.3.2)
 cli            3.6.1   2023-03-23 [1] CRAN (R 4.3.1)
 colorspace     2.1-0   2023-01-23 [1] CRAN (R 4.3.1)
 crayon         1.5.2   2022-09-29 [1] CRAN (R 4.3.1)
 devtools       2.4.5   2022-10-11 [1] CRAN (R 4.3.2)
 digest         0.6.33  2023-07-07 [1] CRAN (R 4.3.1)
 dplyr          1.1.3   2023-09-03 [1] CRAN (R 4.3.2)
 ellipsis       0.3.2   2021-04-29 [1] CRAN (R 4.3.1)
 evaluate       0.21    2023-05-05 [1] CRAN (R 4.3.1)
 fansi          1.0.4   2023-01-22 [1] CRAN (R 4.3.1)
 farver         2.1.1   2022-07-06 [1] CRAN (R 4.3.1)
 fastmap        1.1.1   2023-02-24 [1] CRAN (R 4.3.1)
 fs             1.6.3   2023-07-20 [1] CRAN (R 4.3.1)
 generics       0.1.3   2022-07-05 [1] CRAN (R 4.3.1)
 ggplot2      * 3.4.4   2023-10-12 [1] CRAN (R 4.3.2)
 ggpubr       * 0.6.0   2023-02-10 [1] CRAN (R 4.3.2)
 ggsignif     * 0.6.4   2022-10-13 [1] CRAN (R 4.3.2)
 glue           1.6.2   2022-02-24 [1] CRAN (R 4.3.1)
 gtable         0.3.3   2023-03-21 [1] CRAN (R 4.3.1)
 htmltools      0.5.5   2023-03-23 [1] CRAN (R 4.3.1)
 htmlwidgets    1.6.2   2023-03-17 [1] CRAN (R 4.3.1)
 httpuv         1.6.11  2023-05-11 [1] CRAN (R 4.3.1)
 jsonlite       1.8.7   2023-06-29 [1] CRAN (R 4.3.1)
 knitr          1.43    2023-05-25 [1] CRAN (R 4.3.1)
 labeling       0.4.2   2020-10-20 [1] CRAN (R 4.3.0)
 later          1.3.1   2023-05-02 [1] CRAN (R 4.3.1)
 lifecycle      1.0.3   2022-10-07 [1] CRAN (R 4.3.1)
 magrittr       2.0.3   2022-03-30 [1] CRAN (R 4.3.1)
 memoise        2.0.1   2021-11-26 [1] CRAN (R 4.3.1)
 mime           0.12    2021-09-28 [1] CRAN (R 4.3.0)
 miniUI         0.1.1.1 2018-05-18 [1] CRAN (R 4.3.1)
 munsell        0.5.0   2018-06-12 [1] CRAN (R 4.3.1)
 pillar         1.9.0   2023-03-22 [1] CRAN (R 4.3.1)
 pkgbuild       1.4.2   2023-06-26 [1] CRAN (R 4.3.1)
 pkgconfig      2.0.3   2019-09-22 [1] CRAN (R 4.3.1)
 pkgload        1.3.2.1 2023-07-08 [1] CRAN (R 4.3.1)
 prettyunits    1.1.1   2020-01-24 [1] CRAN (R 4.3.1)
 processx       3.8.2   2023-06-30 [1] CRAN (R 4.3.1)
 profvis        0.3.8   2023-05-02 [1] CRAN (R 4.3.1)
 promises       1.2.0.1 2021-02-11 [1] CRAN (R 4.3.1)
 ps             1.7.5   2023-04-18 [1] CRAN (R 4.3.1)
 purrr          1.0.2   2023-08-10 [1] CRAN (R 4.3.2)
 R6             2.5.1   2021-08-19 [1] CRAN (R 4.3.1)
 RColorBrewer   1.1-3   2022-04-03 [1] CRAN (R 4.3.0)
 Rcpp           1.0.11  2023-07-06 [1] CRAN (R 4.3.1)
 remotes        2.4.2.1 2023-07-18 [1] CRAN (R 4.3.1)
 rlang          1.1.1   2023-04-28 [1] CRAN (R 4.3.1)
 rmarkdown      2.23    2023-07-01 [1] CRAN (R 4.3.1)
 rstatix        0.7.2   2023-02-01 [1] CRAN (R 4.3.2)
 rstudioapi     0.15.0  2023-07-07 [1] CRAN (R 4.3.1)
 scales         1.2.1   2022-08-20 [1] CRAN (R 4.3.1)
 sessioninfo    1.2.2   2021-12-06 [1] CRAN (R 4.3.1)
 shiny          1.7.4.1 2023-07-06 [1] CRAN (R 4.3.1)
 stringi        1.7.12  2023-01-11 [1] CRAN (R 4.3.0)
 stringr        1.5.0   2022-12-02 [1] CRAN (R 4.3.1)
 tibble         3.2.1   2023-03-20 [1] CRAN (R 4.3.1)
 tidyr          1.3.0   2023-01-24 [1] CRAN (R 4.3.1)
 tidyselect     1.2.0   2022-10-10 [1] CRAN (R 4.3.1)
 urlchecker     1.0.1   2021-11-30 [1] CRAN (R 4.3.1)
 usethis        2.2.2   2023-07-06 [1] CRAN (R 4.3.1)
 utf8           1.2.3   2023-01-31 [1] CRAN (R 4.3.1)
 vctrs          0.6.3   2023-06-14 [1] CRAN (R 4.3.1)
 withr          2.5.0   2022-03-03 [1] CRAN (R 4.3.1)
 xfun           0.39    2023-04-20 [1] CRAN (R 4.3.1)
 xtable         1.8-4   2019-04-21 [1] CRAN (R 4.3.1)
 yaml           2.3.7   2023-01-23 [1] CRAN (R 4.3.0)

 [1] C:/Users/Han Wang/AppData/Local/R/win-library/4.3
 [2] C:/Program Files/R/R-4.3.1/library

──────────────────────────────────────────────────────────────────────────────