관측값이 질적 자료(qualitative data) 또는 어떤 속성에 따라 분류되어 범주(category)에 속하는 도수(frequency)로 주어질 경우 이를 범주형 자료(categorical data) 라고 합니다. 범주형 자료의 예로는 학력(초등졸, 중등졸, 고등졸, 대졸, 대학원졸), 연수익(극빈, 하, 중, 상, 극상) 등이 있습니다.

 

지난 포스팅에서는 범주형 자료분석 중에서 (1) 적합도 검정, (2) 독립성 검정 (test of independence)에 대해서 소개하였다면, 이번 포스팅에서는 (3) 동질성 검정(test of homogeneity)을 다루도록 하겠습니다.

 

범주형 자료 분석 유형별 간략한 소개는 아래와 같습니다.

 

 

 

 

[ 범주형 자료 분석 (categorical data test) ]

 

(1) 적합도 검정(goodness of fit test) : 관측값들이 어떤 이론적 분포를 따르고 있는지를 검정. 한 개의 요인을 대상으로 함 

 

(2) 독립성 검정(test of independence) : 서로 다른 요인들에 의해 분할되어 있는 경우 그 요인들이 관찰값에 영향을 주고 있는지 아닌지, 요인들이 서로 연관이 있는지 없는지를 검정. 두 개의 요인을 대상으로 함.

 

(3) 동질성 검정(test of homogeneity) : 관측값들이 정해진 범주 내에서 서로 비슷하게 나타나고 있는지를 검정. 속성 A, B를 가진 부모집단(subpopulation) 각각으로부터 정해진 표본의 크기만큼 자료를 추출하는 경우에 분할표에서 부모집단의 비율이 동일한가를 검정. 두 개의 요인을 대상으로 함.  

 

 

 

 

 

 

 

독립성 검정과 동질성 검정의 이해를 돕기 위해 서로 비교를 해보자면,

 

(1) 독립성 검정이 두 변수 X와 Y가 서로 독립인지 아닌지에 대한 판단이라면, 동질성 검정은 r개의 행과 c개의 열을 가진 두 변수 X와 Y로부터 작성된 분할표의 각 열분포에서 행들이 균일한 값을 가지는지 즉, 각 열에서 행들의 동질성(homegeneity)를 검정하는 것입니다. 두 검정법의 이런 차이점은 개념상의 차이일 뿐이며 검정을 하는 방법은 카이제곱 검정을 이용해서 동일합니다.

 

(2) 독립성 검정은 하나의 모집단에서 표본을 무작위로 추출한 후 추출된 표본을 두가지 속성(변수)에 따라 분류합니다.  반면에 동질성 검정은 부모집단(subpopulation)을 먼저 설정한 후 각 부모집단으로부터 정해진 표본의 크기만큼 무작위로 추출하여 분할표에서 부모집단의 비율이 동일한가를 검정하게 됩니다. 가령, 소득수준에 따라 지지 정당이 동일한지 여부를 검정한다고 할 때, 우선 소득수준을 부모집단으로 설정하고, 각 소득수준별로 정해진 크기의 표본을 무작위로 추출하는 식입니다.

 

 

r개의 행과 c개의 열을 가진 두 변수 X와 Y로부터 작성된 r*c 분할표를 이용한 동질성 검정을 위한 데이터셋 구조는 아래와 같습니다.

 

 

[ 동질성 검정 자료 구조 (dataset for test of homogeneity) ]

 

 

 

동질성 검정을 위한 가설과 검정통계량, 검정방법은 아래와 같습니다. 검정통계량 X^2 는 귀무가설 H0가 사실일 때 근사적으로 자유도 (r-1)(c-1)인 카이제곱 분포를 따르는 것으로 알려져있습니다.

 

 

[ 동질성 검정 가설 및 검정 통계량, 검정 방법 ]

 

(1) 가설

 

  - 귀무가설 H0 : p1j = p2j = ... = prj,   j = 1, ..., c

 

  - 대립가설 H1 : H0가 아니다

 

 

(2) 검정 통계량

 

 

(3) 검정 방법

 

 

 

이제 아래의 문제를 R의 chisq.test() 함수를 이용해서 풀어보도록 하겠습니다.

 

 

(문제) 초등학교 1학년 남학생 100명과 여학생 200명을 무작위로 추출하여 TV 프로그램 선호도를 조사하였다. 유의수준 α 0.05 에서 남학생의 TV 프로그램 선호도와 여학생의 TV프로그램 선호도가 동일한지 검정하여라.

 

 

선호 TV 프로그램 

row total 

 뽀로로

짱구는 못말려 

로봇카 폴리 

 남학생

 50

30

20 

100

 여학생

 50

80

70 

200

 column total

100

110

90

300

 

 

 

 

[가설]
- H0 : 남학생과 여학생별로 TV 선호도는 동일하다
         (p1j = p2j,   j = 뽀로로, 짱구는 못말려, 로봇카 폴리)

- H1 : H0가 아니다

 

 

아래 분석에 사용한 R chisq.test() 함수는 이전 포스팅의 독립성 검정과 동일합니다.

 

 

> ##---------------------------------------------------------------------
> ## categorical data analysis - (3) test of homogeneity : chisq.test()
> ##---------------------------------------------------------------------
> 
> ##-------------
> # (a) textbook problem
> 
> ## data key-in
> # data key-in way 1 : rbind()
> row_1 <- c(50, 30, 20)
> row_2 <- c(50, 80, 70)
> 
> data_rbind <- rbind(row_1, row_2)
> data_rbind
      [,1] [,2] [,3]
row_1   50   30   20
row_2   50   80   70
> 
> 
> # data key-in way 2 : matrix()
> raw_data <- c(50, 30, 20, 50, 80, 70)
> data_matrix <- matrix(raw_data, byrow=TRUE, nrow=2)
> data_matrix
     [,1] [,2] [,3]
[1,]   50   30   20
[2,]   50   80   70
> 
> 
> # giving names to the rows and columns of the data table : dimnames()
> dimnames(data_matrix) <- list("Gender" = c("Boys", "Girls"), 
+                               "TV_Preferences" = c("Pororo", "JJangGu", "RobotCar"))
> 
> data_matrix
       TV_Preferences
Gender  Pororo JJangGu RobotCar
  Boys      50      30       20
  Girls     50      80       70
> 
> 
> ## exploratory data analysis
> # marginal distribution : addmargins()
> addmargins(data_matrix)
       TV_Preferences
Gender  Pororo JJangGu RobotCar Sum
  Boys      50      30       20 100
  Girls     50      80       70 200
  Sum      100     110       90 300
> 
> 
> # proportional distribution : prop.table()
> prop.table(data_matrix)
       TV_Preferences
Gender     Pororo   JJangGu   RobotCar
  Boys  0.1666667 0.1000000 0.06666667
  Girls 0.1666667 0.2666667 0.23333333
> 
> addmargins(prop.table(data_matrix))
       TV_Preferences
Gender     Pororo   JJangGu   RobotCar       Sum
  Boys  0.1666667 0.1000000 0.06666667 0.3333333
  Girls 0.1666667 0.2666667 0.23333333 0.6666667
  Sum   0.3333333 0.3666667 0.30000000 1.0000000
> 
> 
> # bar plot : barplot()
> barplot(t(data_matrix), beside=TRUE, legend=TRUE, 
+         ylim=c(0, 120), 
+         ylab="Observed frequencies in sample", 
+         main="TV viewing preferences by gender")
> 

 

> 
> ## chisquared test : chisq.test()
> chisq.test(data_matrix)

	Pearson's Chi-squared test

data:  data_matrix
X-squared = 19.318, df = 2, p-value = 6.384e-05

> 
> 
> # indexing statistics of chisq.test()
> chisq.test_output_2 <- chisq.test(data_matrix)
> 
> chisq.test_output_2$observed # observed frequency
       TV_Preferences
Gender  Pororo JJangGu RobotCar
  Boys      50      30       20
  Girls     50      80       70
> chisq.test_output_2$expected # expected frequeycy
       TV_Preferences
Gender    Pororo  JJangGu RobotCar
  Boys  33.33333 36.66667       30
  Girls 66.66667 73.33333       60
> chisq.test_output_2$residuals # residual between observed and expected frequecy
       TV_Preferences
Gender     Pororo    JJangGu  RobotCar
  Boys   2.886751 -1.1009638 -1.825742
  Girls -2.041241  0.7784989  1.290994
> 
> chisq.test_output_2$statistic # chi-squared statistics
X-squared 
 19.31818 
> chisq.test_output_2$parameter # degrees of freedom
df 
 2 
> chisq.test_output_2$p.value # P-value
[1] 6.384253e-05

 

 

 

위의 분석 결과를 해석해보자면, 카이제곱 통계량 값이 19.318이 나왔고 P-value가 6.384e-05 로서 유의수준 α 0.05 보다 훨씬 작기때문에 귀무가설 H0 를 기각하고 대립가설 H1을 채택하여 "남학생/여학생별 선호하는 TV프로그램은 동일하지 않다"고 판단할 수 있겠습니다.

 

많은 도움이 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^

 

Posted by R Friend R_Friend