wilcoxon#
- scipy.stats.wilcoxon(x, y=None, zero_method='wilcox', correction=False, alternative='two-sided', method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[源代码]#
计算 Wilcoxon 符号秩检验。
Wilcoxon 符号秩检验检验两个相关配对样本是否来自同一分布的零假设。具体来说,它检验
x - y
差值的分布是否关于零对称。它是配对 T 检验的非参数版本。- 参数:
- x类似数组
用于第一组测量(在这种情况下,
y
是第二组测量),或两组测量之间的差异(在这种情况下,未指定y
)。必须是一维的。- y类似数组,可选
用于第二组测量(如果
x
是第一组测量),或未指定(如果x
是两组测量之间的差异)。必须是一维的。警告
当提供 y 时,
wilcoxon
会根据绝对值d = x - y
的秩计算检验统计量。减法中的舍入误差可能导致d
的元素被分配不同的秩,即使它们在精确算术中是相等的。与其分开传递 x 和 y,请考虑计算差值x - y
,根据需要进行舍入以确保只有真正唯一的元素在数值上是不同的,并将结果作为 x 传递,将 y 设置为默认值 (None)。- zero_method{“wilcox”, “pratt”, “zsplit”},可选
对于处理具有相等值(“零差异”或“零”)的对观测,有不同的约定。
- correction布尔值,可选
如果为 True,则如果使用正态近似,在计算 z 统计时通过将 Wilcoxon 秩统计量向均值调整 0.5 来应用连续性校正。默认值为 False。
- alternative{“two-sided”, “greater”, “less”},可选
定义备择假设。默认值为“双侧”。在下文中,让
d
表示成对样本之间的差异:d = x - y
如果同时提供了x
和y
,否则为d = x
。“双侧”:
d
下面的分布在 0 处不对称。“小于”:
d
下面的分布随机小于在 0 处对称的分布。“大于”:
d
下面的分布随机大于在 0 处对称的分布。
- 方法{“auto”、“exact”、“approx”} 或
PermutationMethod
实例,可选 计算 p 值的方法,请参见备注。默认值为 “auto”。
- axisint 或 None,默认值:0
如果为 int,则沿其计算统计值的输入轴。输入的每个轴片(例如行)的统计值将出现在输出的对应元素中。如果
None
,则在计算统计值之前将对输入进行平铺。- nan_policy{‘传播”、“忽略”、“引发”}
定义如何处理输入 NaN。
传播
:如果在计算统计值的轴片(例如行)中出现 NaN,则输出的相应项将为 NaN。忽略
:执行计算时将忽略 NaN。如果计算统计值的轴片中剩余的数据不足,则输出的相应项将为 NaN。引发
:如果出现 NaN,将引发ValueError
。
- keepdims布尔值,默认值:False
如果将其设置为 True,则缩减的轴将保留在结果中,大小为 1。使用此选项,结果将针对输入数组正确广播。
- 返回:
- 具有以下属性的对象。
- 统计数据array_like
如果 alternative 为“two-sided”,则为上方或下方较小值之差的秩的总和。否则,为上方差的秩的总和。
- pvaluearray_like
取决于 alternative 和 method 的检验 p 值。
- zstatisticarray_like
当
method = 'approx'
时,这是标准化 z 统计数据z = (T - mn - d) / se
其中
T
是 statistic,如上所定义,mn
是零假设下分布的均值,d
是连续性校正,se
是标准误差。当method != 'approx'
时,该属性不可用。
另请参见
说明
在下文中,我们用
d
表示成对样本之间的差值:d = x - y
(如果x
和y
均已提供),否则d = x
。假设d
的所有元素都是独立且同分布的观测,所有元素都是各不相同且非零的。当
len(d)
足够大时,标准化检验统计数据(即上文的 zstatistic)的零分布近似为正态分布,而且可以使用method = 'approx'
计算 p 值。当
len(d)
较小时,正态近似可能不够准确,因此优先使用method='exact'
(但会增加执行时间)。默认的
method='auto'
在两者之间进行选择:当len(d) <= 50
且没有零时,将使用精确方法;否则,将使用近似方法。
如果存在“关系”(即不是
d
的所有元素都是唯一的)或“零”(即d
的元素为零),则会改变检验统计量的空分布,method='exact'
将不再计算精确 p 值。如果method='approx'
,则会调整 z 统计量,以便与标准正态分布进行更准确的比较,但对于有限的样本量来说,标准正态分布只是 z 统计量的真空分布的近似值。对于此类情况,method 参数还可以接受实例PermutationMethod
。在这种情况下,使用permutation_test
计算 p 值,其中包含提供的配置选项和其他适当设置。从 SciPy 1.9 开始,
np.matrix
输入(不推荐用于新代码)在执行计算之前会被转换为np.ndarray
。在此情况下,输出将是标量或形状合适的np.ndarray
,而不是二维np.matrix
。同样,尽管掩码数组的屏蔽元素会被忽略,但输出将是标量或np.ndarray
,而不是掩码为mask=False
的掩码数组。参考文献
[2]康诺威,《非参数统计实践》,1971 年。
[3]普拉特,《威尔科克森符号秩程序中的零和关系》,《美国统计协会杂志》,第 54 卷,1959 年,第 655-667 页。 DOI:10.1080/01621459.1959.10501526
[5]库瑞顿,《当存在零差异时的符号秩抽样分布的正态近似》,《美国统计协会杂志》,第 62 卷,1967 年,第 1068-1069 页。 DOI:10.1080/01621459.1967.10500917
示例
在 [4] 中,杂交玉米植株与自交玉米植株之间的高度差如下
>>> d = [6, 8, 14, 16, 23, 24, 28, 29, 41, -48, 49, 56, 60, -67, 75]
杂交植株似乎更高。为了检验杂交和自交玉米植株高度没有差异的原假设,我们可以应用双侧检验
>>> from scipy.stats import wilcoxon >>> res = wilcoxon(d) >>> res.statistic, res.pvalue (24.0, 0.041259765625)
因此,我们将在 5% 的置信水平下拒绝该零假设,进而得出结论,即组间身高存在差异。若要确认可假设差异的中位数为正数,我们会使用
>>> res = wilcoxon(d, alternative='greater') >>> res.statistic, res.pvalue (96.0, 0.0206298828125)
这表明,在置信水平为 5% 时,中位数为负数的零假设可被拒绝,而中位数大于零的备择假设则可被接受。以上 p 值是准确的值。使用正态近似会得到非常相似的值
>>> res = wilcoxon(d, method='approx') >>> res.statistic, res.pvalue (24.0, 0.04088813291185591)
请注意,在单侧情况下统计量变为 96(正差异的秩和),而在两侧情况下则为24(零以上和零以下秩和的最小值)。
在以上示例中,将成对植物之间的身高差异直接提供给
wilcoxon
。或者,wilcoxon
接受两个长度相同的样本,计算成对元素之间的差异,然后再执行该测试。考虑样本x
和y
>>> import numpy as np >>> x = np.array([0.5, 0.825, 0.375, 0.5]) >>> y = np.array([0.525, 0.775, 0.325, 0.55]) >>> res = wilcoxon(x, y, alternative='greater') >>> res WilcoxonResult(statistic=5.0, pvalue=0.5625)
请注意,如果我们已手动计算差异,则测试产生的结果会有所不同
>>> d = [-0.025, 0.05, 0.05, -0.05] >>> ref = wilcoxon(d, alternative='greater') >>> ref WilcoxonResult(statistic=6.0, pvalue=0.4375)
实质性差异是由于
x-y
结果中的舍入误差>>> d - (x-y) array([2.08166817e-17, 6.93889390e-17, 1.38777878e-17, 4.16333634e-17])
即使我们希望
(x-y)[1:]
的所有元素都具有相同的大小0.05
,但实际上它们的大小略有差异,因此在测试中被分配了不同的秩。在执行测试之前,请考虑计算d
,并根据需要进行调整,以确保理论上相同的值在数字上不同。例如>>> d2 = np.around(x - y, decimals=3) >>> wilcoxon(d2, alternative='greater') WilcoxonResult(statistic=6.0, pvalue=0.4375)