本文簡要介紹 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
被分配不同的等級,即使它們與精確的算術並列。而不是通過x和y分別考慮計算差異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
表示配對樣本之間的差異:如果同時提供了x
和y
,則為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
表示配對樣本之間的差異:如果同時提供了x
和y
,則為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 值,參考文獻之間沒有明確的共識。無論如何,這都是wilcoxon
當method='auto': ``method='exact'
使用時len(d) <= 50
並且沒有零;否則,method='approx'
被使用。從 SciPy 1.9 開始,
np.matrix
輸入(不建議用於新代碼)在執行計算之前轉換為np.ndarray
。在這種情況下,輸出將是標量或適當形狀的np.ndarray
而不是 2Dnp.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
[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
接受兩個長度相等的樣本,計算配對元素之間的差異,然後執行測試。考慮示例x
和y
:>>> 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)
相關用法
- Python SciPy stats.wishart用法及代碼示例
- Python SciPy stats.weightedtau用法及代碼示例
- Python SciPy stats.wrapcauchy用法及代碼示例
- Python SciPy stats.wasserstein_distance用法及代碼示例
- Python SciPy stats.weibull_min用法及代碼示例
- Python SciPy stats.weibull_max用法及代碼示例
- Python SciPy stats.wald用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
- Python SciPy stats.cosine用法及代碼示例
- Python SciPy stats.norminvgauss用法及代碼示例
- Python SciPy stats.directional_stats用法及代碼示例
- Python SciPy stats.invwishart用法及代碼示例
- Python SciPy stats.bartlett用法及代碼示例
- Python SciPy stats.levy_stable用法及代碼示例
- Python SciPy stats.page_trend_test用法及代碼示例
- Python SciPy stats.itemfreq用法及代碼示例
- Python SciPy stats.exponpow用法及代碼示例
- Python SciPy stats.gumbel_l用法及代碼示例
- Python SciPy stats.chisquare用法及代碼示例
- Python SciPy stats.semicircular用法及代碼示例
- Python SciPy stats.gzscore用法及代碼示例
- Python SciPy stats.gompertz用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.wilcoxon。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。