scipy.stats.

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 的適當形狀,而不是 2D np.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)

與方法無關,在這個範例中,人們不會在選擇的顯著性水準下拒絕虛無假設。