combine_pvalues#
- scipy.stats.combine_pvalues(pvalues, method='fisher', weights=None, *, axis=0, nan_policy='propagate', keepdims=False)[源代码]#
合并来自独立检验的 p 值,这些检验都与相同的假设相关。
这些方法仅用于合并基于连续分布的假设检验的 p 值。
每种方法都假设在零假设下,p 值是从区间 [0, 1] 中独立且均匀地采样的。计算一个检验统计量(每种方法都不同),并基于该检验统计量在零假设下的分布计算合并的 p 值。
- 参数:
- pvalues类数组
假定来自基于连续分布的独立检验的 p 值数组。
- method{‘fisher’, ‘pearson’, ‘tippett’, ‘stouffer’, ‘mudholkar_george’}
用于合并 p 值的方法的名称。
可用的方法有(详细信息请参阅“说明”)
‘fisher’:Fisher 方法(Fisher 联合概率检验)
‘pearson’:Pearson 方法
‘mudholkar_george’:Mudholkar 和 George 方法
‘tippett’:Tippett 方法
‘stouffer’:Stouffer 的 Z 分数方法
- weights类数组,可选
仅用于 Stouffer 的 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 值。
说明
如果此函数应用于具有离散统计量(例如,任何秩检验或列联表检验)的检验,则会产生系统性错误的结果,例如,Fisher 方法将系统性地高估 p 值 [1]。当离散分布近似变为连续分布时,对于较大的样本量,此问题会变得不那么严重。
这些方法之间的差异可以通过它们的统计量以及在考虑显著性 [2] 时它们强调的 p 值组合的哪些方面来最好地说明。例如,强调大 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]Kincaid, W. M., “The Combination of Tests Based on Discrete Distributions.” Journal of the American Statistical Association 57, no. 297 (1962), 10-19.
[2] (1,2)Heard, N. and Rubin-Delanchey, P. “Choosing between methods of combining p-values.” Biometrika 105.1 (2018): 239-246.
[4]George, E. O., and G. S. Mudholkar. “On the convolution of logistic random variables.” Metrika 30.1 (1983): 1-13.
[6]Whitlock, M. C. “Combining probability from independent tests: the weighted Z-method is superior to Fisher’s approach.” Journal of Evolutionary Biology 18, no. 5 (2005): 1368-1373.
[7]Zaykin, Dmitri V. “Optimally weighted Z-test is a powerful method for combining probabilities in meta-analysis.” Journal of Evolutionary Biology 24, no. 8 (2011): 1836-1841.
示例
假设我们希望使用 Fisher 方法(默认)合并来自对同一零假设的四个独立检验的 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 值具有不同的权重时,请考虑 Stouffer 方法。
>>> weights = [1, 2, 3, 4] >>> res = combine_pvalues(pvalues, method='stouffer', weights=weights) >>> res.pvalue 0.009578891494533616