Summary
ANCOVA(Analysis of Covariance)는 ANOVA + 회귀의 결합. 공변량(covariate)의 효과를 통계적으로 제거한 후 집단 간 평균을 비교한다. 사전 점수 통제, 연령 효과 제거 등에 활용.
용어 설명
- 공변량 (Covariate): 종속변수에 영향을 주지만 관심 대상이 아닌 연속형 변수 (예: 사전 점수, 나이). 통계적으로 “통제”하여 효과를 제거
- 중심화 (Centering): 공변량에서 전체 평균을 빼는 것 (). 절편의 해석을 용이하게 하고 다중공선성을 줄임
- 조정 평균 (Adjusted mean): 공변량의 효과를 제거한 후 추정한 각 집단의 평균. 공정한 비교를 위한 보정된 값
- 회귀기울기 동질성 (Homogeneity of regression slopes): ANCOVA의 핵심 가정. 공변량과 종속변수의 관계(기울기)가 모든 집단에서 동일해야 함
ANCOVA (공분산 분석)
모형
수식 변수 풀이
- : 집단 i, 관측 j의 종속변수 값 (예: 사후 시험 점수)
- : 전체 평균 (grand mean)
- : 집단 i의 고정 효과 — 교수법 차이 등. 이것이 관심 대상
- : 공변량의 회귀 계수 — 공변량 1단위 변화 시 Y의 변화량
- : 중심화된 공변량 — 전체 평균에서의 편차
- : 오차항 — 모형으로 설명되지 않는 변동
- : 전체 평균
- : 집단 i의 효과 (고정 효과)
- : 공변량의 회귀 계수
- : 공변량 값 (연속형)
- : 공변량의 중심화 (centering)
핵심: 공변량의 선형 효과를 제거한 **조정 평균(adjusted mean)**으로 집단 비교
ANOVA vs ANCOVA
| 구분 | ANOVA | ANCOVA |
|---|---|---|
| 모형 | ||
| 오차 분산 | 전체 | 공변량 설명분 제거 → 감소 |
| 검정력 | 기본 | 향상 (오차 감소로) |
| 조건 | 집단 간 차이만 검정 | 공변량 통제 후 차이 검정 |
전형적 사례
연구 질문: 3가지 교수법의 사후 시험 점수 차이
문제: 학생들의 사전 능력이 다름
해결: 사전 점수를 공변량으로 → ANCOVA→ 사전 점수 효과를 “빼낸” 후의 조정된 사후 점수로 교수법 비교
가정 (Assumptions)
ANOVA의 가정 + 추가 2개:
| 가정 | 검정 방법 | 위반 시 |
|---|---|---|
| 정규성 | Shapiro-Wilk | 비모수 대안 (Quade test) |
| 등분산성 | Levene’s test | Welch 보정 |
| 독립성 | 연구 설계 | LMM 고려 |
| 공변량-DV 선형관계 | 산점도, 잔차 플롯 | 비선형 변환 또는 다항 항 추가 |
| 회귀기울기 동질성 | 교호작용 검정 (group × covariate) | Johnson-Neyman 기법 |
회귀기울기 동질성 검정
가장 중요한 추가 가정: 공변량과 DV의 관계(기울기)가 모든 집단에서 같아야 한다.
수식 변수 풀이
- : 집단 i의 기울기 편차 — 0이면 모든 집단의 기울기 동일 (가정 충족)
- : 집단 × 공변량 교호작용 항 — 이 항이 유의하면 기울기 동질성 위반
- : 집단별 기울기 차이 (교호작용)
- 이 교호작용이 유의하면 → 기울기 동질성 위반 → ANCOVA 부적절
기울기 동질성 위반 시
- 집단별 별도 회귀분석
- Johnson-Neyman technique으로 공변량 범위별 집단 차이 구간 제시
- 또는 LMM에서 random slope로 모델링
조정 평균 (Adjusted Means)
수식 변수 풀이
- : 집단 i의 조정 평균 — 공변량 효과 제거 후의 보정된 평균
- : 집단 i의 원래 평균
- : 추정된 공변량의 회귀 계수
- : 집단 i의 공변량 평균이 전체 평균에서 벗어난 정도
- 직관: “사전 점수가 높은 집단의 사후 점수를 아래로 보정, 낮은 집단은 위로 보정”
각 집단의 평균에서 공변량 평균 차이에 의한 부분을 보정.
Effect Size
- partial η²:
- 공변량 포함으로 가 줄어들어, ANOVA보다 η² 더 클 수 있음
→ Eta-squared 참조
Implementation
import pingouin as pg import statsmodels.api as sm from statsmodels.formula.api import ols # === pingouin ANCOVA === aov = pg.ancova(data=df, dv='post_score', between='method', covar='pre_score') print(aov) # === statsmodels (더 유연) === # 기울기 동질성 검정: 교호작용 포함 model_interaction = ols('post_score ~ C(method) * pre_score', data=df).fit() anova_table = sm.stats.anova_lm(model_interaction, typ=2) print("기울기 동질성 검정:") print(anova_table) # C(method):pre_score 행의 p > 0.05 → 동질성 충족 # ANCOVA 본 분석 (교호작용 제거) model = ols('post_score ~ C(method) + pre_score', data=df).fit() anova_table = sm.stats.anova_lm(model, typ=2) print("\nANCOVA 결과:") print(anova_table) # 조정 평균 (estimated marginal means) from statsmodels.stats.anova import AnovaRM print("\n조정 평균:") print(model.summary())
관련 문서
- ANOVA — 공변량 없는 집단 비교
- 통계 검정법 개요 — 검정법 선택 플로우차트
- Linear Mixed Effects Model — 반복측정 + 공변량 통제
- Eta-squared — ANCOVA의 effect size