chi2_contingency#
- scipy.stats.contingency.chi2_contingency(observed, correction=True, lambda_=None, *, method=None)[源代码]#
列联表中变量独立性的卡方检验。
此函数计算卡方统计量和 p 值,用于检验列联表 [1] 中观察到的频率的独立性假设 observed。预期频率是基于独立性假设下的边际总和计算的;请参见
scipy.stats.contingency.expected_freq
。自由度数为(使用 numpy 函数和属性表示)dof = observed.size - sum(observed.shape) + observed.ndim - 1
- 参数:
- observedarray_like
列联表。该表包含每个类别中的观察频率(即出现次数)。在二维情况下,该表通常被描述为“R x C 表”。
- correctionbool, 可选
如果为 True,且自由度为 1,则应用 Yates 连续性校正。校正的效果是将每个观察值向相应的预期值调整 0.5。
- lambda_float 或 str, 可选
默认情况下,此测试中计算的统计量是皮尔逊卡方统计量 [2]。lambda_ 允许使用 Cressie-Read 幂散度族 [3] 的统计量代替。有关详细信息,请参阅
scipy.stats.power_divergence
。- methodResamplingMethod, 可选
定义用于计算 p 值的方法。仅与 correction=False,默认的 lambda_ 和双向表兼容。如果 method 是 PermutationMethod/MonteCarloMethod 的实例,则使用
scipy.stats.permutation_test
/scipy.stats.monte_carlo_test
以及提供的配置选项和其他适当的设置来计算 p 值。否则,p 值的计算如注释中所述。请注意,如果 method 是 MonteCarloMethod 的实例,则必须将rvs
属性保留为未指定;蒙特卡洛样本始终使用scipy.stats.random_table
的rvs
方法绘制。在 1.15.0 版本中添加。
- 返回:
- resChi2ContingencyResult
包含属性的对象
- statisticfloat
检验统计量。
- pvaluefloat
检验的 p 值。
- dofint
自由度。如果 method 不是
None
,则为 NaN。- expected_freqndarray,与 observed 的形状相同
基于该表的边际总和计算的预期频率。
另请参阅
注释
关于此计算有效性的一个经常引用的指导原则是,只有当每个单元格中的观察频率和预期频率都至少为 5 时,才应使用该测试。
这是对人口不同类别独立性的检验。只有当 observed 的维度为 2 或更大时,此测试才有意义。将测试应用于一维表将始终导致 expected 等于 observed 并且卡方统计量等于 0。
此函数不处理掩码数组,因为计算对于缺失值没有意义。
与
scipy.stats.chisquare
一样,此函数计算卡方统计量;此函数提供的便利是从给定的列联表计算出预期频率和自由度。如果这些已知,并且如果不需要 Yates 校正,则可以使用scipy.stats.chisquare
。也就是说,如果调用res = chi2_contingency(obs, correction=False)
那么以下为真
(res.statistic, res.pvalue) == stats.chisquare(obs.ravel(), f_exp=ex.ravel(), ddof=obs.size - 1 - dof)
lambda_ 参数是在 scipy 的 0.13.0 版本中添加的。
参考文献
[3]Cressie, N. 和 Read, T. R. C.,“Multinomial Goodness-of-Fit Tests”,J. Royal Stat. Soc. Series B, Vol. 46, No. 3 (1984), pp. 440-464。
示例
一个双向示例 (2 x 3)
>>> import numpy as np >>> from scipy.stats import chi2_contingency >>> obs = np.array([[10, 10, 20], [20, 20, 20]]) >>> res = chi2_contingency(obs) >>> res.statistic 2.7777777777777777 >>> res.pvalue 0.24935220877729619 >>> res.dof 2 >>> res.expected_freq array([[ 12., 12., 16.], [ 18., 18., 24.]])
使用对数似然比(即“G 检验”)而不是皮尔逊卡方统计量执行检验。
>>> res = chi2_contingency(obs, lambda_="log-likelihood") >>> res.statistic 2.7688587616781319 >>> res.pvalue 0.25046668010954165
一个四向示例 (2 x 2 x 2 x 2)
>>> obs = np.array( ... [[[[12, 17], ... [11, 16]], ... [[11, 12], ... [15, 16]]], ... [[[23, 15], ... [30, 22]], ... [[14, 17], ... [15, 16]]]]) >>> res = chi2_contingency(obs) >>> res.statistic 8.7584514426741897 >>> res.pvalue 0.64417725029295503
当双向表中元素的总和较小时,默认渐近近似产生的 p 值可能不准确。考虑将 PermutationMethod 或 MonteCarloMethod 作为 method 参数传递,且 correction=False。
>>> from scipy.stats import PermutationMethod >>> obs = np.asarray([[12, 3], ... [17, 16]]) >>> res = chi2_contingency(obs, correction=False) >>> ref = chi2_contingency(obs, correction=False, method=PermutationMethod()) >>> res.pvalue, ref.pvalue (0.0614122539870913, 0.1074) # may vary
有关更详细的示例,请参阅 列联表中变量独立性的卡方检验。