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

구분ANOVAANCOVA
모형
오차 분산 전체공변량 설명분 제거 → 감소
검정력기본향상 (오차 감소로)
조건집단 간 차이만 검정공변량 통제 후 차이 검정

전형적 사례

연구 질문: 3가지 교수법의 사후 시험 점수 차이
문제: 학생들의 사전 능력이 다름
해결: 사전 점수를 공변량으로 → ANCOVA

→ 사전 점수 효과를 “빼낸” 후의 조정된 사후 점수로 교수법 비교


가정 (Assumptions)

ANOVA의 가정 + 추가 2개:

가정검정 방법위반 시
정규성Shapiro-Wilk비모수 대안 (Quade test)
등분산성Levene’s testWelch 보정
독립성연구 설계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())

관련 문서