我正在使用R中的ggplot2包比较两组长度(不同的个体)和盒图。我想比较两个分布,但到目前为止,我发现使用wilcoxon测试的唯一方法是"ggpubr“包中的stat_compare_means。这是比较分布的正确方式吗?我可以比较分布而不是均值吗?正如您所看到的,我是统计世界中的一个新手。谢谢!
发布于 2021-03-15 01:49:01
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_test和add_xy_position以及来自ggpubr包的stat_pvalue_manual。pairwise_wilcox_test函数是对基本的R pairwise.wilcox.text的改进,因为它返回的是tibble而不是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())

发布于 2021-03-15 01:46:12
此信息是预定义的:
如果您想测试数据是否为正态分布,请使用Kolmogorov-Smirnov检验。
如果数据是正态分布的,则使用t-test比较两组的均值。
如果数据不是正态分布,则使用Wilcoxon秩和检验(= Mann Whitney U检验)来比较两组的中位数。dput()你的数据,我可以给你看代码。
https://stackoverflow.com/questions/66627357
复制相似问题