scipy.stats.

combine_pvalues#

scipy.stats.combine_pvalues(pvalues, method='fisher', weights=None, *, axis=0, nan_policy='propagate', keepdims=False)[source]#

组合来自有关相同假设的独立测试的 p 值。

这些方法只用于组合来自基于连续分布的假设检验的 p 值。

每种方法都假设在原假设下,p 值从区间 [0, 1] 独立且均匀地抽取。计算一个检验统计量(每个方法都不同),并根据原假设下该检验统计量的分布计算一个组合 p 值。

参数:
pvalues类数组

p 值数组,假定来自基于连续分布的独立测试。

method{‘fisher’, ‘pearson’, ‘tippett’, ‘stouffer’, ‘mudholkar_george’}

用于组合 p 值的方法的名称。

可用方法如下(详情请见备注)

  • ‘fisher’:费舍尔方法(费舍尔联合概率检验)

  • ‘pearson’:皮尔逊方法

  • ‘mudholkar_george’:穆德霍尔卡和乔治方法

  • ‘tippett’:蒂皮特方法

  • ‘stouffer’:斯陶弗的 Z 分数法

weightsarray_like, 可选

仅用于斯陶弗 Z 分数方法的可选权重数组。其他方法会忽略此权重数组。

axisint 或 None,默认值:0

如果是 int,则指用于计算统计量的输入轴。输入的每个轴切片(例如,行)的统计量将显示在输出的相应元素中。如果为 None,则在计算统计量之前,系统将对输入进行展开。

nan_policy{‘propagate’, ‘omit’, ‘raise’}

定义如何处理输入的 NaN。

  • propagate:如果在计算统计量的轴切片(例如,行)中存在 NaN,那么输出的对应项将为 NaN。

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

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

keepdimsbool,默认值:False

如果将其设为 True,则减少的轴将作为长度为 1 的维度保留在结果中。使用此选项后,结果将针对输入数组正确进行广播。

返回:
resSignificanceResult

一个包含以下属性的对象

statisticfloat

由指定的方法计算出的统计量。

pvaluefloat

综合 p 值。

注释

如果将此函数应用于具有离散统计量的测试(例如,任何秩测试或列联表测试),则会导致系统性错误结果,例如,费舍尔方法会系统性地高估 p 值 [1]。对于样本量较大的情况,离散分布变得近似连续时,这个问题变得不那么严重。

当考虑显著性时,这些方法之间的差异可以通过它们的统计量以及它们强调的 p 值组合的哪些方面来最恰当地进行说明 [2]。例如,强调大 p 值的方法对强烈的假阴性和真阴性更加敏感;相反,关注小 p 值的方法对阳性更加敏感。

  • Fisher 方法(也称作 Fisher 的组合概率检验)[3] 的统计值为 \(-2\sum_i \log(p_i)\),这等同于(作为检验统计值)各个 p 值的乘积:\(\prod_i p_i\)。在零假设下,此统计值遵循 \(\chi^2\) 分布。此方法强调较小的 p 值。

  • Pearson 方法使用 \(-2\sum_i\log(1-p_i)\),这等同于 \(\prod_i \frac{1}{1-p_i}\) [2]。因此,它强调较大的 p 值。

  • Mudholkar 和 George 通过对其统计值求平均值在 Fisher 方法和 Pearson 方法之间达成妥协 [4]。他们的方法强调极端 p 值,既接近 1 又接近 0。

  • Stouffer 方法 [5] 使用 Z 分数和统计值:\(\sum_i \Phi^{-1} (p_i)\),其中 \(\Phi\) 是标准正态分布的 CDF。此方法的优点在于易于引入权重,这在 p 值来自不同规模的研究时,可以使 Stouffer 方法比 Fisher 方法更强大 [6] [7]

  • Tippett 方法使用最小的 p 值作为统计值。(请注意,此最小值并非组合 p 值。)

Fisher 方法可以扩展为组合来自相关检验的 p 值 [8]。Brown 方法和 Kost 方法之类的扩展当前尚未实现。

在 0.15.0 版本中添加。

从 SciPy 1.9 开始,np.matrix 输入(不建议用于新代码)在执行计算之前将转换为 np.ndarray。在这种情况下,输出将是标量或 np.ndarray,其形状合适,而不是 2D np.matrix。类似地,虽然会忽略蒙版数组的蒙版元素,但输出将是标量或 np.ndarray,而不是蒙版 mask=False

参考

[1]

W.M. Kincaid,“基于离散分布的检验组合”。《美国统计协会杂志》57,297 期(1962 年),10-19 页。

[2] (1,2)

N. Heard 和 P. Rubin-Delanchey。“结合 p 值的多种方法之间的选择”。《Biometrika》,第 105.1 期(2018 年):239-246 页。

[4]

E.O. George 和 G.S. Mudholkar。“关于逻辑随机变量的卷积”。《Metrika》,第 30.1 期(1983 年),1-13 页。

[6]

惠特洛克,M.C. “独立检验概率结合:加权 Z 法优于费歇尔的办法。”进化生物学杂志 18 期第 5 号(2005 年):1368-1373。

[7]

扎伊金,德米特里 V. “最优化加权 Z 检验是一种结合元分析概率的强大方法。”进化生物学杂志 24 期第 8 号(2011 年):1836-1841。

示例

假设我们希望结合来自同一个零假设的四项独立检验的 p-值,使用费歇尔方法(默认)。

>>> from scipy.stats import combine_pvalues
>>> pvalues = [0.1, 0.05, 0.02, 0.3]
>>> combine_pvalues(pvalues)
SignificanceResult(statistic=20.828626352604235, pvalue=0.007616871850449092)

当各个 p-值携带不同的加权时,考虑斯陶弗方法。

>>> weights = [1, 2, 3, 4]
>>> res = combine_pvalues(pvalues, method='stouffer', weights=weights)
>>> res.pvalue
0.009578891494533616