2013-12-11 83 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值? –