포스트

분산분석

분산분석

〈빅데이터의과학적탐구〉 수업 노트


분산분석은 여러 집단 간의 평균 차이를 검정하는 통계적 방법이다. 집단 내의 분산과 집단의 평균의 차이에 의해 생긴, 집단 간 분산을 비교하여 생성한 $F$-분포를 이용해 검정한다.

분산분석은 크게 분석 대상의 요인의 수에 따라 구분될 수 있다. 가장 널리 사용되는 것은 일원 배치법(one-way layout)과 이원 배치법(two-way layout)이다.

일원 배치법과 일원배치 분산분석

  • 3개 이상 집단 간 평균 차이 비교
  • 독립변수 1개(명목 척도, 3개 이상 집단), 종속변수 1개(연속 척도)
  • 귀무가설 $H_0$: 모든 집단의 평균은 같다.
  • 대립가설 $H_a$: 적어도 하나의 집단의 평균은 다르다.

일원 배치법은 한 종류의 변수가 끼치는 영향을 조사할 때 사용한다. 2개의 수준에 대해서는 사실상 t-검정을 사용한 것과 동일하지만, 3개 이상의 그룹 간에 대해서는 분산분석(ANOVA)를 사용한다. 분석을 수행하려면 각 집단의 데이터는 독립적이어야 하고, 정규분포를 따라야 하며, 집단 간 분산이 동일해야 한다.

일원배치 분산분석에서는 3개 이상 집단의 명목 척도를 갖는 1개의 독립변수와, 1개의 종속변수를 요구한다. 분석의 귀무가설은 “모든 집단의 평균은 같다”, “$Y$는 $X$에 독립이다”는 것으로, 유의수준을 벗어나면 귀무가설을 기각한다.

이원 배치법과 이원배치 분산분석

이원 배치법은 두 종류의 변수가 끼치는 영향을 조사할 때 사용한다. 인자가 2개이므로, 두 인자가 상호작용하는지도 판단할 수 있다.

두 인자가 상호작용하는 것으로 판단하면 반복있는 이원 배치법을, 상호작용하지 않는 것으로 판단하면 반복없는 이원 배치법을 사용한다.

인자가 상호작용하는지에 관해서도 귀무가설을 설정하고 타당성을 검증할 수 있다. 실제 분석시에는 두 인자가 상호작용하는 것으로 가정, 검정을 시행한다. 시행 결과로부터 귀무가설 “두 인자는 상호작용하지 않는다”를 기각할 수 없다면, 상호작용이 없는 것으로 판단, 반복없는 이원 배치법을 사용하여 다시 분석을 진행한다.

분산분석의 수행

다음과 같이 구성된 90열의 데이터가 있다. 이 데이터를 이용해 일원배치 분산분석과 이원배치 분산분석을 실시한다.

항목
성별이진; m, f
생년월일datetime; $[1929\text{년}~1971\text{년}]$ 범위
피교육기간자연수; $[8, 21]$ 범위
직급범주형; 1=사원, 2=관리자, 3=임원
현재급여자연수; $[15750, 135000]$ 범위
최초급여자연수; $[9000, 79980]$ 범위
근무월수자연수; $[63, 98]$ 범위
경력자연수; $[0, 476]$ 범위
소수민족이진; 0, 1
번호성별생년월일피교육직급현재급여최초급여근무월수경력소수민족
1m1952-02-031535700027000981440
2m1958-05-23161402001875098360
3f1929-07-261212145012000983810
4f1947-04-15812190013200981900

head -5 Employment.csv 명령으로 확인한 데이터

분산분석을 실시하는 데 있어서, 분석하고자 하는 요인의 구체적인 값이 연속적이라면, 대상을 집단으로 설정하기 위해 구간을 설정하여 범주형으로 변환한다. 이 과정에서는 피교육기간, 경력, 근무월수에 대해서 각각 다음과 같이 구간을 설정하여 범주형으로 변환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
df$피교육기간분류 <- cut(
  df$피교육, breaks=c(8, 12, 16, Inf),
  labels=c("고졸이하", "대졸", "대학원졸"),
  right=FALSE
)

df$경력분류 <- cut(
  df$경력, breaks=c(0, 120, 240, 360, Inf),
  labels=c("10년차 미만", "20년차 미만", "30년차 미만", "30년차 이상"),
  right=FALSE
)

df$근무월수분류 <- cut(
  df$근무월수, breaks=c(60, 72, 84, Inf),
  labels=c("5년차 이상", "6년차 이상", "7년차 이상"),
  right=FALSE
)
범위 (연수)분류
$8 \sim 12$고졸이하
$13 \sim 16$대졸
$17 \sim$대학원졸
범위 (개월)분류
$0 \sim 119$10년차 미만
$120 \sim 239$20년차 미만
$240 \sim 359$30년차 미만
$360 \sim$30년차 이상
범위 (개월)분류
$60 \sim 71$5년차 이상
$72 \sim 83$6년차 이상
$84 \sim$7년차 이상

피교육기간은 최초급여에 영향을 미친다

\[X=\text{피교육기간} \Rightarrow Y=\text{최초급여}\]

이 문장은 1개의 독립변수와 1개의 종속변수로 구성되어 있으므로, 일원배치 분산분석을 실시하여 타당성을 검정할 수 있다.

귀무가설은 “피교육기간이 최초급여에 영향을 미치지 않는다”($Y$ 는 $X$에 독립이다)이다. 유의수준을 벗어나면 귀무가설을 기각한다.


1
summary(aov(df$최초급여 ~ df$피교육기간))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의성
피교육기간21.594e+107.968e+09280.8< 2e-16***
Residuals (잔차)4711.337e+102.838e+07   

피교육기간 요인의 F 값이 280.8, 잔차의 평균제곱의 약 280배를 상회하고 있다. 즉 잔차에 의한 노이즈로는 이 관계를 설명할 수 없는데, 유의확률이 $2 \times 10^{-16}$ 로 95% 신뢰수준에서 귀무가설을 기각($< 0.05$)할 수 있다. 따라서 피교육기간이 최초급여에 영향을 미친다고 할 수 있다.

경력이 현재급여에 영향을 미친다

\[X=\text{경력} \Rightarrow Y=\text{현재급여}\]

이 문장은 1개의 독립변수와 1개의 종속변수로 구성되어 있으므로, 일원배치 분산분석을 실시하여 타당성을 검정할 수 있다.

귀무가설은 “경력이 현재급여에 영향을 미치지 않는다”($Y$ 는 $X$에 독립이다)이다. 유의수준을 벗어나면 귀무가설을 기각한다.


1
summary(aov(df$현재급여 ~ df$경력))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의성
경력분류32.055e+09684,845,8762.3690.07.
Residuals (잔차)4701.359e+11289,067,995   

경력분류 요인의 F 값이 2.369, 잔차의 평균제곱의 약 2.37배를 상회하고 있다. 그러나 유의확률이 0.07로 95% 신뢰수준에서 귀무가설을 기각($< 0.05$)할 수 없다. 따라서 경력이 현재급여에 영향을 미친다고 할 수 없다. 경력은 현재급여에 독립이다.

직급과 근무기간은 급여 상승에 영향을 미친다

\[X=\text{직급} \times \text{근무월수} \Rightarrow Y= \Delta \text{급여}\]

이 문장은 2개의 독립변수와 1개의 종속변수로 구성되어 있으므로, 이원배치 분산분석을 실시하여 타당성을 검정할 수 있다.

우선 독립변수가 상호작용하고 있음을 가정하고 검정을 시행한다. 귀무가설은 “직급과 근무기간은 상호작용 없이 급여 상승에 영향을 미치지 않는다”($Y$ 는 $X$에 독립이다)이다. 유의수준을 벗어나면 귀무가설을 기각한다.


1
2
df$급여변화량 <- df$현재급여 - df$최초급여
summary(aov(df$급여변화량 ~ df$근무월수분류*df$직급))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의성
근무월수분류21.002e+095.008e+088.8830.000164***
직종22.725e+101.362e+10241.617< 2e-16***
상호작용
근무월수:직종
48.525e+082.131e+083.7800.004889**
Residuals (잔차)4652.622e+105.638e+07   

상호작용의 F 값이 3.780, 잔차의 평균제곱의 약 3.78배를 상회하고 있다. 유의확률이 0.004889로 95% 신뢰수준에서 귀무가설을 기각($< 0.05$)한다. 따라서 직급과 근무기간은 상호작용하여 급여 상승에 영향을 미친다고 할 수 있다. 급여 상승은 직급과 근무기간의 상호작용에 의존한다.

경력과 근무기간은 현재급여에 영향을 미친다

\[X=\text{경력} \times \text{근무월수} \Rightarrow Y= \text{현재급여}\]

이 문장은 2개의 독립변수와 1개의 종속변수로 구성되어 있으므로, 이원배치 분산분석을 실시하여 타당성을 검정할 수 있다.

우선 독립변수가 상호작용하고 있음을 가정하고 검정을 시행한다. 귀무가설은 “경력과 근무기간은 상호작용 없이 현재급여에 영향을 미치지 않는다”($Y$ 는 $X$에 독립이다)이다. 유의수준을 벗어나면 귀무가설을 기각한다.


1
summary(aov(df$현재급여 ~ df$경력*df$근무월수분류))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의성
경력분류32.055e+09684,845,8762.3790.0691.
근무월수분류27.666e+08383,299,8061.3320.2650 
상호작용
경력분류:근무월수분류
62.118e+09352,944,2411.2260.2913 
Residuals (잔차)4621.330e+11287,830,504   

상호작용의 F 값이 1.226, 잔차의 평균제곱의 약 1.23배밖에 되지 않는다. 유의확률이 0.2913로 95% 신뢰수준에서 귀무가설을 기각($< 0.05$)할 수 없다. 따라서 경력과 근무기간은 상호작용하지 않는다.

이어서 상호작용 항을 제거, 주효과만을 고려하여 재검정한다. 귀무가설은 “직급과 근무기간은 급여 상승에 영향을 미치지 않는다”($Y$ 는 $X$에 독립이다)이다. 유의수준을 벗어나면 귀무가설을 기각한다.


1
summary(aov(df$현재급여 ~ df$경력+df$근무월수분류))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의성
경력분류32.055e+09684,845,8762.3720.0697.
근무월수분류27.666e+08383,299,8061.3280.2660 
Residuals (잔차)4681.351e+11288,665,295   

경력분류의 F 값이 2.372, 잔차의 평균제곱의 약 2.37배 수준으로 보이고 있다. 유의확률이 0.0697로 95% 신뢰수준에서 귀무가설을 기각($< 0.05$)할 수 없다. 따라서 경력과 근무기간은 현재급여에 영향을 미친다고 할 수 없다. 현재급여는 경력과 근무기간에 독립이다.

성별과 인종이 현재급여에 영향을 미친다

\[X=\text{성별} \times \text{소수민족} \Rightarrow Y= \text{현재급여}\]

이 문장은 2개의 독립변수와 1개의 종속변수로 구성되어 있으므로, 이원배치 분산분석을 실시하여 타당성을 검정할 수 있다.

우선 독립변수가 상호작용하고 있음을 가정하고 검정을 시행한다. 귀무가설은 “성별과 인종은 상호작용 없이 현재급여에 영향을 미치지 않는다”($Y$ 는 $X$에 독립이다)이다. 유의수준을 벗어나면 귀무가설을 기각한다.


1
summary(aov(df$현재급여 ~ df$성별*df$소수민족))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의성
성별12.792e+102.792e+10128.182< 2e-16***
소수민족16.198e+096.198e+0928.4561.49e-07***
상호작용
성별:소수민족
11.432e+091.432e+096.5760.0106*
Residuals (잔차)4701.024e+112.178e+08   

상호작용의 F 값이 6.576, 잔차의 평균제곱의 약 6.58배를 상회하고 있다. 유의확률이 0.0106로 95% 신뢰수준에서 귀무가설을 기각($< 0.05$)할 수 있다. 따라서 성별과 인종은 상호작용하여 현재급여에 영향을 미친다고 할 수 있다. 현재급여는 성별과 인종의 상호작용에 의존한다.

반복측정 분산분석

동일한 대상을 여러 시점 혹은 조건에서 반복해서 측정하여, 종속변수에 대한 독립변수의 효과를 분석할 수도 있다.

귀무가설 $H_0$ 은 $Y$ 는 $X$ 로부터 독립, 모든 측정 시점에서의 평균이 동일하다는 것이다.


다음과 같이 특정한 대상들의 1, 2, 3월의 쇼핑액을 측정한 데이터가 있다.

1
2
3
4
5
6
7
8
table <- as.data.frame(
  rbind(
    cbind(df$쇼핑1월, 1),
    cbind(df$쇼핑2월, 2),
    cbind(df$쇼핑3월, 3)
  )
)
colnames(table) <- c("쇼핑액","월")
쇼핑액 numericint
76.81
44.41
66.01
62.41


이 데이터에 대해 반복측정 분산분석을 실시하면 다음과 같다.

1
summary(aov(쇼핑액 ~ , table))
요인
Source
자유도
Df
제곱합
Sum Sq
평균제곱
Mean Sq
F 값
F value
유의확률
Pr(>F)
유의수준
Signif.
112,80212,80237.772.87e-09***
Residuals (잔차)26890,841339   

월 변수의 유의확률 $p$ 값은 $2.87 \times 10^{-09}$로 유의수준 0.001보다 훨씬 작다. 따라서 귀무가설을 기각하고, 쇼핑액이 월에 따라 유의미하게 다르다고 결론지을 수 있다.