1 CRD with Covariate
\[ Y_{ij} = \mu + \tau_j + \gamma(X_{ij} - \bar X) + \varepsilon_{ij}, \quad j = 1, \ldots, a; \ i = 1, \ldots, n_j \]
블록 효과 없음. covariate 만 추가. 검정 분모 \(df = N - a - 1\) (covariate 1 자유도 추가).
1.1 CRD ANCOVA vs CRD ANOVA
| CRD ANOVA | CRD ANCOVA | |
|---|---|---|
| 자유도 (residual) | \(N - a\) | \(N - a - 1\) |
| 잔차 SS | 큼 (covariate 무시) | 작음 (covariate 흡수) |
| 검정력 | 낮음 | 높음 (covariate 가 \(Y\) 와 상관 있을 때) |
ANCOVA 의 이득: covariate 가 \(Y\) 의 잡음을 일부 설명 → 잔차 ↓ → 검정력 ↑.
손실: 자유도 1 (covariate 추정에 사용). 거의 무시 가능 (큰 \(N\)).
RBD 의 블록은 이산적 covariate. ANCOVA 의 covariate 는 연속적.
블록의 이산 정보보다 연속 covariate 가 더 정밀할 수 있음 (정보 손실 ↓).
→ 가능하면 covariate (연속) 우선, 그 다음 블록 (이산).
2 Latin Square with Covariate
\(a \times a\) Latin Square 에 covariate 추가:
\[ Y_{ijk(l)} = \mu + \tau_l + \beta_i + \gamma_j + \delta(X_{ijk(l)} - \bar X) + \varepsilon \]
(행 \(\beta_i\), 열 \(\gamma_j\), 처치 \(\tau_l\), 공변량 \(\delta\).)
자유도: - 처치: \(a - 1\) - 행: \(a - 1\) - 열: \(a - 1\) - 공변량: 1 - 잔차: \(a^2 - 3(a-1) - 1 - 1 = (a-1)(a-2) - 1\)
작은 \(a\) 에서는 자유도 이득이 작음 (\(a = 4\) 면 잔차 5).
3 비직교 Two-Way + Covariate
표준 직교 two-way ANOVA 는 균등 셀이 전제. 셀이 다르면 (CRD 에서 처치 → 그룹별 표본 불균등 우연 발생) 비직교.
ANCOVA 추가 시 더욱 복잡. Type II/III SS 가 자동 (R car::Anova, statsmodels typ=3).
4 산업 사례 — 반도체 제조
4.1 가상 실험
3 처리 (etching 화학 A, B, C) × 4 wafer 위치 (블록), \(n_j\) 다양 (\(n_A = 6\), \(n_B = 5\), \(n_C = 7\)). \(Y\) = 회로 두께. \(X\) = wafer 의 baseline 두께 (처치 전 측정).
비균등 + covariate. CRD with covariate (블록 무시 시).
4.2 분석 — Type III SS
fit: Y ~ C(treatment) + X (sum coding)
Type III SS: drop each effect once
| Effect | \(SS\) | \(df\) | \(F\) | \(p\) |
|---|---|---|---|---|
| Treatment | 50 | 2 | 12.5 | 0.0003 |
| Covariate \(X\) | 200 | 1 | 100 | \(<0.001\) |
| Residual | 30 | 15 | 2 | — |
처치와 covariate 모두 매우 유의. covariate 가 강한 효과 → ANCOVA 의 가치.
5 Python 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
np.random.seed(2026)
treatments = ["A", "B", "C"]
n_per = {"A": 6, "B": 5, "C": 7}
treat_eff = {"A": 0, "B": 5, "C": -3}
gamma = 0.5
records = []
for t in treatments:
for _ in range(n_per[t]):
X = np.random.normal(50, 8)
Y = 100 + treat_eff[t] + gamma * (X - 50) + np.random.normal(0, 1.5)
records.append({"treatment": t, "X": X, "Y": Y})
data = pd.DataFrame(records)
# CRD ANOVA
model_anova = ols("Y ~ C(treatment, Sum)", data=data).fit()
print("=== CRD ANOVA (no covariate) ===")
print(sm.stats.anova_lm(model_anova, typ=2).round(3))
# CRD ANCOVA (Type III)
model_ancova = ols("Y ~ C(treatment, Sum) + X", data=data).fit()
print("\n=== CRD ANCOVA (Type III) ===")
print(sm.stats.anova_lm(model_ancova, typ=3).round(3))
# 검정력 비교
F_ano = sm.stats.anova_lm(model_anova).loc["C(treatment, Sum)", "F"]
F_anc = sm.stats.anova_lm(model_ancova, typ=3).loc["C(treatment, Sum)", "F"]
print(f"\nF (ANOVA) = {F_ano:.2f}, F (ANCOVA) = {F_anc:.2f}")
# Latin Square + covariate
print("\n=== Latin Square + Covariate ===")
ls_pattern = [
["A", "B", "C", "D"],
["B", "C", "D", "A"],
["C", "D", "A", "B"],
["D", "A", "B", "C"],
]
ls_records = []
for r_idx, row in enumerate(ls_pattern):
row_eff = np.random.normal(0, 4)
for c_idx, t in enumerate(row):
col_eff = np.random.normal(0, 2)
X = np.random.normal(50, 5)
y = (50 + treat_eff[t] + row_eff + col_eff
+ 0.5 * (X - 50) + np.random.normal(0, 1.5))
ls_records.append({"row": r_idx, "col": c_idx, "treatment": t,
"X": X, "Y": y})
ls_data = pd.DataFrame(ls_records)
ls_model = ols("Y ~ C(treatment) + C(row) + C(col) + X", data=ls_data).fit()
print(sm.stats.anova_lm(ls_model, typ=2).round(3))6 가정과 한계
- 균등 vs 비균등: 비균등은 Type II/III SS 권장.
- 회귀 동질성: 처치 그룹 간 같은 \(\gamma\).
- 결측 처리: covariate 결측은 분석 어려움 (multiple imputation 또는 mixed model).
- 선형성: \(X\) 와 \(Y\) 의 관계가 선형.
7 응용
| 분야 | 설계 | Covariate |
|---|---|---|
| 산업 (반도체) | CRD 비균등 | wafer baseline |
| 농학 | Latin Square | 토양 비옥도 |
| 임상 | 비균등 RCT | baseline severity |
| 교육 | RBD | 사전 시험 |
| ML | CRD 비균등 | dataset baseline accuracy |
8 ML 매핑
ML 모델 비교에서 dataset 수가 다름 (자연스러운 비균등):
Treatment: 모델 A (6 dataset), B (5 dataset), C (7 dataset).
Covariate: dataset 의 size 또는 difficulty.
비균등 ANCOVA 로 systematic 분석: - Type III SS. - Sum coding. - Mixed model 의 random dataset effect.
9 본 시리즈
G-MON8-0 개관
G-MON8-1 ANCOVA + RBD
G-MON8-2 CRD/Latin/비직교 ← 현재 글
G-MON8-3 비직교 + 다중 공변량
G-MON8-4 결측과 변환
10 관련 주제
선행 지식
후속 주제
11 더 읽을 거리
- Cochran, W. G., Cox, G. M. (1957). “Experimental Designs” (2nd ed). Wiley.
- Snedecor, G. W., Cochran, W. G. (1989). “Statistical Methods” (8th ed). Iowa State.
- Maxwell, S. E., Delaney, H. D. (2004). “Designing Experiments and Analyzing Data.”
- Pearce, S. C. (1983). “The Agricultural Field Experiment.” Wiley.