본문 바로가기

파이썬3

KS-test D-statistics 위치 파악하는 스크립트

728x90
반응형
def where_is_d(x,y):
	'''
    param x,y: 숫자들로 이루어진 list (ex. [1,2,3])
    return w[o[i]]: 해당값은 ecdf-plot에서 x축의 위치를 의미하게됨.
    오류가 발생한다면 다양한 지점이 D값을 가질 수 있어서임.
    '''
    n,m=len(x),len(y)
    w=x+y
    o=np.argsort(w)
    o1=[m if o_i <= n else -n for o_i in o]
    z=np.cumsum(o1)
    i=np.where(abs(z)==np.max(abs(z)))[0][0]
    return w[o[i]]

KS-test 후 2개의 empirical cumulative density function (ECDF)간의 최대거리 차이를 D값이라한다.

종종 D값이 발생하는 지점이 어디인지 위치를 알고 싶을 때 사용할 수 있는 스크립트이다.

예제는 아래와 같다.

x=np.random.randn(100)+1
y=np.random.randn(200)+1
print('D is located at',where_is_d(list(x),list(y)))
from statsmodels.distributions.empirical_distribution import ECDF
cdf=ECDF(x)
plt.plot(cdf.x, cdf.y, label="up", markerfacecolor='none')
cdf=ECDF(y)
plt.plot(cdf.x, cdf.y, label="bd",  markerfacecolor='none')
plt.axvline(where_is_d(list(x),list(y)))
plt.legend()

결과물은 아래와 같다.

파란색 수직선이 2개의 ECDF의 최대치가 되는 지점이다.

728x90
반응형