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

时间:2016-01-24 11:22:07

标签: python python-3.x scipy chi-squared

我正在计算小并发表的chi2检验统计量:

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

当我手动计算时,如Wikipedia(Σ(Oᵢ - Eᵢ)²/Eᵢ)所示,我达到了结果~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上)。

这个函数在减少测试统计量方面有什么神奇之处?

1 个答案:

答案 0 :(得分:3)

默认情况下,correctionTrue,这意味着在自由度为1的情况下应用Yates的连续性校正(如此处所示)。如果你设置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]])

documentationcorrection参数提供了以下进一步信息,并总结了耶茨的更正:

  

如果为True,且自由度为1,则应用Yates的连续性校正。校正的效果是将每个观察值调整0.5到相应的预期值。