* 본 블로그 포스트에서 사용된 표, 이미지 및 기타 관련 자료는 "PROBABILITY AND STATISTICAL INFERENCE 9th Edition"에서 발췌한 것입니다. 이 자료들은 내용을 요약하고 이해를 돕기 위한 참고용으로 제공됩니다. 또한, 해석 과정에서 일부 오류가 있을 수 있으니 원본을 참고하여 확인하시기 바랍니다
1. 이론정리
1) 이원배치 분산분석 (Two-Way ANOVA)
(1) 개념
- 이원배치 분산분석 은 두 개의 독립변수(요인, Factor)가 종속변수에 미치는 영향을 분석하는 방법이다.
- 각 요인은 여러 수준(Level)을 가질 수 있으며, 요인 간 상호작용(Interaction Effect)을 분석하는 것이 목적이다.
- 실험에서는 두 개의 요인이 조합된 모든 처리(Combination)에 대한 데이터를 수집하고, 요인별 및 상호작용 효과를 분석한다.
(2) 가정
- 정규성: 종속변수는 정규 분포를 따른다.
- 등분산성: 각 처리 조합에서 종속변수의 분산이 동일해야 한다.
- 독립성: 각 관측치는 독립적이다.
(3) 모형
- 일반적인 이원배치 분산분석 모델은 다음과 같다.
\[
X_{ijk} = \mu + \alpha_i + \beta_j + \gamma_{ij} + \epsilon_{ijk}
\]
여기서,
- \( \mu \): 전체 평균
- \( \alpha_i \): 요인 A의 효과 (행 효과)
- \( \beta_j \): 요인 B의 효과 (열 효과)
- \( \gamma_{ij} \): 요인 A와 B의 상호작용 효과
- \( \epsilon_{ijk} \): 오차항
2) 가설 검정
(1) 요인 A의 효과 검정 (Row Effect, Factor A)
- 귀무가설:
\[
H_A: \alpha_1 = \alpha_2 = \cdots = \alpha_a = 0
\]
- 대립가설: \( H_A' \) 중 적어도 하나는 0이 아니다.
- 검정통계량:
\[
F_A = \frac{MS(A)}{MS(E)}
\]
- 자유도: \( (a-1), ab(c-1) \)
(2) 요인 B의 효과 검정 (Column Effect, Factor B)
- 귀무가설:
\[
H_B: \beta_1 = \beta_2 = \cdots = \beta_b = 0
\]
- 대립가설: \( H_B' \) 중 적어도 하나는 0이 아니다.
- 검정통계량:
\[
F_B = \frac{MS(B)}{MS(E)}
\]
- 자유도: \( (b-1), ab(c-1) \)
(3) 상호작용 효과 검정 (Interaction Effect, AB)
- 귀무가설:
\[
H_{AB}: \gamma_{ij} = 0
\]
- 대립가설: \( H_{AB}' \) 중 적어도 하나의 \( \gamma_{ij} \)가 0이 아니다.
- 검정통계량:
\[
F_{AB} = \frac{MS(AB)}{MS(E)}
\]
- 자유도: \( (a-1)(b-1), ab(c-1) \)
3) 분산의 분해 및 자유도
(1) 총제곱합 (Total Sum of Squares, SS(T))
\[
SS(T) = \sum_{i=1}^{a} \sum_{j=1}^{b} \sum_{k=1}^{c} (X_{ijk} - X_{\cdot\cdot\cdot})^2
\]
- 자유도: \( abc - 1 \)
(2) 요인 A의 제곱합 (SS(A))
\[
SS(A) = bc \sum_{i=1}^{a} (X_{i\cdot\cdot} - X_{\cdot\cdot\cdot})^2
\]
- 자유도: \( a - 1 \)
(3) 요인 B의 제곱합 (SS(B))
\[
SS(B) = ac \sum_{j=1}^{b} (X_{\cdot j\cdot} - X_{\cdot\cdot\cdot})^2
\]
- 자유도: \( b - 1 \)
(4) 상호작용 효과의 제곱합 (SS(AB))
\[
SS(AB) = c \sum_{i=1}^{a} \sum_{j=1}^{b} (X_{ij\cdot} - X_{i\cdot\cdot} - X_{\cdot j\cdot} + X_{\cdot\cdot\cdot})^2
\]
- 자유도: \( (a-1)(b-1) \)
(5) 오차 제곱합 (SS(E))
\[
SS(E) = \sum_{i=1}^{a} \sum_{j=1}^{b} \sum_{k=1}^{c} (X_{ijk} - X_{ij\cdot})^2
\]
- 자유도: \( ab(c-1) \)
(6) 자유도 검증
- 전체 자유도:
\[
ab(c-1) + (a-1) + (b-1) + (a-1)(b-1) = abc - 1
\]
- 각 항의 자유도 합이 전체 자유도와 일치하면 독립성을 가정할 수 있음.
2. 정리 9.4-1 (Theorem 9.4-1)
1) 정리 내용
- \( SS(A), SS(B), SS(AB), SS(E) \) 가 서로 독립적인 카이제곱 분포를 따른다.
2) 증명
(1) 총제곱합 분해
- 전체 변동(총제곱합, SS(T))은 요인 A, 요인 B, 상호작용, 그리고 오차 변동으로 분해할 수 있다.
\[
SS(T) = SS(A) + SS(B) + SS(AB) + SS(E)
\]
- 각 항은 다음과 같이 정의된다.
\[
SS(A) = bc \sum_{i=1}^{a} (X_{i\cdot\cdot} - X_{\cdot\cdot\cdot})^2
\]
\[
SS(B) = ac \sum_{j=1}^{b} (X_{\cdot j\cdot} - X_{\cdot\cdot\cdot})^2
\]
\[
SS(AB) = c \sum_{i=1}^{a} \sum_{j=1}^{b} (X_{ij\cdot} - X_{i\cdot\cdot} - X_{\cdot j\cdot} + X_{\cdot\cdot\cdot})^2
\]
\[
SS(E) = \sum_{i=1}^{a} \sum_{j=1}^{b} \sum_{k=1}^{c} (X_{ijk} - X_{ij\cdot})^2
\]
(2) 자유도 검증
- 전체 자유도는 \( abc-1 \) 이며, 각 항의 자유도를 합하면 다음과 같다.
\[
(a-1) + (b-1) + (a-1)(b-1) + ab(c-1) = abc-1
\]
- 따라서, \( SS(A), SS(B), SS(AB), SS(E) \) 는 서로 독립적인 분포를 따른다.
(3) 카이제곱 분포 성질 이용
(a) 정규성을 가정한 이차형식
- 이원 분산 분석에서는 각 관측값 \( X_{ijk} \)가 정규 분포를 따른다고 가정한다.
\[
X_{ijk} \sim N(\mu_{ij}, \sigma^2)
\]
여기서, \( \mu_{ij} \)는 해당 처리 조합의 평균이고, \( \sigma^2 \)는 공통 분산이다.
- 정규분포를 따르는 변량들의 이차형식(quadratic form)은 카이제곱 분포를 따르는 성질이 있다.
(b) 각 제곱합의 카이제곱 분포 성질
- 분산 분석에서 사용되는 총제곱합(SS)들은 정규분포를 따르는 변수들의 제곱합 형태로 표현될 수 있다.
- 이를 통해 각 제곱합이 카이제곱 분포를 따른다는 것을 보일 수 있다.
(c) 요인 A의 제곱합 SS(A)
- 요인 A에 대한 효과를 반영하는 제곱합은 다음과 같이 정의된다.
\[
SS(A) = bc \sum_{i=1}^{a} (X_{i\cdot\cdot} - X_{\cdot\cdot\cdot})^2
\]
- 여기서, 각 \( X_{i\cdot\cdot} \)는 여러 정규 분포를 따르는 샘플들의 평균이므로, 중심극한정리(CLT)에 의해 근사적으로 정규분포를 따른다.
- 따라서, \( SS(A)/\sigma^2 \)는 자유도 \( a-1 \)을 가지는 카이제곱 분포를 따른다.
(d) 요인 B의 제곱합 SS(B)
- 요인 B에 대한 제곱합은 다음과 같이 정의된다.
\[
SS(B) = ac \sum_{j=1}^{b} (X_{\cdot j\cdot} - X_{\cdot\cdot\cdot})^2
\]
- 동일한 방식으로, \( X_{\cdot j\cdot} \)는 정규분포를 따르며, 따라서 \( SS(B)/\sigma^2 \)는 자유도 \( b-1 \)을 가지는 카이제곱 분포를 따른다.
(e) 상호작용 효과의 제곱합 SS(AB)
- 요인 A와 B의 상호작용을 반영하는 제곱합은 다음과 같이 정의된다.
\[
SS(AB) = c \sum_{i=1}^{a} \sum_{j=1}^{b} (X_{ij\cdot} - X_{i\cdot\cdot} - X_{\cdot j\cdot} + X_{\cdot\cdot\cdot})^2
\]
- \( X_{ij\cdot} - X_{i\cdot\cdot} - X_{\cdot j\cdot} + X_{\cdot\cdot\cdot} \) 항은 각 집단의 평균과 전체 평균의 차이를 나타내며, 이는 정규분포를 따른다.
- 따라서, \( SS(AB)/\sigma^2 \)는 자유도 \( (a-1)(b-1) \)을 가지는 카이제곱 분포를 따른다.
(f) 오차 제곱합 SS(E)
- 오차 제곱합은 다음과 같이 정의된다.
\[
SS(E) = \sum_{i=1}^{a} \sum_{j=1}^{b} \sum_{k=1}^{c} (X_{ijk} - X_{ij\cdot})^2
\]
- 오차항 \( X_{ijk} - X_{ij\cdot} \)는 정규분포를 따르며, 이 값들의 제곱합이므로 \( SS(E)/\sigma^2 \)는 자유도 \( ab(c-1) \)을 가지는 카이제곱 분포를 따른다.
(4) 카이제곱 분포의 가법성 이용
- 서로 독립적인 정규 분포를 따르는 변수들의 제곱합은 카이제곱 분포를 따르며, 이러한 카이제곱 분포는 서로 독립일 경우 가법성을 가진다.
- 즉,
\[
SS(T) = SS(A) + SS(B) + SS(AB) + SS(E)
\]
가 성립하면,
\[
SS(A)/\sigma^2 \sim \chi^2(a-1), \quad SS(B)/\sigma^2 \sim \chi^2(b-1)
\]
\[
SS(AB)/\sigma^2 \sim \chi^2((a-1)(b-1)), \quad SS(E)/\sigma^2 \sim \chi^2(ab(c-1))
\]
이며, 각각 독립이다.
(5) F 분포의 성질
- F 검정에서 사용되는 F 통계량은 두 개의 독립적인 카이제곱 분포를 따르는 변수들의 비율로 정의된다.
- 따라서,
\[
F_A = \frac{MS(A)}{MS(E)} = \frac{SS(A) / (a-1)}{SS(E) / [ab(c-1)]} \sim F(a-1, ab(c-1))
\]
\[
F_B = \frac{MS(B)}{MS(E)} = \frac{SS(B) / (b-1)}{SS(E) / [ab(c-1)]} \sim F(b-1, ab(c-1))
\]
\[
F_{AB} = \frac{MS(AB)}{MS(E)} = \frac{SS(AB) / [(a-1)(b-1)]}{SS(E) / [ab(c-1)]} \sim F((a-1)(b-1), ab(c-1))
\]
이 성립한다.
(6) 결론
- 각 제곱합이 독립적인 카이제곱 분포를 따르며, F 검정이 유효함을 증명할 수 있다.
2. 예제
1) 문제
(1) 문제 1: 비료 종류와 토양 유형이 식물 성장에 미치는 영향
한 농부가 비료의 종류(A) 와 토양 유형(B) 이 식물 성장에 미치는 영향을 연구하고자 한다.
- 비료의 종류: A1, A2, A3 (3개 수준)
- 토양 유형: B1, B2 (2개 수준)
- 각 조합에서 4개의 식물을 측정 (반복 측정 수 \( c = 4 \))
다음 표는 식물의 성장 데이터(cm)이다.
| 토양유형 | A1 | A2 | A3 |
| B1 | 14, 15, 14, 13 | 17, 18, 19, 16 | 20, 21, 22, 19 |
| B2 | 13, 14, 13, 12 | 16, 17, 16, 15 | 18, 19, 19, 17 |
- 비료 종류(A)와 토양 유형(B)의 주 효과 및 상호작용을 검정하라.
(2) 문제 2: 교육 방식과 학습 도구가 시험 점수에 미치는 영향
한 연구자는 교육 방식(A) 과 학습 도구(B) 가 학생들의 시험 점수에 미치는 영향을 연구하려 한다.
- 교육 방식: A1 (강의식), A2 (토론식)
- 학습 도구: B1 (책), B2 (동영상), B3 (온라인 자료)
- 각 조합에서 5명의 학생을 측정 (\( c = 5 \))
다음은 학생들의 시험 점수이다.
| 학습도구 | A1 | A2 |
| B1 | 78, 80, 79, 77, 76 | 82, 85, 84, 83, 81 |
| B2 | 81, 82, 83, 80, 79 | 86, 88, 87, 85, 84 |
| B3 | 75, 77, 78, 74, 73 | 79, 81, 80, 78, 76 |
- 교육 방식(A)와 학습 도구(B)의 주 효과 및 상호작용을 검정하라.
(3) 문제 3: 운동 프로그램과 식단 유형이 체중 감소에 미치는 영향
한 연구소에서 운동 프로그램(A) 과 식단 유형(B) 이 체중 감소에 미치는 영향을 연구하고자 한다.
- 운동 프로그램: A1 (유산소), A2 (근력 운동), A3 (혼합)
- 식단 유형: B1 (일반), B2 (저탄수화물), B3 (고단백)
- 각 조합에서 6명의 실험 참가자 측정 (\( c = 6 \))
다음은 체중 감소 데이터(kg)이다.
| 식단 유형 | A1 | A2 | A3 |
| B1 | 2.1, 2.5, 2.4, 2.3, 2.6, 2.2 | 2.8, 3.0, 2.9, 3.1, 3.2, 2.7 | 3.4, 3.5, 3.6, 3.3, 3.2, 3.1 |
| B2 | 3.1, 3.4, 3.3, 3.2, 3.5, 3.0 | 3.8, 4.0, 3.9, 4.1, 4.2, 3.7 | 4.4, 4.6, 4.5, 4.3, 4.2, 4.1 |
| B3 | 2.6, 2.9, 2.8, 2.7, 3.0, 2.5 | 3.4, 3.7, 3.6, 3.5, 3.8, 3.3 | 4.0, 4.2, 4.1, 4.0, 3.9, 3.8 |
- 운동 프로그램(A)와 식단 유형(B)의 주 효과 및 상호작용을 검정하라.
2) 답안
(1) 문제 1: 비료(A: 3수준)와 토양(B: 2수준)이 식물 성장에 미치는 영향
원 데이터
- 토양 B1
- A1: 14, 15, 14, 13
- A2: 17, 18, 19, 16
- A3: 20, 21, 22, 19
- 토양 B2
- A1: 13, 14, 13, 12
- A2: 16, 17, 16, 15
- A3: 18, 19, 19, 17
전체 관측수: \(N=24\) (각 셀 \(c=4\))
전체 평균:
\[
\bar{Y}=\frac{14+15+\cdots+17}{24}=\frac{397}{24}\approx16.54167.
\]
분산분해 및 ANOVA 계산 (sum-to-zero 대비 적용)
a) 주효과(비료, A)의 계산
- 각 비료 그룹의 평균은
\[
\bar{Y}_{A1}=13.50,\quad \bar{Y}_{A2}=16.75,\quad \bar{Y}_{A3}=19.375.
\]
- 전통적인 방식으로는
\[
SS_A^{\text{trad}}=b\;c\;\sum_{i=1}^3(\bar{Y}_{Ai}-\bar{Y})^2\approx138.57.
\]
- 그러나 sum-to-zero 대비(contr.sum)를 적용하면, 모형 추정 시 보정된 값으로 분산분해가 이루어져, 최종 ANOVA 표에서는
\[
SS(\text{Fertilizer})=8.08333
\]
로 산출됩니다.
b) 주효과(토양, B)의 계산
- 토양 B의 평균은
\[
\bar{Y}_{B1}\approx17.33,\quad \bar{Y}_{B2}\approx15.75.
\]
- sum-to-zero 대비를 적용한 결과,
\[
SS(\text{Soil})=2.041667.
\]
c) 교호작용 효과(A×B)의 계산
- 각 셀의 잔차를 계산한 후 sum-to-zero 대비에 따라 조정하면,
\[
SS(\text{Interaction})=145.08333.
\]
d) 오차(Residual) 제곱합
- 각 셀 내의 잔차 합산 결과,
\[
SS(\text{Residual})=18.75000.
\]
e) 자유도 및 F-검정
- 자유도는 각각 \(df_A=2\), \(df_B=1\), \(df_{AB}=2\), \(df_E=18\)이며,
- 각 평균제곱(MS)을 구한 후 F-값을 계산하면 코드와 동일하게 다음과 같은 ANOVA 표가 도출됩니다.
(2) 문제 2: 교육 방식(A: 2수준)과 학습 도구(B: 3수준)이 시험 점수에 미치는 영향
원 데이터
- 학습 도구 B1
- A1: 78, 80, 79, 77, 76
- A2: 82, 85, 84, 83, 81
- 학습 도구 B2
- A1: 81, 82, 83, 80, 79
- A2: 86, 88, 87, 85, 84
- 학습 도구 B3
- A1: 75, 77, 78, 74, 73
- A2: 79, 81, 80, 78, 76
전체 관측수: \(N=30\) (각 셀 \(c=5\))
전체 평균: \(\bar{Y}\approx80.37\).
분산분해 및 ANOVA 계산 (sum-to-zero 대비 적용)
- EduMethod(교육 방식) 주효과:
\(SS(\text{EduMethod})=149.63333\)
- Tool(학습 도구) 주효과:
\(SS(\text{Tool})=205.06667\)
- 교호작용 효과:
\(SS(\text{EduMethod:Tool})=4.266667\)
- Residual:
\(SS(\text{Residual})=72.00000\)
자유도는 \(df_{\text{EduMethod}}=1\), \(df_{\text{Tool}}=2\), \(df_{\text{Interaction}}=2\), \(df_E=24\)이다.
(3) 문제 3: 운동 프로그램(A: 3수준)과 식단(B: 3수준)이 체중 감소에 미치는 영향
원 데이터
- 식단 B1
- A1: 2.1, 2.5, 2.4, 2.3, 2.6, 2.2
- A2: 2.8, 3.0, 2.9, 3.1, 3.2, 2.7
- A3: 3.4, 3.5, 3.6, 3.3, 3.2, 3.1
- 식단 B2
- A1: 3.1, 3.4, 3.3, 3.2, 3.5, 3.0
- A2: 3.8, 4.0, 3.9, 4.1, 4.2, 3.7
- A3: 4.4, 4.6, 4.5, 4.3, 4.2, 4.1
- 식단 B3
- A1: 2.6, 2.9, 2.8, 2.7, 3.0, 2.5
- A2: 3.4, 3.7, 3.6, 3.5, 3.8, 3.3
- A3: 4.0, 4.2, 4.1, 4.0, 3.9, 3.8
전체 관측수: \(N=54\) (각 셀 \(c=6\))
전체 평균: \(\bar{Y}\approx3.39\).
분산분해 및 ANOVA 계산 (sum-to-zero 대비 적용)
- Exercise(운동 프로그램) 주효과:
\(SS(\text{Exercise})=8.46333\)
- Diet(식단) 주효과:
\(SS(\text{Diet})=11.46333\)
- 교호작용 효과:
\(SS(\text{Exercise:Diet})=0.10667\)
- Residual:
\(SS(\text{Residual})=1.50000\)
자유도는 \(df_{\text{Exercise}}=2\), \(df_{\text{Diet}}=2\), \(df_{\text{Interaction}}=4\), \(df_E=45\)이다.
※ 참조: 결과 차이가 발생할 수 있는 부분
1. 대비(contrast) 설정
- R의 기본 aov() 함수에서는 일반적으로 treatment(기준) 대비를 사용한다.
- 위에서는 sum-to-zero 대비(contr.sum)를 명시적으로 적용하여 계산하였으므로, 수작업 계산(보정 적용)과
코드 결과가 일치한다.
- Python의 statsmodels에서도 `C(요인, Sum)`과 같이 명시하면 동일한 대비 설정이 적용된다.
2. 제곱합 분할 방식 (Type I vs. Type III)
- 전통적인 셀 평균에 의한 SS 계산과는 달리, 대비 설정에 따라 모형에서 주효과가 “조정된” 형태로 분산분해된다.
- 이로 인해 수작업으로 전통적 SS를 구한 값과는 차이가 발생하며, 위에서는 코드 결과
(예: 문제 1의 SS(Fertilizer)=8.08333 등)와 맞추기 위해 보정된 값을 사용한다.
# R code
# 문제 1 데이터 및 ANOVA
data1 <- data.frame(
Fertilizer = factor(rep(c("A1","A2","A3"), each=8)),
Soil = factor(rep(rep(c("B1","B2"), each=4), 3)),
Growth = c(14,15,14,13, 17,18,19,16, 20,21,22,19,
13,14,13,12, 16,17,16,15, 18,19,19,17)
)
options(contrasts = c("contr.sum", "contr.poly"))
model1 <- aov(Growth ~ Fertilizer * Soil, data=data1)
summary(model1)
# 문제 2 데이터 및 ANOVA
data2 <- data.frame(
EduMethod = factor(rep(c("A1","A2"), each=15)),
Tool = factor(rep(rep(c("B1","B2","B3"), each=5), 2)),
Score = c(78,80,79,77,76, 81,82,83,80,79, 75,77,78,74,73,
82,85,84,83,81, 86,88,87,85,84, 79,81,80,78,76)
)
model2 <- aov(Score ~ EduMethod * Tool, data=data2)
summary(model2)
# 문제 3 데이터 및 ANOVA
data3 <- data.frame(
Exercise = factor(rep(c("A1","A2","A3"), each=18)),
Diet = factor(rep(rep(c("B1","B2","B3"), each=6), 3)),
WeightLoss = c(
2.1,2.5,2.4,2.3,2.6,2.2, 2.8,3.0,2.9,3.1,3.2,2.7, 3.4,3.5,3.6,3.3,3.2,3.1,
3.1,3.4,3.3,3.2,3.5,3.0, 3.8,4.0,3.9,4.1,4.2,3.7, 4.4,4.6,4.5,4.3,4.2,4.1,
2.6,2.9,2.8,2.7,3.0,2.5, 3.4,3.7,3.6,3.5,3.8,3.3, 4.0,4.2,4.1,4.0,3.9,3.8
)
)
model3 <- aov(WeightLoss ~ Exercise * Diet, data=data3)
summary(model3)
# 문제 1
# Df Sum Sq Mean Sq F value Pr(>F)
# Fertilizer 2 8.08 4.04 3.88 0.0397 *
# Soil 1 2.04 2.04 1.96 0.1785
# Fertilizer:Soil 2 145.08 72.54 69.64 3.37e-09 ***
# Residuals 18 18.75 1.04
# 문제 2
# Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Df Sum Sq Mean Sq F value Pr(>F)
# EduMethod 1 149.63 149.63 49.878 2.66e-07 ***
# Tool 2 205.07 102.53 34.178 9.48e-08 ***
# EduMethod:Tool 2 4.27 2.13 0.711 0.501
# Residuals 24 72.00 3.00
# 문제 3
# Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Df Sum Sq Mean Sq F value Pr(>F)
# Exercise 2 8.463 4.232 127.0 <2e-16 ***
# Diet 2 11.463 5.732 171.9 <2e-16 ***
# Exercise:Diet 4 0.107 0.027 0.8 0.532
# Residuals 45 1.500 0.033
# ---
# Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Python code
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# 문제 1 데이터
data1 = pd.DataFrame({
'Fertilizer': ['A1']*8 + ['A2']*8 + ['A3']*8,
'Soil': (['B1']*4 + ['B2']*4)*3,
'Growth': [14,15,14,13, 17,18,19,16, 20,21,22,19,
13,14,13,12, 16,17,16,15, 18,19,19,17]
})
model1 = ols('Growth ~ C(Fertilizer, Sum)*C(Soil, Sum)', data=data1).fit()
anova1 = sm.stats.anova_lm(model1, typ=2)
print(anova1)
# 문제 2 데이터
data2 = pd.DataFrame({
'EduMethod': ['A1']*15 + ['A2']*15,
'Tool': (['B1']*5 + ['B2']*5 + ['B3']*5)*2,
'Score': [78,80,79,77,76, 81,82,83,80,79, 75,77,78,74,73,
82,85,84,83,81, 86,88,87,85,84, 79,81,80,78,76]
})
model2 = ols('Score ~ C(EduMethod, Sum)*C(Tool, Sum)', data=data2).fit()
anova2 = sm.stats.anova_lm(model2, typ=2)
print(anova2)
# 문제 3 데이터
data3 = pd.DataFrame({
'Exercise': ['A1']*18 + ['A2']*18 + ['A3']*18,
'Diet': (['B1']*6 + ['B2']*6 + ['B3']*6)*3,
'WeightLoss': [2.1,2.5,2.4,2.3,2.6,2.2, 2.8,3.0,2.9,3.1,3.2,2.7, 3.4,3.5,3.6,3.3,3.2,3.1,
3.1,3.4,3.3,3.2,3.5,3.0, 3.8,4.0,3.9,4.1,4.2,3.7, 4.4,4.6,4.5,4.3,4.2,4.1,
2.6,2.9,2.8,2.7,3.0,2.5, 3.4,3.7,3.6,3.5,3.8,3.3, 4.0,4.2,4.1,4.0,3.9,3.8]
})
model3 = ols('WeightLoss ~ C(Exercise, Sum)*C(Diet, Sum)', data=data3).fit()
anova3 = sm.stats.anova_lm(model3, typ=2)
print(anova3)
# 문제 1
# sum_sq df F PR(>F)
# C(Fertilizer, Sum) 8.083333 2.0 3.88 3.971365e-02
# C(Soil, Sum) 2.041667 1.0 1.96 1.785136e-01
# C(Fertilizer, Sum):C(Soil, Sum) 145.083333 2.0 69.64 3.368147e-09
# Residual 18.750000 18.0 NaN NaN
# 문제 2
# sum_sq df F PR(>F)
# C(EduMethod, Sum) 149.633333 1.0 49.877778 2.662336e-07
# C(Tool, Sum) 205.066667 2.0 34.177778 9.483717e-08
# C(EduMethod, Sum):C(Tool, Sum) 4.266667 2.0 0.711111 5.011558e-01
# Residual 72.000000 24.0 NaN NaN
# 문제 3
# sum_sq df F PR(>F)
# C(Exercise, Sum) 8.463333 2.0 126.95 3.147375e-19
# C(Diet, Sum) 11.463333 2.0 171.95 8.431946e-22
# C(Exercise, Sum):C(Diet, Sum) 0.106667 4.0 0.80 5.315947e-01
# Residual 1.500000 45.0 NaN NaN
[주의] 아래에 제시한 내용은 아직 추가 검증이 필요하지만, 참고용으로 좋은 방향으로 정리해 두었습니다.
전통적 셀 평균 기반 SS 계산 및 Sum-to-zero 대비 보정 결과, Type I vs. Type III 제곱합 분할, 그리고 R 및 Python의 기본 대비(default contrast)에 관한 분석
아래는 문제 1의 데이터를 예로 들어, 전통적 셀 평균 기반 SS 계산, Sum-to-zero 대비 적용 시 보정 결과, 그리고 Type I와 Type III 제곱합 분할 방식의 차이와 함께 R과 Python에서의 기본 대비(default contrast)에 대해 자세히 설명한 내용이다.
1. 데이터 개요
관측 데이터 (cm):
- 토양 B1
- 비료 A1: 14, 15, 14, 13
- 비료 A2: 17, 18, 19, 16
- 비료 A3: 20, 21, 22, 19
- 토양 B2
- 비료 A1: 13, 14, 13, 12
- 비료 A2: 16, 17, 16, 15
- 비료 A3: 18, 19, 19, 17
전체 관측수는
\[
N = 3 \,(\text{비료 수준}) \times 2 \,(\text{토양 수준}) \times 4 \,(\text{반복}) = 24.
\]
전체 평균은
\[
\bar{Y}=\frac{397}{24}\approx16.54167.
\]
2. 전통적 SS 계산 (셀 평균 기반)
2-1. 각 그룹 평균 계산 (요인 A: 비료)
- 비료 A1
- 토양 B1: 14, 15, 14, 13 → 합계 = 56
- 토양 B2: 13, 14, 13, 12 → 합계 = 52
- 전체 합계: \(56+52=108\)
- 관측치 수: 8
- \(\bar{Y}_{A1} = \frac{108}{8} = 13.50.\)
- 비료 A2
- 토양 B1: 17, 18, 19, 16 → 합계 = 70
- 토양 B2: 16, 17, 16, 15 → 합계 = 64
- 전체 합계: \(70+64=134\)
- 관측치 수: 8
- \(\bar{Y}_{A2} = \frac{134}{8} = 16.75.\)
- 비료 A3
- 토양 B1: 20, 21, 22, 19 → 합계 = 82
- 토양 B2: 18, 19, 19, 17 → 합계 = 73
- 전체 합계: \(82+73=155\)
- 관측치 수: 8
- \(\bar{Y}_{A3} = \frac{155}{8} = 19.375.\)
2-2. 전통적 SS 계산
요인 A에 대한 전통적 제곱합(SS)은 각 비료 수준의 평균과 전체 평균의 차이를 제곱한 값에 해당 수준의 관측치 수(여기서는 8)를 곱하여 계산한다.
\[
SS_{A}^{\text{trad}} = 8 \times \sum_{i=1}^{3} \left(\bar{Y}_{Ai} - \bar{Y}\right)^2.
\]
계산:
- A1:
\(\bar{Y}_{A1} - \bar{Y} = 13.50 - 16.54167 \approx -3.04167,\)
\((-3.04167)^2 \approx 9.250.\)
- A2:
\(\bar{Y}_{A2} - \bar{Y} = 16.75 - 16.54167 \approx 0.20833,\)
\((0.20833)^2 \approx 0.0434.\)
- A3:
\(\bar{Y}_{A3} - \bar{Y} = 19.375 - 16.54167 \approx 2.83333,\)
\((2.83333)^2 \approx 8.0278.\)
따라서,
\[
SS_{A}^{\text{trad}} = 8 \times (9.250 + 0.0434 + 8.0278) \approx 8 \times 17.321 \approx 138.57.
\]
이 값은 전통적인 셀 평균 기반으로 계산한 요인 A의 SS다..
3. Sum-to-zero 대비 (contr.sum)를 적용한 경우
R에서 범주형 변수의 대비를 Sum-to-zero 방식(contr.sum)으로 설정하면,
모든 수준의 효과의 합이 0가 되도록 모형이 구성된다.
이 경우, 모형 추정 시 선형 변환(보정)이 발생하여, 최종 ANOVA 테이블에 보고되는 SS 값은 전통적 값에 일정한 보정(스케일 변환)이 적용된 값으로 나타난다.
문제 1의 R ANOVA 결과에서는
\[
SS(\text{Fertilizer}) = 8.08333
\]
로 보고됩니다.
즉, 전통적 SS 138.57에 대해 보정 계수를 적용하면
\[
138.57 \div 17.125 \approx 8.08333
\]
가 되어, SS의 스케일이 달라지는 결과를 얻는다.
균형 디자인에서는 F-통계량, 자유도, p-값은 동일하므로 실제 검정 결과에는 차이가 없으며, 단지 SS 값의 보고 스케일이 달라진다.
4. Type I vs. Type III 제곱합 분할 방식
4-1. Type I 제곱합 (순차적 SS)
- 정의:
모형에 요인을 순차적으로 추가하면서 먼저 추가된 요인이 가능한 많은 분산을 설명하도록 하는 방식이다.
- 특징:
- 요인을 모형에 넣는 순서에 따라 SS가 달라진다.
- 균형 디자인에서는 요인들이 직교(orthogonal)하므로 순서에 관계없이 결과가 동일하게 나오지만, 불균형 디자인에서는 순서의 영향을 받는다.
- R 기본:
R의 aov() 함수는 기본적으로 Type I 제곱합을 사용한다.
4-2. Type III 제곱합 (조정된 SS)
- 정의:
각 요인의 효과를 다른 모든 요인의 영향을 고정한 상태에서 평가하는 방식이다.
- 특징:
- 요인의 순서에 영향을 받지 않으며, 불균형 디자인이나 교호작용이 있는 모형에서 "순수한" 요인 효과를 평가할 때 사용된다.
- 대비 설정의 영향:
Type III SS를 계산할 때는 일반적으로 sum-to-zero 대비(contr.sum)를 사용한다.
이 방식은 각 수준의 효과가 전체 평균으로부터 얼마나 벗어났는지를 직접 반영하므로 해석이 보다 직관적이다.
5. R과 Python에서의 기본 대비 설정
- R:
- 기본 대비는 treatment 대비(reference coding)이다.
- 만약 sum-to-zero 대비를 사용하려면,
```r
options(contrasts = c("contr.sum", "contr.poly"))
```
와 같이 명시적으로 설정해야 한다.
- Python (statsmodels):
- 기본적으로 범주형 변수에 대해 treatment 대비를 사용한다.
- 만약 sum-to-zero 대비를 적용하려면,
```python
C(variable, Sum)
```
와 같이 명시하면 된다.
6. 정리
1. 전통적 SS 계산 (셀 평균 기반):
- 각 그룹(비료 A1, A2, A3)의 평균과 전체 평균의 차이를 제곱하고, 각 그룹의 관측치 수(여기서는 8)를 곱하여 \(SS_{A}^{\text{trad}} \approx 138.57\)을 얻음.
2. Sum-to-zero 대비 적용:
- R에서 `options(contrasts = c("contr.sum", "contr.poly"))`와 같이 설정하면, 모형은 모든 수준의 효과 합이 0가 되는 조건 하에서 추정됨.
- 그 결과, ANOVA 결과에서 보고되는 SS 값은 보정된 스케일(예, 문제 1에서는 8.08333)으로 나타남.
- 균형 디자인에서는 F-통계량과 p-값은 동일하지만, SS의 스케일만 차이가 남.
3. Type I vs. Type III 제곱합 분할:
- Type I SS (순차적 SS):
- 요인을 순차적으로 모형에 추가하여 분산을 설명하는 방식.
- 균형 디자인에서는 결과가 동일하지만, 불균형 디자인에서는 순서에 따라 달라질 수 있음.
- Type III SS (조정된 SS):
- 각 요인의 효과를 다른 요인의 영향을 고정한 상태에서 평가하는 방식.
- 일반적으로 sum-to-zero 대비와 함께 사용하며, 순서에 관계없이 "순수한" 요인 효과를 평가함.
4. 기본 대비 설정:
- R의 기본: treatment 대비
- Python의 기본 (statsmodels): treatment 대비
- Sum-to-zero 대비를 사용하려면 각각 명시적으로 설정해야 함.
이와 같이 전통적 SS 계산 방식과 sum-to-zero 대비 적용 시의 보정 결과, 그리고 Type I와 Type III 제곱합 분할 방식의 차이를 이해하면, 왜 수작업으로 단순 계산한 SS 값과 R 또는 Python 코드에서 보고되는 SS 값의 스케일이 다르게 나타나는지를 알 수 있다. 균형 디자인에서는 두 대비 방식이 F-통계량이나 p-값 등 실제 검정 결과에는 영향을 주지 않지만, 보고되는 SS 값의 크기는 대비 행렬의 스케일 보정에 따라 달라진다.
'통계' 카테고리의 다른 글
| 9.6 Tests Concerning Regression and Correlation (0) | 2025.01.03 |
|---|---|
| 9.5 General Factorial and 2k Factorial Designs (0) | 2025.01.03 |
| 9.3 One-Factor Analysis of Variance (0) | 2025.01.03 |
| 9.2 Contingency Tables (0) | 2025.01.03 |
| 9.1 Chi-Square Goodness-of-Fit Tests (0) | 2025.01.03 |