ANCOVA 와 변환 개관 — 정통 DOE 의 보정 도구

Montgomery Ch.8 ANCOVA · Transformation Overview (역학·실험 lens)

Maxwell Ch.9 (G-MAX9) 가 ANCOVA 의 심리학적 lens 였다면 Montgomery Ch.8 은 농학·산업의 정통 DOE lens. RBD/CRD/Latin Square 의 incomplete 또는 비직교 설계에서 covariate 통제, 결측 처리, 응답 변환 (log, square root, Box-Cox) 을 통합적으로 정리한다. 분산 안정화 변환의 통계적 동기와 실무 적용도 다룬다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: ANCOVA in DOE Lens

기본 ANOVA 모형 (CRD, RBD, Latin Square 등) 에 공변량 \(X\) 를 회귀 항으로 추가하여 covariate 의 영향을 통제한 후 처치 효과를 추정.

CRD with covariate: \[ Y_{ij} = \mu + \tau_j + \beta(X_{ij} - \bar X) + \varepsilon_{ij} \]

RBD with covariate: \[ Y_{ij} = \mu + \tau_j + \beta_i + \gamma(X_{ij} - \bar X) + \varepsilon_{ij} \]

목적: 1. 분산 감소: covariate 가 잡음의 일부를 설명 → 검정력 ↑. 2. 편향 보정: covariate 의 우연 또는 구조적 차이 통제. 3. 결측 처리: 한 cell 결측이 다른 cells 에 미치는 영향 보정.

2 정통 DOE 의 ANCOVA — Maxwell 과 차이

Maxwell Ch.9 (G-MAX9) Montgomery Ch.8 (이 시리즈)
응용 분야 심리학, 임상 농학, 산업
강조점 Lord’s paradox, change score 결측, 변환, 비균등 설계
데이터 교육 점수, SBP 수확량, 수율
처치 모형 CRD, RBD RBD, Latin Square, factorial
변환 부수적 핵심 (heteroscedasticity 통제)

본 시리즈는 두 시각의 통합 — Maxwell 의 개념적 통찰 + Montgomery 의 실무적 도구.

3 Ch.8 의 5 단계

G-MON8-0  개관 (현재 글)
G-MON8-1  ANCOVA Intro + RBD
G-MON8-2  CRD/Latin Square + Non-Orthogonal Two-Way
G-MON8-3  비직교 + Multiple Covariates
G-MON8-4  결측 + 변환
    ↓
G-MON9 (Weighing Designs)

4 응용

분야 처치 공변량
농학 비료 토양 비옥도, 초기 식물 크기
임상 약물 baseline 점수
산업 공정 machine 의 calibration 값
동물 사료 초기 체중, 성별
교육 교수법 IQ, 사전 지식
IT UI 변종 사용자 사전 활동

5 변환 (Transformation) 의 통계적 동기

정의: Variance Stabilizing Transformation

응답의 분산이 평균에 의존 (heteroscedastic) 할 때, 변환 후 분산이 일정해지도록 하는 함수.

분산 ~ 평균 관계 변환
\(\text{Var}(Y) \propto E(Y)\) (Poisson) \(\sqrt{Y}\)
\(\text{Var}(Y) \propto E(Y)^2\) (lognormal-ish) \(\log Y\)
\(\text{Var}(Y) \propto E(Y)(1-E(Y))\) (binomial) \(\arcsin\sqrt{Y}\)
일반 Box-Cox \((Y^\lambda - 1)/\lambda\)

5.1 왜 변환이 ANOVA 에 중요한가

ANOVA 의 가정: 모든 그룹이 같은 분산. 위반 시 \(F\) 검정 부정확.

농학·산업 데이터 흔한 상황: - 수확량 (Poisson 비슷 — 분산이 평균에 비례) - 수율 (lognormal — 분산이 평균 제곱에 비례) - 비율 (binomial — 분산이 \(p(1-p)\))

변환 후 분산 일정해지면 ANOVA 정확.

5.2 Box-Cox 변환

\[ Y^{(\lambda)} = \begin{cases} (Y^\lambda - 1)/\lambda & \lambda \ne 0 \\ \log Y & \lambda = 0 \end{cases} \]

\(\lambda\) 를 데이터에서 추정 (likelihood 최대화):

\(\lambda\) 변환
1 identity (\(Y\))
0.5 square root
0 log
-0.5 reciprocal square root
-1 reciprocal

Profile likelihood 로 \(\hat\lambda\) 추정. 95% CI 가 1 을 포함하면 변환 불필요.

6 ANCOVA + 변환의 통합 절차

  1. 잔차 분석: 응답을 변환 없이 ANOVA → 잔차 vs 적합값 plot. 패턴 (funnel, curve) 점검.
  2. 분산-평균 관계 진단: 그룹별 분산을 그룹 평균에 plot. 패턴 식별.
  3. 변환 선택: Box-Cox 또는 도메인 지식.
  4. 변환 후 ANCOVA: covariate 통제 + 처치 효과 추정.
  5. 결과 보고: 변환된 척도와 원래 척도 모두에서 해석.

7 Python 코드 — 변환 진단

import numpy as np
import pandas as pd
import statsmodels.api as sm
from scipy import stats
import matplotlib.pyplot as plt

# 가상 데이터: lognormal 분포 (heteroscedastic)
np.random.seed(2026)
treatments = ["A", "B", "C", "D"]
true_means = {"A": 50, "B": 80, "C": 120, "D": 180}
n = 15

records = []
for t in treatments:
    mu = true_means[t]
    # lognormal 응답 — 분산이 평균 제곱에 비례
    log_mu = np.log(mu)
    Y = np.random.lognormal(log_mu, 0.3, n)
    for y in Y:
        records.append({"treatment": t, "Y": y})

data = pd.DataFrame(records)

# 잔차 분석
model = sm.OLS.from_formula("Y ~ C(treatment)", data=data).fit()
print("=== ANOVA without transformation ===")
print(sm.stats.anova_lm(model).round(3))

residuals = model.resid
fitted = model.fittedvalues

fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].scatter(fitted, residuals)
axes[0].set_xlabel("Fitted values")
axes[0].set_ylabel("Residuals")
axes[0].set_title("Residuals vs Fitted (heteroscedastic 의심)")

# 그룹별 분산
group_var = data.groupby("treatment")["Y"].var()
group_mean = data.groupby("treatment")["Y"].mean()
axes[1].scatter(group_mean, group_var)
axes[1].set_xlabel("Group mean")
axes[1].set_ylabel("Group variance")
axes[1].set_title("Variance vs Mean (Box-Cox 시사)")
plt.tight_layout()

# Box-Cox 변환
from scipy.stats import boxcox
Y_bc, lambda_hat = boxcox(data["Y"])
data["Y_bc"] = Y_bc
print(f"\nEstimated Box-Cox lambda = {lambda_hat:.3f}")
print("=> log transform OK" if abs(lambda_hat) < 0.2 else "=> 다른 변환")

# 변환 후 ANOVA
model_bc = sm.OLS.from_formula("Y_bc ~ C(treatment)", data=data).fit()
print("\n=== ANOVA after Box-Cox ===")
print(sm.stats.anova_lm(model_bc).round(3))

8 가정과 한계

  • 선형성: covariate 가 응답에 선형. 비선형 시 다항식 또는 GAM.
  • 회귀 동질성: 모든 그룹이 같은 기울기.
  • 변환의 한계: 변환 후 응답의 의미가 바뀜 (해석 어려움).
  • 결측 처리: ANCOVA 의 결측은 mixed model 또는 multiple imputation.

9 본 시리즈 흐름

G-MAX9 (ANCOVA — 심리학·임상 lens)
    │
    ▼
G-MON8-0  ── 개관 (현재 글)
    │
    ▼
G-MON8-1  ── ANCOVA Intro + RBD
G-MON8-2  ── CRD/Latin/Non-Orthogonal Two-Way
G-MON8-3  ── 비직교 + 다중 공변량
G-MON8-4  ── 결측 처리 + 변환 (Box-Cox)

10 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

Subscribe

Enjoy this blog? Get notified of new posts by email: