2개의 모집단에 대한 평균을 비교, 분석하는 통계적 기법으로 t-Test를 활용하였다면, 비교하고자 하는 집단이 3개 이상일 경우에는 분산분석 (ANOVA : Analysis Of Variance)를 이용합니다. 

 

설명변수는 범주형 자료(categorical data)이어야 하며, 종속변수는 연속형 자료(continuous data) 일 때 3개 이상 집단 간 평균 비교분석에 분산분석(ANOVA) 을 사용하게 됩니다.

 

분산분석(ANOVA)은 기본적으로 분산의 개념을 이용하여 분석하는 방법으로서, 분산을 계산할 때처럼 편차의 각각의 제곱합을 해당 자유도로 나누어서 얻게 되는 값을 이용하여 수준평균들간의 차이가 존재하는 지를 판단하게 됩니다. 

 

지난번 포스팅에서 이원분산분석(two-way ANOVA) 중에서 (1) 관측값이 하나일 경우 (one observation in each cell)의 이원분산분석 에 대해서 알아보았다면, 이번 포스팅에서는 (2) 관측값이 두개 이상일 경우(more than 2 observations in each cell)의 이원분산분석에 대해서 알아보겠습니다.  단, 이때 각 집단 내 관측값의 개수는 동일합니다.

 

관측값이 두개 이상일 경우의 이원분산분석에서는 두 개의 요인 수준별 주 효과(main effect)와 더불어 두 요인이 서로 상호간에 영향을 주고 받으면서 나타나는 반응효과인 교호작용 효과(interaction effect)를 추가로 분석하는 것이 관측값이 하나인 경우와의 차이점입니다.

 

 

[ 관측값의 개수에 따른 이원분산분석의 분석 대상 ]

 

 

 

 

요인 A의 i번째 수준과 요인 B의 j번째 수준에서 측정된 k번째 관측값을 Yijk라고 할 때 데이터셋의 형태는 아래와 같습니다. 

 

 

[ 이원분산분석 - 데이터 형태 ]

(dataset for two-way ANOVA, factor A & B, factor levels a & b, observations k)]

 

 

 

 

요인 A의 i번째 수준과 요인 B의 j번째 수준에서 측정된 k번째 관측값을 Yijk는 요인 A와 B의 주 효과(main effect)와 함께 두 요인의 교호작용 효과(interaction effect)이 존재하게 되며, 편차 Yijk - Y^... 는 아래와 같이 4개의 성분합으로 나타낼 수 있습니다.

 

 

[ 편차의 4개 성분합으로의 분해 ]

 

 

 

위의 식의 양변을 제곱하여 모든 관측값에 대하여 더한 후에 정리를 하면

 

SST = SSA + SSB + SSAB + SSE 

 

의 관계식을 얻게 됩니다.

 

이를 요인과 교호작용별로 제곱합, 자유도, 평균제곱, F통계량을 알기 쉽도록 정리한 이원분산분석표는 아래와 같습니다.

 

[ 이원분산분석표 (two-way ANOVA table) ]

 

 요인

제곱합

(squared sum)

자유도

(degrees of freedom) 

평균제곱

(mean squared) 

F statistics 

 요인 A

(factor A)

 SSA

a-1

MSA

MSA/MSE

 요인 B

(factor B)

 SSB

b-1

MSB

MSB/MSE

 교호작용

(interaction effect of A, B)

 SSAB

 (a-1)(b-1)

MSAB

MSAB/MSE 

 오차

(error)

 SSE

ab(n-1)

MSE

 

 계

(total)

 SST

 nab-1

 

 

 * SST : Total Sum of Squares,  SSE : Error Sum of Squares

 

 

검정통계량으로는 F 통계량(요인A 효과 검정 = MSA/MSE, 요인B 효과 검정 = MSB/MSE, 교호작용 효과 검정 = MSAB/MSE)을 사용하며, 요인 A의 효과와 요인 B, 교호작용 효과에 대한 검정 절차 및 방법은 아래와 같습니다.

 

 

[ 관측값이 두개 이상인 경우의 이원분산분석 절차 (procedure of two-way ANOVA when there are more than 2 observations in each cell) ]

 

 

 

[ 이원분산분석 검정 방법 ]

 

 

(1) 교호작용 효과 (interaction effect)

   - 귀무가설 H0 : (αβ)ij = 0

   - 대립가설 H1 : 모든 (αβ)ij는 0이 아니다

   - 검정통계량 : F0 = MSAB/MSE

   - 판정 : P-value가 유의수준(α)보다 작으면 귀무가설 H0를 기각하고, 대립가설 H1을 채택

 

 

(2) 요인 A의 주 효과 (main effect of factor A)

   - 귀무가설 H0 : α1 = ... = αa = 0

   - 대립가설 H1 : 모든 αi 는 0이 아니다

   - 검정통계량 : F0 = MSA/MSE

   - 판정 : P-value가 유의수준(α)보다 작으면 귀무가설 H0를 기각하고, 대립가설 H1을 채택

 

 

(3) 요인 B의 주 효과 (main effect of factor B)

   - 귀무가설 H0 : α1 = ... = αb = 0

   - 대립가설 H1 : 모든 αj 는 0이 아니다

   - 검정통계량 : F0 = MSB/MSE

   - 판정 : P-value가 유의수준(α)보다 작으면 귀무가설 H0를 기각하고, 대립가설 H1을 채택

 

 

 

 

 

그럼, 아래 예제에 대해서 R의 aov() 함수를 활용해서 문제를 풀어보도록 하겠습니다.

 

 

(문제)  학급과 성별에 따른 통계학 성적이 아래와 같다고 할 때(각 cell 별 3명의 학생 성적 측정), 유의수준 α = 0.05 에서 학급과 성별 요인의 주효과와 교호작용효과에 대해 검정하시오.

 

[학급과 성별에 따른 통계학 점수표]

 

         Factor B (class)

 

Factor A (gender)

Class 1 

Class 2 

Class 3 

Mean 

남성 (M) 

 71, 77, 78

76, 77, 78 

71, 70, 69 

 75.33

 여성 (F)

 76, 76, 80

79, 78, 77

71, 71, 70 

 74.11

 Mean

76.33 

77.50 

70.33 

74.72 

 

 

 

아래에 요약통계량과 교호작용 여부를 가늠해볼 수 있는 그래프 생성 R 함수도 일부 추가하였습니다. 만약 교호작용효과 그래프(Interaction Effect Plot) 가 서로 교차를 하면 교호작용이 있다고 보면 되며, 서로 평행선을 이룬다면 교호작용이 없다고 해석하면 되겠습니다.  (교호작용도는 엑셀로 치면 "꺽은선형 차트"가 되겠습니다)

 

 

[ R aov() 함수 사용 방법 ]

 

 
> # (2) two-way ANOVA when there are more than one observation per cell (different treatment groups)
> #     (the number of observations in each cell must be equal)
> 
> gender.fac <- as.factor(c(rep("M", 9), rep("F", 9)))
> gender.fac
 [1] M M M M M M M M M F F F F F F F F F
Levels: F M
> 
> class <- c("class_1", "class_1", "class_1", "class_2", "class_2", "class_2", "class_3", "class_3", "class_3")
> class.fac <- as.factor(c(rep(class, 2)))
> class.fac
 [1] class_1 class_1 class_1 class_2 class_2 class_2 class_3 class_3 class_3 class_1 class_1
[12] class_1 class_2 class_2 class_2 class_3 class_3 class_3
Levels: class_1 class_2 class_3
> 
> score_stats <- c(71, 77, 78, 76, 77, 78, 71, 70, 69, 80, 76, 80, 79, 78, 77, 73, 71, 70)
> 
> 
> # summary statistics
> score.df <- data.frame(gender.fac, class.fac, score_stats)
> score.df
   gender.fac class.fac score_stats
1           M   class_1          71
2           M   class_1          77
3           M   class_1          78
4           M   class_2          76
5           M   class_2          77
6           M   class_2          78
7           M   class_3          71
8           M   class_3          70
9           M   class_3          69
10          F   class_1          80
11          F   class_1          76
12          F   class_1          80
13          F   class_2          79
14          F   class_2          78
15          F   class_2          77
16          F   class_3          73
17          F   class_3          71
18          F   class_3          70
> 
> install.packages("doBy")

Installing package into ‘C:/Users/user/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.2/doBy_4.5-13.zip'
Content type 'application/zip' length 3431466 bytes (3.3 MB)
downloaded 3.3 MB

package ‘doBy’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\user\AppData\Local\Temp\RtmpWOKfji\downloaded_packages

 

 

> library(doBy)
> summaryBy(score_stats ~ gender.fac, data=score.df, FUN = c(mean, sd, min, max))
  gender.fac score_stats.mean score_stats.sd score_stats.min score_stats.max
1          F         76.00000       3.807887              70              80
2          M         74.11111       3.756476              69              78
> summaryBy(score_stats ~ class.fac, data=score.df, FUN = c(mean, sd, min, max))
  class.fac score_stats.mean score_stats.sd score_stats.min score_stats.max
1   class_1         77.00000       3.346640              71              80
2   class_2         77.50000       1.048809              76              79
3   class_3         70.66667       1.366260              69              73
> summary(score_stats, data=score.df)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  69.00   71.00   76.50   75.06   78.00   80.00 
> 
 
> # box plot and interaction plot
> par(mfrow = c(2, 2))
> plot(score_stats ~ gender.fac, main="box plot by gender")
> plot(score_stats ~ class.fac, main="box plot by class")
> interaction.plot(gender.fac, class.fac, score_stats, bty='l', main="interaction effect plot")
> interaction.plot(class.fac, gender.fac, score_stats, bty='l', main="interaction effect plot")
> 

 


> 
> # two-way ANOVA : aov()
> # replicates, interaction effect
> aov_model = aov(score_stats ~ gender.fac + class.fac + gender.fac:class.fac)
> summary(aov_model)
                     Df Sum Sq Mean Sq F value   Pr(>F)    
gender.fac            1  16.06   16.06   3.853 0.073249 .  
class.fac             2 174.11   87.06  20.893 0.000123 ***
gender.fac:class.fac  2   4.78    2.39   0.573 0.578354    
Residuals            12  50.00    4.17                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

 

 

R 분석 결과 중에서 제일 아래에 있는 이원분산분석표를 가지고 해석을 해보겠습니다.  먼저 (1) 교호작용이 있는지를 살펴보면, 성별과 학급별에 따른 교호작용효과에 대한 P-value가 0.578354로서 유의수준 α 0.05보다 크므로 귀무가설 H0를 채택하여 "성별과 학급의 교호작용에 의한 효과는 없다"고 판단할 수 있습니다.

 

두번째로 (2) 성별 요인(factor A levels of "M", "F")에 대한 P-value는 0.073249로서 유의수준 α 0.05 보다 크므로 귀무가설 H0를 채택하게 되어 "성별에 따른 통계학 성적 차이는 없다"고 판단할 수 있습니다.

 

세번째로 (3) 학급 요인(factor B levels of "class_1", "class_2", "class_3")에 따른 P-value는 0.000123으로서 유의수준 α 0.05보다 작으므로 귀무가설 H0를 기각하고 대립가설 H1을 채택하여 "학급에 따른 통계학 성적의 차이가 있다"고 판단할 수 있습니다.

 

 

학급 요인에 대해서는 유의수준 α 0.05에서 차이가 있다고 나왔으므로, 어떤 학급 간에 차이가 있는지를 알아보고 싶다면, 사후 쌍을 이룬 다중 비교 분석(post-hoc pair-wise multiple comparison)을 하면 됩니다.  이에 대한 자세한 설명은 아래의 링크를 참조하시기 바랍니다.

  • 쌍을 이룬 집단 간 평균 다중비교 (multiple comparison)

Tukey's HSD(honestly significant difference) test 참조

Duncan's LSR(least significant range) test 참고

 

 

  • 대비 (contrast)

샤페 검정법 (scheffe test) 참고

 

 

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

 

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

 

Posted by R Friend R_Friend

2개의 모집단에 대한 평균을 비교, 분석하는 통계적 기법으로 t-Test를 활용하였다면, 비교하고자 하는 집단이 3개 이상일 경우에는 분산분석 (ANOVA : Analysis Of Variance)를 이용합니다. 

 

설명변수는 범주형 자료(categorical data)이어야 하며, 종속변수는 연속형 자료(continuous data) 일 때 3개 이상 집단 간 평균 비교분석에 분산분석(ANOVA) 을 사용하게 됩니다.

 

분산분석(ANOVA)은 기본적으로 분산의 개념을 이용하여 분석하는 방법으로서, 분산을 계산할 때처럼 편차의 각각의 제곱합을 해당 자유도로 나누어서 얻게 되는 값을 이용하여 수준평균들간의 차이가 존재하는 지를 판단하게 됩니다.  

 

이전 포스팅에서 '일원분산분석(one-way ANOVA)'에 대해서 알아봤는데요, 이번 포스팅에서는 '이원분산분석(two-way ANOVA)'에 대해서 소개하도록 하겠습니다. 

 

 

[ 분산분석(ANOVA)의 분류 ]

 

 

 

일원분산분석(one-way ANOVA)이 1개의 요인(factor) 내의 요인 수준(factor levels)들이 각각의 집단(group)/처리(treatment)이 되어서 이들 집단/처리 간의 평균 차이를 비교하는 것이라면, 이원분산분석(two-way ANOVA)은 2개의 요인(2 factors) 내의 요인 수준(factor levels) 간의 조합(combination)들 각 각을 개별 집단/처리(groups, treamments)로 간주하고 이들간에 평균을 비교하게 됩니다.

 

가령, 요인(factor) A '온도'가 3개의 요인 수준(factor levels, 온도 상, 중, 하)을 가지고 요인(factor) B '압력'이 2개의 요인 수준(factor levels, 압력 강, 약)을 가진다고 할 경우, 총 그룹/처리의 수는 (A.온도) 3 x (B.압력) 2 = 6 개가 됩니다.

 

이원분산분석은 (1) 관측값이 하나일 경우와 (2) 관측값이 2개 이상일 경우 (반복 실험을 할 경우)로 나누어볼 수 있습니다.  비용이나 시간 여건이 허락한다면 분석의 신뢰도를 높이기 위해서는 반복 실험 혹은 관찰을 통해 관측값을 2개 이상 확보하는 것이 좋겠습니다.

 

우선 이번 포스팅에서는 (1) 관측값이 하나일 경우의 이원분산분석(two-way ANOVA when there is one observation in each cell (different treatment groups)) 에 대해서 소개하고, 다음번 포스팅에서 (2) 관측값이 2개 이상일 경우(반복 실험을 할 경우)의 이원분산분석에 대해서 순차적으로 소개하도록 하겠습니다.

 

이원분산분석을 위한 데이터셋의 구조는 아래와 같습니다.

 

 

[ 이원분산분석을 위한 데이터셋 구조 (Dataset for two-way ANOVA) ]

 

 

 

요인 A가 i=1, 2, ..., a 개의 요인 수준(factor levels)을 가지고, 요인 B가 j=1, 2, ..., b 개의 요인 수준(factor levels)을 가진다고 했을 때, A와 B라는 2개의 요인 처리(treatment) 내의 관측값이 하나일 경우의 이원분산분석모형은 편차 (Yij - Y..bar)를 다음과 같이 3개의 성분합으로 나타낼 수 있습니다. 


 

이 식의 양변을 제곱하여 모든 관측값에 대해 더하면 다음과 같은 식을 얻게 됩니다.

 

 

 

관측값이 하나일 경우의 이원분산분석을 실시할 경우 통계패키지에서는 아래와 같은 형태로 정리된 이원분산분석표를 제시하여 줍니다.

 

 

 [ 이원분산분석표 (two-way ANOVA table) ]

 

 요인

제곱합

(squared sum)

자유도

(degrees of freedom) 

평균제곱

(mean squared) 

F statistics 

 요인 A

 SSA

a-1

MSA

MSA/MSE

 요인 B

 SSB

b-1

MSB

MSB/MSE

 오차

 SSE

(a-1)(b-1) 

MSE 

 

 계

 SST

 ab-1

 

 

 

 

검정통계량으로는 F 통계량(요인A 효과 검정 = MSA/MSE, 요인B 효과 검정 = MSB/MSE)을 사용하며, 요인 A의 효과와 요인 B의 효과에 대한 검정 방법은 아래와 같습니다.

 

 

(1) 요인 A의 효과

   - 귀무가설 H0 : α1 = ... = αa = 0

   - 대립가설 H1 : 모든 αi 는 0이 아니다

   - 검정통계량 : F0 = MSA/MSE

   - 판정 : P-value가 유의수준(α)보다 작으면 귀무가설 H0를 기각하고, 대립가설 H1을 채택

 

 

(2) 요인 B의 효과

   - 귀무가설 H0 : α1 = ... = αb = 0

   - 대립가설 H1 : 모든 αj 는 0이 아니다

   - 검정통계량 : F0 = MSB/MSE

   - 판정 : P-value가 유의수준(α)보다 작으면 귀무가설 H0를 기각하고, 대립가설 H1을 채택

 

 

 

그럼, 아래 예제에 대해서 R의 aov() 함수를 활용해서 문제를 풀어보도록 하겠습니다.

(예제는 'Excel을 이용한 실용통계분석', 배현웅 저, 교우사, 에서 인용함)

 

 

(문제) K와 M 두 보험회사의 차종 (1,000cc 이하, 1,500cc, 1,800cc)에 따른 분기별 보험료(단위: 천원)가 아래 표와 같다고 할 때 유의수준 α=0.05 로 차종(요인 A)과 회사(요인 B)의 효과에 대한 검정을 하여라.

 

[ 보험회사와 차종에 따른 보험료 ]

 

              보험회사

 차종

K 회사 

M 회사

평균 

1,000 cc 이하 

140

100

120

 1,500 cc

 210

180

 195

 1,800 cc

 220

200

 210

 평균

 190

160

 175

 

 

 

> ##--------------------------------------------------------------
> ## two-way ANOVA : aov()
> ##--------------------------------------------------------------
> 
> # (1) two-way ANOVA when there is one observation in each cell (different treatment groups)
> 
> car_type <- rep(c('1000', '1500', '1800'), 2)
> car_type <- as.factor(car_type) # transformation into factor
> car_type
[1] 1000 1500 1800 1000 1500 1800
Levels: 1000 1500 1800
> 
> insurance <- as.factor(c(rep('K', 3), rep('M', 3))) # transforamtion into factor
> insurance
[1] K K K M M M
Levels: K M
> 
> y <- c(140, 210, 220, 100, 180, 200)
> 
> 
> # two way ANOVA
> two_way_aov_model_1 <- aov(y ~ car_type + insurance) # no replicates, no interaction
> 
> # statistics of two-way ANOVA
> summary(two_way_aov_model_1)
            Df Sum Sq Mean Sq F value Pr(>F)  
car_type     2   9300    4650      93 0.0106 *
insurance    1   1350    1350      27 0.0351 *
Residuals    2    100      50                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

 

위의 분석결과를 해석해보면, 먼저 요인A 차종에 따른 분산분석 결과 P-value가 0.0106으로서 유의수준(significance level) 0.05보다 작으므로 우리는 "차종에 따라서 보험료에 차이가 있다"는 대립가설(H1)을 채택할 수 있게 되었습니다.

 

또한, 요인B 보험회사에 따른 분산분석 결과 P-value가 0.0351로서 유의수준(significance level, α) 0.05보다 역시 작으므로 "보험회사에 따라서 보험료에 차이가 있다"는 대립가설(H1)을 채택할 수 있겠습니다.

 

다음번 포스팅에서는 (2) 관측값이 2개 이상일 경우(반복 실험일 경우)의 이원분산분석에 대해서 알아보겠습니다.

 

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

 

 

일원분산분석 및 사후분석(post-hoc multiple comparison)에 대해서는 아래 링크를 참조하세요.

  • 1개 요인(factor)에 대한 3 집단 이상 집단의 평균 비교 (ANOVA)

one-way ANOVA

 

 

  • 쌍을 이룬 집단 간 평균 다중비교 (multiple comparison)

Tukey's HSD(honestly significant difference) test 참조

Duncan's LSR(least significant range) test 참고

 

  • 대비 (contrast)

샤페 검정법 (scheffe test) 참고

 

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

 

 

Posted by R Friend R_Friend