为什么 scipy 中的 χ² 检验返回的检验统计量较小?



我正在计算一个小并发表的 chi2 测试统计量:

obs = np.array([
    [652, 576],
    [1348, 924]
])

当我手动计算它时,如维基百科 (Σ (Oi - Ei)²/Ei) 所示,我得到的结果 ~12.660,但是 scipy.stats.chi2_contingency 函数用另一个测试统计量返回这些结果:

>>> scipy.stats.chi2_contingency(obs)
 (12.40676502094132, 0.00042778128638335943, 1, array([[  701.71428571,  526.28571429],
   [ 1298.28571429,   973.71428571]])) 

我将结果的预期频率与我的进行了比较,结果是相同的。此外,通过将我的数据输入在线计算器,可以得到与我自己的结果相同的结果(例如 http://www.socscistatistics.com/tests/chisquare2/default2.aspx)。

这个函数在减少检验统计量方面有什么魔力?

默认情况下correctionTrue,这意味着耶茨对连续性的修正是在自由度为 1 的情况下应用的(就像这里的情况一样)。如果您设置correction=False这不会发生,您将获得 12.660...作为检验统计量:

>>> scipy.stats.chi2_contingency(obs, correction=False)
(12.660142450795965,
 0.00037353375362753034,
 1,
 array([[  701.71428571,   526.28571429],
        [ 1298.28571429,   973.71428571]])

该文档提供了以下有关correction参数的更多信息,并总结了 Yates 的更正:

如果为 True,并且自由度为 1,则应用 Yates 校正以实现连续性。校正的效果是将每个观测值调整 0.5 以达到相应的期望值。

最新更新