카이제곱 분포(Chi-square distribution)
카이제곱분포(χ2 분포)는 식 1과 같이 제곱한 k개의 서로 독립적인 표준정규 확률변수들을 합하여 얻어지는 분포입니다. 이때 k를 자유도라 하며 X2분포의 모수가 됩니다.
X2(k) = Z12 + Z22 + … + Zk2 | (식 1) |
Z: 표준정규분포를 따르는 확률변수 |
식 1의 Z은 표준정규분포를 따르는 확률변수로서 식 2와 같이 나타낼 수 있습니다.
(식 2) |
식 2에서 나타낸 것과 같이 χ2 분포를 구성하는 모든 확률변수는 표준정규분포를 따르는 것으로 평균이 0, 표준편차가 1이므로 (-1, 1) 구간에 위치할 확률이 클것입니다. 이것은 자유도가 1인 경우 확률밀도함수는 (0, 1) 부분에 밀집되므로 카이제곱분포는 외쪽에 치우친 형태를 보일 것입니다. 자유도가 증가할수록 평균과 표준편차의 증가되고 정규분포화 될 것입니다. 이러한 분포의 경향은 그림 1에서 나타낸 것과 일치합니다.
scipy.stats.chi2() 클래스의 다양한 메서드를 적용할 수 있습니다. 그림 1은 stats.chi2.pdf(x, df=k)
메서드를 사용하여 작성한 것입니다. 이 메서드의 인수 df는 χ2 분포의 자유도를 나타내며 그림에서 나타낸 것과 같이 이 인수에 의해 분포의 형태가 달라집니다. 이 이유로 df의 인수값인 k를 형태매개변수라고 합니다.
x=np.linspace(0, 21, 1000) k=[1, 3,5,10,20] col=['g','b','r','k', "orange"] fig, ax=plt.subplots(figsize=(4, 3)) for i, j in zip(col, k): y=stats.chi2.pdf(x, j) ax.plot(x, y, color=i, label=r"$\chi^2$("+str(j)+")") ax.set_xlabel("x", loc="center" , size="12") ax.set_ylabel("pdf") ax.set_ylim(0, 0.4) ax.legend(loc="best") plt.show()
식 3에서 나타낸 것과 같이 카이제곱(χ2)분포는 감마분포의 특수한 형태로 그 분포의 확률밀도 함수(식 4)의 α와 λ가 각각
(식 3) |
(식 4) |
예 1)
독립인 두 개의 정규분포를 따르는 자료의 제곱 합에 대한 결합분포(f(x))를 작성합니다. 그 분포와 χ2(2) 분포를 비교합니다.
x=stats.norm.rvs(size=1000) y=stats.norm.rvs(size=900) z=np.append(x**2, y**2) z1=np.sort(z)
위 코드의 결과인 두개의 정규분포를 따르는 인공데이터 x, y의 제곱의 결합으로 이루어진 z1에 대한 형태는 그림 2에서 나타낸 것과 같이 자유도 2인 χ2 분포와 유사합니다.
fig, ax=plt.subplots(figsize=(4,3)) ax.hist(z1, bins=15, rwidth=0.9, color="g", alpha=0.3, label="histogram") ax.set_xlabel("z1") ax.set_ylabel("frequency", color="g") ax2=plt.twinx() ax2.plot(z1, stats.chi2.pdf(z1, 2), color="b", label=r"$\chi^2$(2)") ax2.set_ylabel("pdf", color="b") ax.legend(loc=(0.6, 0.8), frameon=False) ax2.legend(loc=(0.6, 0.7), frameon=False) plt.show()
χ2 분포의 평균과 분산은 식 5와 같이 정의됩니다.
(식 5) |
sympy 패키지의 함수들을 적용하여 식 5를 확인하면 다음과 같습니다.
x,k=symbols("x, k", positive=True) f=(x**(k/2-1)*exp(-x/2))/(2**(k/2)*gamma(k/2)) f
E=integrate(x*f, (x, 0, oo)) simplify(E)
k
E2=integrate(x**2*f,(x,0, oo)) simplify(E2)
var=E2-(E)**2 simplify(var)
2k
예 2)
랜덤변수 X가 자유도 10인 카이제곱 분포에 부합한다고 하면 95%에 해당하는 값?
이 예는 P(X ≤ x)=0.95에 대응하는 확률변수 x를 결정하는 것입니다. 즉, y = f(x)의 역함수인 f-1(y)=x를 계산하는 것으로 scipy.stats 모듈의 각 분포의 메소드 ppf(q, df)
로 계산할 수있습니다. 이 메소드의 q는 확률, df는 자유도입니다.
round(stats.chi2.ppf(0.95, df=10), 3)
18.307
예 3)
정규분포를 따르는 연속확률변수 X의 Z score의 제곱인 Y는 자유도가 1인 χ2 분포를 따름을 증명합니다.
Z은 표준정규분포(N(0, 1))을 따르며 확률밀도함수(식 6)는 다음과 같습니다.
(식 6) |
확률변수 Y에 대한 일정구간의 누적확률은 식 7과 같이 계산됩니다.
(식 7) |
식 7의 결과인 미분된 함수를 새로운 함수 g(x)로 하면 식 8과 같이 정리됩니다.
(식 8) |
식 8의 마지막 항은 자유도가 1인 χ2(1)의 확률밀도함수 식 3과 같습니다.
댓글
댓글 쓰기