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

每個類別的觀察頻率。

自 1.14.0 版本起已棄用: 在 SciPy 1.14.0 中已棄用對遮罩陣列輸入的支援,並將在 1.16.0 版本中移除。

f_exparray_like,選用

每個類別的期望頻率。預設情況下,假設各類別的可能性相等。

自 1.14.0 版本起已棄用: 在 SciPy 1.14.0 中已棄用對遮罩陣列輸入的支援,並將在 1.16.0 版本中移除。

ddofint,選用

「Delta 自由度」:調整 p 值的自由度。p 值是使用自由度為 k - 1 - ddof 的卡方分佈計算的,其中 k 是觀察頻率的數量。ddof 的預設值為 0。

axisint 或 None,選用

廣播 f_obsf_exp 結果後,要沿著哪個軸套用檢定。如果 axis 為 None,則 f_obs 中的所有值都視為單一資料集。預設值為 0。

lambda_float 或 str,選用

Cressie-Read 冪散度統計量中的冪。預設值為 1。為了方便起見,lambda_ 可以指定為以下字串之一,在這種情況下將使用對應的數值

  • "pearson" (值 1)

    皮爾森卡方統計量。在這種情況下,此函數等同於 chisquare

  • "log-likelihood" (值 0)

    對數概似比。也稱為 G 檢定 [3]

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

    Freeman-Tukey 統計量。

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

    修改後的對數概似比。

  • "neyman" (值 -2)

    Neyman 統計量。

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

    文獻 [5] 中推薦的冪。

回傳:
res: Power_divergenceResult

一個包含屬性的物件

statisticfloat 或 ndarray

Cressie-Read 冪散度檢定統計量。如果 axis 為 None 或 f_obsf_exp 為 1 維,則值為 float。

pvaluefloat 或 ndarray

檢定的 p 值。如果 ddof 和回傳值 stat 為純量,則值為 float。

另請參閱

chisquare

註解

當每個類別的觀察頻率或期望頻率太小時,此檢定無效。一個典型的規則是所有觀察頻率和期望頻率都應至少為 5。

此外,為了使檢定有效,觀察頻率和期望頻率的總和必須相同;如果總和在 eps**0.5 的相對容差範圍內不一致,power_divergence 會引發錯誤,其中 eps 是輸入 dtype 的精度。

lambda_ 小於零時,統計量的公式涉及除以 f_obs,因此如果 f_obs 中的任何值為 0,則可能會產生警告或錯誤。

同樣地,當 lambda_ >= 0 時,如果 f_exp 中的任何值為零,則可能會產生警告或錯誤。

預設自由度 k-1 適用於未估計分佈參數的情況。如果使用有效率的最大概似法估計 p 個參數,則正確的自由度為 k-1-p。如果以不同的方式估計參數,則自由度可以在 k-1-p 和 k-1 之間。但是,漸近分佈也可能不是卡方分佈,在這種情況下,此檢定不適用。

參考文獻

[1]

Lowry, Richard. 「Concepts and Applications of Inferential Statistics」。第 8 章。 https://web.archive.org/web/20171015035606/http://faculty.vassar.edu/lowry/ch8pt1.html

[4]

Sokal, R. R. 和 Rohlf, F. J. 「Biometry: the principles and practice of statistics in biological research」,紐約:Freeman (1981)

[5]

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。

範例

(更多範例請參閱 chisquare。)

當僅給定 f_obs 時,會假設期望頻率是均勻的,並由觀察頻率的平均值給定。此處我們執行 G 檢定(即使用對數概似比統計量)

>>> import numpy as np
>>> 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]))