직교 대비와 대비의 효과 크기

Orthogonality, SS 가산성, d for contrast, partial η²

Maxwell Ch.4 의 직교 대비 (orthogonal contrasts) 와 대비의 효과 크기 측정을 정리한다. 직교성 정의, SS 가산성, J-1 개의 직교 대비로 SS_B 완전 분해, Cohen 의 d for contrast, partial η² 의 계산과 해석을 다룬다.

Experimentation
Fundamentals
저자

Kwangmin Kim

공개

2026년 05월 08일

1 도입 — 여러 대비를 동시에

A-MAX4-2 에서 한 개의 대비 검정을 다뤘다. 실무에서는 보통 여러 대비 를 동시에 수행한다. 이때 핵심 질문은 다음 두 가지다.

  1. 두 대비가 서로 독립적 정보 를 주는가?
  2. 모든 대비의 효과가 합쳐서 옴니버스 ANOVA 의 효과 와 같은가?

답은 직교 대비 (orthogonal contrasts) 의 개념에 있다.

2 직교 대비의 정의

정의: 직교 대비 (Orthogonal Contrasts)

두 대비 \(\psi_1 = \sum c_{1j} \mu_j\)\(\psi_2 = \sum c_{2j} \mu_j\)직교 라는 것은 다음 조건을 만족하는 것이다.

일반 (불균형) 설계:

\[ \sum_{j=1}^{J} \frac{c_{1j} \cdot c_{2j}}{n_j} = 0 \]

균형 설계 (\(n_j\) 모두 동일):

\[ \sum_{j=1}^{J} c_{1j} \cdot c_{2j} = 0 \]

2.1 직교성의 통계적 의미

두 대비가 직교일 때, 그들의 추정량 사이 상관 이 0 이다.

\[ \text{Cov}(\widehat{\psi}_1, \widehat{\psi}_2) = 0 \Leftrightarrow \widehat{\psi}_1 \perp \widehat{\psi}_2 \]

직관: 한 대비의 결과가 다른 대비에 정보를 주지 않는다. 두 대비가 독립적인 가설 을 검정한다.

직관 — 직교성의 일상 비유

직교 대비를 직각 좌표계의 축 으로 비유할 수 있다.

x 축과 y 축은 직교 이다. 점의 x 좌표를 알아도 y 좌표는 결정되지 않는다 — 두 정보는 독립 이다.

대비도 마찬가지다. 직교 대비는 서로 다른 차원 의 그룹 차이를 측정한다. 한 대비가 “약물 vs 위약” 차원, 다른 대비가 “남성 vs 여성” 차원이라면 (요인 설계), 두 차원은 직교일 수 있다.

비직교 대비는 비스듬한 좌표축 에 비유된다. 한 대비의 결과가 다른 대비의 결과를 부분적으로 예측 한다. 이는 정보가 중복됨을 의미하며, 다중 비교 보정이 더 복잡해진다.

3 직교 대비의 SS 가산성

직교 대비의 가장 중요한 성질은 제곱합의 가산성 이다.

정리: 직교 분해 (Orthogonal Decomposition)

\(J\) 그룹 ANOVA 에서 서로 직교\(J - 1\) 개의 대비 \(\{\psi_1, \psi_2, \ldots, \psi_{J-1}\}\) 가 있다면:

\[ \text{SS}_B = \sum_{k=1}^{J-1} \text{SS}_{\psi_k} \]

옴니버스 그룹 간 제곱합이 \(J - 1\) 개의 직교 대비로 완전 분해 된다.

3.1 의미

옴니버스 ANOVA 가 검정하는 전체 그룹 차이\(J - 1\) 개의 독립적 비교 로 정확히 분리된다. 각 비교의 자유도는 1, 합 자유도는 \(J - 1\) 로 옴니버스 분자 자유도와 일치.

3.2 4 그룹 사례 — 표준 직교 분해

4 그룹 사례에서 다음 3 개의 직교 대비를 만들 수 있다.

대비 \(c_1\) \(c_2\) \(c_3\) \(c_4\) 의미
\(\psi_1\) 1 -1 0 0 그룹 1 vs 2
\(\psi_2\) 0 0 1 -1 그룹 3 vs 4
\(\psi_3\) 1 1 -1 -1 (1, 2) vs (3, 4)

직교성 점검 (균형 설계):

  • \(\sum c_{1j} c_{2j} = (1)(0) + (-1)(0) + (0)(1) + (0)(-1) = 0\)
  • \(\sum c_{1j} c_{3j} = (1)(1) + (-1)(1) + (0)(-1) + (0)(-1) = 0\)
  • \(\sum c_{2j} c_{3j} = (0)(1) + (0)(1) + (1)(-1) + (-1)(-1) = 0\)

세 대비가 모두 서로 직교 이다.

3.3 다른 직교 분해

같은 4 그룹에 대해 다른 직교 분해도 가능하다.

대비 \(c_1\) \(c_2\) \(c_3\) \(c_4\) 의미
Linear -3 -1 1 3 선형 추세
Quadratic 1 -1 -1 1 이차 추세 (U 형)
Cubic -1 3 -3 1 삼차 추세

이는 순서 있는 수준 (예: 약물 용량) 의 추세 분석에 적합하다.

직관 — 같은 자료의 다른 분해

같은 4 그룹 자료를 다른 직교 분해 로 본다는 것은 다른 질문을 한다 는 뜻이다.

  • 분해 A (그룹 vs 그룹): “두 신약 vs 두 위약” 같은 범주적 질문
  • 분해 B (선형/이차/삼차): “용량이 증가할수록 효과가 어떻게 변하는가” 같은 추세 질문

두 분해 모두 SS_B 를 완전히 설명하지만, 어떤 가설에 답할 수 있는가 가 다르다. 연구 질문이 어떤 분해를 선택할지 결정한다.

이는 통계 모형이 자료 자체를 결정하지 않는다 는 사실의 한 예다. 같은 자료, 다른 모형, 다른 결론.

4 직교 분해의 시각적 이해

옴니버스 \(\text{SS}_B\)3 차원 벡터의 길이 제곱 이라 비유하면, 직교 대비는 3 개의 직교 축으로의 투영 이다.

피타고라스 정리에 의해:

\[ |\vec{v}|^2 = v_x^2 + v_y^2 + v_z^2 \]

마찬가지로:

\[ \text{SS}_B = \text{SS}_{\psi_1} + \text{SS}_{\psi_2} + \text{SS}_{\psi_3} \]

비직교 대비를 사용하면 이 가산성이 깨진다. 두 대비의 SS 합이 옴니버스 SS_B 보다 수 있다 (정보 중복 때문).

5 Gram-Schmidt 직교화

연구자가 처음에 정의한 대비들이 직교가 아닐 수 있다. 이때 Gram-Schmidt 절차로 직교화한다.

5.1 절차

  1. 첫 번째 대비 \(\psi_1\) 을 그대로 둔다.
  2. 두 번째 대비 \(\psi_2\) 에서 \(\psi_1\) 방향 성분을 뺀다.

\[ \psi_2^{\text{orth}} = \psi_2 - \frac{\langle \psi_1, \psi_2 \rangle}{\langle \psi_1, \psi_1 \rangle} \psi_1 \]

  1. 세 번째 대비 \(\psi_3\) 에서 \(\psi_1, \psi_2^{\text{orth}}\) 방향 성분을 뺀다.

\[ \psi_3^{\text{orth}} = \psi_3 - \frac{\langle \psi_1, \psi_3 \rangle}{\langle \psi_1, \psi_1 \rangle} \psi_1 - \frac{\langle \psi_2^{\text{orth}}, \psi_3 \rangle}{\langle \psi_2^{\text{orth}}, \psi_2^{\text{orth}} \rangle} \psi_2^{\text{orth}} \]

이 절차로 임의의 대비 집합 을 직교 집합으로 변환할 수 있다.

5.2 한계

Gram-Schmidt 직교화는 원래 가설의 의미 를 보존하지 않을 수 있다. 즉 직교화된 대비가 해석하기 어려운 형태가 된다. 따라서 가능하면 처음부터 직교 대비를 설계 하는 것이 권장된다.

6 대비의 효과 크기

대비 \(\psi\) 의 효과 크기를 측정하는 표준 지표.

6.1 Cohen’s \(d\) for Contrast

정의: \(d\) for Contrast

대비 \(\psi = \sum c_j \mu_j\) 의 효과 크기:

\[ d_\psi = \frac{\widehat{\psi}}{s_p \sqrt{\sum_j c_j^2}} \]

여기서 \(s_p = \sqrt{\text{MS}_W}\) 는 풀링된 표준편차.

이는 두 그룹 비교의 표준 Cohen’s \(d\)대비 일반화 이다. 두 그룹 비교 (\(c = (1, -1, 0, \ldots)\)) 에서 \(\sum c_j^2 = 2\) 이므로 약간의 스케일 차이가 있다 (Maxwell 의 정의 따름).

6.2 Partial \(\eta^2\) for Contrast

정의: Partial \(\eta^2\)

대비가 (옴니버스 효과를 통제한 후) 설명하는 분산 비율:

\[ \eta^2_{\text{partial}, \psi} = \frac{\text{SS}_{\psi}}{\text{SS}_{\psi} + \text{SS}_W} \]

이는 “자료의 잔차 변동 중 이 대비가 설명하는 비율” 이다. 일반 \(\eta^2\) (\(\text{SS}_{\psi} / \text{SS}_T\)) 와 다르다.

효과 크기 분모 의미
\(\eta^2\) \(\text{SS}_T\) (전체) 표본 전체에서 설명 분산
Partial \(\eta^2\) \(\text{SS}_{\psi} + \text{SS}_W\) 다른 효과 통제 후 설명 분산

다요인 ANOVA 에서는 partial \(\eta^2\) 가 더 자주 사용된다.

6.3 신뢰 구간

\(\widehat{\psi}\) 의 95 % CI:

\[ \widehat{\psi} \pm t_{0.025, n-J} \cdot \text{SE}(\widehat{\psi}) \]

이는 효과의 불확실성 을 정량화한다. 점추정 + CI 의 조합이 완전한 효과 보고 의 표준이다.

7 SS 가산성의 점검 — 코드 예시

import numpy as np
import pandas as pd
from scipy.stats import t as t_dist
import statsmodels.api as sm
from statsmodels.formula.api import ols

np.random.seed(42)
n_each = 20

group_1 = np.random.normal(5.0, 1.0, n_each)
group_2 = np.random.normal(5.5, 1.0, n_each)
group_3 = np.random.normal(6.0, 1.0, n_each)
group_4 = np.random.normal(6.5, 1.0, n_each)

groups = ['G1']*n_each + ['G2']*n_each + ['G3']*n_each + ['G4']*n_each
all_data = np.concatenate([group_1, group_2, group_3, group_4])
df = pd.DataFrame({'y': all_data, 'group': groups})

# 옴니버스 ANOVA
model = ols('y ~ C(group)', data=df).fit()
anova_table = sm.stats.anova_lm(model)
print(anova_table)

ss_b = anova_table['sum_sq'].iloc[0]
ms_w = anova_table['mean_sq'].iloc[1]
df_w = int(anova_table['df'].iloc[1])
n = len(df)

means = np.array([group_1.mean(), group_2.mean(), group_3.mean(), group_4.mean()])
n_j = np.array([n_each] * 4)

def contrast_ss(c):
    psi = (c * means).sum()
    return psi**2 / (c**2 / n_j).sum()

# 표준 직교 분해
c1 = np.array([1, -1, 0, 0])    # G1 vs G2
c2 = np.array([0, 0, 1, -1])    # G3 vs G4
c3 = np.array([1, 1, -1, -1])   # (G1, G2) vs (G3, G4)

# 직교성 점검
print(f"\n직교성:")
print(f"  c1 ⊥ c2? Σ c1·c2 = {(c1*c2).sum()}")  # = 0
print(f"  c1 ⊥ c3? Σ c1·c3 = {(c1*c3).sum()}")  # = 0
print(f"  c2 ⊥ c3? Σ c2·c3 = {(c2*c3).sum()}")  # = 0

# SS 가산성
ss_psi1 = contrast_ss(c1)
ss_psi2 = contrast_ss(c2)
ss_psi3 = contrast_ss(c3)
print(f"\nSS 분해:")
print(f"  SS_ψ1 (G1 vs G2)        = {ss_psi1:.3f}")
print(f"  SS_ψ2 (G3 vs G4)        = {ss_psi2:.3f}")
print(f"  SS_ψ3 ((G1,G2) vs (G3,G4)) = {ss_psi3:.3f}")
print(f"  합계                     = {ss_psi1 + ss_psi2 + ss_psi3:.3f}")
print(f"  옴니버스 SS_B            = {ss_b:.3f}")
print(f"  가산성 확인: {np.isclose(ss_psi1 + ss_psi2 + ss_psi3, ss_b)}")

# 추세 분해 (대안)
c_lin = np.array([-3, -1, 1, 3])
c_quad = np.array([1, -1, -1, 1])
c_cub = np.array([-1, 3, -3, 1])

print(f"\n추세 분해:")
print(f"  Linear:    SS = {contrast_ss(c_lin):.3f}")
print(f"  Quadratic: SS = {contrast_ss(c_quad):.3f}")
print(f"  Cubic:     SS = {contrast_ss(c_cub):.3f}")
print(f"  합계       = {contrast_ss(c_lin) + contrast_ss(c_quad) + contrast_ss(c_cub):.3f}")

# 효과 크기 — Linear trend 의 d
s_p = np.sqrt(ms_w)
psi_lin = (c_lin * means).sum()
d_lin = psi_lin / (s_p * np.sqrt((c_lin**2).sum()))
print(f"\nLinear trend 의 d = {d_lin:.3f}")

이 코드는 두 가지 직교 분해 를 비교한다. 두 분해 모두 SS_B 와 가산성을 만족하지만, 해석하는 가설 이 다르다.

8 비직교 대비 — 언제 사용하는가

연구자가 연구 질문에 가장 적합한 대비 를 설계하는 것이 우선이다. 그 결과 비직교 대비가 될 수 있다.

비교 계수 직교?
G1 vs G2 \((1, -1, 0, 0)\)
G1 vs G3 \((1, 0, -1, 0)\) \(\sum c_{1j} c_{2j} = 1 \neq 0\), 비직교

모든 쌍별 비교 는 일반적으로 비직교다. 4 그룹의 6 개 쌍 비교 중 직교인 쌍은 일부만 (예: \(\binom{4}{2} = 6\) 개 비교 중 직교는 약 3 개).

비직교 대비를 사용할 때:

  • 가산성이 깨짐 → SS 합 ≠ SS_B
  • 다중 비교 보정이 더 복잡 (Bonferroni 가 보수적)
  • 정보 중복 가능

9 사후 비교 (Post Hoc) 와의 연결

지금까지 다룬 대비는 계획된 (planned) 비교 — 사전에 정의된 가설. 사후 비교는 자료를 보고 결정된 비교.

측면 Planned Post Hoc
직교 분해 자연스러움 자주 OK 일반적으로 비직교
\(\alpha\) 보정 단순 (없음 또는 Bonferroni) 복잡 (Tukey, Scheffé)
검정력 높음 낮음

사후 비교의 다중 비교 보정은 다음 챕터 (Ch.5, A-MAX5-*) 의 주제다.

10 Helmert 대비 — 자동 직교 분해

소프트웨어 (R, statsmodels) 에서 자주 사용되는 기본 직교 분해 가 Helmert 대비이다.

10.1 정의

각 그룹을 그 다음 그룹들의 평균 과 비교한다.

대비 \(c_1\) \(c_2\) \(c_3\) \(c_4\)
Helmert 1 3 -1 -1 -1
Helmert 2 0 2 -1 -1
Helmert 3 0 0 1 -1

10.2 의미

  • Helmert 1: 그룹 1 vs 그룹 2, 3, 4 의 평균
  • Helmert 2: 그룹 2 vs 그룹 3, 4 의 평균
  • Helmert 3: 그룹 3 vs 그룹 4

이 대비들이 서로 직교 이며 SS 분해 가능하다.

10.3 사용 시점

각 그룹이 순차적으로 추가되는 처치 (예: baseline, +A, +A+B, +A+B+C) 의 효과를 검정할 때 자연스럽다.

11 Polynomial Contrasts (직교 다항)

수준이 동일 간격 인 양적 요인의 추세 분석.

11.1 4 수준 사례

대비 \(c_1\) \(c_2\) \(c_3\) \(c_4\)
Linear -3 -1 1 3
Quadratic 1 -1 -1 1
Cubic -1 3 -3 1

11.2 표준화

각 대비를 \(\sqrt{\sum c_j^2}\) 로 나누면 단위 길이 가 된다. 이는 비교의 상대적 강도 를 일치시킨다.

11.3 비등 간격 사례

수준이 동일 간격이 아니면 (예: 1, 2, 5, 10), 직교 다항 계수도 수정해야 한다. R 의 contr.poly() 또는 Python 의 numpy.polynomial.legendre 가 자동 생성한다.

12 한계와 다음 챕터

이 글까지 대비 분석의 핵심 골격 을 다뤘다.

  • 대비 정의와 일반화
  • 모형 비교 도출
  • 직교성과 SS 가산성
  • 효과 크기 (\(d\), partial \(\eta^2\))
  • 신뢰 구간

그러나 여러 대비를 동시에 검정 할 때 발생하는 다중 비교 인플레이션 은 아직 다루지 않았다. 이는 Maxwell Ch.5 의 주제이며, 후속 시리즈 A-MAX5-* 에서 다룬다.

13 Ch.4 마무리

Maxwell Ch.4 의 4 단계 흐름이 끝난다.

  1. Overview — 옴니버스 이후 개별 비교의 동기 (A-MAX4-0)
  2. 두 그룹 비교 — F = t² (A-MAX4-1)
  3. 일반 대비 — 합 0 계수 (A-MAX4-2)
  4. 직교 대비와 효과 크기 (이 글)

다음 챕터 Ch.5 (Multiple Comparison Problem) 는 다음 질문에 답한다.

  • 여러 대비를 검정할 때 어떻게 \(\alpha\) 를 통제하는가?
  • 사전 vs 사후 비교의 보정 방법
  • Bonferroni, Tukey HSD, Scheffé, Dunnett, FDR

14 관련 주제

선행 지식

후속 주제 (Phase A)

  • A-MAX5-0 다중 비교 overview
  • A-MAX5-1 αPC, αEW, ENEPE
  • A-MAX5-3 Tukey HSD, Scheffé, Dunnett

다른 카테고리 연결

Subscribe

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