riCoxon在R:如何在非正常假设下比较2组

Antoine Soetewey 2020-06-07 10 minute read

介绍

在上一篇文章中,我们展示了如何 使用学生的T-Test比较不同场景下的两组。学生的T-Test要求分配遵循a 正常分布.1 在本文中,我们展示了如何 违反正常假设时比较两组, 使用 Wilcoxon测试.

Wilcoxon测试是一个 非参数测试,意味着它不依赖于属于任何特定参数分布的特定参数系列的数据。非参数测试与参数对应物具有相同的目标。但是,它们具有参数测试的优势:它们 不需要假设正常性 分布。例如,一个学生的T检验仅适用于数据是高斯或样本大小足够大(通常是 \(n \ ge 30 \))。应在其他情况下使用非参数。

人们可能想知道为什么我们不会总是使用非参数测试,这样我们就不必打扰对正常性测试。原因是当正常性假设保持时,非参数测试通常比相应的参数测试更强大。因此,所有其他都是平等的,没有参数化测试,你不太可能拒绝 零假设 如果数据遵循正常分布,则为false。因此,当满足假设时,优选使用参数形式的统计测试。

在剩余的文章中,我们介绍了Wilcoxon测试的两种情况以及如何通过两个示例在R中执行它们。

两种不同的场景

至于学生的T检验,Wilcoxon测试用于比较两组,并看看它们是否彼此显着不同。

要比较的两组是:

  1. 独立或
  2. 配对(即,依赖)

实际上有两个版本的Wilcoxon测试:

  1. Mann-winney-wilcoxon 当样本是独立的测试时,执行测试(也称为Wilcoxon秩和测试)(所以该测试是对学生对独立样本的T检验的非参数。
  2. Wilcoxon签名排名 当样本被配对/依赖时,进行测试(也有时称为配对样本的Wilcoxon测试)(所以该测试是对成对样本的学生T检验的非参数等于学生的T-Test)。

Luckily, those two tests can be done in R with the same function: wilcox.test(). They are presented in the following sections.

独立样本

对于具有独立样本的威尔科逊素测试,假设我们想测试统计考试的成绩是否与女性和男性学生之间的差异不同。

我们收集了24名学生的成绩(12名女孩和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
##     Sex Grade
## 1  Girl    19
## 2  Girl    18
## 3  Girl     9
## 4  Girl    17
## 5  Girl     8
## 6  Girl     7
## 7  Girl    16
## 8  Girl    19
## 9  Girl    20
## 10 Girl     9
## 11 Girl    11
## 12 Girl    18
## 13  Boy    16
## 14  Boy     5
## 15  Boy    15
## 16  Boy     2
## 17  Boy    14
## 18  Boy    15
## 19  Boy     4
## 20  Boy     7
## 21  Boy    15
## 22  Boy     6
## 23  Boy     7
## 24  Boy    14

以下是性别的分布(使用 {ggplot2}):

library(ggplot2)

ggplot(dat) +
  aes(x = Sex, y = Grade) +
  geom_boxplot(fill = "#0c4c8a") +
  theme_minimal()

我们首先检查2个样品是否通过直方图和Shapiro-Wilk测试遵循正常分布:

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.test(subset(dat, Sex == "Girl")$Grade)
## 
##  Shapiro-Wilk normality test
## 
## data:  subset(dat, Sex == "Girl")$Grade
## W = 0.84548, p-value = 0.0323
shapiro.test(subset(dat, Sex == "Boy")$Grade)
## 
##  Shapiro-Wilk normality test
## 
## data:  subset(dat, Sex == "Boy")$Grade
## W = 0.84313, p-value = 0.03023

直方图表明两个分布似乎都不遵循正态分布和 p - Shapiro-Wilk测试的值证实了它(因为我们拒绝在5%意义水平下的分布的正常性的零假设)。

我们刚刚显示两组违反了正常的假设,所以现在是时候了解如何在R的情况下执行Wilcoxon测试。2 请记住,Wilcoxon测试的零点和替代假设如下:

  • \(h_0 \):2组是相似的
  • \(H_1):2组是不同的
test <- wilcox.test(dat$Grade ~ dat$Sex)
test
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  dat$Grade by dat$Sex
## W = 31.5, p-value = 0.02056
## alternative hypothesis: true location shift is not equal to 0

我们获得了测试统计数据 p - value和一个假设测试的提醒。 3

p-Value是0.021。因此,在5%的意义程度上,我们拒绝了零假设,我们得出结论,女孩和男孩之间的成绩显着不同。

Given the boxplot presented above showing the grades by sex, one may see that girls seem to perform better than boys. This can be tested formally by adding the alternative = "较少的" argument to the wilcox.test() function:4

test <- wilcox.test(dat$Grade ~ dat$Sex,
  alternative = "less"
)
test
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  dat$Grade by dat$Sex
## W = 31.5, p-value = 0.01028
## alternative hypothesis: true location shift is less than 0

p-Value是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)
)

dat
##    Beginning End
## 1         16  19
## 2          5  18
## 3         15   9
## 4          2  17
## 5         14   8
## 6         15   7
## 7          4  16
## 8          7  19
## 9         15  20
## 10         6   9
## 11         7  11
## 12        14  18

我们将数据集转换为它 整洁格式:

dat2 <- data.frame(
  Time = c(rep("Before", 12), rep("After", 12)),
  Grade = c(dat$Beginning, dat$End)
)
dat2
##      Time Grade
## 1  Before    16
## 2  Before     5
## 3  Before    15
## 4  Before     2
## 5  Before    14
## 6  Before    15
## 7  Before     4
## 8  Before     7
## 9  Before    15
## 10 Before     6
## 11 Before     7
## 12 Before    14
## 13  After    19
## 14  After    18
## 15  After     9
## 16  After    17
## 17  After     8
## 18  After     7
## 19  After    16
## 20  After    19
## 21  After    20
## 22  After     9
## 23  After    11
## 24  After    18

在学期开始和之后的成绩分配:

# 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()

(见 {esquisse} and {questionr} addins 帮助您重新排序因子变量的级别,并轻松地绘制绘图 {ggplot2} package。)

在这个例子中,显然,这两个样本并不独立,因为同一个12名学生在学期之前和之后进行了考试。假设违反正常性假设,因此我们使用威尔科逊氧克森测试 配对样本.

这 R code for this test is similar than for independent samples, except that we add the paired = TRUE argument to the wilcox.test() function to take into consideration the dependency between the 2 samples:

test <- wilcox.test(dat2$Grade ~ dat2$Time,
  paired = TRUE
)
test
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  dat2$Grade by dat2$Time
## V = 21, p-value = 0.1692
## alternative hypothesis: true location shift is not equal to 0

我们获得了测试统计数据 p - value和一个假设测试的提醒。

p-Value是0.169。因此,在5%的意义水平下,我们不会拒绝零级在学期之前和之后等级相似。

假设相同的差异

正如文章开始的那样,Wilcoxon测试不需要假设正常性。

关于相同差异的假设,根据您的目标,可能或可能不需要这种假设。如果您只想比较您不必测试差异的平等的组,因为两个分布不必具有相同的形状。但是,如果你的目标是 比较两组的中位数 然后,您需要确保两个分布具有相同的形状(因此,相同的方差)。5

因此,差异平等考试的结果将改变您的解释:两组或两组中位数“的”分布“的差异。在本文中,我不希望比较中位数,我只想通过确定两组的分布是否存在差异来进行比较。这是我不测试差异平等的原因。

请注意,在执行Kruskal-Wallis测试以比较三个组或更多(即,非参数版本的kruskal-wallis测试时,这是等效的 Anova.):如果您只想测试您不需要同性恋的组中是否存在差异,而如果您想比较中位数,则必须满足此假设。

谢谢阅读。我希望这篇文章帮助您比较了两组,使用Wilcoxon测试将不遵循R正常分布的群体。看看 学生’s t-test 如果您需要执行Wilcoxon测试的参数版本,以及 Anova. 如果您需要比较3组或更多。

一如既往,如果您有问题或与本文所涵盖的主题相关的建议,请将其添加为评论,以便其他读者可以从讨论中受益。


  1. 请记住,可以通过3个互补方法测试正常假设:(i)直方图,(ii)qq-plot和(iii)正常测试(最常见的是shapiro-wilk测试)。看 如何确定分布是否遵循正常分布 如果您需要刷新。↩︎

  2. 请注意,为了使用学生的T-Test(Wilcoxon测试的参数版本),需要 两个样品都遵循正态分布。因此,即使一个样本遵循正常分布(并且另一个不遵循正态分布),建议使用非参数测试。 ↩︎

  3. 注意,相等元素(Ties)的存在防止了精确的 p-value calculation. This can be tackled by computing the exact or asymptotic Wilcoxon-Mann-Whitney test with adjustment for ties, using the wilcox_test() function from the {coin} package: wilcox_test(dat$Grade ~ dat$Sex, distribution = exact()) or wilcox_test(dat$Grade ~ dat$Sex). In our case, conclusions remain unchanged.↩︎

  4. We add alternative = "较少的" (and not alternative = "greater") because we want to test that grades for boys are 较少的 than grade for girls. Using "较少的" or "greater" can be deducted from the reference level in the dataset.↩︎

  5. 看到这三篇文章有关Wilcoxon测试中的同等差异的更详细讨论: 1, 2 & 3.↩︎



喜欢这篇文章?

获取更新 每次发布新文章。
任何垃圾邮件都没有任何垃圾邮件。
分享: