曼-惠特尼U检验 - 概述
在此系列, 本文将介绍曼-惠特尼U检验,并且实现能进行小样本显著性检验的Python代码。这是 Scipy 的原版曼-惠特尼U检验的扩展代码。
当前(2019)的scipy版本仅支持大样本检验(n>20),所以新代码补充了小样本(n<20)检验的方法。
第一部分: 曼-惠特尼U检验的概述
第二部分 : 曼-惠特尼U检验的Python实现
曼-惠特尼U检验
曼-惠特尼U检验是独立样本t-检验的一种非参数检验替代。它同时检验了排列的顺序和分布的形状。给定两个独立数组,它将检验是否其中一组数据倾向于大于另一组数据 (样本均值的检验)。理论上,在大样本检验中,曼-惠特尼检验也可以用于检验两组数据是否来自不同分布,即使它们的中位数非常相似。
该检验并不假设样本是正太分布,或方差相等, 或两组样本数量相同。
因此:
- 当样本不来自正太分布时,曼-惠特尼U检验通常作为t-检验的替代被采用;
- 通常,当样本数小(n<20)时采用曼-惠特尼U检验;
- 曼-惠特尼U检验可检测不同的分布的形状与分散程度,以及中位数的区别。
检验统计量与计算实例
设想我们将要实验调查一种新药的有效性。一共有n=10名被试被随机分配服用新药或安慰剂。被试将记录下他们的不适程度(数值越高,越不舒服)。
数据如下:
安慰剂 | 7 | 5 | 6 | 4 | 12 |
---|---|---|---|---|---|
新药 | 3 | 6 | 4 | 2 | 1 |
假设如下所示,并且这是一个 5%的显著性水平检验 (i.e., ):
因为样本数很小 (), 所以非参数检验将被采用。我们将用曼-惠特尼U检验解决这个问题。
曼-惠特尼U检验的检验统计量被记作 ,它在原假设下的分布是已知的. 对于小样本, 的分布被列成了表。当样本量大于 ~20时, 的分布近似于正太分布。
小样本例子
统计量, ,计算起来非常简单,特别是对于小样本检验。
-
计算轶
第一步是为数据分级。我们将全部数据(将两组被试数据放到一起(n=10))按大小顺序排列,并为它们分配等级(从1到10),结果如下表:
数值 (已排序) 轶(等级) 安慰剂 新药 安慰剂 新药 1 1 2 2 3 3 2 2 4 4 4.5 4.5 5 6 6 6 7.5 7.5 7 9 12 10 对于相等的数据,我们使用它们的轶的平均值。
-
计算各组轶的总和
第二步是计算各组轶的和,。
对于安慰剂组,
对于新药组,
-
计算
给定如下公式,
那么在本例中,
因此统计量 。
-
比较 与 的临界值
在每一次检验中,我们都将判断基于观测到的 值,原假设是否成立。对于曼-惠特尼U检验,判断的方式与其他参数检验相同。我们将首先定义 的临界值, 满足:
若 ,我们拒绝原假设 ,而
若 ,我们不拒绝原假设 。
的临界值表如下:
从表中可得, 因此,
我们不拒绝原假设 并且在显著程度时,没有显著性的证据表明这两个分布不相等。
在大样本的情况下 (n > 20)
当样本数量大时, 值近似于一个正太分布,所以可以用Z-检验检测原假设。
-
计算
在此,
-
计算 统计量的Z值
-
判断
比较观测到的Z值与Z的临界值以判断应保留或拒绝原假设。 相似地,在5%的显著程度上,
若 ,我们不拒绝 而,
若 ,拒绝 。
曼-惠特尼U检验的Python实现
今天,多数统计包都可以使用曼-惠特尼U检验。比如在Python中, scipy.stat 含有曼-惠特尼U检验。
然而,曼-惠特尼U检验的scipy版本提及:
Use only when the number of observation in each sample is > 20.
(仅当观测样本量>20时可用)
因为曼-惠特尼U检验对于小样本检验而言非常有用,比如医疗数据(许多临床试验只有非常少的样本量),所以在这里使用Python实现了一个完整的曼-惠特尼U检验,可用于小样本与大样本两种情况。
在 第二部分,将详细展示这个新应用。
更多细节:
留言