일반 J 그룹 ANOVA — Full vs Restricted Model

임의의 그룹 수로 모형 비교 일반화 + 전체·제한 모형의 SSE 차이로서의 F 통계량

Maxwell Ch.3 의 general case 를 정리한다. 임의의 J 그룹 ANOVA 의 모형 비교 형태, 전체 모형과 제한 모형의 SSE 차이가 그룹 간 제곱합 (SS_B) 임을 보이고, 이로부터 F 통계량과 자유도가 어떻게 자연스럽게 도출되는지 다룬다.

Experimentation
Fundamentals
저자

Kwangmin Kim

공개

2026년 05월 08일

1 도입 — 그룹 수 일반화

이전 글 (A-MAX3-1) 에서 한 그룹과 두 그룹 사례를 다뤘다. 이제 임의의 \(J\) 그룹 으로 확장한다. 핵심 통찰: 모형 비교 형태는 그룹 수에 무관하다. SSE 분해와 F 통계량의 형태가 \(J = 2\) 에서 \(J = 3, 4, \ldots\) 로 자연스럽게 확장된다.

2 J 그룹 모형의 정의

정의: 일원 ANOVA 모형 (One-Way ANOVA)

\(J\) 개의 그룹, 각 그룹에 \(n_j\) 개의 관측이 있고, 종속 변수 \(Y_{ij}\) 는 그룹 \(j\)\(i\) 번째 관측이다.

\[ Y_{ij} = \mu_j + \varepsilon_{ij}, \quad j = 1, 2, \ldots, J, \; i = 1, 2, \ldots, n_j \]

가정:

  • \(\varepsilon_{ij} \sim \text{i.i.d. } N(0, \sigma^2)\)
  • 그룹마다 분산이 같음 (등분산성)
  • 관측이 서로 독립

총 관측 수는 \(n = \sum_{j=1}^{J} n_j\) 이다.

2.1 동등한 표현 — 효과 모수화 (Effect Coding)

같은 모형을 효과 모수화로 다시 쓰면

\[ Y_{ij} = \mu + \alpha_j + \varepsilon_{ij}, \quad \sum_{j=1}^{J} \alpha_j = 0 \]

여기서

  • \(\mu\) — 전체 평균 (grand mean)
  • \(\alpha_j = \mu_j - \mu\) — 그룹 \(j\) 의 효과 (전체 평균으로부터의 편차)

이 표현은 두 가지 장점이 있다.

  1. 해석 용이\(\alpha_j\)처치 효과 를 직접 나타낸다.
  2. 모수의 수 일치 — 제약 \(\sum \alpha_j = 0\) 으로 자유로운 모수의 수가 \(\mu_j\) 표현과 같다 (\(J\) 개).

그러나 \(\mu_j\) 표현이 더 단순하므로 이 글은 그것으로 진행한다.

직관 — 두 표현은 같은 모형이다

학생이 “\(\mu_j\) 표현과 \(\mu + \alpha_j\) 표현 중 어느 것이 맞나?” 라고 물을 때, 답은 둘 다 맞고 동등하다 이다.

\(\mu_j\) 표현은 셀 평균 모수화 (cell-means parameterization), \(\mu + \alpha_j\) 표현은 효과 모수화 (effects parameterization) 다. 통계 소프트웨어가 어느 것을 사용하느냐에 따라 출력이 달라지지만, 적합값과 잔차는 동일 하다.

R 의 lm() 은 기본적으로 dummy 코딩 (한 그룹을 reference 로) 을 사용한다. SAS 의 PROC GLM 은 그룹 평균 모수화를 제공한다. 어떤 모수화든 근본적인 모형은 같으므로 F 검정 결과와 \(R^2\) 도 같다.

3 Full Model 과 Restricted Model

3.1 Full Model

각 그룹이 자기 평균을 가진다.

\[ \text{Full: } Y_{ij} = \mu_j + \varepsilon_{ij} \]

모수의 수: \(J\) 개 (\(\mu_1, \mu_2, \ldots, \mu_J\)).

3.2 Restricted Model

모든 그룹이 같은 평균을 가진다.

\[ \text{Restricted: } Y_{ij} = \mu + \varepsilon_{ij} \]

모수의 수: 1 개 (\(\mu\)).

3.3 가설

귀무가설은 restricted model 이 충분하다 와 동치이다.

\[ H_0: \mu_1 = \mu_2 = \cdots = \mu_J \quad \text{vs} \quad H_1: \text{at least one } \mu_j \text{ differs} \]

대안은 어떤 그룹이라도 다르면 참이다. 이 형태가 양측 검정의 자연스러운 일반화다.

4 SSE 분해 — 핵심 정리

각 모형의 잔차 제곱합:

\[ \text{SSE}_F = \sum_{j=1}^{J} \sum_{i=1}^{n_j} (Y_{ij} - \bar{Y}_j)^2 \quad (\text{full model}) \]

\[ \text{SSE}_R = \sum_{j=1}^{J} \sum_{i=1}^{n_j} (Y_{ij} - \bar{Y})^2 \quad (\text{restricted model}) \]

여기서 \(\bar{Y}_j = \frac{1}{n_j} \sum_{i} Y_{ij}\) 는 그룹 평균, \(\bar{Y} = \frac{1}{n} \sum_{i, j} Y_{ij}\) 는 전체 평균이다.

4.1 정리: 분산 분해 (Sum of Squares Decomposition)

\[ \text{SSE}_R = \text{SSE}_F + \sum_{j=1}^{J} n_j (\bar{Y}_j - \bar{Y})^2 \]

오른쪽 두 번째 항이 그룹 간 제곱합 \(\text{SS}_B\) 이다.

\[ \boxed{\text{SS}_T = \text{SS}_W + \text{SS}_B} \]

  • \(\text{SS}_T = \text{SSE}_R\) — 전체 제곱합 (total)
  • \(\text{SS}_W = \text{SSE}_F\) — 그룹 내 제곱합 (within)
  • \(\text{SS}_B = \text{SSE}_R - \text{SSE}_F\) — 그룹 간 제곱합 (between)

4.2 증명 (스케치)

핵심 트릭은 \(Y_{ij} - \bar{Y}\)분해 하는 것이다.

\[ Y_{ij} - \bar{Y} = (Y_{ij} - \bar{Y}_j) + (\bar{Y}_j - \bar{Y}) \]

이 식의 양변을 제곱하고 합하면 cross product 항이 0 이 된다 (각 그룹 내 평균 편차의 합이 0 이라는 사실로부터).

\[ \sum_{i, j} (Y_{ij} - \bar{Y})^2 = \sum_{i, j} (Y_{ij} - \bar{Y}_j)^2 + \sum_{j} n_j (\bar{Y}_j - \bar{Y})^2 \]

이것이 분산 분해의 대수적 도출이다. \(\square\)

직관 — SS 분해의 시각적 설명

자료 점들을 분포로 그리고, 각 점에서 전체 평균 까지의 거리를 빨강, 자기 그룹 평균 까지의 거리를 파랑이라 하자.

  • 빨강 거리 제곱합 = \(\text{SS}_T\)
  • 파랑 거리 제곱합 = \(\text{SS}_W\)
  • 빨강과 파랑의 차이 = \(\text{SS}_B\)

만약 모든 그룹이 같은 평균을 가지면 (귀무가설 참), 그룹 평균이 전체 평균과 일치해 빨강 = 파랑이 되고 \(\text{SS}_B = 0\). 만약 그룹 평균이 멀리 떨어져 있으면, 빨강 (전체에서의 거리) 이 파랑 (그룹에서의 거리) 보다 훨씬 커서 \(\text{SS}_B\) 가 크다.

따라서 \(\text{SS}_B\)“그룹들이 전체 평균에서 얼마나 흩어져 있는가” 를 정량화한 것이다.

5 자유도

각 SS 의 자유도는 다음과 같다.

SS 자유도
\(\text{SS}_T\) \(n - 1\)
\(\text{SS}_W\) \(n - J\)
\(\text{SS}_B\) \(J - 1\)

자유도의 의미:

  • \(\text{SS}_T\): 전체 평균 1 개를 추정했으므로 \(n\) 자료에서 1 자유도가 빠짐
  • \(\text{SS}_W\): 각 그룹에서 그룹 평균 1 개씩 (\(J\) 개) 추정했으므로 \(n - J\)
  • \(\text{SS}_B\): 그룹 평균 \(J\) 개에서 전체 평균 1 개의 제약이 있어 \(J - 1\)

자유도가 자연스럽게 일치한다: \((n - 1) = (J - 1) + (n - J)\).

6 F 통계량 — 일반 도출

평균 제곱 (mean square, MS) 은 SS 를 자유도로 나눈 것이다.

\[ \text{MS}_B = \frac{\text{SS}_B}{J - 1}, \quad \text{MS}_W = \frac{\text{SS}_W}{n - J} \]

F 통계량:

\[ \boxed{F = \frac{\text{MS}_B}{\text{MS}_W} = \frac{\text{SS}_B / (J - 1)}{\text{SS}_W / (n - J)}} \]

이 F 가 모형 비교의 중심 통계량 이다. 두 모형의 SSE 차이를 정규화한 비율이며,

\[ F = \frac{(\text{SSE}_R - \text{SSE}_F) / (\text{df}_R - \text{df}_F)}{\text{SSE}_F / \text{df}_F} \]

라는 일반 모형 비교 공식 의 특수 사례다. 이 일반 공식이 ANOVA, 회귀의 부분 F 검정, ANCOVA, 다원 ANOVA, MANOVA 까지 모두 동일한 형태로 적용된다.

6.1 F 의 분포

귀무가설 \(H_0: \mu_1 = \cdots = \mu_J\) 하에서, F 통계량은 F 분포 를 따른다.

\[ F \sim F_{J - 1, \; n - J} \]

이 분포는 두 카이제곱 분포의 비율 로 정의되며, Fisher 가 1924 년에 도출했다.

정의: F 분포 (F Distribution)

두 독립적 카이제곱 변량 \(X_1 \sim \chi^2_{d_1}\), \(X_2 \sim \chi^2_{d_2}\) 에 대해

\[ F = \frac{X_1 / d_1}{X_2 / d_2} \sim F_{d_1, d_2} \]

ANOVA 에서 \(d_1 = J - 1\) (분자 자유도), \(d_2 = n - J\) (분모 자유도) 이다.

7 ANOVA 표 — 표준 형식

ANOVA 결과는 전통적으로 다음 표 형식으로 보고된다.

Source SS df MS F p
Between groups \(\text{SS}_B\) \(J - 1\) \(\text{MS}_B\) \(F\) \(p\)
Within groups (Error) \(\text{SS}_W\) \(n - J\) \(\text{MS}_W\)
Total \(\text{SS}_T\) \(n - 1\)

표의 첫 행이 처치 효과의 검정 이고, 두 번째 행이 잔차 이다. F 와 p 는 첫 행에만 표시된다.

8 검정 절차

  1. 자료에서 \(\bar{Y}_j\) (\(j = 1, \ldots, J\)) 와 \(\bar{Y}\) 를 계산한다.
  2. \(\text{SS}_B\)\(\text{SS}_W\) 를 분해 공식으로 계산한다.
  3. F 통계량을 계산한다.
  4. F 분포 표 또는 함수로 p 값을 조회한다.
  5. p 가 \(\alpha\) 보다 작으면 \(H_0\) 을 기각한다 (그룹 간 차이 존재).
직관 — F 통계량의 본질

F 통계량을 직관적 으로 본다.

\[ F = \frac{\text{그룹 평균이 흩어진 정도}}{\text{그룹 내 자료가 흩어진 정도}} = \frac{\text{signal}}{\text{noise}} \]

  • 분자 (\(\text{MS}_B\)) — 그룹 평균이 전체 평균에서 얼마나 멀리 떨어져 있는가 (signal)
  • 분모 (\(\text{MS}_W\)) — 같은 그룹 내에서 자료가 얼마나 변동하는가 (noise)

\(F = 1\) 근처: 그룹 평균의 흩어짐이 자료 자체의 흩어짐과 비슷 → 그룹 차이가 noise 수준 → \(H_0\) 기각 못함. \(F \gg 1\): 그룹 평균이 noise 보다 훨씬 더 흩어져 있음 → 차이가 실재할 가능성 → \(H_0\) 기각.

이 신호 대 잡음 비유는 데이터 사이언스에서 친숙한 패턴이다. 효과를 잡으려면 신호가 잡음보다 충분히 커야 한다 는 원리는 검정력 분석, 표본 크기 산정, A/B 테스트 설계에 모두 적용된다.

9 예시 — Mood Induction 자료

Maxwell Ch.3 그림 3.1 의 자료를 재구성한다.

3 그룹 (\(J = 3\)): Pleasant, Neutral, Unpleasant. 각 그룹에 10 명 (\(n_1 = n_2 = n_3 = 10\), \(n = 30\)).

그룹 \(n_j\) \(\bar{Y}_j\) \(s_j\)
Pleasant 10 5.5 1.0
Neutral 10 4.0 1.0
Unpleasant 10 2.5 1.0
전체 30 4.0

분해 계산:

  • \(\text{SS}_B = 10 \cdot (5.5 - 4)^2 + 10 \cdot (4.0 - 4)^2 + 10 \cdot (2.5 - 4)^2 = 22.5 + 0 + 22.5 = 45\)
  • \(\text{SS}_W = 9 \cdot 1 + 9 \cdot 1 + 9 \cdot 1 = 27\) (각 그룹 분산 \(\times (n_j - 1)\))
  • \(\text{MS}_B = 45 / (3 - 1) = 22.5\)
  • \(\text{MS}_W = 27 / (30 - 3) = 1.0\)
  • \(F = 22.5 / 1.0 = 22.5\)

자유도 \(F_{2, 27}\) 분포에서 \(F = 22.5\) 의 p 값은 \(p < 0.0001\) 로 매우 작다. \(H_0\) 을 강하게 기각한다.

10 표본 크기와 검정력

\(J\) 그룹 ANOVA 의 검정력은 효과 크기와 표본 크기의 함수 이다. 효과 크기는 일반적으로

\[ f = \frac{\sigma_{\text{between}}}{\sigma_{\text{within}}} \]

(Cohen’s f) 로 측정한다. 검정력 \(1 - \beta\) 를 달성하기 위한 표본 크기 \(n\) 은 비중심 F 분포로부터 계산된다.

Cohen’s \(f\) 효과 크기
0.10 small
0.25 medium
0.40 large

A-WOO8-* 시리즈에서 자세히 다룬다.

11 J = 2 사례와의 연결

\(J = 2\) 일 때 ANOVA 의 F 통계량은 two-sample t 통계량의 제곱이다.

\[ F_{1, n-2} = (t_{n-2})^2 \]

이는 일반 \(J\) 그룹 사례의 특수 사례 이다. 즉 t 검정과 F 검정은 같은 모형 비교 골격 의 두 표현이다.

12 균형 vs 불균형 설계

\(n_1 = n_2 = \cdots = n_J\) 인 경우 균형 설계 (balanced design), 그렇지 않으면 불균형 설계 (unbalanced design) 이다.

항목 균형 불균형
분산 그룹별 동일 영향 그룹별 가중치 다름
검정력 최대 약간 감소
F 의 분포 정확히 \(F_{J-1, n-J}\) 동일 (정확)
Type II SS Type I 과 동일 Type I 과 다름

ANOVA 의 F 검정 자체는 불균형 설계에서도 정확히 작동한다. 다만 제곱합 분해 의 모호성 (Type I, II, III SS) 이 불균형 설계에서 발생한다 (Maxwell Ch.7 에서 다룬다).

직관 — 왜 균형 설계가 권장되는가

A/B 테스트에서 50:50 트래픽 배정이 표준이다. 왜?

검정력의 극대화 때문이다. 같은 총 표본 \(n\) 이라도, 동일하게 분배 할 때 두 그룹 평균 차이의 표준 오차가 가장 작아진다.

\[ \text{SE}(\bar{Y}_1 - \bar{Y}_2) = s_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}} \]

\(n_1 + n_2 = n\) 고정 시, \(\frac{1}{n_1} + \frac{1}{n_2}\)\(n_1 = n_2 = n/2\) 일 때 최소가 된다 (산술-조화 평균 부등식).

따라서 검정력을 최대화하려면 균형 설계를 선택한다. 다만 비용 차이 가 있는 경우 (한 그룹의 측정 비용이 더 비쌈) 에는 비대칭 배정이 합리적일 수 있다.

13 코드 예시 — J = 3 ANOVA

import numpy as np
import pandas as pd
from scipy.stats import f_oneway, f
import statsmodels.api as sm
from statsmodels.formula.api import ols

np.random.seed(42)
n_each = 10
group_pleasant = np.random.normal(5.5, 1.0, n_each)
group_neutral = np.random.normal(4.0, 1.0, n_each)
group_unpleasant = np.random.normal(2.5, 1.0, n_each)

# 1. scipy 기본 ANOVA
F, p = f_oneway(group_pleasant, group_neutral, group_unpleasant)
print(f"F = {F:.3f}, p = {p:.5f}")

# 2. 직접 분해 계산
all_data = np.concatenate([group_pleasant, group_neutral, group_unpleasant])
groups = ['P']*n_each + ['N']*n_each + ['U']*n_each
df = pd.DataFrame({'y': all_data, 'group': groups})

grand_mean = df['y'].mean()
group_means = df.groupby('group')['y'].mean()
group_sizes = df.groupby('group').size()

ss_between = (group_sizes * (group_means - grand_mean)**2).sum()
ss_within = sum(((df[df['group']==g]['y'] - group_means[g])**2).sum()
                for g in ['P', 'N', 'U'])
ss_total = ((df['y'] - grand_mean)**2).sum()

J = 3
n = len(df)
ms_between = ss_between / (J - 1)
ms_within = ss_within / (n - J)
F_manual = ms_between / ms_within
p_manual = 1 - f.cdf(F_manual, J - 1, n - J)

print(f"\n분해:")
print(f"SS_T = {ss_total:.3f}")
print(f"SS_B = {ss_between:.3f}, MS_B = {ms_between:.3f}")
print(f"SS_W = {ss_within:.3f}, MS_W = {ms_within:.3f}")
print(f"F (수동 계산) = {F_manual:.3f}")
print(f"분해 일치: SS_T = SS_B + SS_W → {np.isclose(ss_total, ss_between + ss_within)}")

# 3. statsmodels - ANOVA 표
model = ols('y ~ C(group)', data=df).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
print(f"\nANOVA 표:")
print(anova_table)

이 코드는 세 가지 다른 방법 으로 동일한 F 통계량을 계산한다.

  1. scipy.stats.f_oneway — 직접 계산
  2. SSE 분해를 수동으로 — 모형 비교 관점
  3. statsmodelsanova_lm — ANOVA 표 출력

세 결과가 일치하며, 이는 세 가지 표현이 같은 분석 임을 보여 준다.

14 후속 — F 검정의 분포와 효과 크기

이 글에서는 F 통계량의 형태분포 를 다뤘다. 다음 글 A-MAX3-3 은 다음을 다룬다.

  • F 분포의 특성과 임계값
  • 효과 크기 측정 (\(\eta^2\), \(\omega^2\), Cohen’s \(f\), Cohen’s \(d\))
  • 신뢰 구간 구성
  • 검정력 분석

이 단계가 ANOVA 결과 보고의 완전한 형태 를 만든다.

15 관련 주제

선행 지식

후속 주제 (Phase A)

다른 카테고리 연결

Subscribe

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