本文简要介绍 python 语言中 scipy.stats.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 signed-rank 检验。
Wilcoxon signed-rank 检验测试两个相关配对样本来自同一分布的原假设。特别是,它测试差异
x - y
的分布是否关于零对称。它是配对T-test 的非参数版本。- x: array_like
第一组测量值(在这种情况下,
y
是第二组测量值),或者两组测量值之间的差异(在这种情况下,y
不指定。)必须是一维的。- y: 数组,可选
第二组测量值(如果
x
是第一组测量值)或未指定(如果x
是两组测量值之间的差异。)必须是一维的。警告
什么时候y提供,
wilcoxon
根据绝对值的排名计算检验统计量d = x - y
。减法中的舍入误差可能会导致以下元素d
被分配不同的等级,即使它们与精确的算术并列。而不是通过x和y分别考虑计算差异x - y
,根据需要进行舍入以确保只有真正唯一的元素在数字上是不同的,并将结果传递为x,离开y默认(无)。- zero_method: {“wilcox”, “pratt”, “zsplit”},可选
处理具有相等值的观测值对(“zero-differences” 或 “zeros”)有不同的约定。
“wilcox”:丢弃所有zero-differences(默认);参见[4]。
“pratt”:在排名过程中包括zero-differences,但降低零的排名(更保守);参见[3]。在这种情况下,正常近似值的调整如[5]中所示。
“zsplit”:在排名过程中包括zero-differences,并将零排名分为正排名和负排名。
- correction: 布尔型,可选
如果为真,如果使用正态近似值,则在计算 z-statistic 时,通过将 Wilcoxon 秩统计量向平均值调整 0.5 来应用连续性校正。默认为假。
- alternative: {“two-sided”, “greater”, “less”},可选
定义备择假设。默认为“双面”。下面,让
d
表示配对样本之间的差异:如果同时提供了x
和y
,则为d = x - y
,否则为d = x
。“双面”:
d
的底层分布关于零不对称。‘less’:
d
的底层分布随机小于关于零对称的分布。‘greater’:
d
的底层分布随机大于关于零对称的分布。
- method: {“auto”, “exact”, “approx”},可选
p值的计算方法见注释。默认为“auto”。
- axis: int 或无,默认值:0
如果是 int,则计算统计量的输入轴。输入的每个axis-slice(例如行)的统计信息将出现在输出的相应元素中。如果
None
,输入将在计算统计数据之前被分解。- nan_policy: {‘propagate’, ‘omit’, ‘raise’}
定义如何处理输入 NaN。
propagate
:如果计算统计数据的轴切片(例如行)中存在NaN,则输出的相应条目将为 NaN。omit
: 计算时将省略NaNs。如果计算统计数据的轴切片中剩余的数据不足,则输出的相应条目将为 NaN。raise
:如果存在 NaN,则会引发ValueError
。
- keepdims: 布尔值,默认值:假
如果将其设置为 True,则缩小的轴将作为尺寸为 1 的尺寸留在结果中。使用此选项,结果将针对输入数组正确广播。
- 具有以下属性的对象。
- statistic: array_like
如果替代是“two-sided”,则高于或低于零的差值的等级总和,以较小者为准。否则是大于零的差值的等级总和。
- pvalue: array_like
测试的 p 值取决于替代方案和方法。
- zstatistic: array_like
当
method = 'approx'
时,这是标准化的 z-statistic:z = (T - mn - d) / se
其中
T
是统计如上所定义,mn
是原假设下分布的均值,d
是连续性修正,并且se
是标准误。什么时候method != 'approx'
,该属性不可用。
参数 ::
返回 ::
注意:
下面,让
d
表示配对样本之间的差异:如果同时提供了x
和y
,则为d = x - y
,否则为d = x
。假设d
的所有元素都是独立且同分布的观测值,并且全部不同且非零。什么时候
len(d)
足够大,归一化检验统计量的零分布 (z统计量以上)大约是正常的,并且method = 'approx'
可用于计算 p 值。当
len(d)
很小时,正态近似可能不准确,首选method='exact'
(以额外的执行时间为代价)。默认值
method='auto'
在两者之间进行选择:当len(d) <= 50
时,使用确切的方法;当len(d) <= 50
时,使用确切的方法;否则,使用近似方法。
“ties” 的存在(即并非所有元素
d
是唯一的)和“zeros”(即元素d
为零)改变检验统计量的零分布,并且method='exact'
不再计算精确的 p 值。如果method='approx'
,z-statistic 进行了调整,以便与标准正态进行更准确的比较,但是,对于有限的样本大小,标准正态只是 z-statistic 的真实零分布的近似值。对于在存在零和/或平局的情况下哪种方法最准确地近似小样本的 p 值,参考文献之间没有明确的共识。无论如何,这都是wilcoxon
当method='auto': ``method='exact'
使用时len(d) <= 50
并且没有零;否则,method='approx'
被使用。从 SciPy 1.9 开始,
np.matrix
输入(不建议用于新代码)在执行计算之前转换为np.ndarray
。在这种情况下,输出将是标量或适当形状的np.ndarray
而不是 2Dnp.matrix
。同样,虽然屏蔽数组的屏蔽元素被忽略,但输出将是标量或np.ndarray
而不是带有mask=False
的屏蔽数组。参考:
[2]Conover, W.J.,实用非参数统计,1971 年。
[3]Pratt, J.W.,关于 Wilcoxon 符号秩程序中的零点和关系的评论,美国统计协会杂志,卷。 54,1959,第 655-667 页。 DOI:10.1080/01621459.1959.10501526
[5]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植物似乎更高。为了检验不存在高度差异的原假设,我们可以应用双边检验:
>>> 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)
相关用法
- Python SciPy stats.wishart用法及代码示例
- Python SciPy stats.weightedtau用法及代码示例
- Python SciPy stats.wrapcauchy用法及代码示例
- Python SciPy stats.wasserstein_distance用法及代码示例
- Python SciPy stats.weibull_min用法及代码示例
- Python SciPy stats.weibull_max用法及代码示例
- Python SciPy stats.wald用法及代码示例
- Python SciPy stats.anderson用法及代码示例
- Python SciPy stats.iqr用法及代码示例
- Python SciPy stats.genpareto用法及代码示例
- Python SciPy stats.skewnorm用法及代码示例
- Python SciPy stats.cosine用法及代码示例
- Python SciPy stats.norminvgauss用法及代码示例
- Python SciPy stats.directional_stats用法及代码示例
- Python SciPy stats.invwishart用法及代码示例
- Python SciPy stats.bartlett用法及代码示例
- Python SciPy stats.levy_stable用法及代码示例
- Python SciPy stats.page_trend_test用法及代码示例
- Python SciPy stats.itemfreq用法及代码示例
- Python SciPy stats.exponpow用法及代码示例
- Python SciPy stats.gumbel_l用法及代码示例
- Python SciPy stats.chisquare用法及代码示例
- Python SciPy stats.semicircular用法及代码示例
- Python SciPy stats.gzscore用法及代码示例
- Python SciPy stats.gompertz用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.wilcoxon。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。