학생 설문 조사 데이터를 담고 있는 MASS::survey를 사용해 학생들의 성별에 따른 운동량에 차이가 있는지 독립성 검정을 해보자. 다음은 survey 데이터의 모양을 보여준다.
> library(MASS) > data(survey) > str(survey) 'data.frame': 237 obs. of 12 variables: $ Sex : Factor w/ 2 levels "Female","Male": 1 2 2 2 2 1 2 1 2 2 ... $ Wr.Hnd: num 18.5 19.5 18 18.8 20 18 17.7 17 20 18.5 ... $ NW.Hnd: num 18 20.5 13.3 18.9 20 17.7 17.7 17.3 19.5 18.5 ... $ W.Hnd : Factor w/ 2 levels "Left","Right": 2 1 2 2 2 2 2 2 2 2 ... $ Fold : Factor w/ 3 levels "L on R","Neither",..: 3 3 1 3 2 1 1 3 3 3 ... $ Pulse : int 92 104 87 NA 35 64 83 74 72 90 ... $ Clap : Factor w/ 3 levels "Left","Neither",..: 1 1 2 2 3 3 3 3 3 3 ... $ Exer : Factor w/ 3 levels "Freq","None",..: 3 2 2 2 3 3 1 1 3 3 ... $ Smoke : Factor w/ 4 levels "Heavy","Never",..: 2 4 3 2 2 2 2 2 2 2 ... $ Height: num 173 178 NA 160 165 ... $ M.I : Factor w/ 2 levels "Imperial","Metric": 2 1 NA 2 2 1 1 2 2 2 ... $ Age : num 18.2 17.6 16.9 20.3 23.7 ... > head(survey[c("Sex", "Exer")]) Sex Exer 1 Female Some 2 Male None 3 Male None 4 Male None 5 Male Some 6 Female Some
survey 데이터에서 성별은 Sex, 운동을 얼마나 하는지는 Exer 열에 저장되어 있다. Sex는 Female, Male 두 가지 레벨을 가지는 팩터이며, Exer는 Freq, Some, None 3가지 레벨로 구성된 팩터이다. Freq는 운동을 자주함, Some은 운동을 약간 함, None은 운동을 하지 않음을 의미한다.
성별과 운동이 독립인지를 확인해보기 위해 분할표를 만들어보자.
> xtabs(~ Sex + Exer, data=survey)
Exer
Sex Freq None Some
Female 49 11 58
Male 65 13 40
분할표를 작성하고 나면 chisq.test( )를 통해 카이 제곱 검정을 수행할 수 있다.
chisq.test : 카이 제곱 검정을 수행한다. |
chisq.test( x, # 숫자 벡터 또는 행렬. 또는 x와 y가 모두 팩터 y=NULL, # 숫자 벡터 또는 x가 팩터인 경우 팩터로 지정. x가 행렬인 경우 그 안에 분할표가 # 저장되어 있는 경우므로 y가 무시된다. # x와 같은 길이를 가질 확률. 이 값이 비율이 이 확률과 같은지를 테스트한다. 이 값이 지정되지 # 않으면 확률이 서로 같은지 테스트한다. 이 인자는 '7.5 적합도 검정' 절에서 사용법을 설명한다. p = rep(1/length(x), length(x)) ) |
다음은 성별과 운동 정도의 독립성 검정을 수행한 예다.
> chisq.test(xtabs(~ Sex + Exer, data=survey))
Pearson's Chi-squared test
data: xtabs(~Sex + Exer, data = survey)
X-squared = 5.7184, df = 2, p-value = 0.05731
p 값이 0.05731이므로 0.05보다 커서 ‘H0: 성별과 운동은 독립이다.’라는 귀무가설을 기각할 수 없는 것으로 나타났다. 통계량 χ2은 5.7184였으며 자유도Degree of Freedom는 성별이 2개 레벨, 운동량이 3개 레벨이므로 (2-1)(3-1) = 2였다.