← 返回《数据科学的统计基础》
📑 查看全课大纲(第 37 / 41 节)

Wilcoxon符号秩检验

约 24 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

Wilcoxon 符号秩检验

小象实战讲义 · 数据科学的统计基础

在上一节,我们学习了符号检验,它仅利用观测值相对于中位数的“方向”(正负号)进行推断。本节介绍的 Wilcoxon 符号秩检验,在符号检验的基础上,进一步利用了观测值与假设中位数之间“距离”的信息。这种对数据信息的更充分利用,使得该检验在多数情况下比单纯的符号检验更有效。学完本节,你将能够对一个总体的中位数进行更精确的检验,并能处理成对样本和非成对样本的分布位置比较问题。

💡 核心导读

  • 核心思想:Wilcoxon 符号秩检验是对符号检验的推广,它不仅考虑观测值与假设中位数的符号差异,还考虑其绝对差值的大小,通过“秩”来量化这种距离信息。
  • 检验统计量:核心是计算正秩和 W+W^+,即所有正差值绝对值的秩次之和。在原假设下,W+W^+ 的期望和方差有明确的分布。
  • 应用场景:适用于单个总体中位数检验成对样本差异检验以及两个独立样本的位置比较(此时称为 Wilcoxon 秩和检验或 Mann-Whitney U 检验)。
  • 优势对比:与符号检验相比,Wilcoxon 检验利用了更多数据信息,因此通常具有更高的检验功效(即更容易发现真实存在的差异)。

从符号检验到符号秩检验

在符号检验中,我们检验总体中位数 MM 是否等于某个指定值 M0M_0,即 H0:M=M0H_0: M = M_0。检验统计量 S+S^+ 是样本观测值 xix_i 中大于 M0M_0 的个数。这个检验只利用了“xix_iM0M_0 左边还是右边”的信息。

然而,数据中蕴含的信息远不止于此。考虑两个样本点 xix_ixjx_j,它们都大于 M0M_0,但 xix_i 距离 M0M_0 非常近,而 xjx_j 距离 M0M_0 非常远。在符号检验中,它们对统计量 S+S^+ 的贡献都是 11。直观上,xjx_j 提供了更强的证据支持“中位数大于 M0M_0”的备择假设。差值 di=xiM0d_i = x_i - M_0 的绝对值 di|d_i|,代表了样本点偏离假设中位数的“距离”,这里面包含重要的信息。

Wilcoxon 符号秩检验的核心思想,就是将符号信息和距离信息结合起来。它通过计算差值的(rank)来量化距离信息:对所有 di|d_i| 从小到大排序,最小的秩为 1,次小的秩为 2,以此类推。然后,我们只对正差值 di>0d_i > 0 所对应的秩进行求和,得到检验统计量 W+W^+,即正秩和

W+=i=1nRiI(di>0)W^+ = \sum_{i=1}^{n} R_i \cdot I(d_i > 0) 其中 RiR_idi|d_i| 在全部 nn 个绝对值中的秩次,I()I(\cdot) 为示性函数。

由于秩次 RiR_i 的取值范围是 1,2,,n1, 2, \dots, n,因此 W+W^+ 的取值范围是 00n(n+1)2\frac{n(n+1)}{2}。如果原假设 H0:M=M0H_0: M = M_0 为真,且总体分布关于中位数对称(这是该检验的一个重要假设),那么我们预期正差值和负差值应该大致对称分布,正秩和 W+W^+ 应该在期望值 n(n+1)4\frac{n(n+1)}{4} 附近波动。如果 W+W^+ 显著地偏大或偏小,我们就有理由拒绝原假设。

检验步骤与统计量计算

下面我们通过一个具体例子,详细说明 Wilcoxon 符号秩检验的步骤和统计量计算。

假设检验问题:检验总体中位数 MM 是否等于 4,即 H0:M=4H_0: M = 4 vs H1:M4H_1: M \neq 4样本观测值x1=3,x2=5,x3=0,x4=5,x5=7x_1=3, x_2=5, x_3=0, x_4=-5, x_5=7

第一步:计算差值及其绝对值 计算每个观测值与假设中位数 M0=4M_0=4 的差值 di=xi4d_i = x_i - 4。 | ii | xix_i | di=xi4d_i = x_i - 4 | di|d_i| | | :— | :---- | :-------------- | :------ | | 1 | 3 | -1 | 1 | | 2 | 5 | 1 | 1 | | 3 | 0 | -4 | 4 | | 4 | -5 | -9 | 9 | | 5 | 7 | 3 | 3 |

第二步:对绝对值排序并赋秩di|d_i| 从小到大排序:1, 1, 3, 4, 9。

  • d1=1|d_1|=1d2=1|d_2|=1 并列最小。对于结(tie),我们赋予它们平均秩次。最小的两个秩是 1 和 2,因此它们的平均秩为 (1+2)/2=1.5(1+2)/2 = 1.5
  • 接下来 d5=3|d_5|=3,赋秩 3。
  • d3=4|d_3|=4,赋秩 4。
  • d4=9|d_4|=9,赋秩 5。

第三步:确定符号并计算正秩和 W+W^+ 根据 did_i 的符号,将对应的秩标记为正秩或负秩。只对正秩进行求和。 | ii | did_i | di|d_i| | 秩 RiR_i | 符号 | 正秩 | | :— | :---- | :------ | :------- | :--- | :--- | | 1 | -1 | 1 | 1.5 | - | | | 2 | 1 | 1 | 1.5 | + | 1.5 | | 3 | -4 | 4 | 4 | - | | | 4 | -9 | 9 | 5 | - | | | 5 | 3 | 3 | 3 | + | 3 |

因此,正秩和 W+=1.5+3=4.5W^+ = 1.5 + 3 = 4.5

第四步:做出统计决策 我们需要判断 W+=4.5W^+ = 4.5 是否是一个极端值。在原假设下,W+W^+ 的精确分布可以列出(对于小样本 n20n \leq 20 通常查表),其期望和方差为: E(W+)=n(n+1)4=5×64=7.5E(W^+) = \frac{n(n+1)}{4} = \frac{5 \times 6}{4} = 7.5 Var(W+)=n(n+1)(2n+1)24tj(tj21)48Var(W^+) = \frac{n(n+1)(2n+1)}{24} - \frac{\sum t_j (t_j^2 - 1)}{48} 其中 tjt_j 是第 jj 个结的长度。本例中有一个长度为 2 的结,所以 tj(tj21)=2×(41)=6\sum t_j (t_j^2 - 1) = 2 \times (4-1)=6Var(W+)=5×6×1124648=330240.125=13.750.125=13.625Var(W^+) = \frac{5 \times 6 \times 11}{24} - \frac{6}{48} = \frac{330}{24} - 0.125 = 13.75 - 0.125 = 13.625

对于大样本 (n>20n > 20),W+W^+ 近似服从正态分布,我们可以构造 ZZ 统计量: Z=W+E(W+)Var(W+)N(0,1)Z = \frac{W^+ - E(W^+)}{\sqrt{Var(W^+)}} \sim N(0,1) 然后根据 ZZ 值和设定的显著性水平 α\alpha(如 0.05)做出决策。

在实际应用中,我们通常直接使用统计软件进行计算。下面我们用 Python 的 SciPy 库来演示上述例子的计算过程。

import numpy as np
from scipy import stats

# 样本数据
x = np.array([3, 5, 0, -5, 7])
# 假设的中位数
M0 = 4

# 执行 Wilcoxon 符号秩检验
# 注意:scipy.stats.wilcoxon 默认检验差值的中位数是否为0。
# 对于单样本中位数检验,我们需要先计算差值 d = x - M0
d = x - M0

# 执行检验,method='approx' 使用正态近似,适用于小样本有结的情况
stat, p_value = stats.wilcoxon(d, alternative='two-sided', method='approx')

print(f"差值 d = {d}")
print(f"Wilcoxon 统计量 (正秩和): {stat}")
print(f"P 值: {p_value:.4f}")

# 做出决策
alpha = 0.05
if p_value < alpha:
    print(f"在显著性水平 {alpha} 下,拒绝原假设,认为总体中位数不等于 {M0}。")
else:
    print(f"在显著性水平 {alpha} 下,没有足够证据拒绝原假设。")

应用场景拓展

1. 成对样本的比较

Wilcoxon 符号秩检验同样适用于成对样本的比较,例如比较同一组受试者在处理前和处理后的差异。此时,我们关心的不是中位数是否等于某个常数,而是成对差值的总体中位数是否为 0

案例:比较新肥料(X)和旧肥料(Y)对小麦产量的影响。在 10 块田地上配对实验。

  • 原假设 H0H_0:两种肥料效果无差异,即差值 D=XYD = X - Y 的中位数 MD=0M_D = 0
  • 备择假设 H1H_1:新肥料效果更好,即 MD>0M_D > 0

检验步骤与单样本中位数检验完全相同,只是将观测值 xix_i 替换为成对差值 di=xiyid_i = x_i - y_i。如果计算出的 W+W^+ 足够大(对应 pp 值很小),则拒绝原假设,认为新肥料显著提高了产量。

2. 两个独立样本的比较 (Wilcoxon 秩和检验)

当有两个独立的样本,分别来自总体 XXYY,我们想检验它们的位置(如中位数)是否相同时,可以使用 Wilcoxon 秩和检验(亦称 Mann-Whitney U 检验)。

基本思想:将两个样本的所有观测值混合在一起,从小到大排序并赋秩。然后计算第一个样本的秩和 WXW_X。如果两个总体位置相同,那么两个样本的秩应该均匀地混合在一起,WXW_X 会在其期望值附近。如果 WXW_X 显著偏大或偏小,则表明一个总体的位置高于另一个。

检验统计量:常用 Mann-Whitney U 统计量,其定义为: UX=WXnX(nX+1)2U_X = W_X - \frac{n_X(n_X+1)}{2} 其中 nXn_X 是第一个样本的容量,WXW_X 是其秩和。UXU_X 的含义是:样本 XX 的观测值大于样本 YY 的观测值的总次数。

案例:比较铅作业工人与非铅作业工人的血铅值。

  • 原假设 H0H_0:两组工人的血铅值中位数相同。
  • 备择假设 H1H_1:两组工人的血铅值中位数不同(或某一组更高)。
import numpy as np
from scipy import stats

# 模拟两组数据:非铅作业组 (lower) 和铅作业组 (higher)
np.random.seed(42)
non_lead = stats.norm.rvs(loc=50, scale=10, size=10)  # 中位数较低
lead = stats.norm.rvs(loc=70, scale=15, size=9)       # 中位数较高

# 执行 Mann-Whitney U 检验 (Wilcoxon 秩和检验)
# `alternative='two-sided'` 检验位置是否不同
stat, p_value = stats.mannwhitneyu(non_lead, lead, alternative='two-sided')

print(f"非铅作业组样本: {non_lead.round(1)}")
print(f"铅作业组样本: {lead.round(1)}")
print(f"Mann-Whitney U 统计量: {stat}")
print(f"P 值: {p_value:.4f}")

alpha = 0.05
if p_value < alpha:
    print(f"在显著性水平 {alpha} 下,拒绝原假设,认为两组工人血铅值中位数存在显著差异。")
else:
    print(f"在显著性水平 {alpha} 下,没有足够证据拒绝原假设。")

📝 动手练一练

  1. 单样本中位数检验:某生产线声称其生产的零件长度中位数为 10.0 cm。质检员随机抽取了 8 个零件,测得长度(cm)为:[9.8, 10.1, 9.9, 10.0, 10.2, 9.7, 10.0, 9.6]。使用 Wilcoxon 符号秩检验,在显著性水平 α=0.05\alpha=0.05 下,检验零件长度中位数是否与声称值相符。
  2. 成对样本检验:为了测试一种新的教学方法,对 6 名学生在教学前后进行了测试,成绩如下:
    学生前测后测
    A7885
    B8288
    C7578
    D8590
    E7983
    F8892
    使用 Wilcoxon 符号秩检验,判断新教学方法是否显著提高了学生成绩(α=0.05\alpha=0.05)。

参考答案:

  1. 差值 d = [-0.2, 0.1, -0.1, 0.0, 0.2, -0.3, 0.0, -0.4]。去除差值为 0 的点后,对 |d| 赋秩并计算正秩和。使用 Python 计算可得 p 值通常大于 0.05,因此不能拒绝原假设,认为零件长度中位数与 10.0 cm 无显著差异。
  2. 计算成对差值 d = [7, 6, 3, 5, 4, 4]。所有差值均为正。|d| 的秩为 [6, 5, 1, 4, 2.5, 2.5](注意两个并列的 4 平分了第 2、3 名的秩,各取 2.5)。正秩和 W+=6+5+1+4+2.5+2.5=21W^+ = 6+5+1+4+2.5+2.5 = 21。对于 n=6,W+W^+ 的临界值很小,p 值将远小于 0.05。因此拒绝原假设,认为新教学方法显著提高了成绩。

本章小结

本节深入探讨了 Wilcoxon 符号秩检验,它是一种比符号检验更强大的非参数检验方法。

  • 核心:通过结合符号信息和差值大小的秩次信息,构造正秩和统计量 W+W^+,用于推断总体中位数或成对差值的中心位置。
  • 应用
    1. 单样本:检验总体中位数 MM 是否等于指定值 M0M_0
    2. 成对样本:检验两个相关总体中位数是否相等(即差值中位数是否为 0)。
    3. 两独立样本:使用 Wilcoxon 秩和检验 (Mann-Whitney U 检验) 比较两个独立总体的位置。
  • 优势:相较于仅使用符号的检验,它对数据信息的利用更充分,检验功效更高,是实践中处理非正态数据或等级数据时比较位置参数的常用工具。

行动清单

  1. 理解计算:手动完成一个小样本(如 n=5)的 Wilcoxon 符号秩检验全步骤,包括计算差值、赋秩、求正秩和。
  2. 掌握工具:使用 scipy.stats.wilcoxonscipy.stats.mannwhitneyu 函数,对你手头的一组数据或模拟数据执行检验,并正确解读 p 值。
  3. 对比思考:对同一组数据,分别用符号检验和 Wilcoxon 符号秩检验进行分析,观察 p 值的差异,直观感受“利用更多信息”带来的检验效力提升。

— 小象教研组

配套学习资源与课件
  • 第7章课件:非参数统计(PDF · 1.8MB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问