當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy stats.wilcoxon用法及代碼示例


本文簡要介紹 python 語言中 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 signed-rank 檢驗。

Wilcoxon signed-rank 檢驗測試兩個相關配對樣本來自同一分布的原假設。特別是,它測試差異x - y的分布是否關於零對稱。它是配對T-test 的非參數版本。

參數

x array_like

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

y 數組,可選

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

警告

什麽時候y提供,wilcoxon根據絕對值的排名計算檢驗統計量d = x - y。減法中的舍入誤差可能會導致以下元素d被分配不同的等級,即使它們與精確的算術並列。而不是通過xy分別考慮計算差異x - y,根據需要進行舍入以確保隻有真正唯一的元素在數字上是不同的,並將結果傳遞為x,離開y默認(無)。

zero_method {“wilcox”, “pratt”, “zsplit”},可選

處理具有相等值的觀測值對(“zero-differences” 或 “zeros”)有不同的約定。

  • “wilcox”:丟棄所有zero-differences(默認);參見[4]。

  • “pratt”:在排名過程中包括zero-differences,但降低零的排名(更保守);參見[3]。在這種情況下,正常近似值的調整如[5]中所示。

  • “zsplit”:在排名過程中包括zero-differences,並將零排名分為正排名和負排名。

correction 布爾型,可選

如果為真,如果使用正態近似值,則在計算 z-statistic 時,通過將 Wilcoxon 秩統計量向平均值調整 0.5 來應用連續性校正。默認為假。

alternative {“two-sided”, “greater”, “less”},可選

定義備擇假設。默認為“雙麵”。下麵,讓d表示配對樣本之間的差異:如果同時提供了xy,則為d = x - y,否則為d = x

  • “雙麵”:d 的底層分布關於零不對稱。

  • ‘less’:d 的底層分布隨機小於關於零對稱的分布。

  • ‘greater’:d 的底層分布隨機大於關於零對稱的分布。

method {“auto”, “exact”, “approx”},可選

p值的計算方法見注釋。默認為“auto”。

axis int 或無,默認值:0

如果是 int,則計算統計量的輸入軸。輸入的每個axis-slice(例如行)的統計信息將出現在輸出的相應元素中。如果 None ,輸入將在計算統計數據之前被分解。

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

定義如何處理輸入 NaN。

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

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

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

keepdims 布爾值,默認值:假

如果將其設置為 True,則縮小的軸將作為尺寸為 1 的尺寸留在結果中。使用此選項,結果將針對輸入數組正確廣播。

返回

具有以下屬性的對象。
statistic array_like

如果替代是“two-sided”,則高於或低於零的差值的等級總和,以較小者為準。否則是大於零的差值的等級總和。

pvalue array_like

測試的 p 值取決於替代方案和方法。

zstatistic array_like

method = 'approx' 時,這是標準化的 z-statistic:

z = (T - mn - d) / se

其中T統計如上所定義,mn是原假設下分布的均值,d是連續性修正,並且se是標準誤。什麽時候method != 'approx',該屬性不可用。

注意

下麵,讓d表示配對樣本之間的差異:如果同時提供了xy,則為d = x - y,否則為d = x。假設 d 的所有元素都是獨立且同分布的觀測值,並且全部不同且非零。

  • 什麽時候len(d)足夠大,歸一化檢驗統計量的零分布 (z統計量以上)大約是正常的,並且method = 'approx'可用於計算 p 值。

  • len(d)很小時,正態近似可能不準確,首選method='exact'(以額外的執行時間為代價)。

  • 默認值 method='auto' 在兩者之間進行選擇:當 len(d) <= 50 時,使用確切的方法;當 len(d) <= 50 時,使用確切的方法;否則,使用近似方法。

“ties” 的存在(即並非所有元素d是唯一的)和“zeros”(即元素d為零)改變檢驗統計量的零分布,並且method='exact'不再計算精確的 p 值。如果method='approx',z-statistic 進行了調整,以便與標準正態進行更準確的比較,但是,對於有限的樣本大小,標準正態隻是 z-statistic 的真實零分布的近似值。對於在存在零和/或平局的情況下哪種方法最準確地近似小樣本的 p 值,參考文獻之間沒有明確的共識。無論如何,這都是wilcoxonmethod='auto': ``method='exact'使用時len(d) <= 50 並且沒有零;否則,method='approx'被使用。

從 SciPy 1.9 開始,np.matrix 輸入(不建議用於新代碼)在執行計算之前轉換為 np.ndarray。在這種情況下,輸出將是標量或適當形狀的 np.ndarray 而不是 2D np.matrix 。同樣,雖然屏蔽數組的屏蔽元素被忽略,但輸出將是標量或 np.ndarray 而不是帶有 mask=False 的屏蔽數組。

參考

[2]

Conover, W.J.,實用非參數統計,1971 年。

[3]

Pratt, J.W.,關於 Wilcoxon 符號秩程序中的零點和關係的評論,美國統計協會雜誌,卷。 54,1959,第 655-667 頁。 DOI:10.1080/01621459.1959.10501526

[4] (1,2)

Wilcoxon, F.,通過排名方法進行的個體比較,生物識別公告,卷。 1,1945 年,第 80-83 頁。 DOI:10.2307/3001968

[5]

Cureton, E.E.,當存在零差異時,Signed-Rank 抽樣分布的正態近似,美國統計協會雜誌,卷。 62,1967,第 1068-1069 頁。 DOI:10.1080/01621459.1967.10500917

例子

在[4]中,交叉和self-fertilized玉米植株之間的高度差異如下:

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

Cross-fertilized植物似乎更高。為了檢驗不存在高度差異的原假設,我們可以應用雙邊檢驗:

>>> 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='approx')
>>> 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.4375)

顯著差異是由於 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.4375)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.wilcoxon。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。