scipy.stats.

wilcoxon#

scipy.stats.wilcoxon(x, y=None, zero_method='wilcox', correction=False, alternative='two-sided', method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[原始碼]#

計算 Wilcoxon 符號秩檢定。

Wilcoxon 符號秩檢定檢驗兩個相關配對樣本是否來自相同分佈的虛無假設。特別是,它檢驗差值 x - y 的分佈是否對稱於零。它是配對樣本 T 檢定的非參數版本。

參數:
xarray_like

可以是第一組測量值(在這種情況下 y 是第二組測量值),或者是兩組測量值之間的差值(在這種情況下不應指定 y。) 必須是一維的。

yarray_like, optional

可以是第二組測量值(如果 x 是第一組測量值),或者未指定(如果 x 是兩組測量值之間的差值。) 必須是一維的。

警告

當提供 y 時,wilcoxon 會根據 d = x - y 絕對值的秩來計算檢定統計量。減法中的捨入誤差可能會導致 d 的元素即使在精確算術中會被綁定時,也被分配不同的秩。與其分別傳遞 xy,不如考慮計算差值 x - y,並根據需要進行捨入以確保只有真正唯一的元素在數值上是不同的,然後將結果作為 x 傳遞,並將 y 保留為預設值 (None)。

zero_method{“wilcox”, “pratt”, “zsplit”}, optional

對於處理具有相等值(“零差值”或“零”)的觀察對,有不同的慣例。

  • “wilcox”: 捨棄所有零差值(預設);請參閱 [4]

  • “pratt”: 在排序過程中包含零差值,但刪除零的秩(更保守);請參閱 [3]。在這種情況下,正常近似值會像 [5] 中那樣進行調整。

  • “zsplit”: 在排序過程中包含零差值,並在正值和負值之間分割零秩。

correctionbool, optional

如果為 True,則在使用正常近似值計算 z 統計量時,透過將 Wilcoxon 秩統計量朝平均值調整 0.5 來應用連續性校正。預設值為 False。

alternative{“two-sided”, “greater”, “less”}, optional

定義對立假設。預設值為 ‘two-sided’。在下面,讓 d 代表配對樣本之間的差值:如果同時提供 xy,則 d = x - y;否則 d = x

  • ‘two-sided’: d 的基礎分佈不對稱於零。

  • ‘less’: d 的基礎分佈在隨機性上小於對稱於零的分佈。

  • ‘greater’: d 的基礎分佈在隨機性上大於對稱於零的分佈。

method{“auto”, “exact”, “asymptotic”} 或 PermutationMethod 實例, optional

計算 p 值的 方法,請參閱 Notes。預設值為 “auto”。

axisint 或 None, default: 0

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

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

定義如何處理輸入的 NaN。

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

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

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

keepdimsbool, default: False

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

返回:
具有以下屬性的物件。
statisticarray_like

如果 alternative 為 “two-sided”,則為高於或低於零的差值秩的總和,以較小者為準。否則為高於零的差值秩的總和。

pvaluearray_like

檢定的 p 值,取決於 alternativemethod

zstatisticarray_like

method = 'asymptotic' 時,這是標準化的 z 統計量

z = (T - mn - d) / se

其中 T 是如上定義的 statisticmn 是虛無假設下分佈的平均值,d 是連續性校正,而 se 是標準誤差。當 method != 'asymptotic' 時,此屬性不可用。

筆記

在下面,讓 d 代表配對樣本之間的差值:如果同時提供 xy,則 d = x - y;否則 d = x。假設 d 的所有元素都是獨立且恆等分佈的觀察值,並且所有元素都是不同的且非零的。

  • len(d) 足夠大時,標準化檢定統計量(上面的 zstatistic)的虛無分佈近似於常態分佈,並且可以使用 method = 'asymptotic' 來計算 p 值。

  • len(d) 很小時,常態近似值可能不準確,並且最好使用 method='exact'(以額外的執行時間為代價)。

  • 預設值 method='auto' 在兩者之間進行選擇:當 len(d) <= 50 時使用 method='exact',否則使用 method='asymptotic'

“結”(即並非 d 的所有元素都是唯一的)或“零”(即 d 的元素為零)的存在會改變檢定統計量的虛無分佈,並且 method='exact' 不再計算精確的 p 值。如果 method='asymptotic',則會調整 z 統計量以更準確地與標準常態分佈進行比較,但即使如此,對於有限的樣本大小,標準常態分佈也只是 z 統計量真實虛無分佈的近似值。對於這種情況,method 參數也接受 PermutationMethod 的實例。在這種情況下,p 值是使用 permutation_test 以及提供的配置選項和其他適當設定來計算的。

結和零的存在會相應地影響 method='auto' 的解析度:當 len(d) <= 13 時執行詳盡的排列,否則使用漸近方法。請注意,即使對於 len(d) > 14,漸近方法也可能不是很準確;選擇閾值是在執行時間和準確性之間取得折衷,前提是結果必須是確定性的。考慮手動提供 PermutationMethod 方法的實例,選擇 n_resamples 參數以平衡時間限制和準確性要求。

另請注意,在所有 d 元素都為零的邊緣情況下,如果 zero_method='wilcox'zero_method='pratt',則無法計算依賴於常態近似值的 p 值 (NaN)。

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

參考文獻

[2]

Conover, W.J., Practical Nonparametric Statistics, 1971.

[3]

Pratt, J.W., Remarks on Zeros and Ties in the Wilcoxon Signed Rank Procedures, Journal of the American Statistical Association, Vol. 54, 1959, pp. 655-667. DOI:10.1080/01621459.1959.10501526

[4] (1,2)

Wilcoxon, F., Individual Comparisons by Ranking Methods, Biometrics Bulletin, Vol. 1, 1945, pp. 80-83. DOI:10.2307/3001968

[5]

Cureton, E.E., The Normal Approximation to the Signed-Rank Sampling Distribution When Zero Differences are Present, Journal of the American Statistical Association, Vol. 62, 1967, pp. 1068-1069. DOI:10.1080/01621459.1967.10500917

範例

[4] 中,異花授粉和自花授粉玉米植物之間的高度差異如下所示

>>> d = [6, 8, 14, 16, 23, 24, 28, 29, 41, -48, 49, 56, 60, -67, 75]

異花授粉的植物看起來更高。為了檢驗高度沒有差異的虛無假設,我們可以應用雙尾檢定

>>> from scipy.stats import wilcoxon
>>> res = wilcoxon(d)
>>> res.statistic, res.pvalue
(24.0, 0.041259765625)

因此,我們將在 5% 的信賴水準下拒絕虛無假設,結論是組之間的高度存在差異。為了確認差值的中位數可以假定為正數,我們使用

>>> res = wilcoxon(d, alternative='greater')
>>> res.statistic, res.pvalue
(96.0, 0.0206298828125)

這表明在 5% 的信賴水準下,可以拒絕中位數為負數的虛無假設,而支持中位數大於零的對立假設。上面的 p 值是精確值。使用常態近似值會得到非常相似的值

>>> res = wilcoxon(d, method='asymptotic')
>>> res.statistic, res.pvalue
(24.0, 0.04088813291185591)

請注意,在單尾情況下,統計量變更為 96(正差值秩的總和),而在雙尾情況下,統計量為 24(高於和低於零的秩總和的最小值)。

在上面的範例中,配對植物之間的高度差異直接提供給 wilcoxon。或者,wilcoxon 接受兩個等長的樣本,計算配對元素之間的差值,然後執行檢定。考慮樣本 xy

>>> import numpy as np
>>> x = np.array([0.5, 0.825, 0.375, 0.5])
>>> y = np.array([0.525, 0.775, 0.325, 0.55])
>>> res = wilcoxon(x, y, alternative='greater')
>>> res
WilcoxonResult(statistic=5.0, pvalue=0.5625)

請注意,如果我們手動計算差值,則檢定會產生不同的結果

>>> d = [-0.025, 0.05, 0.05, -0.05]
>>> ref = wilcoxon(d, alternative='greater')
>>> ref
WilcoxonResult(statistic=6.0, pvalue=0.5)

顯著差異是由於 x-y 結果中的捨入誤差造成的

>>> d - (x-y)
array([2.08166817e-17, 6.93889390e-17, 1.38777878e-17, 4.16333634e-17])

即使我們預期 (x-y)[1:] 的所有元素都具有相同的量級 0.05,但它們在實務中具有略微不同的量級,因此在檢定中被分配了不同的秩。在執行檢定之前,請考慮計算 d 並根據需要進行調整,以確保理論上相同的值在數值上不是不同的。例如

>>> d2 = np.around(x - y, decimals=3)
>>> wilcoxon(d2, alternative='greater')
WilcoxonResult(statistic=6.0, pvalue=0.5)