2013-12-11 116 views
2

使用2樣本Kolmogorov Smirnov測試,我得到0.0的p值。scipy p值返回0.0

>>>scipy.stats.ks_2samp(dataset1, dataset2) 
(0.65296076312083573, 0.0) 

看看這兩個數據集的直方圖,我非常有信心他們代表兩個不同的數據集。但是,真的,p = 0.0?這似乎沒有道理。它不應該是一個非常小但正面的數字嗎?

我知道返回值是numpy.float64類型。這與它有什麼關係?

編輯: 數據這裏:https://www.dropbox.com/s/jpixhz0pcybyh1t/data4stack.csv

scipy.version.full_version 
'0.13.2' 
+0

號不能由浮點類型從0區分。該閾值隨着類型而變化,但總是有一個閾值,顯然你的p值低於它,所以它顯示爲零。 – BrenBarn

+0

@BrenBarn但是在scipy的情況下,閾值有多小? P = 0不是很滿意。我正在尋找更準確的聲明,如P <1E-293。 – James

+0

很確定你不會得到那麼小的東西。它可能因你的平臺而異,但我認爲你用numpy得到的最小尺寸是1E-16。你可以看看['numpy.finfo'](https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.finfo.html)。 – BrenBarn

回答

7

是,概率是非常小:比某個閾值小的

>>> from pprint import pprint 
>>> pprint ([(i, scipy.stats.ks_2samp(dataset1, dataset2[:i])[1]) 
...    for i in range(200,len(dataset2),200)]) 
[(200, 3.1281733251275881e-63), 
(400, 3.5780609056448825e-157), 
(600, 9.2884803664366062e-225), 
(800, 7.1429666685167604e-293), 
(1000, 0.0), 
(1200, 0.0), 
(1400, 0.0), 
(1600, 0.0), 
(1800, 0.0), 
(2000, 0.0), 
(2200, 0.0), 
(2400, 0.0)] 
+0

哪些是真正的p值? –