Python Scipy의 2- 표본 Kolmogorov-Smirnov 테스트


82

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

설명서 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)

이는 p- 값 0.76에서 두 분포가 동일하다는 귀무 가설을 기각 할 수 없음을 의미합니다.

그러나 두 분포를 비교하고 두 분포가 동일하다는 귀무 가설을 기각 할 수 있는지 확인하고 싶습니다.

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가 동일한 지 테스트합니다.

순진한 시도 :

test_stat = kstest(x, z)

다음 오류가 발생했습니다.

TypeError: 'numpy.ndarray' object is not callable

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

미리 감사드립니다


라인과 트레이스 백을 게시 할 수 있습니까?
cval

답변:


123

1- 표본 KS 검정을 사용하고 있습니다. 두 샘플 테스트를 원할 것입니다 ks_2samp.

>>> 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. 샘플 크기에 따라 statisticPython이 제공 한 값을 KS-test 임계 값 테이블 과 비교할 수 있습니다 . 때는 statistic값이 임계 값보다 높으면, 두 개의 분포가 다르다.

  2. 또는를 p-value유의 수준 a (일반적으로 a = 0.05 또는 0.01) 와 비교할 수 있습니다 (a가 낮을수록 더 중요하다고 결정). p- 값이 a 보다 작 으면 두 분포가 다를 가능성이 매우 높습니다.


1
그것이 바로 제가 찾던 것입니다. 대단히 감사합니다!
Akavall 2012-06-04

2
이 결과를 어떻게 해석합니까? 그냥보고 샘플이 동일한 분포에서 온 말할 수 statisticp-value?
FaCoffee

4
@FaCoffee 이것은 scipy 문서가 말하는 것입니다 : " KS 통계가 작거나 p- 값이 높으면 두 표본의 분포가 같다는 가설을 기각 할 수 없습니다. "
user2738815

5

이것은 scipy 문서가 말하는 것입니다.

KS 통계량이 작거나 p- 값이 높으면 두 표본의 분포가 같다는 가설을 기각 할 수 없습니다.

거부 할 수 없다고해서 확인하는 것은 아닙니다.


당신의 대답을 더 자세히 설명해 주시겠습니까? 미리 감사드립니다!
King Reload

@KingReload 이것은 p 값이 매우 작을 때이 두 샘플 이 동일한 분포에서 나오지 않을 확률 이 매우 낮다는 것을 의미합니다. 다시 말해,이 두 표본이 동일한 분포에서 나올 확률이 매우 높습니다. 하지만 100 % 확신 할 수는 없으므로 p 값은 절대 0이 아닙니다. (때로는 0으로 표시되지만 실제로는 0이 아닙니다). 그래서 우리는 귀무 가설을 받아들이는 대신 귀무 가설을 기각하지 못했다고합니다 . 귀무 가설 수락 = 두 표본의 분포가 동일합니다
MD Abid Hasan

3
p- 값이 높을 가능성이 매우 높으며 동일한 분포에서 나올 가능성이 높고 p- 값이 작을 가능성이 높습니다. @MDAbidHasan은 거꾸로 가지고 있습니다. 실제로 문서의 예는 다음과 같습니다. For an identical distribution, we cannot reject the null hypothesis since the p-value is high, 41%: >>> >>> rvs4 = stats.norm.rvs(size=n2, loc=0.0, scale=1.0) >>> stats.ks_2samp(rvs1, rvs4) (0.07999999999999996, 0.41126949729859719)
superhero
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.