1 정의
ANCOVA 의 처치별 보정 평균은 그룹 평균에서 baseline 의 우연/구조적 차이를 통계적으로 제거한 평균이다.
\[ \bar Y_j^{\text{adj}} = \bar Y_j - \hat\beta(\bar X_j - \bar X) \]
여기서 \(\hat\beta\) 는 ANCOVA 의 공통 회귀 기울기, \(\bar X\) 는 전체 grand 공변량 평균.
해석: “모든 그룹의 baseline 이 \(\bar X\) 였더라면 그룹별 사후 평균은 얼마였을까?” 의 추정량.
2 보정 평균의 의미
2.1 기하학적 해석
각 그룹의 회귀선 \(\hat Y_j(X) = \bar Y_j + \hat\beta(X - \bar X_j)\) 를 grand mean \(\bar X\) 에서 평가:
\[ \hat Y_j(\bar X) = \bar Y_j + \hat\beta(\bar X - \bar X_j) = \bar Y_j - \hat\beta(\bar X_j - \bar X) = \bar Y_j^{\text{adj}} \]
세 그룹의 회귀선을 \(X = \bar X\) 수직선 위에서 측정한 값. 세 점의 차이가 처치 효과이다.
2.2 가설 데이터 — 보정 평균 계산
G-MAX9-1 의 데이터 (\(\hat\beta = 0.5\)):
| \(\bar X_j\) | \(\bar Y_j\) | \(\bar X_j - \bar X\) | adj | |
|---|---|---|---|---|
| A | 165.0 | 145.0 | +3.3 | 143.4 |
| B | 158.0 | 152.0 | −3.7 | 153.9 |
| Control | 162.0 | 160.0 | +0.3 | 159.9 |
해석: A 가 위약보다 16.5 점, B 가 위약보다 6 점 SBP 를 더 낮춘다 (보정 후).
A 그룹의 raw 평균 차이는 \(160 - 145 = 15\) 이지만, A 그룹의 baseline 이 위약보다 3 점 높았으므로 (\(\bar X_A = 165 > \bar X_C = 162\)) “더 높은 데서 출발했으므로 같은 처치 효과라도 사후 값이 더 낮을 것이다” 라는 회귀 효과를 보정해야 한다. 보정 후 차이는 \(159.9 - 143.4 = 16.5\). 약간 더 큰 효과로 추정된다.
baseline 차이가 우연 (무작위 배정 후 우연한 imbalance) 이면 ANCOVA 는 정당한 보정. 구조적 (selection) 이면 ANCOVA 만으로는 인과 효과를 보장하지 못한다 — 이것이 Lord 의 역설의 정수.
3 Lord’s Paradox
3.1 사례 — 대학생 체중 변화
가설: 한 대학에서 9 월에 체중을 측정 (\(X\)), 5 월에 다시 측정 (\(Y\)). 남녀 비교.
관측: - 남학생: \(\bar X = 70\), \(\bar Y = 70\) (체중 변화 0) - 여학생: \(\bar X = 55\), \(\bar Y = 55\) (체중 변화 0)
3.2 통계학자 1 — Change Score Analysis
\(D = Y - X\) 의 그룹별 평균 비교: - 남학생: \(\bar D = 0\) - 여학생: \(\bar D = 0\)
\[t\text{-test on } D: \quad t = 0,\quad p = 1 \]
결론: 성별 간 체중 변화 차이 없음.
3.3 통계학자 2 — ANCOVA
\(Y = \mu + \alpha_{\text{sex}} + \beta(X - \bar X) + \varepsilon\).
회귀 기울기 \(\hat\beta\) 는 일반적으로 1 이 아닌 0.6 정도 (체중의 평균 회귀 효과 — 무거운 사람은 살이 빠지고 가벼운 사람은 찌는 경향). 이때 보정 평균 차이가 0 이 아니다.
\(\bar X = 62.5\) (남녀 평균), \(\hat\beta = 0.6\) 가정:
- 남학생 adj = \(70 - 0.6 \times (70 - 62.5) = 70 - 4.5 = 65.5\)
- 여학생 adj = \(55 - 0.6 \times (55 - 62.5) = 55 + 4.5 = 59.5\)
차이 = \(65.5 - 59.5 = 6\).
결론: 남학생이 여학생보다 6 kg 더 나간다 (보정 후 — 즉 같은 baseline 이라면).
3.4 두 결론은 모순?
- Change score: 차이 없음
- ANCOVA: 차이 6 kg
이것이 Lord’s 의 역설 (Lord, 1967, 1969).
Change score 는 묻는다: “각 그룹 내에서 시간이 지남에 따라 체중이 평균적으로 어떻게 변했는가? 그리고 그 변화가 그룹 간 다른가?” 답: 같다 — 두 그룹 모두 평균 체중이 변하지 않았다.
ANCOVA 는 묻는다: “9 월 체중이 같은 두 사람을 비교하면, 5 월 체중이 그룹 간 다른가?” 답: 다르다 — 같은 baseline 의 남자가 여자보다 평균 체중이 더 무겁다.
비무작위 그룹 에서는 두 질문이 동치가 아니다. 무작위 배정이라면 (남녀를 무작위로 “처치/대조” 로 나눴다면) baseline 이 같아질 거라고 기대할 수 있어 두 분석의 답이 일치 한다. 그러나 성별처럼 자연 그룹은 baseline 자체가 다른 모집단이라 두 분석이 다른 의미를 가진다.
4 RCT 에서의 ANCOVA
무작위 배정 RCT 에서는 baseline 의 우연 차이가 작고 평균적으로 0. ANCOVA 와 change score 의 결론이 거의 일치 (효과 추정량은 약간 다를 수 있으나 같은 부호·유사 크기).
| 설계 | ANCOVA vs change score | 이유 |
|---|---|---|
| RCT (무작위) | 결론 일치 | baseline 차이 = 우연 (작은 표본만) |
| 비무작위 (관찰) | 결론 다를 수 있음 | baseline 차이 = 구조적 (Lord’s paradox) |
| Quasi-experiment | 결론 다를 가능성 큼 | baseline 차이 = systematic |
5 어느 것이 옳은가?
5.1 무작위 배정이라면
ANCOVA 가 검정력이 더 높으므로 우선. Change score 는 baseline 의 정보 일부만 활용 (\(\beta=1\) 가정). ANCOVA 는 \(\beta\) 를 데이터에서 추정.
5.2 비무작위 그룹이라면
둘 다 한계 가 있음. - ANCOVA: “baseline 이 같다면” 의 가상 비교 — selection bias 를 자동 제거하지 못함. - Change score: 그룹 내 평균 변화의 비교 — baseline 자체의 그룹 차이를 무시.
진짜 인과 효과 를 추정하려면 추가 가정 또는 도구: - DAG 기반 모형 (Pearl) - Inverse Probability Weighting (IPTW) - Difference-in-Differences (parallel trends 가정) - Regression Discontinuity Design
자세한 절차는 Causal Inference 시리즈 참조.
6 Adjusted Means 의 신뢰구간
각 보정 평균의 표준오차:
\[ SE(\bar Y_j^{\text{adj}}) = \sqrt{MS_W^{\text{ANCOVA}} \left[\frac{1}{n_j} + \frac{(\bar X_j - \bar X)^2}{\sum_{ij} (X_{ij} - \bar X)^2}\right]} \]
신뢰구간: \(\bar Y_j^{\text{adj}} \pm t_{\alpha/2, df} \cdot SE\).
두 그룹 간 차이의 SE 도 비슷하게 계산. 차이의 신뢰구간이 0 을 포함하지 않으면 그룹 간 처치 효과 유의.
7 Python 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Lord's paradox — 가상 데이터
np.random.seed(2026)
n = 50
# 남학생: baseline 70, 종말 70
male = pd.DataFrame({
"sex": ["M"] * n,
"X": np.random.normal(70, 5, n),
})
male["Y"] = 0.6 * male["X"] + 0.4 * 70 + np.random.normal(0, 2, n)
# 여학생: baseline 55, 종말 55
female = pd.DataFrame({
"sex": ["F"] * n,
"X": np.random.normal(55, 5, n),
})
female["Y"] = 0.6 * female["X"] + 0.4 * 55 + np.random.normal(0, 2, n)
data = pd.concat([male, female], ignore_index=True)
# Method 1: change score
data["D"] = data["Y"] - data["X"]
print("=== Change score t-test ===")
from scipy import stats
t1, p1 = stats.ttest_ind(data[data["sex"]=="M"]["D"], data[data["sex"]=="F"]["D"])
print(f" Mean change M = {data[data['sex']=='M']['D'].mean():.2f}")
print(f" Mean change F = {data[data['sex']=='F']['D'].mean():.2f}")
print(f" t = {t1:.3f}, p = {p1:.4f}")
# Method 2: ANCOVA
ancova_model = ols("Y ~ C(sex, Sum) + X", data=data).fit()
print("\n=== ANCOVA ===")
print(sm.stats.anova_lm(ancova_model, typ=2).round(3))
# Adjusted means
beta_hat = ancova_model.params["X"]
mean_X = data["X"].mean()
print(f"\nbeta_hat = {beta_hat:.3f}")
for sex in ["M", "F"]:
sub = data[data["sex"] == sex]
raw = sub["Y"].mean()
adj = raw - beta_hat * (sub["X"].mean() - mean_X)
print(f" {sex}: raw mean = {raw:.2f}, adjusted = {adj:.2f}")
# 두 분석의 결론이 다름
print("\n=== Lord's paradox in action ===")
print("Change score says: NO sex difference in weight change")
print("ANCOVA says: sex difference exists (after baseline adjustment)")8 결정 차트
설계 유형은?
├── 무작위 배정 RCT
│ └── ANCOVA 우선 (검정력 ↑). change score 보조.
│
├── 비무작위 자연 그룹 (성별, 직업 등)
│ ├── 인과 효과 관심 → Causal inference 도구 (DAG, IPTW, DiD)
│ └── 기술적 비교 관심 → 두 분석 모두 보고 + 한계 명시
│
└── Quasi-experiment (intervention but no random assignment)
└── DiD, RDD, IV 등으로 보강
9 가정과 한계
- 선형성: 공변량의 비선형 효과 시 변환 또는 다항식.
- 회귀 동질성: 위반 시 단일 \(\beta\) 의 추정이 무의미.
- 무작위 vs 비무작위 구분: Lord’s paradox 의 핵심.
- 인과 효과 추정의 한계: 관찰 연구에서는 ANCOVA 만으로 부족.
10 관련 주제
선행 지식
후속 주제
다른 카테고리 연결