【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