欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

实操指南:用Python scipy.stats.wilcoxon函数的案例解析

最编程 2024-02-08 15:21:44
...

计算 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 存在于计算统计数据的轴切片(例如行)中,则输出的相应条目将是 NaN

  • omit : NaNs 将在执行计算时省略。如果在计算统计量的轴切片中剩余数据不足,则输出的相应条目将为NaN

  • raise :如果存在 NaN,则会引发 ValueError

keepdims 布尔值,默认值:假

如果将其设置为 True,则缩小的轴将作为尺寸为 1 的尺寸留在结果中。使用此选项,结果将针对输入数组正确广播。

返回

statistic 浮点数

如果alternative 为“two-sided”,则高于或低于零的差的秩和,以较小者为准。否则为零以上差值的秩和。

pvalue 浮点数

用于测试的 p-value 取决于 alternativemode

注意

该测试已在 [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 的屏蔽数组。

参考

1

https://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test

2 (12)

Conover, W.J.,实用非参数统计,1971 年。

3

Pratt, J.W.,关于 Wilcoxon 符号秩程序中的零点和关系的评论,美国统计协会杂志,卷。 54,1959,第 655-667 页。 DOI:10.1080/01621459.1959.10501526

4 (123)

Wilcoxon, F.,通过排名方法进行的个体比较,生物识别公告,卷。 1,1945 年,第 80-83 页。 DOI:10.2307/3001968

scipy.stats.wilcoxon

Cureton, E.E.,当存在零差异时,Signed-Rank 抽样分布的正态近似,美国统计协会杂志,卷。 62,1967,第 1068-1069 页。 DOI:10.1080/01621459.1967.10500917

例子

[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(高于和低于零的秩和的最小值)。