분산분석
〈빅데이터의과학적탐구〉 수업 노트
분산분석은 여러 집단 간의 평균 차이를 검정하는 통계적 방법이다. 집단 내의 분산과 집단의 평균의 차이에 의해 생긴, 집단 간 분산을 비교하여 생성한 $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 |
| 번호 | 성별 | 생년월일 | 피교육 | 직급 | 현재급여 | 최초급여 | 근무월수 | 경력 | 소수민족 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | m | 1952-02-03 | 15 | 3 | 57000 | 27000 | 98 | 144 | 0 |
| 2 | m | 1958-05-23 | 16 | 1 | 40200 | 18750 | 98 | 36 | 0 |
| 3 | f | 1929-07-26 | 12 | 1 | 21450 | 12000 | 98 | 381 | 0 |
| 4 | f | 1947-04-15 | 8 | 1 | 21900 | 13200 | 98 | 190 | 0 |
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) | 유의성 |
|---|---|---|---|---|---|---|
피교육기간 | 2 | 1.594e+10 | 7.968e+09 | 280.8 | < 2e-16 | *** |
Residuals (잔차) | 471 | 1.337e+10 | 2.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) | 유의성 |
|---|---|---|---|---|---|---|
경력분류 | 3 | 2.055e+09 | 684,845,876 | 2.369 | 0.07 | . |
Residuals (잔차) | 470 | 1.359e+11 | 289,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) | 유의성 |
|---|---|---|---|---|---|---|
근무월수분류 | 2 | 1.002e+09 | 5.008e+08 | 8.883 | 0.000164 | *** |
직종 | 2 | 2.725e+10 | 1.362e+10 | 241.617 | < 2e-16 | *** |
상호작용 근무월수:직종 | 4 | 8.525e+08 | 2.131e+08 | 3.780 | 0.004889 | ** |
Residuals (잔차) | 465 | 2.622e+10 | 5.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) | 유의성 |
|---|---|---|---|---|---|---|
경력분류 | 3 | 2.055e+09 | 684,845,876 | 2.379 | 0.0691 | . |
근무월수분류 | 2 | 7.666e+08 | 383,299,806 | 1.332 | 0.2650 | |
상호작용 경력분류:근무월수분류 | 6 | 2.118e+09 | 352,944,241 | 1.226 | 0.2913 | |
Residuals (잔차) | 462 | 1.330e+11 | 287,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) | 유의성 |
|---|---|---|---|---|---|---|
경력분류 | 3 | 2.055e+09 | 684,845,876 | 2.372 | 0.0697 | . |
근무월수분류 | 2 | 7.666e+08 | 383,299,806 | 1.328 | 0.2660 | |
Residuals (잔차) | 468 | 1.351e+11 | 288,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) | 유의성 |
|---|---|---|---|---|---|---|
성별 | 1 | 2.792e+10 | 2.792e+10 | 128.182 | < 2e-16 | *** |
소수민족 | 1 | 6.198e+09 | 6.198e+09 | 28.456 | 1.49e-07 | *** |
상호작용 성별:소수민족 | 1 | 1.432e+09 | 1.432e+09 | 6.576 | 0.0106 | * |
Residuals (잔차) | 470 | 1.024e+11 | 2.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("쇼핑액","월")
쇼핑액 numeric | 월 int |
|---|---|
| 76.8 | 1 |
| 44.4 | 1 |
| 66.0 | 1 |
| 62.4 | 1 |
| … | … |
이 데이터에 대해 반복측정 분산분석을 실시하면 다음과 같다.
1
summary(aov(쇼핑액 ~ 월, table))
요인 Source | 자유도 Df | 제곱합 Sum Sq | 평균제곱 Mean Sq | F 값 F value | 유의확률 Pr(>F) | 유의수준 Signif. |
|---|---|---|---|---|---|---|
| 월 | 1 | 12,802 | 12,802 | 37.77 | 2.87e-09 | *** |
Residuals (잔차) | 268 | 90,841 | 339 |
월 변수의 유의확률 $p$ 값은 $2.87 \times 10^{-09}$로 유의수준 0.001보다 훨씬 작다. 따라서 귀무가설을 기각하고, 쇼핑액이 월에 따라 유의미하게 다르다고 결론지을 수 있다.