카이제곱 독립성 검정(R)

SPSS로 계산하게 하는 예제가 있어서 R로 다시 돌려보면서 정리했다. 사실 R이 데이터의 이해를 담보로 해야 할 수 있는 부분들이 많아서 SPSS나 SAS 예제더라도 R로 돌려보는게 의미가 좀 크다.

아래와 같은 데이터가 있다고 가정할 경우..

 

> read.csv(“d:/knou/pkg/5-9.csv”)
교육수준 흡연실태 사원수
1     대졸   과흡연     51
2     고졸   과흡연     22
3     중졸   과흡연     43
4     대졸     흡연     92
5     고졸     흡연     21
6     중졸     흡연     28
7     대졸   비흡연     68
8     고졸   비흡연      9
9     중졸   비흡연     22

교육정도의 차이가 흡연실태의 차이와 관련이 있는지 검정을 실시하고자 한다.

따라서 귀무가설은 : 교육수준과 흡연실태는 별 상관이 없다(상호 독립)로 하고, 대립가설은 두 변수가 관련이 있다는 것으로한다(독립적이지 않다).

이를 분석이 편한 분할표(contingency table) 형태로 만들어 준다.

 

> smoke <- read.csv(“d:/knou/pkg/5-9.csv”)

> smoking <- xtabs(사원수 ~ 교육수준 + 흡연실태, data=smoke)

 

> smoking
흡연실태
교육수준 과흡연 비흡연 흡연
고졸     22      9   21
대졸     51     68   92
중졸     43     22   28

 

> apply(smoking, 1, sum)
고졸 대졸 중졸
52  211   93
> apply(smoking, 2, sum)
과흡연 비흡연   흡연
116     99    141

 

이정도 데이터면 실제 고졸-과흡연와 같은 모든 pairs에 대해서 변수들간의 독립성 가정으로 예상빈도수를 계산할 수 있다.

예를 들어 고졸-과흡연자의 예상값은 356 : 116 = 52 :  x , x = 16.9 가 된다.  이 식은 전체 과흡연자의 비율이 그대로 고졸 과흡연자의 비율을 예상하는데 쓰이는 것이고 교육수준이 전혀 고려되지 않은 결과값을 단순히 비례식으로 계산한 것이다.

이렇게 관측빈도와 기대빈도를 계산하고 각 차이값이 크면 두 변수간의 독립이 아니게 해석할 수 있고 차이값이 그다지 크지 않으면 독립이라고 할 수 있는데 이 때 사용하는 검정법이 카이제곱 검정이다. 아주 오랜 옛날에 이 검정법을 feature importance를 계산하는데 사용한 경험이 있는데, 결국 기계학습에 검정 통계학 방법이 사용된 것이라 볼 수 있다.

feature importance 계산하는 곳에서는 모든 독립변수에 대해서 종속변수를 예측하는데 영향을 끼치는지 아닌지에 대해서 카이제곱 통계량을 구해서 정도를 판단하게 되는것이다.  이 값을 구하려면 카이제곱 검정을 독립변수의 개수만큼 돌려야 하고 숫자형 변수의 경우 명목형 변수로 변환을 하는 작업이 필요할 것이다.

여튼 핵심 의미는 이렇고…

R로 계산을 해보자.

 

> chisq.test(smoking)

Pearson’s Chi-squared test

data:  smoking
X-squared = 18.5097, df = 4, p-value = 0.0009808

 

결과값을 보면 흡연수준과 교육수준은 변수들간의 상호영향을 끼치는 것(상호 독립이 아니다)으로 보이고 있다는 것을 p-value를 통해 알 수 있다.

실제 기대도수가 5이하인 분할표칸이 전체 20% 이상을 차지한다면 Fisher의 exact test를 수행할 것을 권장하고 있다.

CC BY-NC 4.0 카이제곱 독립성 검정(R) by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.