scipy.stats.chi2_contingency

scipy.stats.chi2_contingency(observed, correction=True, lambda_=None)[源代码]

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

此函数计算列联表中观测频率独立性假设检验的卡方统计量和p值 [1] ‘观察’。预期频率是基于独立假设下的边际和计算的;请参见 scipy.stats.contingency.expected_freq 。自由度数为(使用Numpy函数和属性表示):

dof = observed.size - sum(observed.shape) + observed.ndim - 1
参数
observedarray_like

列联表。该表包含每个类别中观察到的频率(即出现次数)。在二维情况下,该表通常被描述为“R x C表”。

correction布尔值,可选

如果为True, and 自由度为1,应用叶茨校正法进行连续性修正。修正的效果是将每个观测值向相应的期望值调整0.5。

lambda_浮点或字符串,可选

By default, the statistic computed in this test is Pearson's chi-squared statistic [2]. lambda_ allows a statistic from the Cressie-Read power divergence family [3] to be used instead. See power_divergence for details.

退货
chi2浮动

测试统计数据。

p浮动

测试的p值

dof集成

自由度

预期的 :ndarray,形状与 observedndarray,形状与

预期频率,基于表的边际和。

注意事项

这一计算有效性的一个经常引用的指导原则是,只有在每个小区的观测频率和预期频率至少为5的情况下才应使用该测试。

这是对不同类别人口独立性的考验。测试只有在以下情况下才有意义 observed 是两个或更多。将测试应用于一维表将始终导致 expected 等于 observed 卡方统计量等于0。

此函数不处理掩码数组,因为缺少值时计算没有意义。

与stats.chisquare类似,该函数计算卡方统计量;该函数提供的便利是从给定的列联表中计算出预期的频率和自由度。如果这些都是已知的,并且不需要叶茨夫妇的修正,就可以使用stats.chisquare。也就是说,如果调用::

chi2, p, dof, ex = chi2_contingency(obs, correction=False)

则以下情况成立:

(chi2, p) == stats.chisquare(obs.ravel(), f_exp=ex.ravel(),
                             ddof=obs.size - 1 - dof)

这个 lambda_ 在版本0.13.0的Scipy中添加了参数。

参考文献

1

“联想表”,https://en.wikipedia.org/wiki/Contingency_table

2

“皮尔逊卡方检验”,https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test

3

Cressie,N.和Read,T.R.C.,“多项拟合优度检验”,“皇家统计杂志”。SoC。B辑,第46卷,第3期(1984年),第440-464页。

示例

双向示例(2 X 3):

>>> from scipy.stats import chi2_contingency
>>> obs = np.array([[10, 10, 20], [20, 20, 20]])
>>> chi2_contingency(obs)
(2.7777777777777777,
 0.24935220877729619,
 2,
 array([[ 12.,  12.,  16.],
        [ 18.,  18.,  24.]]))

使用对数似然比(即“G检验”)代替皮尔逊卡方统计量进行检验。

>>> g, p, dof, expctd = chi2_contingency(obs, lambda_="log-likelihood")
>>> g, p
(2.7688587616781319, 0.25046668010954165)

四向示例(2 X 2):

>>> obs = np.array(
...     [[[[12, 17],
...        [11, 16]],
...       [[11, 12],
...        [15, 16]]],
...      [[[23, 15],
...        [30, 22]],
...       [[14, 17],
...        [15, 16]]]])
>>> chi2_contingency(obs)
(8.7584514426741897,
 0.64417725029295503,
 11,
 array([[[[ 14.15462386,  14.15462386],
          [ 16.49423111,  16.49423111]],
         [[ 11.2461395 ,  11.2461395 ],
          [ 13.10500554,  13.10500554]]],
        [[[ 19.5591166 ,  19.5591166 ],
          [ 22.79202844,  22.79202844]],
         [[ 15.54012004,  15.54012004],
          [ 18.10873492,  18.10873492]]]]))