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
的元素即使在精確算術中會被綁定時,也被分配不同的秩。與其分別傳遞 x 和 y,不如考慮計算差值x - y
,並根據需要進行捨入以確保只有真正唯一的元素在數值上是不同的,然後將結果作為 x 傳遞,並將 y 保留為預設值 (None)。- zero_method{“wilcox”, “pratt”, “zsplit”}, optional
對於處理具有相等值(“零差值”或“零”)的觀察對,有不同的慣例。
- correctionbool, optional
如果為 True,則在使用正常近似值計算 z 統計量時,透過將 Wilcoxon 秩統計量朝平均值調整 0.5 來應用連續性校正。預設值為 False。
- alternative{“two-sided”, “greater”, “less”}, optional
定義對立假設。預設值為 ‘two-sided’。在下面,讓
d
代表配對樣本之間的差值:如果同時提供x
和y
,則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 值,取決於 alternative 和 method。
- zstatisticarray_like
當
method = 'asymptotic'
時,這是標準化的 z 統計量z = (T - mn - d) / se
其中
T
是如上定義的 statistic,mn
是虛無假設下分佈的平均值,d
是連續性校正,而se
是標準誤差。當method != 'asymptotic'
時,此屬性不可用。
參見
筆記
在下面,讓
d
代表配對樣本之間的差值:如果同時提供x
和y
,則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
,而不是 2Dnp.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
接受兩個等長的樣本,計算配對元素之間的差值,然後執行檢定。考慮樣本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.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)