簡體   English   中英

Python Scipy 中的兩個樣本 Kolmogorov-Smirnov 檢驗

[英]Two-sample Kolmogorov-Smirnov Test in Python Scipy

我不知道如何在 Scipy 中進行兩樣本 KS 測試。

閱讀文檔后scipy kstest

我可以看到如何測試分布與標准正態分布相同的地方

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
test_stat = kstest(x, 'norm')
#>>> test_stat
#(0.021080234718821145, 0.76584491300591395)

這意味着在 p 值為 0.76 時,我們不能拒絕兩個分布相同的原假設。

但是,我想比較兩個分布,看看我是否可以拒絕它們相同的零假設,例如:

from scipy.stats import kstest
import numpy as np

x = np.random.normal(0,1,1000)
z = np.random.normal(1.1,0.9, 1000)

並測試 x 和 z 是否相同

我嘗試了幼稚:

test_stat = kstest(x, z)

並得到以下錯誤:

TypeError: 'numpy.ndarray' object is not callable

有沒有辦法在 Python 中進行兩個樣本的 KS 測試? 如果是這樣,我應該怎么做?

先感謝您

您正在使用單樣本 KS 測試。 您可能需要兩個樣本測試ks_2samp

>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>> 
>>> np.random.seed(12345678)
>>> x = np.random.normal(0, 1, 1000)
>>> y = np.random.normal(0, 1, 1000)
>>> z = np.random.normal(1.1, 0.9, 1000)
>>> 
>>> ks_2samp(x, y)
Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647)
>>> ks_2samp(x, z)
Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77)

結果可以解釋如下:

  1. 您可以根據您的樣本大小將python給出的statistic值與KS-test臨界值表進行比較。 statistic值高於臨界值時,兩種分布不同。

  2. 或者您可以將p-value與顯着性水平a 進行比較,通常是 a=0.05 或 0.01(您決定,a 越低,越顯着)。 如果 p 值低於a ,則兩個分布很可能不同。

這就是 scipy 文檔所說的:

如果 KS 統計量很小或 p 值很高,那么我們不能拒絕兩個樣本的分布相同的假設。

不能拒絕不代表我們確認。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM