scipy.stats.

barnard_exact#

scipy.stats.barnard_exact(table, alternative='two-sided', pooled=True, n=32)[源代码]#

对 2x2 列联表执行 Barnard 精确检验。

参数:
tablearray_like of ints

一个 2x2 列联表。元素应为非负整数。

alternative{‘two-sided’, ‘less’, ‘greater’}, 可选

定义零假设和备择假设。默认为 ‘two-sided’。请参阅下面“注释”部分中的解释。

pooledbool,可选

是否使用合并方差(例如,在学生 t 检验中)或未合并方差(例如,在 Welch t 检验中)计算得分统计量。默认为 True

nint,可选

构建抽样方法时使用的采样点数。请注意,此参数将自动转换为下一个更高的 2 的幂,因为 scipy.stats.qmc.Sobol 用于选择采样点。默认为 32。必须为正数。在大多数情况下,32 个点足以达到良好的精度。更多点会带来性能成本。

返回:
berBarnardExactResult

具有以下属性的结果对象。

statisticfloat

Wald 统计量,具有合并或未合并方差,具体取决于用户选择的 pooled

pvaluefloat

P 值,在假设零假设为真的情况下,获得至少与实际观察到的分布一样极端的分布的概率。

另请参阅

chi2_contingency

列联表中变量独立性的卡方检验。

fisher_exact

2x2 列联表的 Fisher 精确检验。

boschloo_exact

2x2 列联表的 Boschloo 精确检验,它是 Fisher 精确检验的统一更强大的替代方法。

注释

Barnard 检验是用于分析列联表的精确检验。它检查两个分类变量的关联,并且是 2x2 列联表比 Fisher 精确检验更强大的替代方法。

让我们定义 \(X_0\) 一个 2x2 矩阵,表示观察到的样本,其中每一列都存储二项式实验,如下例所示。让我们还定义 \(p_1, p_2\)\(x_{11}\)\(x_{12}\) 的理论二项式概率。当使用 Barnard 精确检验时,我们可以断言三个不同的零假设

  • \(H_0 : p_1 \geq p_2\)\(H_1 : p_1 < p_2\) 相对,使用 alternative = “less”

  • \(H_0 : p_1 \leq p_2\)\(H_1 : p_1 > p_2\) 相对,使用 alternative = “greater”

  • \(H_0 : p_1 = p_2\)\(H_1 : p_1 \neq p_2\) 相对,使用 alternative = “two-sided”(默认值)

为了计算 Barnard 的精确检验,我们使用具有合并或未合并方差的 Wald 统计量 [3]。在默认假设两个方差相等的情况下(pooled = True),统计量计算为

\[T(X) = \frac{ \hat{p}_1 - \hat{p}_2 }{ \sqrt{ \hat{p}(1 - \hat{p}) (\frac{1}{c_1} + \frac{1}{c_2}) } }\]

其中 \(\hat{p}_1, \hat{p}_2\)\(\hat{p}\)\(p_1, p_2\)\(p\) 的估计值,后者是在假设 \(p_1 = p_2\) 的情况下得出的合并概率。

如果此假设无效(pooled = False),则统计量为

\[T(X) = \frac{ \hat{p}_1 - \hat{p}_2 }{ \sqrt{ \frac{\hat{p}_1 (1 - \hat{p}_1)}{c_1} + \frac{\hat{p}_2 (1 - \hat{p}_2)}{c_2} } }\]

然后,p 值计算为

\[\sum \binom{c_1}{x_{11}} \binom{c_2}{x_{12}} \pi^{x_{11} + x_{12}} (1 - \pi)^{t - x_{11} - x_{12}}\]

其中,总和是对所有 2x2 列联表 \(X\) 进行的,使得: * 当 alternative = “less” 时,\(T(X) \leq T(X_0)\),* 当 alternative = “greater” 时,\(T(X) \geq T(X_0)\),或 * 当 alternative = “two-sided” 时,\(T(X) \geq |T(X_0)|\)。上面,\(c_1, c_2\) 是第 1 列和第 2 列的总和,\(t\) 是总数(4 个样本元素的总和)。

返回的 p 值是在干扰参数 \(\pi\) 上取得的最大 p 值,其中 \(0 \leq \pi \leq 1\)

此函数的复杂度为 \(O(n c_1 c_2)\),其中 n 是采样点的数量。

参考文献

[1]

Barnard, G. A. “Significance Tests for 2x2 Tables”。Biometrika。34.1/2 (1947): 123-138。 DOI:dpgkg3

[2] (1,2)

Mehta, Cyrus R., and Pralay Senchaudhuri。“Conditional versus unconditional exact tests for comparing two binomials.”Cytel Software Corporation 675 (2003): 1-5。

[3]

“Wald Test”。Wikipediahttps://en.wikipedia.org/wiki/Wald_test

示例

[2] 中给出了 Barnard 检验的示例用法。

考虑以下疫苗功效研究的示例(Chan,1998)。在一项针对 30 名受试者的随机临床试验中,15 名接种了重组 DNA 流感疫苗,另外 15 名接种了安慰剂。安慰剂组的 15 名受试者中有 12 名 (80%) 最终感染了流感,而疫苗组中只有 15 名受试者中的 7 名 (47%) 感染了流感。数据以 2 x 2 表格形式列出

    Vaccine  Placebo
Yes     7        12
No      8        3

在进行统计假设检验时,我们通常使用阈值概率或显著性水平来决定拒绝零假设 \(H_0\)。假设我们选择 5% 的常见显著性水平。

我们的备择假设是,疫苗会降低感染病毒的几率;也就是说,接种疫苗感染病毒的概率 \(p_1\)小于不接种疫苗感染病毒的概率 \(p_2\)。因此,我们使用 alternative="less" 选项调用 barnard_exact

>>> import scipy.stats as stats
>>> res = stats.barnard_exact([[7, 12], [8, 3]], alternative="less")
>>> res.statistic
-1.894
>>> res.pvalue
0.03407

在疫苗不会降低感染几率的零假设下,获得至少与观察数据一样极端的检验结果的概率约为 3.4%。由于此 p 值小于我们选择的显著性水平,因此我们有证据拒绝 \(H_0\),支持备择假设。

假设我们改用 Fisher 的精确检验

>>> _, pvalue = stats.fisher_exact([[7, 12], [8, 3]], alternative="less")
>>> pvalue
0.0640

在相同的 5% 显著性阈值下,我们将无法拒绝零假设,支持备择假设。正如 [2] 中所述,Barnard 检验比 Fisher 精确检验统一更强大,因为 Barnard 检验不对任何边际值进行条件限制。只有当两组边际值都固定时,才应使用 Fisher 检验。