本文簡要介紹 python 語言中 scipy.stats.kstest
的用法。
用法:
scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', method='auto')#
執行(一個樣本或兩個樣本)Kolmogorov-Smirnov 擬合優度檢驗。
單樣本檢驗將樣本的基礎分布 F(x) 與給定分布 G(x) 進行比較。雙樣本檢驗比較兩個獨立樣本的基本分布。這兩個檢驗僅對連續分布有效。
- rvs: str、數組 或可調用
如果是數組,它應該是隨機變量觀察值的一維數組。如果是可調用的,它應該是一個生成隨機變量的函數;需要有一個關鍵字參數尺寸.如果是字符串,它應該是分布的名稱
scipy.stats
,這將用於生成隨機變量。- cdf: str、數組 或可調用
如果是 數組,則應該是隨機變量觀測值的一維數組,並進行二樣本檢驗(並且 rvs 必須是 數組)。如果是可調用的,則該可調用用於計算 cdf。如果是字符串,它應該是
scipy.stats
中的分布名稱,它將用作 cdf 函數。- args: 元組,序列,可選
分布參數,當 rvs 或 cdf 是字符串或可調用對象時使用。
- N: 整數,可選
如果 rvs 是字符串或可調用的,則樣本大小。默認值為 20。
- alternative: {‘雙麵’,‘less’, ‘greater’},可選
定義原假設和備擇假設。默認為“雙麵”。請參閱下麵注釋中的說明。
- method: {‘auto’, ‘exact’, ‘approx’, ‘asymp’},可選
定義用於計算 p 值的分布。以下選項可用(默認為‘auto’):
‘auto’ : selects one of the other options.
‘exact’ : uses the exact distribution of test statistic.
‘approx’ : approximates the two-sided probability with twice the one-sided probability
‘asymp’: uses asymptotic distribution of test statistic
- 資源:KstestResult
包含屬性的對象:
- 統計 浮點數
KS 檢驗統計量,D+、D- 或 D(兩者中的最大值)
- p值 浮點數
One-tailed 或 two-tailed p 值。
- statistic_location 浮點數
在單樣本檢驗中,這是與 KS 統計量對應的 rvs 值;即,在該觀察中測量經驗分布函數和假設的累積分布函數之間的距離。
在雙樣本檢驗中,這是與 KS 統計量相對應的 rvs 或 cdf 的值;即,在該觀察中測量經驗分布函數之間的距離。
- statistic_sign int
在單樣本檢驗中,如果 KS 統計量是經驗分布函數與假設累積分布函數 (D+) 之間的最大正差,則此值為 +1;如果 KS 統計量是最大負差 (D-),則為 -1。
在雙樣本檢驗中,如果 rvs 的經驗分布函數超過 statistic_location 處的 cdf 經驗分布函數,則為 +1,否則為 -1。
參數 ::
返回 ::
注意:
可以使用替代參數選擇零和相應替代假設的三個選項。
雙麵:原假設是兩個分布相同,對於所有 x,F(x)=G(x);另一種情況是它們不相同。
less:原假設是所有 x 的 F(x) >= G(x);另一種選擇是對於至少一個 x,F(x) < G(x)。
更大:原假設是所有 x 的 F(x) <= G(x);另一種選擇是對於至少一個 x,F(x) > G(x)。
請注意,替代假設說明了CDF的基礎分布,而不是觀察值。例如,假設 x1 ~ F 和 x2 ~ G。如果所有 x 的 F(x) > G(x),則 x1 中的值往往小於 x2 中的值。
例子:
假設我們希望檢驗樣本按照標準正態分布的原假設。我們選擇置信度為95%;也就是說,如果 p 值小於 0.05,我們將拒絕原假設並支持替代假設。
在測試均勻分布的數據時,我們希望原假設被拒絕。
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> stats.kstest(stats.uniform.rvs(size=100, random_state=rng), ... stats.norm.cdf) KstestResult(statistic=0.5001899973268688, pvalue=1.1616392184763533e-23)
事實上,p 值低於我們的閾值 0.05,因此我們拒絕零假設,轉而支持默認的 “two-sided” 替代方案:數據不按照標準正態分布。
在測試標準正態分布的隨機變量時,我們期望數據在大多數情況下與原假設一致。
>>> x = stats.norm.rvs(size=100, random_state=rng) >>> stats.kstest(x, stats.norm.cdf) KstestResult(statistic=0.05345882212970396, pvalue=0.9227159037744717)
正如預期的那樣,p 值 0.92 不低於我們的閾值 0.05,因此我們不能拒絕原假設。
然而,假設隨機變量按照正態分布進行分布,該正態分布向更大的值移動。在這種情況下,基礎分布的累積密度函數 (CDF) 往往是較少的比標準法線的 CDF。因此,我們期望原假設被拒絕
alternative='less'
:>>> x = stats.norm.rvs(size=100, loc=0.5, random_state=rng) >>> stats.kstest(x, stats.norm.cdf, alternative='less') KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743)
事實上,當 p 值小於我們的閾值時,我們拒絕零假設,轉而支持替代方案。
為方便起見,可以使用分布名稱作為第二個參數來執行前麵的測試。
>>> stats.kstest(x, "norm", alternative='less') KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743)
上麵的示例都是單樣本測試,與
ks_1samp
執行的測試相同。請注意,kstest
也可以執行與ks_2samp
執行的相同的兩個樣本測試。例如,當從同一分布中抽取兩個樣本時,我們期望數據在大多數情況下與原假設一致。>>> sample1 = stats.laplace.rvs(size=105, random_state=rng) >>> sample2 = stats.laplace.rvs(size=95, random_state=rng) >>> stats.kstest(sample1, sample2) KstestResult(statistic=0.11779448621553884, pvalue=0.4494256912629795)
正如預期的那樣,p 值 0.45 不低於我們的閾值 0.05,因此我們不能拒絕原假設。
相關用法
- Python SciPy stats.kstwobign用法及代碼示例
- Python SciPy stats.kstwo用法及代碼示例
- Python SciPy stats.kstat用法及代碼示例
- Python SciPy stats.ksone用法及代碼示例
- Python SciPy stats.ks_2samp用法及代碼示例
- Python SciPy stats.ks_1samp用法及代碼示例
- Python SciPy stats.kurtosis用法及代碼示例
- Python SciPy stats.kruskal用法及代碼示例
- Python SciPy stats.kurtosistest用法及代碼示例
- Python SciPy stats.kappa3用法及代碼示例
- Python SciPy stats.kappa4用法及代碼示例
- Python SciPy stats.kendalltau用法及代碼示例
- 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用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.kstest。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。