1 정의
Within-subjects 의 \(a\) 시점 측정의 covariance matrix \(\Sigma\) 에 대해, 모든 처치 쌍의 차이의 분산이 같다.
\[ \text{Var}(Y_{ij} - Y_{ij'}) = c \quad (\forall j \ne j') \]
이는 \(\Sigma\) 의 형태에 다음 제약을 준다.
- Compound Symmetry (CS): 모든 분산 같음, 모든 공분산 같음 → 구형성 만족.
- Spherical: CS 의 일반화. 차이 점수 분산이 같으면 OK.
- Unstructured (UN): 분산·공분산 모두 다를 수 있음 → 구형성 일반적으로 위반.
1.1 수학적 형식화
\(\Sigma\) 의 구형성 정의 (Huynh & Feldt, 1970):
\[ \Sigma = \lambda \mathbf{I} + \mathbf{\xi} \mathbf{1}^T + \mathbf{1} \mathbf{\xi}^T \]
(scalar \(\lambda > 0\), vector \(\xi\) 는 합이 0 인 vector.)
이 형태의 \(\Sigma\) 는 모든 차이 점수 분산이 \(2\lambda\) 로 일정.
2 CS, AR(1), UN 의 관계
| 구조 | 분산 | 공분산 | 구형성 |
|---|---|---|---|
| Compound Symmetry (CS) | 모두 같음 | 모두 같음 | ✓ |
| First-order Autoregressive (AR(1)) | 모두 같음 | \(\rho^{|j-j'|}\) 거리에 따라 감소 | ✗ |
| Toeplitz | 모두 같음 | 거리별 다름 (자유) | 일반적 ✗ |
| Unstructured (UN) | 자유 | 자유 | 일반적 ✗ |
| Identity | 모두 같음 | 모두 0 | ✓ (special case) |
종단 (longitudinal) 데이터는 인접 시점의 측정이 더 강한 상관을 가진다. 1주 후 vs 2주 후 는 1주 후 vs 12주 후 보다 더 강한 상관 — 자연스러운 자기상관.
이는 자연스럽게 AR(1) 구조를 따르며, 구형성을 위반한다.
해결: ε 조정 (Greenhouse-Geisser, Huynh-Feldt) 또는 multilevel model 로 명시적 공분산 구조 적합.
3 Mauchly 의 구형성 검정
귀무가설 \(H_0\): 모집단 covariance matrix 가 구형.
검정 통계량: \[ W = \frac{|\hat\Sigma|}{(\text{tr}(\hat\Sigma) / (a-1))^{a-1}} \]
(분모는 covariance 의 평균 eigenvalue 의 \(a-1\) 거듭제곱.)
\(W \approx 1\): 구형성 만족. \(W \to 0\): 위반.
큰 표본에서 \(-\log W\) 가 \(\chi^2\) 근사.
해석: - \(p > 0.05\): 구형성 가정 채택 (단, 검정력 약). - \(p < 0.05\): 구형성 위반, ε 조정 필수.
작은 표본 (\(n < 15\)) 에서 Mauchly 의 검정력이 매우 약. 비유의가 “구형성 OK” 를 보장 하지 않는다.
일반 권장: 항상 ε 조정을 적용 (보수적 접근). Greenhouse-Geisser 가 가장 보수적, Huynh-Feldt 가 약간 자유로움.
ε 의 lower bound 는 \(1/(a-1)\) (가장 보수적). 자유도가 \(\epsilon \cdot (a-1)\), \(\epsilon \cdot (a-1)(n-1)\) 로 축소.
3.1 자유도 1 의 효과는 자동 만족
\(a = 2\) 의 within 효과 — 차이 점수 1 종류뿐 → sphericity 자동.
ε 조정 불필요. paired t-test = within ANOVA.
4 ε 조정 — 자유도 축소
ε (epsilon) 은 구형성 위반의 정도를 측정 (1 = 완전 만족, \(1/(a-1)\) = 최대 위반).
| 효과 | 원래 자유도 | ε 조정 후 자유도 |
|---|---|---|
| Treatment | \(a-1\) | \(\epsilon (a-1)\) |
| Error | \((a-1)(n-1)\) | \(\epsilon (a-1)(n-1)\) |
자유도가 작아져 critical \(F\) 값이 커지고 \(p\) 값도 커진다.
4.1 Greenhouse-Geisser (GG)
\[ \hat\epsilon_{GG} = \frac{(\text{tr}(\hat\Sigma))^2}{(a-1) \text{tr}(\hat\Sigma^2)} \]
가장 보수적. 항상 안전.
4.2 Huynh-Feldt (HF)
GG 의 약간 보정 형태. 일반적으로 \(\hat\epsilon_{HF} \ge \hat\epsilon_{GG}\). 약간 더 자유.
4.3 Lower Bound
\(\epsilon = 1/(a-1)\) — 최대 보수적. 자유도 \((1, n-1)\) 의 단일 비교와 동치. 거의 사용 안 됨 (검정력 너무 약).
5 가설 데이터 — 시점 4 개
\(n = 12\) 환자, \(a = 4\) 처치. 가상 covariance matrix:
\[ \Sigma = \begin{pmatrix} 25 & 18 & 12 & 8 \\ 18 & 25 & 18 & 12 \\ 12 & 18 & 25 & 18 \\ 8 & 12 & 18 & 25 \end{pmatrix} \]
(분산 25, 공분산 거리에 따라 감소 — AR(1)-like.)
차이 점수의 분산: - \(\text{Var}(Y_1 - Y_2) = 25 + 25 - 2(18) = 14\). - \(\text{Var}(Y_1 - Y_3) = 25 + 25 - 2(12) = 26\). - \(\text{Var}(Y_1 - Y_4) = 25 + 25 - 2(8) = 34\). - \(\text{Var}(Y_2 - Y_3) = 14\). - \(\text{Var}(Y_2 - Y_4) = 26\). - \(\text{Var}(Y_3 - Y_4) = 14\).
차이 점수 분산이 다름 (\(14, 26, 34\)) → sphericity 위반.
Mauchly’s \(W = 0.55\) (\(p = 0.04\), 위반). \(\hat\epsilon_{GG} = 0.65\), \(\hat\epsilon_{HF} = 0.78\).
6 ε 조정의 효과
| 조정 | \(\hat\epsilon\) | \(df_T\) | \(df_E\) | \(F\) | \(p\) |
|---|---|---|---|---|---|
| 없음 | 1.00 | 3 | 33 | 8.0 | 0.0004 |
| Greenhouse-Geisser | 0.65 | 1.95 | 21.45 | 8.0 | 0.0027 |
| Huynh-Feldt | 0.78 | 2.34 | 25.74 | 8.0 | 0.0014 |
| Lower bound | 0.33 | 1.00 | 11.00 | 8.0 | 0.016 |
모든 조정에서 유의하지만, \(p\) 값이 수배 증가. 효과가 작은 데이터에서는 결론이 바뀔 수 있다.
7 모형 비교
7.1 단일 모형: ANOVA + sphericity
\(F\) 검정 + ε 조정. 단순하지만 공분산 구조에 강한 제약 (CS 가정).
7.2 Multilevel Model
\[ Y_{ij} = \mu + \alpha_j + \pi_i + \varepsilon_{ij},\quad \pi_i \sim N(0, \sigma^2_\pi),\quad \varepsilon \sim N(0, \sigma^2) \]
sigma_pi 만 추정 → CS 가정과 동치
sigma_pi 와 AR(1) 추정 → AR(1) 공분산
unstructured → 자유
REML 추정, AIC/BIC 로 공분산 구조 선택. 더 유연. 큰 데이터에서 유리.
7.3 Multivariate ANOVA (MANOVA)
각 시점을 별도 변수로 두고 multivariate 분석. 구형성 가정 불필요. 단점: 검정력 낮음. 세부는 G-MAX13.
8 공분산 구조 선택 절차
Step 1: Null 모형 (CS) fit
AIC, BIC 기록.
Step 2: AR(1) fit
AIC, BIC 기록.
Step 3: Toeplitz, UN fit
AIC, BIC 기록.
Step 4: 비교
가장 작은 AIC (또는 BIC) 의 구조 선택.
Step 5: 적합 진단
잔차 plot, Q-Q plot.
R nlme::lme 또는 glmmTMB 의 corStruct 옵션. Python statsmodels.mixedlm 은 CS 외에는 직접 지원 X (workaround 필요).
9 가설 데이터 — covariance 구조 비교
| 모형 | 모수 수 | AIC | BIC |
|---|---|---|---|
| CS | 2 | 1820 | 1830 |
| AR(1) | 2 | 1795 | 1805 |
| Toeplitz | 4 | 1798 | 1820 |
| UN | 10 | 1810 | 1850 |
→ AR(1) 가장 좋음 (AIC, BIC 모두 최소). 자기상관 명시 모형 선택.
10 Python 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.stats.anova import AnovaRM
from statsmodels.formula.api import mixedlm
from scipy import stats
np.random.seed(2026)
n = 12
a = 4
treatments = ["placebo", "A", "B", "C"]
# AR(1) 공분산 데이터
rho = 0.6
sigma_e = 5
mu_treat = np.array([130, 122, 125, 120])
records = []
for subj in range(n):
pi_subj = np.random.normal(0, 8)
eps = np.zeros(a)
eps[0] = np.random.normal(0, sigma_e)
for j in range(1, a):
eps[j] = rho * eps[j-1] + np.random.normal(0, sigma_e * np.sqrt(1 - rho**2))
for j, treat in enumerate(treatments):
y = mu_treat[j] + pi_subj + eps[j]
records.append({"subject": subj, "treatment": treat, "Y": y})
data = pd.DataFrame(records)
# Within-subjects ANOVA + sphericity correction
aovrm = AnovaRM(data, "Y", "subject", within=["treatment"]).fit()
print("=== Within-Subjects ANOVA (no correction) ===")
print(aovrm.anova_table)
# Mauchly 구형성 검정 — 직접 구현
wide = data.pivot(index="subject", columns="treatment", values="Y")
diffs = []
for j in range(a):
for j2 in range(j+1, a):
diffs.append(wide.iloc[:, j] - wide.iloc[:, j2])
var_diffs = [d.var(ddof=1) for d in diffs]
print(f"\nVariances of pairwise differences: {[round(v, 2) for v in var_diffs]}")
print("Sphericity OK if these are similar.")
# Multilevel model with REML — flexible covariance
md_cs = mixedlm("Y ~ C(treatment)", data=data, groups=data["subject"]).fit()
print("\n=== Mixed Model (REML, CS) ===")
print(md_cs.summary().tables[1])
print(f"AIC: {md_cs.aic:.1f}, BIC: {md_cs.bic:.1f}")
# pingouin 으로 ε 조정 (있는 경우)
try:
import pingouin as pg
aov_pg = pg.rm_anova(data=data, dv="Y", within="treatment", subject="subject",
correction=True, detailed=True)
print("\n=== pingouin rm_anova with corrections ===")
print(aov_pg)
except ImportError:
print("\n[pingouin not installed — install: pip install pingouin]")11 결정 차트 — Sphericity 처리
Within-subjects ANOVA 시작
↓
효과 자유도 = 1 (a = 2)?
├── Yes → Sphericity 자동 만족, 조정 불필요
└── No → Sphericity 검정 + ε 조정
↓
Mauchly p > 0.05?
├── Yes → 보수적: GG 적용 (안전)
└── No → GG 또는 HF 필수
↓
ε > 0.75?
├── Yes → HF 사용 (자유)
└── No → GG 사용 (보수적)
↓
또는 Multilevel Model (REML) 로 통합 처리
12 가정과 한계
12.1 일반
- 자유도 1 효과는 자동 만족.
- 각 효과마다 별도 sphericity (다요인 within).
- 결측 데이터: ANOVA 는 listwise. multilevel 권장.
12.2 Mauchly 의 한계
- 작은 표본에서 검정력 약.
- 큰 표본에서는 사소한 위반도 유의 → 항상 ε 조정 권장.
12.3 Multilevel 우위
- 결측 자동.
- 공분산 구조 자유.
- 연속 시점 (양적 시간) 자연스러움.
13 ML 매핑
ML 모델의 fold-wise 정확도가 sphericity 만족? 아니다.
각 fold 의 정확도 분산이 다름 (작은 fold 가 큰 분산). 인접 fold (같은 hyperparameter 의 다른 fold) 가 더 강한 상관.
→ within ANOVA (fold 가 subject 역할) 는 sphericity 위반 가능.
대안: - Bonferroni 보정 paired t-test. - Nadeau-Bengio correction (CV 표준오차의 보정). - Bootstrap CI.
14 본 챕터의 다음 단계
G-MAX11-0 Within-Subjects 개관
G-MAX11-1 Three Situations + Difference Scores
G-MAX11-2 Mixed Model ANOVA + Sphericity ← 현재 글
│
▼
G-MAX11-3 GG/HF Adjustments + Order Effects (자세한 ε 절차)
G-MAX11-4 Latin Square + Power
15 관련 주제
선행 지식
후속 주제
- G-MAX11-3: GG/HF + Order Effects
- G-MAX13 — Multivariate Within (sphericity 회피)
- G-MAX15 — Multilevel Models
다른 카테고리 연결
16 더 읽을 거리
- Mauchly, J. W. (1940). “Significance test for sphericity of a normal n-variate distribution.” Annals of Mathematical Statistics 11(2): 204-209 — 원조 논문.
- Greenhouse, S. W., Geisser, S. (1959). “On methods in the analysis of profile data.” Psychometrika 24(2): 95-112 — GG ε.
- Huynh, H., Feldt, L. S. (1970). “Conditions under which mean square ratios in repeated measurements designs have exact F-distributions.” JASA 65(332): 1582-1589.
- Box, G. E. P. (1954). “Some theorems on quadratic forms applied in the study of analysis of variance problems.” Annals of Mathematical Statistics 25: 290-302.
- Hedeker, D., Gibbons, R. D. (2006). “Longitudinal Data Analysis.” Wiley — multilevel 처리.