Wilcoxon 检验之 rank-sum 与 signed-rank

前些时候在写作时碰到了 Wilcoxon 检验,仔细一查,发现这里面居然还包含 2 种不同类型的检测,并且极容易混淆,这 2 种分别方法是 Wilcoxon rank-sum test(我翻译为秩和检验)和 Wilcoxon signed-rank test(我翻译为符号秩检验)。今天我简单总结一下,对比一下他们的差异。

Frank Wilcoxon (1892—1965) 是美国的统计学家,发表了 70 篇左右论文,但其最大的贡献就是这 2 个以他名字命名的非参假设检验方法:秩和检验符号秩检验。他在 1945 年发表的论文 1 中将二者分别称为 非成对检验 (unpaired experiment)和 成对检验(paired comparison)。 正是因为其巨大影响力使得这两个检验方法都以他的名字命名,并流传下来。

假设检验有点类似于我们高中数学中常见的“反证法”,即提出一个错误的假设,然后证明它是错的。那么我们提出的假设叫做 原假设 (Null Hypothesis),简写为 H 0 H_{0} H0。我们备选的假设叫做 备选假设 (Alternative Hypothesis),简写为 H α H_{\alpha} Hα 或者 H 1 H_{1} H1。注意,在假设检验中只有 2 个假设,即原假设和备选假设,我们的目的就是要拒绝原假设。

在假设检验过程中,我们一般设定原假设 H 0 H_0 H0 和备选假设 H 1 H_1 H1 如下,

  • 原假设 H 0 H_0 H0:两组数据没有显著性差异
  • 备选假设 H 1 H_1 H1:两组数据存在显著性差异

1. Wilcoxon 秩和检验

根据 wikipedia 解释, Wilcoxon rank-sum test 定义如下,

In statistics, the Mann–Whitney U test (also called the Mann–Whitney–Wilcoxon (MWW), Wilcoxon rank-sum test, or Wilcoxon–Mann–Whitney test) is a nonparametric test.
This test can be used to determine whether two independent samples were selected from populations having the same distribution. 2

基本概念: 在统计学中,Wilcoxon rank-sum test(威尔科克森秩和检验)也叫 Mann-Whitney U test(曼-惠特尼 U 检验),或者 Wilcoxon-Mann-Whitney test。秩和检验是一个非参的假设检验方法,一般用来检测 2 个数据集是否来自于相同分布的总体。

这里的 “秩” 其实就是 “排名” 的意思,“秩和” 当然就是指 “将排名进行求和” 的操作。在秩和检验中,我们不要求被检验的 2 组数据包含相同个数的元素,换句话说,秩和检验更适用于非成对数据之间的差异性检测。

应用实例: 假设我们有 2 组数据 x 1 x_{1} x1 x 2 x_{2} x2,如下表所示, x 1 x_{1} x1 中有 7 个元素(列 x 1 x_1 x1 中), x 2 x_{2} x2 中有 8 个元素(列 x 2 x_2 x2 中),现在使用秩和检验判断这 2 组数据是否存在显著性差异。

数据 x 1 x_{1} x1总排名 r a n k rank rank数据 x 2 x_{2} x2总排名 r a n k rank rank
914711
55.543
81355.5
71168
101531
6868
71143
43

步骤 1:我们首先将 x 1 x_{1} x1 x 2 x_{2} x2 整合成一个序列,并按升序重新排序,序号记在表中的 r a n k rank rank 列当中。我们分别计算 2 组数据的排名之和 R 1 R_{1} R1 R 2 R_{2} R2 有,

R 1 = ( 14 + 5.5 + 13 + 11 + 15 + 8 + 11 ) = 77.5 R_{1} = (14+5.5+13+11+15+8+11) = 77.5 R1=(14+5.5+13+11+15+8+11)=77.5 R 2 = ( 11 + 3 + 5.5 + 8 + 1 + 8 + 3 + 3 ) = 42.5 R_{2} = (11+3+5.5+8+1+8+3+3) = 42.5 R2=(11+3+5.5+8+1+8+3+3)=42.5

注意,当我们计算若干等值元素的排名时,会用这些元素排名的平均值作为它们在整个序列中的排名。例如, x 1 x_1 x1 中的第 2 个元素与 x 2 x_2 x2 中第3 个元素的值都等于 5,且这 2 个 5 在整个序列中的排名分别是第 5 和第 6,因此这两个元素的排名为 5 + 6 2 = 5.5 \frac{5+6}{2}=5.5 25+6=5.5。其余等值元素的排名计算也与之类似。

步骤 2:令 n 1 n_{1} n1 n 2 n_{2} n2 分别表示 2 组数据的个数,即 n 1 = 7 , n 2 = 8 n_{1}=7, n_{2}=8 n1=7,n2=8。再令 T T T 表示小样本的排名和,即 T = R 1 = 77.5 T = R_{1} = 77.5 T=R1=77.5。根据计算公式可得 U 1 U_{1} U1 U 2 U_{2} U2 的值如下,

U 1 = n 1 × n 2 + n 1 ( n 1 + 1 ) 2 − T = 7 × 8 + 7 × 8 2 − 77.5 = 6.5 U_{1} = n_{1} \times n_{2} + \frac{n_{1}(n_{1}+1)}{2} - T = 7\times8 + \frac{7\times8}{2} - 77.5 = 6.5 U1=n1×n2+2n1(n1+1)T=7×8+27×877.5=6.5 U 2 = n 1 × n 2 − U 1 = 7 × 8 − 6.5 = 49.5 U_{2} = n_{1} \times n_{2} - U_{1} = 7 \times 8 - 6.5 = 49.5 U2=n1×n2U1=7×86.5=49.5

步骤 3:由于 U 1 U_{1} U1 更小,我们依此来查 Wilcoxon 双尾临界表,当 α = 0.05 , n 1 = 7 , n 2 = 8 \alpha=0.05, n_{1} = 7, n_{2} = 8 α=0.05,n1=7,n2=8 时的临界值是 10。因为 U 1 < 10 U_{1} < 10 U1<10,故应该拒绝原假设。最终结论是: x 1 x_{1} x1 x 2 x_{2} x2 存在统计意义上的显著性差异,它们可能来自分布不同的总体

编程实现: 在 python 中我们调用 scipy 包来里的 stats.mannwhitneyu() 函数来实现秩和检验,如下代码,

from scipy import stats
def wilcoxon_rank_sum_test(x, y):
	res = stats.mannwhitneyu(x ,y)
	print(res)

得到的结果如下,可知 statistic 即我们的 U 1 U_{1} U1 U 1 U_{1} U1 = statistic = 6.5,pvalue 即我们的 p-value 值 pvalue=0.0069…

> MannwhitneyuResult(statistic=6.5, pvalue=0.006966479792405637)

2. Wilcoxon 符号秩检验

根据 wikipedia 解释, Wilcoxon signed-rank test 定义如下,

A Wilcoxon signed-rank test is a nonparametric test that can be used to determine whether two dependent samples were selected from populations having the same distribution. 3

基本概念: Wilcoxon signed-rank test(威尔科克森符号秩检验)也是一种非参的假设检验方法,它成对的检查 2 个数据集中的数据(即 paired difference test)来判断 2 个数据集是否来自相同分布的总体。

应用实例: 假设我们有 2 组数据 y 1 y_{1} y1 y 2 y_{2} y2,如下表所示。我们按照如下 3 步来计算 wilcoxon signed-rank test 的结果。

I D ID ID数据 y 1 y_{1} y1数据 y 2 y_{2} y2符号位 s i g n sign sign绝对差值 a b s abs abs绝对差值的排名 r a n k rank rank
0125110+1157
1115122-173
2130125+151.5
3140120+1209
4140140-0-
5115124-194
6140123+1178
7125137-1126
8140135+151.5
9135145-1105

步骤 1:首先对 y 1 y_{1} y1 y 2 y_{2} y2 两两成对配对形成 10 个数据对(即 I D = 0 , . . . , 9 ID=0,...,9 ID=0,...,9),然后将这 10 个数据对两两求差,得到符号位 s i g n sign sign 列。具体的做法是:当 y 1 y_1 y1 元素比 y 2 y_2 y2 对应元素大时,符号位为正,即 +1;当 y 1 y_1 y1 元素比 y 2 y_2 y2 对应元素小时,符号位为负,即 -1。例如,在 I D = 1 ID=1 ID=1 的数据对中,125 > 110,故其符号位为 +1.

步骤 2: 首先对 y 1 y_{1} y1 y 2 y_{2} y2 两两成对求差得到绝对值 a b s abs abs 列,然后根据 a b s abs abs 列排序得到 r a n k rank rank 列。当某一对 y 1 y_{1} y1 y 2 y_{2} y2 的元素相等时,即 a b s = 0 abs=0 abs=0 时,我们不计算其 r a n k rank rank 值。例如,在 I D = 4 ID=4 ID=4 的数据对中, y 1 y_1 y1 y 2 y_2 y2 的值都是 140,因此这对数组没有排名值。

步骤 3: 有了这个 s i g n sign sign r a n k rank rank 列的结果后,我们就可以来计算秩和了,其中大于 0 的秩和 | W + W^{+} W+| 和 对于小于 0 的秩和 | W − W^{-} W|,以及最终的符号秩和 | W W W| 如下所示,

∣ W + ∣ = ∣ 7 + 1.5 + 9 + 8 + 1.5 ∣ = 27 |W^{+}| = |7+1.5+9+8+1.5| = 27 W+=7+1.5+9+8+1.5=27

∣ W − ∣ = ∣ 3 + 4 + 6 + 5 ∣ = 18 |W^{-}| = |3+4+6+5| = 18 W=3+4+6+5=18

∣ W ∣ = ∣ ∣ W + ∣ − ∣ W − ∣ ∣ = 9 |W| = ||W^{+}|-|W^{-}|| = 9 W=W+W=9

步骤 4:最后我们根据 | W W W| 来查表 4,我们得到当 Wilcoxon 在 α = 0.05 \alpha=0.05 α=0.05 n = 9 n=9 n=9 的时候的临界值是 5,而我们计算出来的 ∣ W ∣ = 9 > 5 |W| = 9 > 5 W=9>5,因此我们不能拒绝原假设。最终结论是: y 1 y_{1} y1 y 2 y_{2} y2 不存在统计意义上的显著性差异,它们可能来自于同一分布的总体

编程实现: 在 python 中我们调用 scipy 包来里的 stats.wilcoxon() 函数来实现秩和检验,如下代码,

from scipy import stats
def wilcoxon_signed_rank_test(y1, y2):
	res = stats.wilcoxon(y1, y2)
	print(res)

得到的结果如下,其中 statistic = 18.0,表示 2 类符号秩和较小的一个( ∣ W + ∣ |W^{+}| W+ ∣ W − ∣ |W^{-}| W 最小的是18);pvalue=0.5936… 就是我们需要的 p-value 值。之所以出现 Warning 信息是因为我们的数据量太少,一般来讲大于 20 是比较合适做假设检验的。

> E:\Software\Anaconda2\lib\site-packages\scipy\stats\morestats.py:2397: UserWarning: 
>   Warning: sample size too small for normal approximation.
>   warnings.warn("Warning: sample size too small for normal approximation.")
> WilcoxonResult(statistic=18.0, pvalue=0.5936305914425295)

  1. Wilcoxon, Frank. “Individual Comparisons by Ranking Methods.” Biometrics Bulletin 1.6(1945):80-83. link ↩︎

  2. Wikipedia. Wilcoxon rank-sum test. link ↩︎

  3. Wikipedia. Wilcoxon signed-rank test. link ↩︎

  4. 百度百科. Wilcoxon 符号秩检验临界表. link ↩︎

评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值