구형성의 확장과 ε 조정 — 다요인 within 의 가정 점검

Maxwell Ch.12.3 Sphericity Extensions · ε Adjustments

여러 within 요인의 ANOVA 에서 각 main effect 와 interaction 마다 별도로 검토해야 하는 sphericity 가정과 ε 조정의 적용 절차를 정리한다. multilevel model 의 등가 처리, 자유도 1 효과의 자동 만족, 작은 표본의 한계를 다룬다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 다요인 within 의 sphericity

정의: 효과별 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\)). 조정 불필요.

직관: 자유도 1 의 sphericity 자동 만족

\(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).

# R
lmer(Y ~ A * B + (1 | subject), data = ...)
# Python
mixedlm("Y ~ C(A) * C(B)", data, groups="subject").fit()

이는 모든 within ANOVA + ε 조정의 통합 framework.

ANOVA + ε 조정은: - 학술 출판 형식. - 단순 분석. - ε 의 의미를 명시적으로 보고.

multilevel 은: - 결측 처리. - 공분산 구조 명시. - 시점이 양적이면 random slope.

실무 권장: 두 결과 모두 보고. 일치하면 결론 안정.

11 ML 매핑

매핑: 다요인 hyperparameter sweep 의 sphericity

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:

mixedlm("acc ~ C(optimizer) * C(scheduler)", data, groups="dataset")

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.

Subscribe

Enjoy this blog? Get notified of new posts by email: