非参数检验:Wilcoxon检验

引言

Wilcoxon检验(也被称为Mann-Withney-Wilcoxon检验)是一种非参数检验,意味着它不依赖于属于任何特定参数的概率分布家族的数据。非参数检验的目标与参数检验的目标相同。然而,它们比参数检验有一个优势:它们不需要假设分布的正态性。例如,学生t检验只有在数据是高斯的或样本量足够大(通常n≥30)时才适用。在其他情况下,应该使用非参数检验。

有人可能会问,为什么我们不总是使用非参数检验,这样我们就不必为检验正态性而烦恼。原因是,当正态性假设成立时,非参数检验通常不如相应的参数检验有力。因此,在其他条件相同的情况下,如果数据遵循正态分布,使用非参数检验,当无效假设为假时,你拒绝无效假设的可能性就会降低。因此,在满足假设的情况下,最好使用统计检验的参数化版本。

我们将介绍Wilcoxon检验的两种情况,以及如何通过两个例子在R中执行它们。

采用Wilcoxon检验比较两组是否存在显著性差异。要比较的两组是:

  • 独立样本
  • 非独立样本

独立样本

对于独立样本的Wilcoxon检验,假设我们想测试女性和男性学生在统计学考试中的成绩是否不同。

我们收集了24名学生的成绩(12名女生,12名男生):

#rep("Girl",12)为把字符“Girl”重复12次
dat <- data.frame(
  Sex = as.factor(c(rep("Girl", 12), rep("Boy", 12))),
  Grade = c(
    19, 18, 9, 17, 8, 7, 16, 19, 20, 9, 11, 18,
    16, 5, 15, 2, 14, 15, 4, 7, 15, 6, 7, 14
  )
)
dat
image.png

按照性别划分的成绩分布:

library(ggplot2)
ggplot(dat) +
  aes(x = Sex, y = Grade) +
  geom_boxplot(fill = "#0c4c8a") +
  theme_minimal()
按照性别的数据分布

女孩成绩的频率分布:

hist(subset(dat, Sex == "Girl")$Grade,
  main = "Grades for girls",
  xlab = "Grades"
)
女孩成绩的频率分布

男孩成绩的频率分布:

hist(subset(dat, Sex == "Boy")$Grade,
  main = "Grades for boys",
  xlab = "Grades"
)
男孩成绩的频率分布

从上面两张图可以看出,两个都不服从正态分布这个限制条件。

直方图显示两种分布似乎都不符合正态分布,Shapiro-Wilk检验的p值证实了这一点(如果P值显著,那么拒绝正态分布假设,数据不符合正态分布)。

shapiro.test(subset(dat, Sex == "Girl")$Grade)
shapiro.test(subset(dat, Sex == "Boy")$Grade)
image.png

下面就可以践行wilcox检验了:
H0: 两组是相似的
H1: 两组是不同的

test <- wilcox.test(dat$Grade ~ dat$Sex)
test

test <- wilcox.test(dat$Grade ~ dat$Sex,
  alternative = "less"
)
test
wilcox检验结果

P值为0.021,因此,在5%显著性水平下,我们拒绝原假设,并得出结论:女生和男生的成绩存在显著差异。考虑到上面展示的按性别划分的分数箱形图,你可能会发现女孩似乎比男孩表现得更好。可以通过添加alternative = "less"。P值是0.01。因此,在5%显著性水平下,我们拒绝原假设,并得出男孩表现明显低于女孩的结论(这相当于得出女孩表现明显优于男孩的结论)。

非独立样本

对于第二种情况,考虑我们在学期初对一个有12名学生的班级进行了一次数学测试,并在学期末对完全相同的学生进行了一次类似测试。我们有以下数据:

dat <- data.frame(
  Beginning = c(16, 5, 15, 2, 14, 15, 4, 7, 15, 6, 7, 14),
  End = c(19, 18, 9, 17, 8, 7, 16, 19, 20, 9, 11, 18)
)
#将数据转换为对其的格式
dat2 <- data.frame(
  Time = c(rep("Before", 12), rep("After", 12)),
  Grade = c(dat$Beginning, dat$End)
)
dat2
数据样式

学期初和学期后的成绩分布:

# Reordering dat2$Time
dat2$Time <- factor(dat2$Time,
  levels = c("Before", "After")
)
ggplot(dat2) +
  aes(x = Time, y = Grade) +
  geom_boxplot(fill = "#0c4c8a") +
  theme_minimal()
学期前后的成绩分布

在这个例子中,很明显两个样本不是独立的,因为同样的12名学生在学期前后参加了考试。同时假设正态性假设被违背,我们因此使用配对样本的Wilcoxon检验。
这个测试的R代码与独立样本相似,我们在wilcox.test()函数中添加了paired = TRUE参数,以考虑两个样本之间的依赖关系:

test <- wilcox.test(dat2$Grade ~ dat2$Time,
  paired = TRUE)
test
检验结果

P值为0.169。因此,在5%显著性水平下,我们不拒绝学期前后成绩相似的原假设。

我希望这篇文章能够帮助您使用Wilcoxon检验来比较两个不遵循R正态分布的组。如果您需要执行参数版本的Wilcoxon检验,请参阅Student的t检验。

正态性假设可以通过3种互补的方法进行检验:(i)直方图,(ii) QQ-plot和(iii)正态性检验(最常见的是Shapiro-Wilk test)。

注意,为了使用t检验(Wilcoxon检验的参数化版本),需要两个样本服从正态分布。因此,即使一个样本服从正态分布(而另一个不服从正态分布),也建议使用非参数检验

注意,相等元素(tie)的存在阻止了精确的p值计算

我们添加alternative = "less"(alternative = "greater"),因为我们想测试男孩的分数比女孩的分数低。使用“少”或“多”可以从数据集的参考水平中扣除

学习网址:Wilcoxon test in R: how to compare 2 groups under the non-normality assumption | R-bloggers
本文内容从上述网址翻译和学习而形成

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容