R 범주형 자료분석 (2) 독립성 검정(test of independence) : chisq.test()
지난 포스팅에서는 범주형 자료분석 중에서 (1) 적합도 검정에 대해서 소개하였다면, 이번 포스팅에서는 (2) 독립성 검정 (test of independence)에 대해서 알아보겠으며, 다음번 포스팅에서는 (3) 동질성 검정을 다루도록 하겠습니다.
범주형 자료 분석 유형별 간략한 소개는 아래와 같습니다.
[ 범주형 자료 분석 (categorical data test) ] (1) 적합도 검정(goodness of fit test) : 관측값들이 어떤 이론적 분포를 따르고 있는지를 검정. 한 개의 요인을 대상으로 함 (2) 독립성 검정(test of independence) : 서로 다른 요인들에 의해 분할되어 있는 경우 그 요인들이 관찰값에 영향을 주고 있는지 아닌지, 요인들이 서로 연관이 있는지 없는지를 검정. 두 개의 요인을 대상으로 함. (3) 동질성 검정(test of homogeneity) : 관측값들이 정해진 범주 내에서 서로 비슷하게 나타나고 있는지를 검정. 속성 A, B를 가진 부모집단(subpopulation) 각각으로부터 정해진 표본의 크기만큼 자료를 추출하는 경우에 분할표에서 부모집단의 비율이 동일한가를 검정. 두 개의 요인을 대상으로 함.
독립성 검정(test of independence)은 두 개의 범주형 변수/요인(2 factors)이 서로 연관성이 있는지, 상관이 있는지, 독립적인지를 카이제곱 검정(chisquared test)을 통해 통계적으로 판단하는 방법입니다.
가령, 학력(초등졸, 중등졸, 고등졸, 대졸, 대학원졸)이라는 범주형 변수(variable X)/요인(factor 1)와 연소득(하, 중, 상)이라는 범주형 변수(variable Y)/요인(factor 2) 간에 서로 관련성이 있는 것인지 아니면 관련이 없이 독립적인지를 판단하는 것과 같은 문제에 독립성 검정을 사용합니다.
참고로, 두 변수가 양적변수(qualitative variable)인 경우 두 변수 간 상관관계 분석을 위해서는 공분산 분석, 상관계수 분석, 회귀분석 등을 활용합니다.
범주형 자료분석의 경우 두 변수의 관련성을 보려면 분할표를 만들어서 카이제곱 검정을 하게 되는데요, 두 변수간의 관련성을 양적변수 분석할 때처럼 숫자로 얼마나 관련성이 큰지를 알 수 있는 통계량을 제공하지는 않습니다. (범주형 자료분석에서 두 변수 간 관련성 측도로 파이계수, 속성계수, 크레머 V 등의 통계량이 있는데요, 이번 포스팅에서는 이에 대한 설명은 건너뛰겠습니다.)
자료를 분류하는 두 변수를 x와 Y라고 하고, 변수 X는 m개, 변수 Y는 n개의 범주(혹은 계급 class, 혹은 요인 수준 factor level)를 가진다고 했을 때 관측도수 Oij 는 m개와 n개의 층으로 이루어진 아래와 같은 표로 정리할 수 있습니다. 이를 m*n 분할표 (m*n contingency table)이라고 부릅니다.
[ 독립성 검정 자료 구조 (dataset for test of independence) ]
독립성 검정에는 카이제곱 X^2 통계량을 사용하는데요, 귀무가설 H0 가 사실일 때 자유도 (m-1)(n-1)인 카이제곱분포에 근사하는 것으로 알려져 있습니다. (☞ 카이제곱 분포(Chi-squared distribution) 참고 포스팅)
검정통계량 카이제곱 X^2 은 각 범주의 기대도수가 5 이상인 경우에 사용하는 것이 바람직하며, 기대도수가 5 미만인 경우에는 주의를 요합니다. (5보다 작으면 인접 범주와 합치는 것도 방법)
기본 원리는, 관측도수 O11, O21, ..., Omn 이 기대도수 E11, E21, ..., Emn 과 차이가 없다면 검정통계량 X0^2 값이 '0'이 되고, 반대로 관측도수와 기대도수가 차이가 크다면 검정통계량 값 또한 커지게 된다는 것입니다.
[ 독립성 검정(test of independence) 가설 및 검정 통계량, 검정 방법 ]
(1) 가설 (hypothesis)
- 귀무가설 H0 : 두 변수 X와 Y는 서로 독립이다 (관련성이 없다)
- 대립가설 H1 : 두 변수 X와 Y는 서로 독립이 아니다 (관련성이 있다)
(2) 검정 통계량 (chisquared test statistics)
(3) 검정 방법 (test method) |
- (a) chisq.test() of data from text problem
아래 문제에 대해서 R의 chisq.test() 함수를 사용해서 풀어보도록 하겠습니다.
(문제) 학급 (class 1, class 2, class 3)과 수학 성적 (math score High, Middle, Low, Fail) 간의 관련성이 있는지를 조사한 아래의 분할표를 사용하여 유의수준 α 0.05 로 검정하여라.
학급과 수학성적 분할표 (contingency table of class & math score)
|
먼저 데이터 입력 및 탐색적 분석을 위한 R 함수입니다.
> ##--------------------------------------------------------------------- > ## categorical data analysis - (2) test of independence : chisq.test() > ##--------------------------------------------------------------------- > > ##------------- > # (a) textbook problem > > ## data key-in > # data key-in way 1 : rbind() > row_1 <- c(7, 13, 9, 12) > row_2 <- c(13, 21, 10, 19) > row_3 <- c(11, 18, 12, 13) > > data_rbind <- rbind(row_1, row_2, row_3) > data_rbind [,1] [,2] [,3] [,4] row_1 7 13 9 12 row_2 13 21 10 19 row_3 11 18 12 13 > > > # data key-in way 2 : matrix() > raw_data <- c(7, 13, 9, 12, 13, 21, 10, 19, 11, 18, 12, 13) > data_matrix <- matrix(raw_data, byrow=TRUE, nrow=3) > data_matrix [,1] [,2] [,3] [,4] [1,] 7 13 9 12 [2,] 13 21 10 19 [3,] 11 18 12 13 > > > # giving names to the rows and columns of the data table : dimnames() > dimnames(data_matrix) <- list("Class" = c("Class_1", "Class_2", "Class_3"), + "Score" = c("Score_H", "Score_M", "Score_L", "Fail")) > > data_matrix Score Class Score_H Score_M Score_L Fail Class_1 7 13 9 12 Class_2 13 21 10 19 Class_3 11 18 12 13 > > > ## exploratory data analysis > # marginal distribution : addmargins() > addmargins(data_matrix) Score Class Score_H Score_M Score_L Fail Sum Class_1 7 13 9 12 41 Class_2 13 21 10 19 63 Class_3 11 18 12 13 54 Sum 31 52 31 44 158 > > > # proportional distribution : prop.table() > prop.table(data_matrix) Score Class Score_H Score_M Score_L Fail Class_1 0.04430380 0.08227848 0.05696203 0.07594937 Class_2 0.08227848 0.13291139 0.06329114 0.12025316 Class_3 0.06962025 0.11392405 0.07594937 0.08227848 > > addmargins(prop.table(data_matrix)) Score Class Score_H Score_M Score_L Fail Sum Class_1 0.04430380 0.08227848 0.05696203 0.07594937 0.2594937 Class_2 0.08227848 0.13291139 0.06329114 0.12025316 0.3987342 Class_3 0.06962025 0.11392405 0.07594937 0.08227848 0.3417722 Sum 0.19620253 0.32911392 0.19620253 0.27848101 1.0000000 > > > # bar plot : barplot() > barplot(t(data_matrix), beside=TRUE, legend=TRUE, + ylim=c(0, 30), + ylab="Observed frequencies in sample", + main="Frequency of math score by class") >
|
다음으로 카이제곱 검정 및 통계량 indexing 방법입니다.
> > ## chisquared test : chisq.test() > chisq.test(data_matrix) Pearson's Chi-squared test data: data_matrix X-squared = 1.3859, df = 6, p-value = 0.9667 > > > # indexing statistics of chisq.test() > chisq.test_output_2 <- chisq.test(data_matrix) > > chisq.test_output_2$observed # observed frequency Score Class Score_H Score_M Score_L Fail Class_1 7 13 9 12 Class_2 13 21 10 19 Class_3 11 18 12 13 > chisq.test_output_2$expected # expected frequeycy Score Class Score_H Score_M Score_L Fail Class_1 8.044304 13.49367 8.044304 11.41772 Class_2 12.360759 20.73418 12.360759 17.54430 Class_3 10.594937 17.77215 10.594937 15.03797 > chisq.test_output_2$residuals # residual between observed and expected frequecy Score Class Score_H Score_M Score_L Fail Class_1 -0.3681990 -0.13439170 0.3369579 0.1723221 Class_2 0.1818200 0.05837794 -0.6714739 0.3475383 Class_3 0.1244439 0.05404747 0.4316649 -0.5255380 > > chisq.test_output_2$statistic # chi-squared statistics X-squared 1.385926 > chisq.test_output_2$parameter # degrees of freedom df 6 > chisq.test_output_2$p.value # P-value [1] 0.966709
|
위 분석결과를 보면 P-value가 0.966709 로서 유의수준 α 0.05보다 크므로 귀무가설 H0를 채택하여 "학급과 수학성적 간에는 서로 관련성이 없다. 즉, 독립적이다"고 판단할 수 있겠습니다.
이상으로 독립성 검정(test of independence)을 카이제곱 검정 기법을 사용해서 하는 방법을 소개하였습니다.
다음번 포스팅에서는 (3) 동질성 검정(test of homegeneity)에 대해서 알아보도록 하겠습니다.
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^