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

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 테스트를 수행하는 방법이 있습니까? 그렇다면 어떻게해야합니까?

미리 감사드립니다



답변

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 보다 작 으면 두 분포가 다를 가능성이 매우 높습니다.


답변

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

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

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


답변