앞서 분산분석(ANOVA)의 사후 검정에 대해서 알아봤습니다. 이 경우 그룹간 평균의 차이가 있는 경우 정확히 어떤 그룹간 차이가 있는지를 검정하는 것이었습니다. 만약 비율의 차이를 보기 위해서는 카이 제곱 검정을 시행해서 다시 사후 분석을 해야 합니다. 여기에도 여러 가지 방법이 있지만, 보통은 본페로니 방법이 가장 널리 사용됩니다.
앞서 카이제곱 검정에서 사용한 예제를 세 그룹으로 확장하겠습니다. 정상 체중 56명 가운데 당뇨 환자가 6명인데, 과체중(overweight) 58명 가운데 8명, 비만 61명 가운데서는 11명인 가정을 들어보겠습니다. 따라서 정상인 사람은 모두 50명씩이죠.
예제 파일을 만들었으면 역시 카이제곱 테스트를 진행해 봅니다.
> x<-matrix c="" nrow="3)</span">-matrix>
> x
[,1] [,2]
[1,] 50 6
[2,] 50 8
[3,] 50 11
>
> chisq.test(x)
Pearson's Chi-squared test
data: x
X-squared = 1.2943, df = 2, p-value = 0.5235
별 차이가 없는 것으로 나타났네요. 이 경우 차이를 만들기 위해서는 샘플수를 늘리기만 하면 됩니다.
> x<-matrix c="" nrow="3)</span">-matrix>
> x
[,1] [,2]
[1,] 500 60
[2,] 500 80
[3,] 500 110
>
> chisq.test(x)
Pearson's Chi-squared test
data: x
X-squared = 12.943, df = 2, p-value = 0.001547
역시 샘플 수가 커지니 서로 간에 차이가 있는 것으로 나타났네요. 이는 물론 통계로 장난을 친 건 아닙니다. 반대로 통계적으로 의미있는 결과를 얻기 위해서는 충분한 샘플 사이즈가 필요하다는 것을 보여주는 것이죠. 샘플 수를 계산하는 것 역시 통계적으로 중요한 처리 가운데 하나인데 나중에 기회가 되면 설명을 해보겠습니다.
아무튼 이제 정상/과체중/비만 중 어느 그룹에서 차이가 나는지를 알아봐야 합니다. 그전에 알아보기 쉽게 행과 열에 이름을 붙여보겠습니다. rownames와 colnames를 사용해서 이름을 지정할 수 있습니다.
> rownames(x) = c("normal","overweight","obese")
> colnames(x) = c("normal","diabetes")
> x
normal diabetes
normal 500 60
overweight 500 80
obese 500 110
사후 검정을 시행하기 위해 패키지 rcompanion을 깔아봅니다. 이 패키지는 여러 모로 유용한데다 책도 나와있으니 알아두면 도움이 됩니다. 여기서 pairwiseNominalIndependence를 사용합니다.
> library(rcompanion)
> pairwiseNominalIndependence(x,
+ fisher = FALSE,
+ gtest = FALSE,
+ chisq = TRUE,
+ method = "bonferroni")
Comparison p.Chisq p.adj.Chisq
1 normal : overweight 0.135000 0.40500
2 normal : obese 0.000529 0.00159
3 overweight : obese 0.055300 0.16600
결과적으로 보면 정상군과 비만군 사이 당뇨 유병률에 차이가 있는 것으로 나왔습니다. 다만 정상 - 과체중, 과체중 - 비만 군 사이에는 차이가 없네요. 이 결과대로라면 과체중은 당뇨와 연관성이 없고 비만만 연관성이 있는 것으로 나옵니다. 물론 실제 그렇다는 것이 아니라 그냥 가상 데이터입니다.
댓글
댓글 쓰기