plot

【R绘图】ggsignif-假设检验

2022-06-22  本文已影响0人  陈有朴

ggsignif - 安装

# 稳定版
install.packages("ggsignif")

# devel版本
devtools::install_github("const-ae/ggsignif")

geom_signif - 常用参数

# geom_signif()主要参数如下:
geom_signif(mapping = NULL, data = NULL, stat = "signif",
            position = "identity", na.rm = FALSE, show.legend = NA,
            inherit.aes = TRUE, comparisons = NULL, test = wilcox.test,
            test.args = NULL, annotations = NULL, map_signif_level = FALSE,
            y_position = NULL, xmin = NULL, xmax = NULL, margin_top = 0.05,
            step_increase = 0, tip_length = 0.03, size = 0.5, textsize = 3.88, family = "", vjust = 0, ...)

comparisons       # 设置需要比较的组,使用list()表示。e.g. list(c("a","b"), c("a","c"))
test              # 选用的统计检验方法
# 常用方法:t.test(), wilcox.test(), aov(), anova(), kruskal.test()
map_signif_level  # TRUE | FALSE。选择TRUE的情况下,用星号“*”替代p-value
step_increase     # 不同组差异之间标注的距离。
# 常用参数:0.2
textsize          # 标注的大小(p-value | “*”的字符大小)。
                  # 常用参数:3

以鸢尾花数据集为例

1、传递参数给所使用的统计检验方法

传递参数表示对应检验方法,使用单侧还是双侧检验。

使用方式:

geom_signif(test = wilcox.test, test.args = c("two.sided"))
geom_signif(test = wilcox.test, test.args = c("greater"))
geom_signif(test = wilcox.test, test.args = c("less"))

示例代码如下,

p_sepallength <- ggplot(data = iris, aes(x = Species, y = Sepal.Length)) + 
  geom_boxplot(width=0.2, lwd = 1, outlier.size = 3, outlier.alpha = 0.3) + 
  theme_classic() +
  geom_signif(comparisons = list(c("setosa", "versicolor"),
                                 c("setosa", "virginica"),
                                 c("versicolor", "virginica")),
              map_signif_level=F,
              textsize=5,
              test=wilcox.test,
              step_increase=0.2,
              size = 1,
              test.args = c("two.sided")) # 可选参数为:two.sided, greater, less

test.args = c("two.sided")结果:

test.args = c("greater")结果:

test.args = c("less")结果:

2、统计检验的数值/括号不受颜色设置的影响

未修改前的代码:

iris_1 <- iris[which(iris$Species %in% c("setosa", "versicolor")),]

p_sepallength <- ggplot(data = iris_1, aes(x = Species, y = Sepal.Length, color = Species)) + 
  geom_boxplot(width=0.2, lwd = 1, outlier.size = 3, outlier.alpha = 0.3) + 
  geom_signif(comparisons = list(c("setosa", "versicolor")),
              map_signif_level=F,
              textsize=5,
              test=wilcox.test,
              step_increase=0.2,
              size = 1,
              test.args = c("two.sided")) +
  theme_classic()

此处需要注意的是,在函数ggplot()中的aes()进行颜色映射,会将颜色映射到整个画布(包括geom_signif())。

未修改前的结果图:


修改后的代码:

p_sepallength <- ggplot(data = iris_1, aes(x = Species, y = Sepal.Length)) + 
  geom_boxplot(width=0.2, lwd = 1, outlier.size = 3, outlier.alpha = 0.3, aes(color = Species)) + 
  geom_signif(comparisons = list(c("setosa", "versicolor")),
              map_signif_level=F,
              textsize=5,
              test=wilcox.test,
              step_increase=0.2,
              size = 1,
              test.args = c("two.sided")) +
  scale_color_manual(values = c("#56B4E9","#E69F00")) + 
  theme_classic()

修改后的结果图如下,即将颜色的映射关系从ggplot()中转移到geom_boxplot()中。同时,可以通过scale_color_manual()对箱线图的“箱”的颜色进行手动修改。

这边稍微提一下vscode的插件:点击之后可以选定颜色,不需要使用16进制的RGB字符串。


3、修改连接对象的括号的tip长度

下图为需要修改的部分:

# 使用geom_signif()函数中的tip_length属性
p + geom_signif(tip_length = 0)

4、修改统计检验,p-value的字符大小

# 使用geom_signif()函数中的textsize属性
p + geom_signif(textsize = 3)

参考资料

[1] https://cran.r-project.org/web/packages/ggsignif/vignettes/intro.html

上一篇下一篇

猜你喜欢

热点阅读