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
,其形状合适,而不是 2Dnp.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