2012-06-04 3 views
38

Scipy에서 Two-sample KS 테스트를 수행하는 방법을 알 수 없습니다.Python에서 두 샘플 Kolmogorov-Smirnov 테스트 Scipy

문서 scipy kstest

을 읽은 후 나는 분포가 표준 정규 분포와 동일입니다 테스트하는 방법을 볼 수 있습니다

from scipy.stats import kstest 
import numpy as np 

x = np.random.normal(0,1,1000) 
test_stat = kstest(x, 'norm') 
#>>> test_stat 
#(0.021080234718821145, 0.76584491300591395) 

0.76의 p- 값에 우리가 널을 거부 할 수 있음을 의미합니다 두 분포가 동일하다는 가설.

from scipy.stats import kstest 
import numpy as np 

x = np.random.normal(0,1,1000) 
z = np.random.normal(1.1,0.9, 1000) 

X 및 Z는 I 시도

동일한가 시험 :

그러나, 두 분포를 비교 I 같은 널들이 동일 가설 것을 거부 할 수 있는지 할 순진한 :

test_stat = kstest(x, z) 

하고있어 다음과 같은 오류 :

파이썬에서 2 샘플 KS 테스트를 수행 할 수있는 방법이 있습니까? 그렇다면 어떻게해야합니까?

고맙습니다.

+0

라인 및 추적을 게시 할 수 있습니까? – cval

답변

61

단일 샘플 KS 테스트를 사용하고 있습니다. 당신은 아마 ks_2samp를 원하는 :

If the K-S statistic is small or the p-value is high, then we cannot reject the hypothesis that the distributions of the two samples are the same.

우리가 확인을 의미하지 않는다 거부 할 수 없습니다

>>> from scipy.stats import ks_2samp 
>>> import numpy as np 
>>> 
>>> np.random.seed(12345678) 
>>> x = np.random.normal(0, 1, 1000) 
>>> y = np.random.normal(0, 1, 1000) 
>>> z = np.random.normal(1.1, 0.9, 1000) 
>>> 
>>> ks_2samp(x, y) 
Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647) 
>>> ks_2samp(x, z) 
Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77) 
+1

그게 내가 찾고 있었던 바로 그 것이다. 대단히 감사합니다! – Akavall

+1

이러한 결과를 어떻게 해석합니까? 'statistic'과'p-value'를 살펴봄으로써 샘플이 같은 분포에서 왔다고 말할 수 있습니까? – FaCoffee

+1

@FaCoffee 이것은 scipy 문서가 말하는 것입니다 : "_ KS 통계량이 작거나 P 값이 높으면 두 표본의 분포가 동일하다는 가설을 거부 할 수 없습니다." – user2738815

0

이것은 scipy 문서 말할 것입니다.

+0

더 자세히 대답 하시겠습니까? 미리 감사드립니다! –

+0

@KingReload * p * 값이 매우 작을 때,이 두 샘플의 확률은 * 같은 분포에서 나오지 않는다는 것을 의미합니다. 다른 말로하면, 같은 분포에서 나오는 두 샘플의 확률은 매우 높습니다. 그러나 당신은 100 % 확신 할 수 없으므로 * p * 값은 결코 0이 아닙니다. 때로는 0으로 표시되지만 실제로는 0이 아닙니다. 그렇기 때문에 우리는 귀무 가설을 받아들이지 않고 * 귀무 가설을 거부하지 않았습니다. null hypothesis = * 두 샘플의 분포가 동일 함 * –

+0

p 값이 높음 동일한 분포에서 오는 확률이 높습니다. p 값이 작을 가능성이 적습니다. @MDAbidHasan은 그것을 거꾸로 가지고 있습니다. 예를 들어, 문서의 예는 다음과 같습니다. ''동일한 분포의 경우 p 값이 높기 때문에 귀무 가설을 거부 할 수 없습니다. 41 % : >>> >>> rvs4 = stats.norm.rvs (크기 = n2, loc = 0.0, scale = 1.0) >>> stats.ks_2samp (rvs1, rvs4) (0.07999999999999996, 0.41126949729859719)''' – superhero