1 다요인 within 의 sphericity
다요인 within ANOVA 에서 각 within 효과 (main 또는 interaction) 의 분모는 그 효과 × subject 상호작용. 각 분모마다 별도의 sphericity 가정.
예: \(A\) (within), \(B\) (within) 가 있으면: - \(A\) main 의 분모 \(A \times S\): \(A\) levels 차이 점수의 분산 동일. - \(B\) main 의 분모 \(B \times S\): \(B\) levels 차이 점수 분산 동일. - \(A \times B\) 의 분모 \(AB \times S\): \(A \times B\) 직교 contrast 의 분산 동일.
각 효과마다 다른 ε 추정 필요.
2 ε 조정의 적용
각 효과마다 자기 ε 추정.
| 효과 | \(\hat\epsilon_{GG}\) | 조정된 자유도 |
|---|---|---|
| \(A\) main | 자기 \(\hat\epsilon\) | \(\hat\epsilon (a-1)\) vs \(\hat\epsilon (a-1)(n-1)\) |
| \(B\) main | 자기 \(\hat\epsilon\) | \(\hat\epsilon (b-1)\) vs \(\hat\epsilon (b-1)(n-1)\) |
| \(A \times B\) | 자기 \(\hat\epsilon\) | \(\hat\epsilon (a-1)(b-1)\) vs \(\hat\epsilon (a-1)(b-1)(n-1)\) |
자유도가 1 인 효과 (\(a = 2\) 또는 \(b = 2\)) 는 sphericity 자동 만족 (\(\hat\epsilon = 1\)). 조정 불필요.
\(a = 2\) 의 within 요인은 차이 점수가 1 종류뿐 (\(Y_1 - Y_2\)). “여러 차이 점수의 분산이 같다” 는 가정이 자동 (1 개뿐). 따라서 sphericity 위반 불가.
→ pre/post 비교 (자유도 1) 는 ε 조정 불필요. 시점 3 개 이상의 trend 분석부터 의미 있음.
\(2 \times 3\) within: - \(A\) main (자유도 1): 자동 OK. - \(B\) main (자유도 2): ε 조정. - \(A \times B\) (자유도 2): ε 조정.
\(3 \times 4\) within: - 모든 효과 자유도 ≥ 2 → 모든 효과에 ε 조정.
3 결정 차트
Within 효과의 자유도 ?
├── 1 → Sphericity 자동 만족, 조정 불필요
└── ≥ 2 → ε 조정 권장
├── Mauchly 검정 (참고용)
├── 일반 권장: GG (보수적)
└── ε ≈ 1 이면 HF 도 OK
4 효과별 ε 추정
Mauchly’s test 는 효과별로 적용:
# A main 의 sphericity
W_A, p_A = mauchly(D_A_levels) # A 의 차이 점수들
# B main 의 sphericity
W_B, p_B = mauchly(D_B_levels)
# A × B 의 sphericity
W_AB, p_AB = mauchly(D_AB_contrasts)각각 다른 결과 가능.
5 Multilevel Model 의 등가 처리
ANOVA + ε 조정 대신 multilevel model 로 명시적 공분산 구조:
# R lme4
lmer(Y ~ A * B + (1 | subject) + (1 | A:subject) + (1 | B:subject), data=...)
# 또는 nlme 의 corStruct 명시
lme(Y ~ A * B, random = ~1 | subject,
correlation = corCompSymm(form=~1|subject))장점: - 결측 데이터 자동 처리 (LMER 의 listwise 보완). - 공분산 구조 자유 (CS, AR(1), UN, …). - AIC/BIC 로 구조 비교. - 다요인 sphericity 부담 ↓.
단점: - ANOVA 보다 복잡. - REML 추정 수렴 문제 가능 (작은 표본).
6 가설 데이터 — ε 조정 비교
G-MAX12-1 의 \(A\) (drug, 2 levels) × \(B\) (시점, 3 levels) within 데이터, \(n=10\).
| 효과 | 자유도 (원) | \(\hat\epsilon_{GG}\) | 자유도 (GG) | \(F\) | \(p\) (원) | \(p\) (GG) |
|---|---|---|---|---|---|---|
| \(A\) | 1 | 1 (자동) | (1, 9) | 6.5 | 0.031 | 0.031 |
| \(B\) | 2 | 0.72 | (1.44, 13.0) | 18.0 | \(<0.0001\) | \(0.0006\) |
| \(A \times B\) | 2 | 0.78 | (1.56, 14.0) | 5.5 | 0.0091 | 0.022 |
\(A\) 는 자유도 1 이라 조정 불필요. \(B, A \times B\) 는 ε 조정 후 \(p\) 값 증가하지만 여전히 유의.
7 Python 코드
import numpy as np
import pandas as pd
from statsmodels.stats.anova import AnovaRM
np.random.seed(2026)
n = 10
A_levels = ["DrugA", "DrugB"]
B_levels = [1, 2, 3]
cell_means = {
("DrugA", 1): 130, ("DrugA", 2): 120, ("DrugA", 3): 115,
("DrugB", 1): 132, ("DrugB", 2): 128, ("DrugB", 3): 125,
}
records = []
for subj in range(n):
pi = np.random.normal(0, 6)
# AR(1) 시점 구조 — sphericity 위반
eps = np.zeros((2, 3))
for a_i in range(2):
eps[a_i, 0] = np.random.normal(0, 3)
for b_i in range(1, 3):
eps[a_i, b_i] = 0.6 * eps[a_i, b_i-1] + np.random.normal(0, 3 * np.sqrt(1-0.36))
for a_i, a in enumerate(A_levels):
for b_i, b in enumerate(B_levels):
y = cell_means[(a, b)] + pi + eps[a_i, b_i]
records.append({"subject": subj, "A": a, "B": b, "Y": y})
data = pd.DataFrame(records)
# AnovaRM with sphericity correction
aovrm = AnovaRM(data, "Y", "subject", within=["A", "B"]).fit()
print("=== 2-way Within-Subjects ANOVA (no correction reported by default) ===")
print(aovrm.anova_table)
# AnovaRM 의 statsmodels 는 GG/HF 를 자동 출력하지 않음
# pingouin.rm_anova 사용 시 자동 출력
try:
import pingouin as pg
aov_pg = pg.rm_anova(data=data, dv="Y", within=["A", "B"], subject="subject",
correction=True)
print("\n=== pingouin rm_anova with corrections ===")
print(aov_pg)
except ImportError:
print("\n[pingouin not installed — install with: pip install pingouin]")
# Mixed model 로 sphericity 우회
from statsmodels.formula.api import mixedlm
md = mixedlm("Y ~ C(A) * C(B)", data=data, groups=data["subject"]).fit()
print("\n=== Mixed Model (CS) ===")
print(md.summary().tables[1])8 효과 크기 (재방문)
ε 조정은 자유도만 바꿈, \(SS\) 와 효과 크기는 동일:
- \(\eta^2_G\) (generalized): within 효과 크기 표준.
- Cohen’s \(f\): 검정력 분석.
각 효과의 효과 크기 별도 보고:
A main: η²_G = 0.06, f = 0.27
B main: η²_G = 0.40, f = 0.82 (큰 효과)
A × B: η²_G = 0.10, f = 0.33
9 가정과 한계
- 자유도 1 효과는 sphericity 자동 만족.
- 각 효과마다 별도 ε: 패키지 default 점검 필수.
- GG vs HF: GG 보수적, HF 약간 자유.
- Multilevel 우위: 결측·공분산 구조 자유.
- 작은 표본 한계: ε 추정 부정확. multilevel 권장.
10 통합 권장 — 다요인 Within 의 분석
가장 일반적: Multilevel model (REML).
이는 모든 within ANOVA + ε 조정의 통합 framework.
ANOVA + ε 조정은: - 학술 출판 형식. - 단순 분석. - ε 의 의미를 명시적으로 보고.
multilevel 은: - 결측 처리. - 공분산 구조 명시. - 시점이 양적이면 random slope.
실무 권장: 두 결과 모두 보고. 일치하면 결론 안정.
11 ML 매핑
ML 의 hyperparameter sweep 에서 다요인 cross 평가:
Subject (dataset): 10 datasets
A (within): optimizer (Adam, SGD)
B (within): scheduler (cosine, step, constant)
각 dataset 의 6 셀 모두 평가 → 2×3 within ANOVA.
sphericity 위반 가능 — 어떤 dataset 의 분산이 더 큰 변동성. ε 조정 권장.
또는 multilevel:
dataset 의 random intercept + 가능하면 random slope.
12 MAX Ch.12 시리즈 정리
G-MAX12-0 Higher-Order Within Univariate 개관
G-MAX12-1 2×3 Within Design + 7 Effects
G-MAX12-2 Split-Plot Design
G-MAX12-3 Sphericity Extensions + ε Adjustments ← 현재 글
↓
G-MAX13 (Within-Subjects Multivariate)
13 관련 주제
선행 지식
후속 주제
- G-MAX13 — Within-Subjects Multivariate (sphericity 회피)
- G-MAX15 — Multilevel Models
다른 카테고리 연결
14 더 읽을 거리
- Maxwell, S. E., Delaney, H. D. (2004). “Designing Experiments and Analyzing Data.”
- Greenhouse, S. W., Geisser, S. (1959). “On methods in the analysis of profile data.” Psychometrika 24(2): 95-112.
- Huynh, H., Feldt, L. S. (1976). “Estimation of the Box correction for degrees of freedom.” Journal of Educational Statistics 1(1): 69-82.
- Hedeker, D., Gibbons, R. D. (2006). “Longitudinal Data Analysis.” Wiley.