我用下面的代碼生成的兩個分佈分佈的平等:KS和卡方檢驗拒絕數據來自同一DGP來
rand_num1 = 2*np.random.randn(10000) + 1
rand_num2 = 2*np.random.randn(10000) + 1
stats.ks_2samp(rand_num1, rand_num2)
我的問題是,爲什麼這兩個分佈不測試是基於相同在kstest和chisquare測試。
當我運行在2點分佈,我收到了kstest:
Ks_2sampResult(statistic=0.019899999999999973, pvalue=0.037606196570126725)
這意味着兩個分佈有統計學差異。我使用以下代碼來繪製兩種分佈的CDF:
count1, bins = np.histogram(rand_num1, bins = 100)
count2, _ = np.histogram(rand_num2, bins = bins)
plt.plot(np.cumsum(count1), 'g-')
plt.plot(np.cumsum(count2), 'b.')
This is how the CDF of two distributions looks。
當我運行一個卡方檢驗我得到如下:
stats.chisquare(count1, count2) # Gives an nan output
stats.chisquare(count1+1, count2+1) # Outputs "Power_divergenceResult(statistic=180.59294741316694, pvalue=1.0484033143507713e-06)"
我有以下3個問題:
- 即使CDF看起來相同,數據來自相同的分佈,爲什麼kstest和chisquare測試都拒絕相同的分佈假設?有沒有一個潛在的假設,我在這裏失蹤?
- 有些計數爲0,因此第一個chisquare()給出錯誤。爲所有計數添加一個非零數字以獲得正確的估計是否是一種公認的做法?
- 是否有kstest測試非標準分佈,說一個正常的非0意味着std!= 1?
奇怪,真的。我只是運行了你的K-S例子,並且始終如一地獲得像'(統計= 0.011,pvalue = 0.57)'這樣的值,這看起來是正確的。你爲'stats.ks_2samp(rand_num1,rand_num1)'(同上num2)獲得什麼價值?輸出應該是'(0,1)'。 –
我已經把'np.random.seed(12345)'放在前面,把KS拿回來了'(statistic = 0.010,pvalue = 0.61)',Python 3.5.1 x64 Anaconda –
for stats.ks_2samp(rand_num1,rand_num1)I得到p值= 1.0(預期)。你是對的 - 在大多數情況下,我得到一個非重要的P值。 我特別關注我發佈的案例 - 發行版的CDF非常相似,即使這樣,kstest和chisquare測試都意味着它們是不同的。 即使kstest表示它們相同(p-val> 0.5),chisquare測試也會拒絕它們相同。 – StreetHawk