barnard_exact#
- scipy.stats.barnard_exact(table, alternative='two-sided', pooled=True, n=32)[source]#
对 2x2 列联表执行 Barnard 精确检验。
- 参数:
- table整数类型的类数组 (array_like)
2x2 列联表。元素应为非负整数。
- alternative{‘two-sided’, ‘less’, ‘greater’}, 可选
定义零假设和备择假设。默认为 ‘two-sided’。请参阅下面的“注释”部分中的说明。
- pooledbool, 可选
是否使用合并方差(例如,在 Student 的 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”. Wikipedia. https://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\)。 因此,我们调用
barnard_exact
并使用alternative="less"
选项>>> 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 检验。