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
- 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]]]]))