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_obsf_exp 沿其应用测试。如果AXIS为None,则中的所有值 f_obs 被视为单个数据集。默认值为0。

lambda_浮点或字符串,可选

Cressie-Read功率散度统计中的功率。默认值为1。为方便起见, lambda_ 可以指定以下字符串之一,在这种情况下使用相应的数值:

  • "pearson" (值1)

    皮尔逊的卡方统计。在本例中,该函数等效于 chisquare

  • "log-likelihood" (值0)

    对数似然比。也称为G检验 [3].

  • "freeman-tukey" (值-1/2)

    弗里曼-图基统计量。

  • "mod-log-likelihood" (值-1)

    修正的对数似然比。

  • "neyman" (值-2)

    尼曼的统计数据。

  • "cressie-read" (值2/3)

    中推荐的功率 [5].

退货
statistic浮动或ndarray

Cressie-Read功率发散测试统计量。如果满足以下条件,则该值为浮点型 axis 是NONE还是if` f_obsf_exp 是一维的。

pvalue浮动或ndarray

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

参见

chisquare

注意事项

当每个类别中的观测或预期频率太小时,此测试无效。典型的规则是所有观察到的和预期的频率都应该至少为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_obsf_exp 则忽略该位置的数据,并且不计入数据集的大小。

0.13.0 新版功能.

参考文献

1

劳瑞,理查德。“推断统计学的概念和应用”。第8章.https://web.archive.org/web/20171015035606/http://faculty.vassar.edu/lowry/ch8pt1.html

2

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

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_obsf_exp 也在广播。在以下内容中, f_obs 具有形状(6)和 f_exp 具有形状(2,6),所以播放的结果 f_obsf_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]))