2013-12-11 2 views
2

2 샘플 Kolmogorov Smirnov 테스트를 사용하면 p 값이 0.0이됩니다.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 값이 그 아래에 있으므로 0으로 표시됩니다. – 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- 값입니까? –