【问题标题】:Compare boxplot with Wilcoxon test将箱线图与 Wilcoxon 检验进行比较
【发布时间】:2021-06-12 02:12:09
【问题描述】:

我正在使用 R 中的 ggplot2 包将两组长度(不同的个体)与箱线图进行比较。我想比较这两个分布,但到目前为止,我发现使用 wilcoxon 测试的唯一方法是“ggpubr”包中的 stat_compare_means .这是比较分布的正确方法吗?我可以比较分布而不是具体的平均值吗?如您所见,我是统计界的新手。谢谢!

【问题讨论】:

  • 如果您有关于选择合适测试的统计问题,您应该在Cross Validated 提问。堆栈溢出是针对特定的编程问题。如果您在此处包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 对您的数据类型使用正确的测试。 Wilcoxon 检验适用于离散(非连续)数据,例如年龄。对连续数据使用 t 检验。如果您需要的不仅仅是关于使用哪个测试的建议,那么正如@MrFlick 指出的那样,这是错误的地方。我发布了一个答案,描述了进行 Wilcoxon 测试的几种方法。
  • 感谢这两位 cmets。它阐明了我应该在此处发布的内容和方式。我已经看到了有关 wilcoxon 测试的答案。我认为使用 wilcoxon 检验比较我的分析的平均值应该没问题,但是成对 wilcoxon 检验及其使用方法非常有帮助,并提醒我 Wilcoxon 检验适用于离散数据!

标签: r ggplot2 statistics ggpubr


【解决方案1】:

Base R 具有执行 Wilcoxon 测试的内置函数:wilcox.test。您可以为其提供两个数值向量或将数值变量与因子变量相关联的公式(具有两个级别)。

# vector input
setosa_SL <- iris$Sepal.Length[which(iris$Species == "setosa")]
versicolor_SL <- iris$Sepal.Length[which(iris$Species == "versicolor")]
wilcox.test(setosa_SL, versicolor_SL)

    Wilcoxon rank sum test with continuity correction

data:  setosa_SL and versicolor_SL
W = 168.5, p-value = 8.346e-14
alternative hypothesis: true location shift is not equal to 0 

# formula input
wilcox.test(Sepal.Length ~ Species, data = iris[which(iris$Species != "virginica"),])

    Wilcoxon rank sum test with continuity correction

data:  Sepal.Length by Species
W = 168.5, p-value = 8.346e-14
alternative hypothesis: true location shift is not equal to 0

但是,iris$Species 具有三个级别。如果我们想同时做这三个呢?

基础stats 包也有pairwise.wilcox.test

pairwise.wilcox.test(iris$Sepal.Length, iris$Species)

    Pairwise comparisons using Wilcoxon rank sum test with continuity correction 

data:  iris$Sepal.Length and iris$Species 

           setosa  versicolor
versicolor 1.7e-13 -         
virginica  < 2e-16 5.9e-07  

P value adjustment method: holm 

现在,我怀疑您想绘制此图。您需要来自rstatix 包的pairwise_wilcox_testadd_xy_position 以及来自ggpubr 包的stat_pvalue_manualpairwise_wilcox_test 函数是对基本 R pairwise.wilcox.text 的改进,因为它返回一个小标题而不是 htest 类的列表。

library(rtatix)
librarr(ggpubr)

iris %>% pairwise_wilcox_test(Sepal.Length ~ Species)

# A tibble: 3 x 9
  .y.          group1     group2        n1    n2 statistic        p    p.adj p.adj.signif
* <chr>        <chr>      <chr>      <int> <int>     <dbl>    <dbl>    <dbl> <chr>       
1 Sepal.Length setosa     versicolor    50    50     168.  8.35e-14 1.67e-13 ****        
2 Sepal.Length setosa     virginica     50    50      38.5 6.40e-17 1.92e-16 ****        
3 Sepal.Length versicolor virginica     50    50     526   5.87e- 7 5.87e- 7 ****    

add_xy_positions 函数添加 x 和 y 坐标信息以使该数据更适合绘图,stat_pvalue_manual 添加包含 p 值信息的层。

ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot() +
  stat_pvalue_manual(iris %>% 
                       pairwise_wilcox_test(Sepal.Length ~ Species) %>% 
                       add_xy_position())

【讨论】:

    【解决方案2】:

    此信息为初步信息:

    如果您想测试您的数据是否为正态分布,请使用 Kolmogorov-Smirnov 测试。

    如果数据呈正态分布,请使用 t 检验比较两组的均值。

    如果数据不是正态分布,则使用 Wilcoxon 秩和检验(= Mann Whitney U 检验)比较两组的中位数。 dput()你的数据,我可以给你看代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多