scipy.stats.power_divergence¶
- scipy.stats.power_divergence(f_obs, f_exp=None, ddof=0, axis=0, lambda_=None)[源代码]¶
Cressie-Read功率散度统计和拟合优度检验。
此函数使用Cressie-Read功率散度统计数据测试分类数据具有给定频率的零假设。
- 参数
- f_obsarray_like
在每个类别中观察到的频率。
- f_expARRAY_LIKE,可选
每个类别的预期频率。默认情况下,假设这些类别的可能性相等。
- ddof整型,可选
“增量自由度”:对p值的自由度进行调整。p值是使用卡方分布计算的,
k - 1 - ddof
自由度,其中 k 是观察到的频率数。的默认值 ddof 是0。- axis整型或无型,可选
的广播结果的轴 f_obs 和 f_exp 沿其应用测试。如果AXIS为None,则中的所有值 f_obs 被视为单个数据集。默认值为0。
- lambda_浮点或字符串,可选
Cressie-Read功率散度统计中的功率。默认值为1。为方便起见, lambda_ 可以指定以下字符串之一,在这种情况下使用相应的数值:
- 退货
- statistic浮动或ndarray
Cressie-Read功率发散测试统计量。如果满足以下条件,则该值为浮点型 axis 是NONE还是if` f_obs 和 f_exp 是一维的。
- pvalue浮动或ndarray
测试的p值。如果满足以下条件,则该值为浮点型 ddof 和返回值
stat
都是标量。
参见
注意事项
当每个类别中的观测或预期频率太小时,此测试无效。典型的规则是所有观察到的和预期的频率都应该至少为5。
此外,要使测试有效,观察频率和预期频率的总和必须相同;
power_divergence
的相对容差范围内的总和不一致时引发错误。1e-8
。什么时候 lambda_ 小于零,则统计公式涉及除以 f_obs 中的任何值,则可能会生成警告或错误 f_obs 是0。
同样,如果中有任何值,则可能会生成警告或错误 f_exp 在以下情况下为零 lambda_ >=0。
默认自由度k-1适用于没有估计分布参数的情况。如果用有效的最大似然法估计p个参数,那么正确的自由度是k-1-p。如果以不同的方式估计参数,则DOF可以在k-1-p和k-1之间。然而,也有可能渐近分布不是菱形的,在这种情况下,这种检验是不合适的。
此函数处理掩码数组。如果一个元素是 f_obs 或 f_exp 则忽略该位置的数据,并且不计入数据集的大小。
0.13.0 新版功能.
参考文献
- 1
劳瑞,理查德。“推断统计学的概念和应用”。第8章.https://web.archive.org/web/20171015035606/http://faculty.vassar.edu/lowry/ch8pt1.html
- 2
- 3
“G-TEST”,https://en.wikipedia.org/wiki/G-test
- 4
Sokal,R.R.和Rohlf,F.J.“生物计量学:生物学研究中的统计学原理与实践”,纽约:弗里曼(1981)
- 5
Cressie,N.和Read,T.R.C.,“多项拟合优度检验”,“皇家统计杂志”。SoC。B辑,第46卷,第3期(1984年),第440-464页。
示例
(请参阅
chisquare
查看更多示例。)当刚刚 f_obs 假设期望频率是均匀的,并且是由观测频率的平均值给出的。这里我们执行G检验(即使用对数似然比统计量):
>>> from scipy.stats import power_divergence >>> power_divergence([16, 18, 16, 14, 12, 12], lambda_='log-likelihood') (2.006573162632538, 0.84823476779463769)
预期的频率可以通过 f_exp 论点:
>>> power_divergence([16, 18, 16, 14, 12, 12], ... f_exp=[16, 16, 16, 16, 16, 8], ... lambda_='log-likelihood') (3.3281031458963746, 0.6495419288047497)
什么时候 f_obs 是二维的,则默认情况下测试将应用于每列。
>>> obs = np.array([[16, 18, 16, 14, 12, 12], [32, 24, 16, 28, 20, 24]]).T >>> obs.shape (6, 2) >>> power_divergence(obs, lambda_="log-likelihood") (array([ 2.00657316, 6.77634498]), array([ 0.84823477, 0.23781225]))
通过设置
axis=None
,则测试将应用于数组中的所有数据,这等效于将测试应用于展平的数组。>>> power_divergence(obs, axis=None) (23.31034482758621, 0.015975692534127565) >>> power_divergence(obs.ravel()) (23.31034482758621, 0.015975692534127565)
ddof 是要对默认自由度所做的更改。
>>> power_divergence([16, 18, 16, 14, 12, 12], ddof=1) (2.0, 0.73575888234288467)
p值的计算是通过使用以下命令广播测试统计数据来完成的 ddof 。
>>> power_divergence([16, 18, 16, 14, 12, 12], ddof=[0,1,2]) (2.0, array([ 0.84914504, 0.73575888, 0.5724067 ]))
f_obs 和 f_exp 也在广播。在以下内容中, f_obs 具有形状(6)和 f_exp 具有形状(2,6),所以播放的结果 f_obs 和 f_exp 具有形状(2,6)。要计算所需的卡方统计,我们必须使用
axis=1
:>>> power_divergence([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]))