1 정의
요인 \(A\) fixed (\(a\) levels), 요인 \(B\) random (\(b\) levels, \(\beta_k \sim N(0, \sigma^2_\beta)\)).
\[ Y_{ijk} = \mu + \alpha_j + \beta_k + (\alpha\beta)_{jk} + \varepsilon_{ijk} \]
\((\alpha\beta)_{jk}\) 의 처리:
- Unrestricted: \((\alpha\beta)_{jk} \sim N(0, \sigma^2_{\alpha\beta})\) 모든 \(j, k\) 독립.
- Restricted: \(\sum_j (\alpha\beta)_{jk} = 0\) (각 \(k\) 마다 합 0).
두 parameterization 은 EMS 가 약간 다름. 일반적으로 unrestricted 가 default (R lme4, SAS PROC MIXED).
2 EMS — Unrestricted (일반)
| Source | EMS |
|---|---|
| \(A\) (fixed) | \(\sigma^2 + n \sigma^2_{\alpha\beta} + nb \theta_\alpha\) |
| \(B\) (random) | \(\sigma^2 + n \sigma^2_{\alpha\beta} + na \sigma^2_\beta\) |
| \(A \times B\) | \(\sigma^2 + n \sigma^2_{\alpha\beta}\) |
| Error | \(\sigma^2\) |
검정 분모: - \(A\): \(MS_{AB}\) - \(B\): \(MS_{AB}\) - \(A \times B\): \(MS_E\)
3 EMS — Restricted
| Source | EMS |
|---|---|
| \(A\) (fixed) | \(\sigma^2 + n \sigma^2_{\alpha\beta} + nb \theta_\alpha\) |
| \(B\) (random) | \(\sigma^2 + na \sigma^2_\beta\) ← 차이 |
| \(A \times B\) | \(\sigma^2 + n \sigma^2_{\alpha\beta}\) |
| Error | \(\sigma^2\) |
검정 분모: - \(A\): \(MS_{AB}\) - \(B\): \(MS_E\) ← 차이 (unrestricted 에서는 \(MS_{AB}\)) - \(A \times B\): \(MS_E\)
- SAS PROC GLM
RANDOM옵션: unrestricted (Hocking, 1973). - SAS PROC MIXED, R
lme4::lmer: restricted (Searle, 1971) — 표준 mixed model. - SPSS GLM RANDOM: unrestricted.
분석 결과를 보고하거나 재현할 때 어느 parameterization 인지 명시. \(B\) 의 검정 분모가 다른 두 패키지가 충돌하면 이 문제가 원인.
4 가설 데이터 — 임상센터 효과
처치 (\(A\), fixed: 약 A, B, 위약) × 임상센터 (\(B\), random: 5 센터), \(n=4\) 환자/센터/처치.
가설 ANOVA:
| Source | \(SS\) | \(df\) | \(MS\) | EMS | 분모 | \(F\) |
|---|---|---|---|---|---|---|
| \(A\) | 600 | 2 | 300 | \(\sigma^2 + 4\sigma^2_{AB} + 20\theta_\alpha\) | \(MS_{AB}\) | \(300/40 = 7.5\) |
| \(B\) | 200 | 4 | 50 | unrestricted: \(\sigma^2 + 4\sigma^2_{AB} + 12\sigma^2_\beta\) | \(MS_{AB}\) | \(50/40 = 1.25\) |
| restricted: \(\sigma^2 + 12\sigma^2_\beta\) | \(MS_E\) | \(50/15 = 3.3\) | ||||
| \(A \times B\) | 320 | 8 | 40 | \(\sigma^2 + 4\sigma^2_{AB}\) | \(MS_E\) | \(40/15 = 2.7\) |
| Error | 675 | 45 | 15 | \(\sigma^2\) | — | — |
\(B\) 의 결과가 두 parameterization 에서 다름. 처치 (\(A\)) 와 상호작용 결과는 동일.
5 분모가 없을 때 — Satterthwaite Approximation
세 요인 mixed (예: \(A\) fixed, \(B, C\) random) 에서는 어느 effect 의 분모가 다른 source 의 MS 와 정확히 매칭하지 않을 수 있다.
해결: Satterthwaite approximation — 여러 MS 의 선형 결합을 분모로 만들고 자유도를 근사.
5.1 일반 형태
분모로 \(a_1 MS_1 + a_2 MS_2 - a_3 MS_3\) 같은 선형 결합이 필요할 때:
\[ F^* = \frac{MS_{\text{numerator}}}{a_1 MS_1 + a_2 MS_2 - a_3 MS_3} \]
자유도: \[ df_{\text{denom}} = \frac{(a_1 MS_1 + a_2 MS_2 - a_3 MS_3)^2}{(a_1 MS_1)^2 / df_1 + (a_2 MS_2)^2 / df_2 + (a_3 MS_3)^2 / df_3} \]
(Welch-Satterthwaite 공식의 일반화.)
이 approximation 의 정확도는: - 분모의 항이 적을수록 정확. - 각 항의 자유도가 클수록 정확.
REML 기반 mixed model (R lme4, SAS PROC MIXED) 이 자동 처리.
6 분산 성분 추정 — REML 우위
ANOVA-based 추정 (EMS 식의 차이) 는 균등 데이터에서 정확. 비균등 또는 결측 시 부정확.
REML 은 likelihood 기반 — 비균등·결측을 자동 처리. 분산 성분 비편향.
권장: - 균등 데이터 + 큰 표본 → ANOVA-based OK. - 일반 → REML default.
6.1 분산 성분의 추정 절차
- ANOVA 표 계산.
- EMS 식에 따라 분산 성분 산출: \[ \hat\sigma^2 = MS_E \] \[ \hat\sigma^2_{\alpha\beta} = (MS_{AB} - MS_E) / n \] \[ \hat\sigma^2_\beta = (MS_B - MS_{AB}) / na \quad (\text{unrestricted}) \]
- 음수 추정 시 0 으로 truncate.
REML 자동 처리 (R lme4, statsmodels mixedlm).
7 검정력 — Mixed Model 의 특이성
Two-way mixed 의 \(A\) (fixed) 검정 분모는 \(MS_{AB}\) — 자유도 \((a-1)(b-1)\) 만.
\(b\) 가 작으면 (예: 5 센터 → 자유도 8) \(A\) 검정력 매우 약.
해결: - \(b\) ↑: 더 많은 random level 추가 (더 많은 센터). - \(a\) ↑: 자유도 ↑.
이는 multilevel 의 일반 원리: random factor 의 cluster 수가 fixed effect 검정력의 핵심.
7.1 표본 크기 고려
- \(b = 5\), \(n = 4\): \(A\) 검정 자유도 8. 검정력 약.
- \(b = 10\), \(n = 4\): 자유도 18. 중간.
- \(b = 20\), \(n = 4\): 자유도 38. 좋음.
multilevel 연구 설계의 핵심: cluster 수 (\(b\)) 를 충분히 (≥ 20~30) 확보.
8 Python 코드 — Mixed Model
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols, mixedlm
np.random.seed(2026)
n = 4
A_levels = ["DrugA", "DrugB", "Placebo"]
B_levels = list(range(5))
records = []
A_eff = {"DrugA": -10, "DrugB": -5, "Placebo": 0}
B_eff = np.random.normal(0, np.sqrt(3), 5)
AB_eff = np.random.normal(0, np.sqrt(6), (3, 5))
for ai, a in enumerate(A_levels):
for bi, b in enumerate(B_levels):
for _ in range(n):
y = (100 + A_eff[a] + B_eff[bi] + AB_eff[ai, bi]
+ np.random.normal(0, np.sqrt(15)))
records.append({"A": a, "B": b, "Y": y})
data = pd.DataFrame(records)
# Standard fixed-effects ANOVA (incorrect for mixed)
fixed_model = ols("Y ~ C(A) * C(B)", data=data).fit()
anova = sm.stats.anova_lm(fixed_model, typ=2)
ms_a = anova.loc["C(A)", "mean_sq"]
ms_b = anova.loc["C(B)", "mean_sq"]
ms_ab = anova.loc["C(A):C(B)", "mean_sq"]
ms_e = anova.loc["Residual", "mean_sq"]
# Mixed model 분모 적용
from scipy import stats as sps
print("=== Mixed Model F tests (manual) ===")
# A: F = MS_A / MS_AB, df=(2, 8)
F_A = ms_a / ms_ab
p_A = 1 - sps.f.cdf(F_A, anova.loc["C(A)", "df"], anova.loc["C(A):C(B)", "df"])
print(f"A: F = {F_A:.2f}, df = ({anova.loc['C(A)','df']:.0f}, "
f"{anova.loc['C(A):C(B)','df']:.0f}), p = {p_A:.4f}")
# B (unrestricted): F = MS_B / MS_AB
F_B_unrest = ms_b / ms_ab
p_B_unrest = 1 - sps.f.cdf(F_B_unrest, anova.loc["C(B)", "df"], anova.loc["C(A):C(B)", "df"])
print(f"B (unrestricted): F = {F_B_unrest:.2f}, p = {p_B_unrest:.4f}")
# B (restricted): F = MS_B / MS_E
F_B_rest = ms_b / ms_e
p_B_rest = 1 - sps.f.cdf(F_B_rest, anova.loc["C(B)", "df"], anova.loc["Residual", "df"])
print(f"B (restricted): F = {F_B_rest:.2f}, p = {p_B_rest:.4f}")
# A:B: F = MS_AB / MS_E
F_AB = ms_ab / ms_e
p_AB = 1 - sps.f.cdf(F_AB, anova.loc["C(A):C(B)", "df"], anova.loc["Residual", "df"])
print(f"A:B: F = {F_AB:.2f}, p = {p_AB:.4f}")
# REML via mixedlm
print("\n=== REML mixed model (statsmodels) ===")
md = mixedlm("Y ~ C(A)", data=data, groups=data["B"], re_formula="~C(A)").fit()
print(md.summary())
# 분산 성분 추정
print("\n=== Variance components ===")
print(f" σ² = {md.scale:.3f}")
print(f" σ²_β = {md.cov_re.iloc[0, 0]:.3f}")9 Random Slope Mixed
Mixed 의 일반화: random slope (각 random group 마다 다른 회귀 계수).
md = mixedlm("Y ~ time", data=data, groups=data["subject"],
re_formula="~time").fit() # random intercept + slope이는 multilevel growth curve 의 정수 (G-MAX15-3).
10 실무 절차 — Mixed Model 분석
Step 1: 데이터 구조 파악
- 어느 요인이 fixed? Random?
- 균등 vs 비균등?
- 결측?
Step 2: Mixed model fit (REML default)
- R: lmer(Y ~ A + (1 | B), data = ...)
- Python: mixedlm("Y ~ A", data, groups="B").fit()
Step 3: Fixed effect 검정
- REML model 에서 Wald 또는 LRT (ML 로 refit 필요).
Step 4: Random effect 검정
- LRT for σ² > 0 (boundary issue).
- simulation-based 검정 (R `RLRsim`).
Step 5: 분산 성분 보고
- 각 random source 의 σ², ICC.
Step 6: Random effect 의 BLUP (개인별 추정)
- random_effects attribute.
11 가정과 한계
11.1 Random Effect 의 정규성
작은 \(b\) (\(\le 5\)) 에서 신뢰구간 약. 큰 \(b\) (\(\ge 20\)) 에서 robust.
11.2 Restricted vs Unrestricted
패키지 default 점검 필수. 결과 보고 시 명시.
11.3 균등 데이터
ANOVA 표 기반 검정의 전제. 비균등은 REML.
11.4 상호작용의 random 처리
fixed × random 의 상호작용은 자동 random. 일부 패키지에서는 명시 필요.
12 응용
12.1 1. 다센터 임상시험
처치 (fixed) × 센터 (random). 표준 분석.
12.2 2. 교육 다학교 연구
교수법 (fixed) × 학교 (random). 학교 random sample 의 일반화.
12.3 3. 농학 다농장 비교
비료 (fixed) × 농장 (random).
12.4 4. ML 다도메인 평가
architecture (fixed) × dataset (random). cross-domain 일반화 평가.
13 ML 매핑
ML 모델을 여러 데이터셋에 평가:
Fixed: model architecture (3 가지)
Random: dataset (random sample of domains)
각 dataset 마다 다른 baseline 정확도 → random effect.
분석: \[ \text{Accuracy}_{ij} = \mu + \alpha_{\text{model}, j} + \beta_{\text{dataset}, i} + \varepsilon \]
처치 효과 (어느 모델이 좋은가) 검정 분모: \(MS_{\text{model} \times \text{dataset}}\).
이는 ML 의 cross-domain 일반화 평가의 통계적 형식. dataset 가 많을수록 결론 일반화 ↑.
14 본 챕터의 다음 단계
G-MAX10-0 Random/Nested 개관
G-MAX10-1 Fixed vs Random + EMS
G-MAX10-2 Two-way Mixed + Error Term ← 현재 글
│
▼
G-MAX10-3 Nested Design + Variance Components
15 관련 주제
선행 지식
후속 주제
- G-MAX10-3: Nested Design
- G-MAX15 — Multilevel Models (통합 framework)
다른 카테고리 연결
16 더 읽을 거리
- Searle, S. R., Casella, G., McCulloch, C. E. (2006). “Variance Components.” Wiley.
- Hocking, R. R. (1973). “A discussion of the two-way mixed model.” American Statistician 27(4): 148-152 — restricted vs unrestricted.
- Pinheiro, J. C., Bates, D. M. (2000). “Mixed-Effects Models in S and S-PLUS.” Springer.
- Bates, D., Mächler, M., Bolker, B., Walker, S. (2015). “Fitting linear mixed-effects models using lme4.” Journal of Statistical Software 67(1).
- Maxwell, S. E., Delaney, H. D. (2004). “Designing Experiments and Analyzing Data: A Model Comparison Perspective” (2nd ed). Lawrence Erlbaum.