1 결정 차트
Within-subjects 데이터 분석 시작
↓
표본 충분 (n > a)?
├── No → Univariate 만 (multivariate 불가능)
└── Yes
↓
Sphericity 검정 (Mauchly)
├── 구형성 OK (p > 0.05) → Univariate ANOVA (ε 조정 불필요)
└── 구형성 위반 (p < 0.05)
↓
표본 크기 충분?
├── n > 2a → Multivariate (MANOVA / Hotelling)
└── n ≤ 2a → Univariate + ε 조정 (multivariate 검정력 약)
2 비교 요약
| 측면 | Univariate (with ε) | Multivariate (MANOVA) |
|---|---|---|
| Sphericity | 필요 (또는 ε) | 불필요 |
| 표본 요구 | 작아도 OK | \(n > a\) |
| 자유도 | 작음 (ε 조정 후) | 자유도 적음 (단순 \(a-1\)) |
| 검정력 (구형성 OK) | 높음 | 낮음 |
| 검정력 (구형성 위반) | 떨어짐 | 유지 |
| 분포 가정 | 정규성, 등분산 | 다변량 정규성, covariance 균등 |
| 결측 처리 | listwise 또는 multilevel | listwise |
Univariate 는 “모든 시점이 한 underlying 분산 구조 를 공유” 라고 가정해 자유도를 모두 합쳐 사용. 가정 만족 시 검정력 ↑.
Multivariate 는 “시점이 서로 다른 차원” 으로 보고 각자 별도 검정. 가정 적지만 자유도 손실.
구형성 이 두 접근의 분기점. ε 조정은 절충 — univariate 의 자유도를 줄여 sphericity 위반에 대응.
3 검정력 비교 — 실증 시뮬레이션
\(a = 4\) 시점, 처치 효과 \(f = 0.25\) (중간), various \(\rho\):
| \(n\) | \(\rho\) | Univariate (no correction) | Univariate (GG) | Multivariate |
|---|---|---|---|---|
| 10 | 0.0 (CS) | 0.65 | 0.62 | 0.45 |
| 10 | 0.5 (위반) | 0.78 (false power!) | 0.55 | 0.55 |
| 20 | 0.0 (CS) | 0.92 | 0.91 | 0.85 |
| 20 | 0.5 (위반) | 0.95 (false!) | 0.80 | 0.80 |
| 40 | 0.0 (CS) | 0.99 | 0.99 | 0.98 |
| 40 | 0.5 (위반) | 0.99 (false!) | 0.95 | 0.95 |
→ Sphericity 위반 시 univariate-no-correction 의 false power. ε 조정 또는 multivariate 권장.
큰 \(n\) 에서는 두 보정 결과 거의 같음.
4 보고 권장
세 결과를 모두 보고:
- Univariate ANOVA (정상 자유도)
- Univariate + GG 조정
- Multivariate (Wilks Λ)
세 결과가 일치하면 결론 안정. 다르면 sphericity 위반 정도와 표본 크기 검토.
5 가설 데이터 비교
\(n = 12\), \(a = 4\) 시점, AR(1) covariance (\(\rho = 0.6\)):
| 분석 | \(F\) | \(df\) | \(p\) |
|---|---|---|---|
| Univariate (no correction) | 8.0 | (3, 33) | \(<0.001\) |
| Univariate + GG (ε=0.65) | 8.0 | (1.95, 21.45) | 0.003 |
| Univariate + HF (ε=0.78) | 8.0 | (2.34, 25.74) | 0.001 |
| Multivariate (Wilks) | 9.5 | (3, 9) | 0.004 |
모두 유의하지만 \(p\) 값이 약간 다름. 결론 일치.
6 Multilevel Model 의 우위
세 옵션 모두 multilevel model 로 통합 처리 가능:
# CS (univariate ANOVA 와 동치)
lmer(Y ~ time + (1 | subject), data=...)
# AR(1)
lme(Y ~ time, random = ~1 | subject,
correlation = corAR1(form = ~time | subject), data=...)
# Unstructured (multivariate 와 동치)
lme(Y ~ time, random = ~1 | subject,
correlation = corSymm(form = ~1 | subject), data=...)AIC/BIC 로 공분산 구조 비교 → 데이터에 가장 잘 맞는 모형 선택.
7 Python 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import mixedlm
from statsmodels.stats.anova import AnovaRM
from statsmodels.multivariate.manova import MANOVA
np.random.seed(2026)
n = 12
a = 4
# AR(1) 데이터
rho = 0.6
sigma = 5
records = []
for subj in range(n):
pi = np.random.normal(0, 7)
eps = np.zeros(a)
eps[0] = np.random.normal(0, sigma)
for j in range(1, a):
eps[j] = rho * eps[j-1] + np.random.normal(0, sigma * np.sqrt(1-rho**2))
means = [100, 105, 110, 115]
for j in range(a):
records.append({"subject": subj, "time": j,
"Y": means[j] + pi + eps[j]})
data = pd.DataFrame(records)
# 1) Univariate ANOVA
aovrm = AnovaRM(data, "Y", "subject", within=["time"]).fit()
print("=== Univariate Within ANOVA ===")
print(aovrm.anova_table)
# 2) Multivariate (MANOVA)
wide = data.pivot(index="subject", columns="time", values="Y").reset_index()
wide.columns = ["subject"] + [f"t{c}" for c in wide.columns[1:]]
manova = MANOVA.from_formula("t0 + t1 + t2 + t3 ~ 1", data=wide)
print("\n=== MANOVA (one-sample on time differences) ===")
# 3) Mixed model with different covariance structures
md_cs = mixedlm("Y ~ C(time)", data=data, groups=data["subject"]).fit()
print("\n=== Mixed Model (CS) ===")
print(md_cs.summary().tables[1])
print(f"AIC: {md_cs.aic:.1f}, BIC: {md_cs.bic:.1f}")
# Note: statsmodels.mixedlm 은 AR(1) covariance 직접 지원 X
# nlme 또는 R 사용 권장8 결정 트리 — 실무
| 상황 | 권장 |
|---|---|
| 작은 \(n\), sphericity 만족 | Univariate (no correction) |
| 작은 \(n\), sphericity 의심 | Univariate + GG 조정 |
| 큰 \(n\), sphericity 위반 | Multivariate (Wilks 또는 Pillai) |
| 결측 데이터 있음 | Multilevel model (REML) |
| 시계열 자기상관 의심 | Multilevel + AR(1) 또는 Multivariate |
| 시점이 양적 변수 | Multilevel + 시간 slope (random) |
9 ML 매핑
ML 모델 평가에서:
Univariate: 각 metric 별 paired t-test, Bonferroni 보정. - accuracy: t = …, p = … (Bon) - F1: t = …, p = … (Bon) - AUC: t = …, p = … (Bon)
Multivariate: MANOVA 로 통합 검정. - 모든 metric 의 vector 차이 검정.
각 접근의 trade-off: - Univariate: 각 metric 별 효과 크기 명확. 다중 비교 부담. - Multivariate: 통합 검정. 어느 metric 이 dominant 한지 모호.
일반 권장: Multivariate omnibus → 유의 시 univariate follow-up. Bonferroni 보정.
10 가정과 한계
- 결측 데이터: 두 접근 모두 listwise. multilevel 권장.
- 분포 가정: multivariate 정규성 (작은 \(n\) 에서 약).
- 표본 크기: multivariate 는 \(n > a\) 필수.
- 시간 양적 변수: multilevel + slope 가 더 자연스러움.
11 통합 권장
# Python
md = mixedlm("Y ~ C(time)", data, groups="subject", re_formula="~1").fit()
# R
lmer(Y ~ time + (1 | subject), data=...)이는 모든 within-subjects 분석의 통합 framework. 결측 처리 + 공분산 구조 자유 + 양적 시간 지원.
ANOVA + ε 조정과 MANOVA 모두 multilevel 의 special case.
학술 보고에서는 ANOVA 형식이 익숙. 그러나 분석 정확도와 결측 처리는 multilevel 우위.
→ 두 결과 모두 보고하면 결론 안정성 검증.
12 MAX Ch.13 시리즈 정리
G-MAX13-0 Within-Subjects Multivariate 개관
G-MAX13-1 D Variable Formation + Hotelling T²
G-MAX13-2 Wilks Λ + Pillai + Hotelling-Lawley + Roy
G-MAX13-3 Univariate vs Multivariate 선택 ← 현재 글
↓
G-MAX14 (Higher-Order Within Multivariate)
G-MAX15 (Multilevel — 통합 framework)
13 관련 주제
선행 지식
후속 주제
- G-MAX14 — Higher-Order Within Multivariate
- G-MAX15 — Multilevel Models
다른 카테고리 연결
14 더 읽을 거리
- Maxwell, S. E., Delaney, H. D. (2004). “Designing Experiments and Analyzing Data.”
- Davis, C. S. (2002). “Statistical Methods for the Analysis of Repeated Measurements.” Springer.
- Hedeker, D., Gibbons, R. D. (2006). “Longitudinal Data Analysis.” Wiley.
- Fitzmaurice, G. M., Laird, N. M., Ware, J. H. (2011). “Applied Longitudinal Analysis” (2nd ed). Wiley.
- O’Brien, R. G., Kaiser, M. K. (1985). “MANOVA method for analyzing repeated measures designs.” Psychological Bulletin 97: 316-333.