scipy.stats.mstats.chisquare

scipy.stats.mstats.chisquare(f_obs, f_exp=None, ddof=0, axis=0)[源代码]

计算单向卡方检验。

卡方检验检验分类数据具有给定频率的零假设。

参数
f_obsarray_like

在每个类别中观察到的频率。

f_expARRAY_LIKE,可选

每个类别的预期频率。默认情况下,假设这些类别的可能性相等。

ddof整型,可选

“增量自由度”:对p值的自由度进行调整。p值是使用卡方分布计算的, k - 1 - ddof 自由度,其中 k 是观察到的频率数。的默认值 ddof 是0。

axis整型或无型,可选

的广播结果的轴 f_obsf_exp 沿其应用测试。如果AXIS为None,则中的所有值 f_obs 被视为单个数据集。默认值为0。

退货
chisq浮动或ndarray

卡方检验统计量。如果满足以下条件,则该值为浮点型 axis 为None或 f_obsf_exp 是一维的。

p浮动或ndarray

测试的p值。如果满足以下条件,则该值为浮点型 ddof 和返回值 chisq 都是标量。

参见

scipy.stats.power_divergence
scipy.stats.fisher_exact

2x2列联表上的Fisher精确检验。

scipy.stats.barnard_exact

无条件的精确测试。小样本量卡方检验的一种替代方法。

注意事项

当每个类别中的观测或预期频率太小时,此测试无效。一个典型的规则是所有观察到的和预期的频率都应该至少为5。 [3], 样本总数建议大于13个,否则应使用严格的测试(如巴纳德的精确测试),因为它们不会过度拒绝。

此外,要使测试有效,观察频率和预期频率的总和必须相同; chisquare 的相对容差范围内的总和不一致时引发错误。 1e-8

默认自由度k-1适用于没有估计分布参数的情况。如果用有效的最大似然法估计p个参数,那么正确的自由度是k-1-p。如果以不同的方式估计参数,则DOF可以在k-1-p和k-1之间。然而,也有可能渐近分布不是卡方分布,在这种情况下,这种检验是不合适的。

参考文献

1

劳瑞,理查德。“推断统计学的概念和应用”。第8章.https://web.archive.org/web/20171022032306/http://vassarstats.net:80/textbook/ch8pt1.html

2

“卡方检验”,https://en.wikipedia.org/wiki/Chi-squared_test

3

皮尔逊,卡尔。“在相关变量系统的情况下,给定的偏离概率系统的标准是,可以合理地认为它是随机抽样产生的”,“哲学杂志”。丛书5.50(1900年),第157-175页。

示例

当刚刚 f_obs 假设期望频率是均匀的,并且是由观测频率的平均值给出的。

>>> from scipy.stats import chisquare
>>> chisquare([16, 18, 16, 14, 12, 12])
(2.0, 0.84914503608460956)

使用 f_exp 可以给出期望的频率。

>>> chisquare([16, 18, 16, 14, 12, 12], f_exp=[16, 16, 16, 16, 16, 8])
(3.5, 0.62338762774958223)

什么时候 f_obs 是二维的,则默认情况下测试将应用于每列。

>>> obs = np.array([[16, 18, 16, 14, 12, 12], [32, 24, 16, 28, 20, 24]]).T
>>> obs.shape
(6, 2)
>>> chisquare(obs)
(array([ 2.        ,  6.66666667]), array([ 0.84914504,  0.24663415]))

通过设置 axis=None ,则测试将应用于数组中的所有数据,这等效于将测试应用于展平的数组。

>>> chisquare(obs, axis=None)
(23.31034482758621, 0.015975692534127565)
>>> chisquare(obs.ravel())
(23.31034482758621, 0.015975692534127565)

ddof 是要对默认自由度所做的更改。

>>> chisquare([16, 18, 16, 14, 12, 12], ddof=1)
(2.0, 0.73575888234288467)

p值的计算是通过广播卡方统计数据来完成的 ddof

>>> chisquare([16, 18, 16, 14, 12, 12], ddof=[0,1,2])
(2.0, array([ 0.84914504,  0.73575888,  0.5724067 ]))

f_obsf_exp 也在广播。在以下内容中, f_obs 具有形状(6)和 f_exp 具有形状(2,6),所以播放的结果 f_obsf_exp 具有形状(2,6)。为了计算所需的卡方统计量,我们使用 axis=1

>>> chisquare([16, 18, 16, 14, 12, 12],
...           f_exp=[[16, 16, 16, 16, 16, 8], [8, 20, 20, 16, 12, 12]],
...           axis=1)
(array([ 3.5 ,  9.25]), array([ 0.62338763,  0.09949846]))