2016년 2월 4일 목요일

카이제곱 검정 실습

본문은 기 작성한 “T-Test 검정 실습”에 대한 확장된 내용을 카이제곱 검정과 함께 다룬다.

모수 검정은 표본 평균과 표본 분산을 이용하는 방법이 있다.

표본 평균의 차이를 이용하는 방법
T 분포, Z 분포
표본 분산의 차이를 이용하는 방법
F 분포, 카이제곱 분포

T-Test와 카이제곱의 공식이다.

T-TEST 공식
    ( 표본평균1 - 표본평균2 ) /  Sqrt( 표본분산1 / 표본개수1 + 표본분산2 / 표본개수2  )

카이제곱 공식
    Sum( ( 표본값 - 기대값 )**2 / 기대값 )

구현 시 주의 사항은
T-TEST 검정에서 표본분산을 구할 때는 "베셀의 수정"에 따라 표본개수에서 1개를 제외한다.
파이썬(numpy)에서는 np.var( 표본, ddof=1 )로 구할 수 있다.

핵심은
표본의 평균의 비교하는 것이 유용한가? 표본의 분산을 비교하는 것이 유용한가? 이다.
예를 들면 주사위가 잘 만들어 졌는지 검정하기 위해서 주사위를 던저서 나오는 눈금의 수를 표본으로 카이제곱 검정을 한다면 어떤가?
주사위를 60번 던졌을때 각 눈금의 기대치는 10회 이다. ( 60번 / 정6면체 )
SUM( 표본 값 (X) - 기대치 (10) )**2 / 기대치 (10) )

참고

자유도 ( Degree of Freedom, DoF)
모집단의 정보를 주는 독립적인 표본 자료의 수

DDOF (Delta Degree of Freedom, DDoF)
자유도 = 표본의 수 (N) - DDOF

베셀의 수정 ( Bessel’s Correction )
표본 관찰의 수 n이 표본 분산이나 표본 표준편차의 공식에서 n-1로 사용되는 것을 말한다.
표본의 수 n이 매우 클때는 문제가 없으나 n이 작을 때는 베셀의 수정을 통해서 모집단의 분산이나 표준편차의 추정에 발생하는 편중을 바로 잡는다.

샘플 데이터 만들기
D1 = stats.norm.rvs(loc=100,scale=1,size=50)
평균 100 편차 1인 표본 수 50개를 랜덤하게 만든다.

T-Test 함수의 사용 방법
# 표본 집단의 평균을 모집단의 평균과 비교
stats.ttest_1samp(D1, 100)
=>
( D1.mean() - 100 ) / np.sqrt(np.var(D1 - 100, ddof=1) / len(D1))
* ddof=1은 variance를 구할때, n - ddof ( n - 1) 을 뜻한다.

# 표본 집단의 비교
stats.ttest_rel(D1, D2)
=>
( D1.mean() - D2.mean() ) / np.sqrt(np.var(D1 - D2 ,ddof=1 ) / (len(D1)))

# 독립적인 표본 집단의 비교
stats.ttest_ind(D1, D2)
=>
( D1.mean() - D2.mean() ) / np.sqrt( (np.var(D1 ,ddof=1 ) / (len(D1))) + (np.var(D2 ,ddof=1 ) / (len(D2))))

카이제곱 함수의 사용방법
# D1의 평균의 분산
stats.chisquare(f_obs=D1)
=>
exp = D1.mean()
sum([ ( i - exp ) ** 2 / exp for i in D1 ])

# 표본 집단의 비교
stats.chisquare(f_obs=D1, f_exp=D2)
=>
sum(( D1 - D2 ) ** 2 / D2)

* D1, D2는 numpy의 array 타입을 사용했다.


커버 사진 (Knime)

0 개의 댓글:

댓글 쓰기