chi2_contingency#
- scipy.stats.chi2_contingency(observed, correction=True, lambda_=None, *, method=None)[源代码]#
列联表中变量独立性的卡方检验。
此函数计算列联表 [1] observed 中观察到的频率的独立性假设检验的卡方统计量和 p 值。 期望频率是基于独立性假设下的边际总和计算的;请参阅
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,可选
默认情况下,此检验中计算的统计量是 Pearson 的卡方统计量 [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 的维度为两个或更多时,该检验才有效。将检验应用于一维表将始终导致 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 版本中添加的。
参考资料
[2]“Pearson 卡方检验”,https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test
[3]Cressie, N. and 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 检验”)而不是 Pearson 卡方统计量执行检验。
>>> 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
有关更详细的示例,请参阅 列联表中变量独立性的卡方检验。