scipy.stats.

f_oneway#

scipy.stats.f_oneway(*samples, axis=0, nan_policy='propagate', keepdims=False)[source]#

執行單因子變異數分析。

單因子變異數分析檢定兩個或多個群體是否具有相同的母體平均數的虛無假設。此檢定適用於來自兩個或多個群體的樣本,這些群體的大小可能不同。

參數:
sample1, sample2, …array_like

每個群體的樣本測量值。必須至少有兩個參數。如果陣列是多維的,則除了 axis 之外,陣列的所有維度都必須相同。

axisint 或 None,預設值:0

如果是整數,則為計算統計量的輸入軸。輸入的每個軸切片(例如,行)的統計量將出現在輸出的對應元素中。如果 None,則輸入將在計算統計量之前被展平。

nan_policy{‘propagate’, ‘omit’, ‘raise’}

定義如何處理輸入的 NaN 值。

  • propagate:如果在計算統計量的軸切片(例如,行)中存在 NaN,則輸出的相應條目將為 NaN。

  • omit:執行計算時將省略 NaN。如果沿著計算統計量的軸切片中剩餘的數據不足,則輸出的相應條目將為 NaN。

  • raise:如果存在 NaN,將引發 ValueError

keepdimsbool,預設值:False

如果設定為 True,則縮減的軸將保留在結果中,作為大小為 1 的維度。使用此選項,結果將正確地廣播到輸入陣列。

返回:
statisticfloat

計算出的檢定 F 統計量。

pvaluefloat

來自 F 分佈的相關 p 值。

警告:
ConstantInputWarning

如果每個輸入陣列中的所有值都相同,則發出此警告。在這種情況下,F 統計量為無限大或未定義,因此返回 np.infnp.nan

RuntimeWarning

如果任何輸入陣列的長度為 0,或者所有輸入陣列的長度都為 1,則發出此警告。在這些情況下,F 統計量和 p 值會返回 np.nan

註解

變異數分析檢定具有重要的假設,必須滿足這些假設,才能使相關的 p 值有效。

  1. 樣本是獨立的。

  2. 每個樣本都來自常態分佈的母體。

  3. 群體的母體標準差都相等。此屬性稱為變異數同質性。

如果這些假設對於給定的數據集不成立,則仍然可以使用 Kruskal-Wallis H 檢定 (scipy.stats.kruskal) 或 Alexander-Govern 檢定 (scipy.stats.alexandergovern),儘管會損失一些檢定力。

每個群組的長度必須至少為 1,並且必須至少有一個群組的長度大於 1。如果這些條件不滿足,則會產生警告,並返回 (np.nan, np.nan)。

如果每個群組中的所有值都相同,並且至少存在兩個具有不同值的群組,則該函數會產生警告並返回 (np.inf, 0)。

如果所有群組中的所有值都相同,則函數會產生警告並返回 (np.nan, np.nan)。

此演算法來自 Heiman [2],pp.394-7。

從 SciPy 1.9 開始,np.matrix 輸入(不建議用於新程式碼)在執行計算之前會轉換為 np.ndarray。在這種情況下,輸出將是純量或具有適當形狀的 np.ndarray,而不是 2D np.matrix。同樣地,雖然會忽略遮罩陣列的遮罩元素,但輸出將是純量或 np.ndarray,而不是具有 mask=False 的遮罩陣列。

參考文獻

[1]

R. Lowry, “Concepts and Applications of Inferential Statistics”, Chapter 14, 2014, http://vassarstats.net/textbook/

[2]

G.W. Heiman, “Understanding research methods and statistics: An integrated introduction for psychology”, Houghton, Mifflin and Company, 2001.

[3]

G.H. McDonald, “Handbook of Biological Statistics”, One-way ANOVA. http://www.biostathandbook.com/onewayanova.html

範例

>>> import numpy as np
>>> from scipy.stats import f_oneway

以下是一些關於貽貝 *Mytilus trossulus* 在五個地點的貝殼測量數據 [3](前閉殼肌疤痕的長度,通過除以長度進行標準化):奧勒岡州蒂拉穆克;奧勒岡州新港;阿拉斯加州彼得堡;俄羅斯馬加丹;以及芬蘭特瓦爾明內,取自 McDonald 等人 (1991) 使用的更大的數據集。

>>> tillamook = [0.0571, 0.0813, 0.0831, 0.0976, 0.0817, 0.0859, 0.0735,
...              0.0659, 0.0923, 0.0836]
>>> newport = [0.0873, 0.0662, 0.0672, 0.0819, 0.0749, 0.0649, 0.0835,
...            0.0725]
>>> petersburg = [0.0974, 0.1352, 0.0817, 0.1016, 0.0968, 0.1064, 0.105]
>>> magadan = [0.1033, 0.0915, 0.0781, 0.0685, 0.0677, 0.0697, 0.0764,
...            0.0689]
>>> tvarminne = [0.0703, 0.1026, 0.0956, 0.0973, 0.1039, 0.1045]
>>> f_oneway(tillamook, newport, petersburg, magadan, tvarminne)
F_onewayResult(statistic=7.121019471642447, pvalue=0.0002812242314534544)

f_oneway 接受多維輸入陣列。當輸入是多維且未給定 axis 時,檢定會沿著輸入陣列的第一個軸執行。對於以下數據,檢定執行三次,每列一次。

>>> a = np.array([[9.87, 9.03, 6.81],
...               [7.18, 8.35, 7.00],
...               [8.39, 7.58, 7.68],
...               [7.45, 6.33, 9.35],
...               [6.41, 7.10, 9.33],
...               [8.00, 8.24, 8.44]])
>>> b = np.array([[6.35, 7.30, 7.16],
...               [6.65, 6.68, 7.63],
...               [5.72, 7.73, 6.72],
...               [7.01, 9.19, 7.41],
...               [7.75, 7.87, 8.30],
...               [6.90, 7.97, 6.97]])
>>> c = np.array([[3.31, 8.77, 1.01],
...               [8.25, 3.24, 3.62],
...               [6.32, 8.81, 5.19],
...               [7.48, 8.83, 8.91],
...               [8.59, 6.01, 6.07],
...               [3.07, 9.72, 7.48]])
>>> F = f_oneway(a, b, c)
>>> F.statistic
array([1.75676344, 0.03701228, 3.76439349])
>>> F.pvalue
array([0.20630784, 0.96375203, 0.04733157])