cramervonmises_2samp#
- scipy.stats.cramervonmises_2samp(x, y, method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[原始碼]#
執行雙樣本 Cramér-von Mises 適合度檢定。
這是 Cramér-von Mises 檢定的雙樣本版本 ([1]):對於兩個獨立樣本 \(X_1, ..., X_n\) 和 \(Y_1, ..., Y_m\),虛無假設是樣本來自相同的(未指定的)連續分佈。
- 參數:
- xarray_like
隨機變數 \(X_i\) 的觀測值的一維陣列。必須包含至少兩個觀測值。
- yarray_like
隨機變數 \(Y_i\) 的觀測值的一維陣列。必須包含至少兩個觀測值。
- method{‘auto’, ‘asymptotic’, ‘exact’}, optional
用於計算 p 值的 method,詳情請參閱 Notes。預設值為 ‘auto’。
- axisint or None, default: 0
如果為整數,則為計算統計量的輸入軸。輸入的每個軸切片(例如,列)的統計量將出現在輸出的對應元素中。如果
None
,則輸入將在計算統計量之前被展平。- nan_policy{‘propagate’, ‘omit’, ‘raise’}
定義如何處理輸入的 NaN。
propagate
:如果 NaN 出現在計算統計量的軸切片(例如,列)中,則輸出的對應條目將為 NaN。omit
:執行計算時將省略 NaN。如果軸切片中剩餘的資料不足以計算統計量,則輸出的對應條目將為 NaN。raise
:如果存在 NaN,將引發ValueError
。
- keepdimsbool, default: False
如果設定為 True,則縮減的軸將保留在結果中作為大小為一的維度。使用此選項,結果將正確地廣播到輸入陣列。
- 返回:
- res具有屬性的物件
- statisticfloat
Cramér-von Mises 統計量。
- pvaluefloat
p 值。
Notes
在 1.7.0 版本中新增。
統計量根據 [2] 中的方程式 9 計算。p 值的計算取決於關鍵字 method
asymptotic
:p 值是透過使用檢定統計量的極限分佈來近似。exact
:精確的 p 值是透過枚舉檢定統計量的所有可能組合來計算,請參閱 [2]。
如果
method='auto'
,如果兩個樣本都包含等於或少於 20 個觀測值,則使用精確方法,否則使用漸近分佈。如果底層分佈不是連續的,則 p 值可能趨於保守([3] 中的第 6.2 節)。當對資料進行排序以計算檢定統計量時,如果存在 ties,則使用中位排名。
從 SciPy 1.9 開始,
np.matrix
輸入(不建議用於新程式碼)在執行計算之前會轉換為np.ndarray
。在這種情況下,輸出將是純量或np.ndarray
的適當形狀,而不是 2Dnp.matrix
。同樣地,雖然遮罩陣列的遮罩元素被忽略,但輸出將是純量或np.ndarray
而不是具有mask=False
的遮罩陣列。參考文獻
[2] (1,2)Anderson, T.W. (1962). On the distribution of the two-sample Cramer-von-Mises criterion. The Annals of Mathematical Statistics, pp. 1148-1159.
[3]Conover, W.J., Practical Nonparametric Statistics, 1971.
範例
假設我們希望檢定由
scipy.stats.norm.rvs
產生的兩個樣本是否具有相同的分佈。我們選擇顯著性水準 alpha=0.05。>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> x = stats.norm.rvs(size=100, random_state=rng) >>> y = stats.norm.rvs(size=70, random_state=rng) >>> res = stats.cramervonmises_2samp(x, y) >>> res.statistic, res.pvalue (0.29376470588235293, 0.1412873014573014)
p 值超過我們選擇的顯著性水準,因此我們不拒絕虛無假設,即觀察到的樣本是從相同的分佈中抽取的。
對於小樣本量,可以計算精確的 p 值
>>> x = stats.norm.rvs(size=7, random_state=rng) >>> y = stats.t.rvs(df=2, size=6, random_state=rng) >>> res = stats.cramervonmises_2samp(x, y, method='exact') >>> res.statistic, res.pvalue (0.197802197802198, 0.31643356643356646)
即使樣本量很小,基於漸近分佈的 p 值也是一個很好的近似值。
>>> res = stats.cramervonmises_2samp(x, y, method='asymptotic') >>> res.statistic, res.pvalue (0.197802197802198, 0.2966041181527128)
與方法無關,在這個範例中,人們不會在選擇的顯著性水準下拒絕虛無假設。