美文网首页plot
【R绘图】ggsignif-假设检验

【R绘图】ggsignif-假设检验

作者: 陈有朴 | 来源:发表于2022-06-22 11:35 被阅读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

    相关文章

      网友评论

        本文标题:【R绘图】ggsignif-假设检验

        本文链接:https://www.haomeiwen.com/subject/hbzyvrtx.html