scipy.stats.

combine_pvalues#

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

结合针对同一假设的独立测试中的p值。

这些方法仅用于结合基于连续分布的假设检验中的p值。

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

参数:
p值array_like

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

方法{‘fisher’, ‘pearson’, ‘tippett’, ‘stouffer’, ‘mudholkar_george’}

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

可用的方法有(详见注释):

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

  • ‘pearson’: 皮尔逊方法

  • ‘mudholkar_george’: Mudholkar 和 George 的方法

  • ‘tippett’: Tippett 的方法

  • ‘stouffer’: Stouffer’s Z-score 方法

权重类似数组, 可选

仅用于 Stouffer’s Z-score 方法的可选权重数组。被其他方法忽略。

int 或 None, 默认值: 0

如果是一个整数,表示输入数据中要计算统计量的轴。输入数据的每个轴切片(例如行)的统计量将出现在输出的相应元素中。如果为 None,则在计算统计量之前会将输入数据展平。

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

定义如何处理输入的 NaN。

  • propagate: 如果在计算统计量的轴切片(例如行)中存在 NaN,则输出的相应条目将为 NaN。

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

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

keepdimsbool, 默认值: False

如果设置为True,被减少的轴将作为尺寸为1的维度保留在结果中。通过此选项,结果将正确地与输入数组进行广播。

返回:
res重要性结果

一个包含属性的对象:

统计浮动

由指定方法计算的统计数据。

p值浮动

组合的p值。

注释

如果将此函数应用于具有离散统计量的测试,例如任何秩测试或列联表测试,它将产生系统性错误的结果,例如,Fisher 方法将系统性地高估 p 值 [1]。当离散分布近似于连续分布时,对于大样本量,这个问题变得不那么严重。

这些方法之间的差异可以通过它们的统计数据以及在考虑显著性时它们强调的p值组合的哪些方面来最好地说明 [2]。例如,强调大p值的方法对强假阴性和真阴性更为敏感;相反,专注于小p值的方法对阳性更为敏感。

  • Fisher方法的统计量(也称为Fisher联合概率检验)[Rc356e4bdcefb-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。该方法的优点是它可以直接引入权重,这使得Stouffer方法在p值来自不同规模的研究时比Fisher方法更强大 [6] [7]

  • Tippett 的方法使用最小的 p 值作为统计量。(注意,这个最小值并不是组合的 p 值。)

Fisher 方法可以扩展到组合来自相关测试的 p 值 [8]。诸如 Brown 方法和 Kost 方法的扩展目前尚未实现。

Added in version 0.15.0.

从 SciPy 1.9 开始,np.matrix 输入(不推荐用于新代码)在计算执行前被转换为 np.ndarray。在这种情况下,输出将是一个标量或适当形状的 np.ndarray,而不是一个 2D 的 np.matrix。同样,虽然掩码数组的掩码元素被忽略,但输出将是一个标量或 np.ndarray,而不是一个 mask=False 的掩码数组。

参考文献

[1]

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

[2] (1,2)

Heard, N. 和 Rubin-Delanchey, P. “在组合p值的方法之间进行选择。” Biometrika 105.1 (2018): 239-246.

[4]

George, E. O., 和 G. S. Mudholkar. “关于逻辑随机变量的卷积.” Metrika 30.1 (1983): 1-13.

[6]

Whitlock, M. C. “结合独立测试的概率:加权Z方法优于Fisher的方法。”《进化生物学杂志》18, 第5期 (2005): 1368-1373.

[7]

Zaykin, Dmitri 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值具有不同的权重时,考虑使用Stouffer方法。

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