Kruskal-Wallis 检验是一种非参数统计检验,用于确定三个或更多独立组的中位数之间是否存在显著差异。虽然 Kruskal-Wallis 检验可以告诉我们是否存在整体上的显著差异,但它并不能指出具体哪些组之间存在差异。这就需要事后检验来介入,让我们能够识别出具有显著差异的组对。在本文中,我们将探索如何在 R 语言中执行 Kruskal-Wallis 检验,以及如何进行事后成对比较以发现具体的组间差异。
Kruskal-Wallis 检验简介
Kruskal-Wallis 检验是 Mann-Whitney U 检验(或 Wilcoxon 秩和检验) 在超过两组情况下的扩展。它是一种基于秩的非参数检验,适用于方差分析(ANOVA)的假设未得到满足的情况,例如数据不服从正态分布或样本量较小的情况。
Kruskal-Wallis 检验的假设
- 该检验适用于有序、等距或比率数据。
- 样本之间相互独立。
- 每组内的观测值应该是独立的。
- 各组的分布应具有相同的形状。
让我们假设我们有一个包含三种不同治疗方法(A、B 和 C)及其相应得分的数据集。我们将执行 Kruskal-Wallis 检验,以查看这些治疗方法之间的得分是否存在显著差异,我们将使用 R 编程语言 来实现这一点。
R
CODEBLOCK_a1e9b6a5
输出:
Treatment Score
1 A 63.70958
2 A 44.35302
3 A 53.63128
4 A 56.32863
5 A 54.04268
6 A 48.93875
执行 Kruskal-Wallis 检验
要执行 Kruskal-Wallis 检验,我们使用 kruskal.test() 函数:
R
CODEBLOCK_843a30be
输出:
Kruskal-Wallis rank sum test
data: Score by Treatment
Kruskal-Wallis chi-squared = 0.79742, df = 2, p-value = 0.6712
如果 p 值小于显著性水平(通常为 0.05),我们将拒绝原假设,这表明至少有一对治疗组之间存在显著差异。
为什么要进行事后检验?
Kruskal-Wallis 检验告诉我们组间存在显著差异,但它没有具体说明哪些组不同。因此,我们需要进行事后检验来确定哪些具体的组对具有显著差异。
在 R 中进行事后检验
我们将使用 INLINECODEbec737f1 函数进行事后分析,或者使用 INLINECODEf0cc453f 或 dunn.test 等包进行更高级的成对比较。
R
CODEBLOCK_c9bb6686
输出:
Pairwise comparisons using Wilcoxon rank sum exact test
data: data$Score and data$Treatment
A B
B 1 -
C 1 1
P value adjustment method: bonferroni
p.adjust.method 参数控制如何针对多重比较调整 p 值(例如 "bonferroni"、"holm"、"BH" 等)。
可视化结果
可视化组比较有助于更直观地解释结果。我们可以使用 ggplot2 包创建一个带有显著性差异注释的箱线图。
R
CODEBLOCK_22d05f7f
输出:
!gh在 R 中对 Kruskal-Wallis 检验进行事后检验
结论
Kruskal-Wallis 检验是确定当参数检验的假设未满足时多个组之间是否存在差异的宝贵工具。然而,事后检验对于确定哪些具体组不同至关重要。本文演示了如何执行 Kruskal-Wallis 检验,并使用 R 进行事后成对比较作为后续分析。