scipy.stats.

barnard_exact#

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

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

参数:
类数组的整数

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

替代方案{‘双侧’, ‘小于’, ‘大于’}, 可选

定义零假设和备择假设。默认是’双侧’。请参见下面的注释部分中的解释。

池化bool, 可选

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

nint, 可选

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

返回:
berBarnard精确结果

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

统计浮动

根据用户选择的 pooled,使用合并或未合并方差的 Wald 统计量。

p值浮动

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

参见

chi2_contingency

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

fisher_exact

对2x2列联表进行Fisher精确检验。

boschloo_exact

在2x2列联表上的Boschloo精确检验,这是Fisher精确检验的一个均匀更强大的替代方法。

注释

巴纳德检验是一种用于列联表分析的精确检验。它检验两个分类变量之间的关联,并且对于2x2列联表来说,是比费舍尔精确检验更强大的替代方法。

让我们定义 \(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”(默认选项)

为了计算巴纳德精确检验,我们使用带有合并或未合并方差的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. “2x2 表的显著性检验”。《生物统计学》。34.1/2 (1947): 123-138。 DOI:dpgkg3

[2]

Mehta, Cyrus R., 和 Pralay Senchaudhuri. “比较两个二项式的条件与无条件精确检验。” Cytel 软件公司 675 (2003): 1-5.

[3]

“Wald检验”。维基百科https://en.wikipedia.org/wiki/Wald_test

示例

Barnard 检验的一个示例用法在 [2] 中展示。

考虑以下疫苗效力研究的例子(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%显著性阈值下,我们将无法拒绝原假设而支持备择假设。如[R6519c297ee50-2]_中所述,Barnard’s 检验在所有情况下都比Fisher’s 精确检验更有力,因为Barnard’s 检验不以任何边际条件为前提。Fisher’s 检验仅在两组边际都固定时使用。