实操指南:用Python scipy.stats.wilcoxon函数的案例解析
计算 Wilcoxon signed-rank 检验。
Wilcoxon signed-rank 检验检验两个相关配对样本来自同一分布的原假设。特别是,它测试差异 x - y 的分布是否关于零对称。它是配对T-test 的非参数版本。
- x: array_like
-
第一组测量值(在这种情况下,
y
是第二组测量值),或者两组测量值之间的差异(在这种情况下,y
不指定。)必须是一维的。 - y: 数组,可选
-
第二组测量值(如果
x
是第一组测量值)或未指定(如果x
是两组测量值之间的差异。)必须是一维的。 - zero_method: {“pratt”, “wilcox”, “zsplit”},可选
-
以下选项可用(默认为“wilcox”):
“pratt”: Includes zero-differences in the ranking process, but drops the ranks of the zeros, see [4], (more conservative).
“wilcox”: Discards all zero-differences, the default.
“zsplit”: Includes zero-differences in the ranking process and split the zero rank between positive and negative ones.
- correction: 布尔型,可选
-
如果为真,如果使用正态近似值,则在计算 z-statistic 时,通过将 Wilcoxon 秩统计量向平均值调整 0.5 来应用连续性校正。默认为假。
- alternative: {“two-sided”, “greater”, “less”},可选
-
要检验的备择假设,请参见注释。默认为“two-sided”。
- mode: {“auto”, “exact”, “approx”}
-
计算 p-value 的方法,请参见注释。默认为“auto”。
- axis: int 或无,默认值:0
-
如果 int 是输入的轴,沿该轴计算统计量。输入的每个axis-slice(例如行)的统计信息将出现在输出的相应元素中。如果
None
,输入将在计算统计数据之前被分解。 - nan_policy: {‘propagate’, ‘omit’, ‘raise’}
-
定义如何处理输入NaNs
propagate
:如果 NaN 存在于计算统计数据的轴切片(例如行)中,则输出的相应条目将是 NaNomit
: NaNs 将在执行计算时省略。如果在计算统计量的轴切片中剩余数据不足,则输出的相应条目将为NaNraise
:如果存在 NaN,则会引发ValueError
。
- keepdims: 布尔值,默认值:假
-
如果将其设置为 True,则缩小的轴将作为尺寸为 1 的尺寸留在结果中。使用此选项,结果将针对输入数组正确广播。
- statistic: 浮点数
-
如果
alternative
为“two-sided”,则高于或低于零的差的秩和,以较小者为准。否则为零以上差值的秩和。 - pvalue: 浮点数
-
用于测试的 p-value 取决于
alternative
和mode
。
参数:
返回:
注意:
该测试已在 [4] 中引入。给定来自双变量分布(即配对样本)的 n 个独立样本 (xi, yi),它计算差异 di = xi - yi。测试的一个假设是差异是对称的,请参见 [2] 。 two-sided 检验具有零假设,即差异的中位数为零,而备选方案不为零。 one-sided 检验的原假设是中位数为正,而中位数为负(alternative == 'less'
),反之亦然(alternative == 'greater.'
)。
要导出 p-value,精确分布 (mode == 'exact'
) 可用于小样本量。默认的 mode == 'auto'
如果最多有 50 个观测值且没有平局,则使用精确分布,否则使用正态近似值 (mode == 'approx'
)。
关系的处理可以通过参数控制zero_method.如果zero_method == 'pratt'
, 正态近似被调整为scipy.stats.wilcoxon.一个典型的规则是要求 n > 20 (scipy.stats.wilcoxon,页。 383)。
从 SciPy 1.9 开始,np.matrix
输入(不推荐用于新代码)被转换为适当形状的 np.ndarray``s before the calculation is performed. In
this case, the output will be a scalar or ``np.ndarray
而不是 2D np.matrix
。同样,虽然屏蔽数组的屏蔽元素被忽略,但输出将是标量或 np.ndarray
而不是带有 mask=False
的屏蔽数组。
参考:
-
https://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test
-
Conover, W.J.,实用非参数统计,1971 年。
-
Pratt, J.W.,关于 Wilcoxon 符号秩程序中的零点和关系的评论,美国统计协会杂志,卷。 54,1959,第 655-667 页。 DOI:10.1080/01621459.1959.10501526
-
Wilcoxon, F.,通过排名方法进行的个体比较,生物识别公告,卷。 1,1945 年,第 80-83 页。 DOI:10.2307/3001968
-
Cureton, E.E.,当存在零差异时,Signed-Rank 抽样分布的正态近似,美国统计协会杂志,卷。 62,1967,第 1068-1069 页。 DOI:10.1080/01621459.1967.10500917
1:
2 (1,2):
3:
4 (1、2、3):
scipy.stats.wilcoxon:
例子:
在 [4] 中,交叉和 self-fertilized 玉米植物之间的高度差异如下所示:
>>> d = [6, 8, 14, 16, 23, 24, 28, 29, 41, -48, 49, 56, 60, -67, 75]
Cross-fertilized 植物似乎更高。为了检验没有高度差的原假设,我们可以应用two-sided 检验:
>>> from scipy.stats import wilcoxon
>>> w, p = wilcoxon(d)
>>> w, p
(24.0, 0.041259765625)
因此,我们会以 5% 的置信水平拒绝原假设,得出组间存在身高差异的结论。为了确认可以假设差异的中位数为正,我们使用:
>>> w, p = wilcoxon(d, alternative='greater')
>>> w, p
(96.0, 0.0206298828125)
这表明中位数为负的原假设可以在 5% 的置信水平下被拒绝,而支持中位数大于零的替代方案。上面的p-values 是准确的。使用正态近似得到非常相似的值:
>>> w, p = wilcoxon(d, mode='approx')
>>> w, p
(24.0, 0.04088813291185591)
请注意,在one-sided 情况下,统计量变为 96(正差异的秩和),而在 two-sided 情况下为 24(高于和低于零的秩和的最小值)。
推荐阅读
-
实操指南:用Python实现遗传算法的案例解析
-
实操指南:Python NumPy errstate功能实例与案例解析
-
用Python 3 Crypto库实操RSA加密、解密及签名/验证的简易教程与案例
-
实操指南:用Python scipy.stats.wilcoxon函数的案例解析
-
实操指南:用Python的Torch库理解并运用gradient函数
-
实操指南:Hive中的转义字符应用与案例解析
-
实操解析:Python scipy库中的newton_krylov函数使用指南
-
实操指南:用Python scipy.spatial.Delaunay工具的案例解析 - 避免遇到的问题与技巧
-
实操:用Python的PDFMiner库解析PDF文件的例子
-
实操指南:用Python爬虫抓取清华大学的新闻资讯