1 정의
여러 within 요인의 ANOVA 를 multivariate 접근으로 분석. 각 요인의 main 과 interaction 마다 별도의 multivariate 검정을 수행.
\(a \times b\) within 설계의 분석:
- \(A\) main: \(a-1\) 차원 D variable (across \(b\) levels 평균) → one-sample \(T^2\).
- \(B\) main: \(b-1\) 차원 D variable (across \(a\) levels 평균) → one-sample \(T^2\).
- \(A \times B\): \((a-1)(b-1)\) 차원 D variable (interaction contrast) → one-sample \(T^2\).
각 효과의 검정 분모는 자기 D variable 의 covariance matrix (Hotelling 의 정리).
2 왜 multivariate 인가 (재방문)
2.1 Sphericity 의 함정
univariate within ANOVA + ε 조정 (G-MAX11-3) 은 작동하지만: 1. ε 조정은 sphericity 위반 정도에 의존 — 데이터에 따라 보수적. 2. ε 추정의 자유도 의존성 — 작은 표본에서 부정확. 3. 다요인 within 에서는 각 효과마다 별도 ε.
multivariate 는 sphericity 가정 자체를 회피. 분석이 깔끔.
2.2 검정력 비교
| 상황 | Univariate (with ε) | Multivariate |
|---|---|---|
| Sphericity 만족, 큰 \(n\) | 약간 우위 | 약 |
| Sphericity 위반, 큰 \(n\) | 약 (ε 조정으로 힘듬) | 우위 |
| Sphericity 위반, 작은 \(n\) | 약 | 약 (자유도 부족) |
| 일반 권장 | \(n < 2a\) | \(n > 2a\) |
univariate 는 모든 시점 데이터를 한 분산 모형에 합쳐 자유도를 최대화 — sphericity 만족 시 가장 강력. 위반 시 ε 조정으로 자유도 줄어들고 검정력 ↓.
multivariate 는 시점을 별도 차원으로 보고 각자 covariance 추정 — 자유도 적지만 가정 없음. 표본이 충분하면 (n > a) 가정 자유의 이득이 자유도 손실 압도.
이는 통계의 보편적 trade-off: 모형 복잡도 (가정 적음) ↔︎ 자유도 손실. 다요인 within 에서는 multivariate 가 일반적으로 안전.
3 D Variable 의 multi-dimensional 형성
3.1 \(A\) main 의 D variable
각 피험자 \(i\) 에 대해 \(A\) levels 의 차이 (across \(B\) levels 평균):
\[ \bar Y_{ij}^{(A)} = \frac{1}{b} \sum_{k=1}^{b} Y_{ijk}, \quad j = 1, \ldots, a \]
D variable (직교 contrast 적용 가능):
\[ D_{i,j}^{(A)} = \sum_{j' = 1}^{a} c_{j'}^{(j)} \bar Y_{i,j'}^{(A)}, \quad j = 1, \ldots, a-1 \]
여기서 \(c^{(j)}\) 는 직교 contrast (예: 직교 다항식 또는 BIB 패턴).
\(\mathbf{D}_i^{(A)} \in \mathbb{R}^{a-1}\).
3.2 \(B\) main 의 D variable
비슷하게 across \(A\) levels 평균: \[ \bar Y_{ik}^{(B)} = \frac{1}{a} \sum_{j=1}^{a} Y_{ijk}, \quad k = 1, \ldots, b \]
\[ D_{i,k}^{(B)} = \sum_{k'} c_{k'}^{(k)} \bar Y_{i,k'}^{(B)}, \quad k = 1, \ldots, b-1 \]
3.3 \(A \times B\) 의 D variable
직교 contrast 의 곱 (Kronecker product):
\[ D_{i,jk}^{(AB)} = \sum_{j', k'} c_{j'}^{(j)} c_{k'}^{(k)} Y_{i,j',k'} \]
\((a-1)(b-1)\) 차원.
각 차원이 (선형 × 선형, 선형 × 이차, …) 같은 직교 분해 단위.
3.4 중요한 성질 — D variable 의 직교성
\(A\) main 의 D 는 across \(B\) 평균이라 \(B\) 의 효과가 cancel. 마찬가지로 \(B\) main 의 D 는 \(A\) 의 효과가 cancel. \(A \times B\) 의 D 는 두 main effect 모두 cancel.
따라서 세 D variable 의 효과가 서로 독립 (orthogonal). 각 검정이 다른 효과에 영향받지 않는다.
4 검정 절차
각 효과마다 자기 D variable 로 Hotelling \(T^2\) (one-sample) 또는 MANOVA (between-groups 포함 시).
| 효과 | D 차원 | 검정 |
|---|---|---|
| \(A\) main | \(a-1\) | one-sample \(T^2\) on \(\mathbf{D}^{(A)}\) |
| \(B\) main | \(b-1\) | one-sample \(T^2\) on \(\mathbf{D}^{(B)}\) |
| \(A \times B\) | \((a-1)(b-1)\) | one-sample \(T^2\) on \(\mathbf{D}^{(AB)}\) |
자유도 1 효과 (예: \(a=2\) 의 \(A\)) 는 paired \(t\)-test 와 동치.
4.1 Hotelling \(T^2\)
\[ T^2 = n \, \bar{\mathbf{D}}^T \mathbf{S}_D^{-1} \bar{\mathbf{D}} \]
\(F\) 변환: \[ F = \frac{n - p}{p (n - 1)} T^2 \sim F(p, n-p) \]
\(p\) = D 차원.
4.2 Wilks Λ (MANOVA, 그룹 비교 시)
between-subjects 그룹 (예: 처치) × within (시점) 의 split-plot 다변량 (\(G\)-MAX14-3):
\[ \Lambda = \frac{|\mathbf{E}|}{|\mathbf{H} + \mathbf{E}|} \]
\(\mathbf{H}\) = hypothesis matrix (그룹 효과), \(\mathbf{E}\) = error matrix.
5 각 효과별 단계적 분석
5.1 Step 1 — Total \(T^2\) (omnibus)
모든 효과 (\(A\), \(B\), \(A\times B\)) 의 결합 \(T^2\). 자유도 \(a \cdot b - 1\).
유의면 follow-up 진행.
5.2 Step 2 — 각 main effect 검정
\(A\) main 의 \(T^2\) (\(a-1\) 차원), \(B\) main (\(b-1\) 차원).
각각 다른 D variable 로 검정.
5.3 Step 3 — Interaction 검정
\(A \times B\) 의 \(T^2\) (\((a-1)(b-1)\) 차원).
유의면 simple interaction effect (각 level 에서 다른 요인의 효과) 분석으로 진행.
5.4 Step 4 — Univariate Follow-up (선택)
각 D 차원의 univariate paired \(t\)-test: - 직교 다항식 사용 시 — “선형 추세는 강함, 이차는 약함” 같은 구체 결론. - 명목 contrast 사용 시 — “level 1 vs level 2 는 다름, level 3 vs level 4 는 같음”.
multivariate 통합 검정 + univariate 차원별 검정의 결합 사용.
6 가정과 한계
6.1 Multivariate 정규성
각 D variable 의 다변량 정규.
검정: Mardia’s test, Henze-Zirkler test. 큰 표본에서 robust.
6.2 표본 충분
$n > $ 가장 큰 D 차원. 작은 표본 + 큰 차원 → covariance matrix 추정 부정확.
| \(a, b\) | \(A \times B\) 차원 | 권장 \(n\) |
|---|---|---|
| 2, 3 | 2 | \(\ge 10\) |
| 3, 3 | 4 | \(\ge 15\) |
| 3, 4 | 6 | \(\ge 20\) |
| 4, 4 | 9 | \(\ge 25\) |
6.3 결측 데이터
multivariate 는 listwise — 한 시점 결측이면 그 피험자 전체 제거. 큰 손실.
대안: multilevel model (REML) 로 결측 자동 처리.
6.4 그룹 간 covariance 균등 (split-plot)
between-subjects 그룹 (G-MAX14-3) 분석 시 그룹 간 covariance 가 같다는 가정. Box’s M test 로 검정.
7 가설 사례 — 학습 시간 × 학습 형식
7.1 데이터
요인: - \(A\) = 학습 형식 (반복, 검색). - \(B\) = 학습 시점 (1, 2, 3 시간 후 측정).
피험자: 각 학생이 모든 4 셀 측정 (within design). \(n = 15\) 학생.
7.2 셀 평균 (가상)
| 1h | 2h | 3h | |
|---|---|---|---|
| 반복 | 5 | 7 | 8 |
| 검색 | 6 | 10 | 13 |
7.3 D variables 계산
7.3.1 A main (across B 평균)
\(\bar Y^{(A)}_{i,\text{반복}} = (Y_{i,\text{반복},1} + Y_{i,\text{반복},2} + Y_{i,\text{반복},3}) / 3\)
\(\bar Y^{(A)}_{i,\text{검색}} = (Y_{i,\text{검색},1} + Y_{i,\text{검색},2} + Y_{i,\text{검색},3}) / 3\)
\(D_i^{(A)} = \bar Y^{(A)}_{i,\text{검색}} - \bar Y^{(A)}_{i,\text{반복}}\)
가상 \(\bar D^{(A)} = (9.7 - 6.7) = 3.0\).
이는 자유도 1 → paired \(t\)-test.
7.3.2 B main (across A 평균)
\(\bar Y^{(B)}_{i,k} = (Y_{i,\text{반복},k} + Y_{i,\text{검색},k}) / 2\)
D variables: - \(D_{i,1}^{(B)} = \bar Y^{(B)}_{i,2h} - \bar Y^{(B)}_{i,1h}\) - \(D_{i,2}^{(B)} = \bar Y^{(B)}_{i,3h} - \bar Y^{(B)}_{i,1h}\)
\(\bar D^{(B)} = (3.0, 5.0)\). Hotelling \(T^2\) 검정.
7.3.3 A × B interaction
직교 contrast 곱: - \(A\) contrast: \((\text{반복: } -1, \text{검색: } +1)\) - \(B\) linear: \((1h: -1, 2h: 0, 3h: +1)\) - \(B\) quadratic: \((1h: +1, 2h: -2, 3h: +1)\)
\(D_i^{(AB, \text{lin})} = \sum_{j,k} c^A_j c^{B,\text{lin}}_k Y_{ijk}\) \(= -(-1) Y_{i,\text{반복},1h} + 0 + (-1)(+1) Y_{i,\text{반복},3h} + (+1)(-1) Y_{i,\text{검색},1h} + 0 + (+1)(+1) Y_{i,\text{검색},3h}\) \(= Y_{i,\text{반복},1h} - Y_{i,\text{반복},3h} - Y_{i,\text{검색},1h} + Y_{i,\text{검색},3h}\)
가상 평균: \(5 - 8 - 6 + 13 = 4\).
\(D_i^{(AB, \text{quad})}\): 비슷하게 계산. 가상 평균 ≈ 0.
Hotelling \(T^2\) on \((\bar D^{(AB,\text{lin})}, \bar D^{(AB,\text{quad})}) = (4, 0)\).
검정 결과: \(A\), \(B\), \(A \times B\) 모두 강하게 유의. 검색 학습이 시간이 지날수록 더 큰 효과 (interaction 의 linear 차원이 dominant).
8 Python 코드
import numpy as np
import pandas as pd
from scipy import stats
np.random.seed(2026)
n = 15
A_levels = ["반복", "검색"]
B_levels = [1, 2, 3]
records = []
cell_means = {("반복",1):5, ("반복",2):7, ("반복",3):8,
("검색",1):6, ("검색",2):10, ("검색",3):13}
for subj in range(n):
pi = np.random.normal(0, 4)
for a in A_levels:
for b in B_levels:
y = cell_means[(a, b)] + pi + np.random.normal(0, 1.5)
records.append({"subject": subj, "A": a, "B": b, "Y": y})
data = pd.DataFrame(records)
# Wide format
wide = data.pivot_table(index="subject", columns=["A", "B"], values="Y")
# 1) A main effect
A_means = data.groupby(["subject", "A"])["Y"].mean().unstack()
D_A = A_means["검색"] - A_means["반복"]
t_A, p_A = stats.ttest_1samp(D_A, 0)
print(f"=== A main (검색 vs 반복) ===")
print(f" D̄_A = {D_A.mean():.3f}")
print(f" t({n-1}) = {t_A:.2f}, p = {p_A:.4f}")
# 2) B main effect (multivariate, 2 차원)
B_means = data.groupby(["subject", "B"])["Y"].mean().unstack()
D_B = pd.DataFrame({
"B2-B1": B_means[2] - B_means[1],
"B3-B1": B_means[3] - B_means[1],
})
D_bar_B = D_B.mean().values
S_D_B = D_B.cov().values
T2_B = n * D_bar_B @ np.linalg.inv(S_D_B) @ D_bar_B
F_B = (n - 2) / (2 * (n - 1)) * T2_B
p_B = 1 - stats.f.cdf(F_B, 2, n - 2)
print(f"\n=== B main (시점 1, 2, 3) ===")
print(f" D̄_B = {D_bar_B}")
print(f" T² = {T2_B:.2f}, F({2},{n-2}) = {F_B:.2f}, p = {p_B:.4f}")
# 3) A × B interaction (direct contrast)
# c^A = (-1, +1), c^B = orthogonal polynomials
c_A = {"반복": -1, "검색": +1}
c_B_lin = {1: -1, 2: 0, 3: +1}
c_B_quad = {1: +1, 2: -2, 3: +1}
D_AB_lin = []
D_AB_quad = []
for subj in range(n):
sub = data[data["subject"] == subj]
cell_dict = {(row["A"], row["B"]): row["Y"] for _, row in sub.iterrows()}
d_lin = sum(c_A[a] * c_B_lin[b] * cell_dict[(a, b)]
for a in A_levels for b in B_levels)
d_quad = sum(c_A[a] * c_B_quad[b] * cell_dict[(a, b)]
for a in A_levels for b in B_levels)
D_AB_lin.append(d_lin)
D_AB_quad.append(d_quad)
D_AB = np.column_stack([D_AB_lin, D_AB_quad])
D_AB_bar = D_AB.mean(axis=0)
S_AB = np.cov(D_AB, rowvar=False)
T2_AB = n * D_AB_bar @ np.linalg.inv(S_AB) @ D_AB_bar
F_AB = (n - 2) / (2 * (n - 1)) * T2_AB
p_AB = 1 - stats.f.cdf(F_AB, 2, n - 2)
print(f"\n=== A × B interaction ===")
print(f" D̄_AB = {D_AB_bar}")
print(f" T² = {T2_AB:.2f}, F = {F_AB:.2f}, p = {p_AB:.4f}")
# 차원별 univariate
t_lin, p_lin = stats.ttest_1samp(D_AB_lin, 0)
t_quad, p_quad = stats.ttest_1samp(D_AB_quad, 0)
print(f" AB-linear: t = {t_lin:.2f}, p = {p_lin:.4f}")
print(f" AB-quadratic: t = {t_quad:.2f}, p = {p_quad:.4f}")9 Univariate vs Multivariate 결정 (재방문)
| 상황 | 권장 |
|---|---|
| 시점 간 상관 일정 (CS), 작은 \(n\) | Univariate ANOVA + ε 조정 |
| 시점 간 상관 감쇠 (AR(1)), 큰 \(n\) | Multivariate 또는 multilevel + AR(1) |
| 결측 시점 있음 | Multilevel (REML) |
| 시점이 양적 변수 | Multilevel + 시간 slope (random) |
| 일반 권장 (간단) | Univariate + GG ε |
| 일반 권장 (정확) | Multilevel REML |
multivariate 가 multilevel 의 특수 사례 (UN covariance) 라 multilevel 이 통합적.
10 Ch.14 의 4 단계
G-MAX14-0 개관 (현재 글)
G-MAX14-1 2×2 Within D Variable Formation
G-MAX14-2 a×b Design Extension
G-MAX14-3 Split-Plot Multivariate + Decision
↓
G-MAX15 (Multilevel — 통합 framework)
11 응용
| 분야 | 시나리오 |
|---|---|
| 임상 RCT | 처치 (between) × 시점 (within) × 측정 위치 (within) |
| 심리학 | 학습 시간 × 형식 × 동기 (모두 within) |
| 농학 | 비료 (between) × 시점 (within) × 측정 위치 (within) |
| IT longitudinal | 사용자 그룹 × UI × 시점 |
| 운동학 | 처치 (within) × 측정 위치 (within) — 같은 사람의 다른 근육 |
12 다변량 vs Multilevel 의 통합 시각
multivariate (MANOVA on D variables) 와 multilevel (REML with UN covariance) 는 균등 완전 데이터에서 같은 결과.
차이: - MANOVA: 시점을 명시적 vector 로 모형. 결측 시 listwise. - Multilevel: 시점을 long format 으로 모형 (one row per measurement). 결측 자동.
학계 표준은 multilevel — 결측 처리 우위 + 비균등 데이터에 강. 정통 DOE 의 multivariate 는 균등 데이터에 simple.
본 시리즈는 두 lens 를 모두 다룸 (G-MAX13~14: multivariate; G-MAX15~16: multilevel). 실무에서는 후자가 일반적.
13 관련 주제
선행 지식
후속 주제
- G-MAX14-1: 2×2 Within D Formation
- G-MAX14-2: a×b Extension
- G-MAX14-3: Split-Plot Multivariate
- G-MAX15 — Multilevel (통합)
다른 카테고리 연결
14 더 읽을 거리
- Tabachnick, B. G., Fidell, L. S. (2019). “Using Multivariate Statistics” (7th ed). Pearson — multivariate 의 표준 textbook.
- Hand, D. J., Taylor, C. C. (1987). “Multivariate Analysis of Variance and Repeated Measures.” Chapman & Hall — repeated measures 의 multivariate 정통.
- Maxwell, S. E., Delaney, H. D. (2004). “Designing Experiments and Analyzing Data: A Model Comparison Perspective” (2nd ed). Lawrence Erlbaum — Ch.14 의 본 시리즈 source.
- Stevens, J. P. (2009). “Applied Multivariate Statistics for the Social Sciences” (5th ed). Routledge.