我正在计算一个小并发表的 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)。
这个函数在减少检验统计量方面有什么魔力?
默认情况下correction
是True
,这意味着耶茨对连续性的修正是在自由度为 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 以达到相应的期望值。