1 도입 — F 가 유의하면, 그 다음은?
A-MAX3-* 시리즈에서 일원 ANOVA 를 다뤘다. F 검정의 결론은 “적어도 한 쌍 의 그룹 평균이 다르다” 는 것이다. 그러나 어떤 쌍 인지는 모른다. 이 한계를 풀어주는 것이 개별 비교 (individual comparisons) 분석이고, Maxwell Ch.4 의 주제다.
1.1 시나리오 — 고혈압 치료 비교
Maxwell 이 든 사례:
“고혈압 치료 연구에서 4 그룹 (약물, 바이오피드백, 식이, 복합 치료) 을 비교한다고 하자. ANOVA F 검정으로 4 그룹이 다른지 검정할 수 있다. 그러나 다음 질문들에는 어떻게 답하는가? - 약물 치료가 바이오피드백과 다른가? - 약물이 식이와 다른가? - 복합 치료가 개별 치료들의 평균 보다 우수한가? - 복합 치료가 각각의 개별 치료 보다 우수한가?” (Maxwell & Delaney, 2004, Ch.4)
이 질문들은 옴니버스 검정 으로 답할 수 없다. 개별 비교 또는 대비 가 필요하다.
특정 두 그룹 (또는 그룹의 조합) 의 평균 차이를 검정하는 절차이다. 옴니버스 F 검정의 서브셋 검정 또는 후속 검정 으로 사용된다.
가장 단순한 형태는 두 그룹 간 평균 차이 검정이다. 일반화는 대비 (contrast) 로 이어진다.
그룹 평균의 선형 결합 으로, 계수의 합이 0 인 것:
\[ \psi = \sum_{j=1}^{J} c_j \mu_j, \quad \sum_{j=1}^{J} c_j = 0 \]
- \(c_j\): 대비 계수
- \(\sum c_j = 0\): 합 0 제약 (대비의 정의)
예시:
- \((1, -1, 0, 0)\) — 그룹 1 vs 그룹 2 비교
- \((1, 1, -1, -1)\) — (그룹 1, 2 평균) vs (그룹 3, 4 평균)
- \((1, -1/3, -1/3, -1/3)\) — 그룹 1 vs 나머지 3 그룹 평균
2 Ch.4 의 4 단계 — 후속 글 안내
Ch.4.1 두 집단 평균 비교 — t 와 F (F = t²) (A-MAX4-1)
↓
Ch.4.2 Contrast 정의 + Complex Contrasts (A-MAX4-2)
↓
Ch.4.3 Orthogonal Contrasts + Effect Size for Contrast (A-MAX4-3)
↓
Ch.4.4 Planned vs Post Hoc → Ch.5 (다중 비교) 로 이어짐
3 모형 비교로서의 개별 비교
A-MAX3-* 에서 봤듯이 모형 비교 골격은 임의의 검정 에 적용된다. 개별 비교도 마찬가지다.
3.1 Full Model (Ch.3 와 동일)
\[ Y_{ij} = \mu_j + \varepsilon_{ij} \]
각 그룹이 자기 평균을 가진다.
3.2 Restricted Model (Ch.4 에서 새 형태)
특정 가설에 따라 일부 그룹 평균이 같다 는 제약을 추가한다.
예시: \(H_0: \mu_1 = \mu_2\) 를 검정할 때:
\[ Y_{i1} = \mu^* + \varepsilon_{i1}, \quad Y_{i2} = \mu^* + \varepsilon_{i2}, \quad Y_{ij} = \mu_j + \varepsilon_{ij} \; (j \geq 3) \]
즉 그룹 1 과 2 가 같은 평균 \(\mu^*\) 를 갖고, 나머지 그룹은 자기 평균을 가진다.
3.3 모수 수의 변화
- Full model: \(J\) 개 모수 (\(\mu_1, \ldots, \mu_J\))
- Restricted model: \(J - 1\) 개 모수 (그룹 1, 2 가 합쳐져서)
따라서 자유도 차이는 1 이다. 이것이 개별 비교 F 통계량의 분자 자유도가 1 인 이유다.
개별 비교의 분자 자유도 = 1 은 한 개의 제약 을 검정한다는 뜻이다. “\(\mu_1 = \mu_2\)” 라는 제약은 두 모수를 하나로 묶으므로 자유도가 1 줄어든다.
대조적으로 옴니버스 F 검정 (\(H_0: \mu_1 = \mu_2 = \cdots = \mu_J\)) 은 \(J - 1\) 개의 제약 을 동시에 검정한다 (모든 평균이 같다는 것은 \(J - 1\) 개의 등식). 따라서 분자 자유도가 \(J - 1\) 이다.
자유도가 제약의 개수 라는 일관된 직관이 모형 비교 골격의 우아함이다.
4 두 그룹 비교의 F 통계량
Maxwell 이 도출한 식 (Equation 1, Ch.4):
\[ F = \frac{(\bar{Y}_1 - \bar{Y}_2)^2}{\left(\frac{1}{n_1} + \frac{1}{n_2}\right) \text{MS}_W} \]
이 식의 분자는 두 그룹 평균의 차이 제곱 이고, 분모는 표준 오차의 제곱과 MS_W 의 곱 이다. \(\text{MS}_W\) 는 옴니버스 ANOVA 의 그룹 내 평균 제곱 (모든 \(J\) 그룹의 자료로 계산) 이다.
4.1 t 통계량과의 관계
같은 검정의 t 통계량 (등분산 가정):
\[ t = \frac{\bar{Y}_1 - \bar{Y}_2}{\sqrt{\text{MS}_W \left(\frac{1}{n_1} + \frac{1}{n_2}\right)}} \]
이를 제곱하면:
\[ t^2 = \frac{(\bar{Y}_1 - \bar{Y}_2)^2}{\text{MS}_W \left(\frac{1}{n_1} + \frac{1}{n_2}\right)} = F \]
즉 개별 비교의 F = (해당 t)².
두 그룹 비교에 전체 ANOVA 의 \(\text{MS}_W\) 를 사용하는 것이 핵심이다. 단순한 two-sample t 검정은 그 두 그룹의 자료로만 분산을 추정한다. 그러나 ANOVA 의 \(\text{MS}_W\) 는 모든 그룹 (J 개) 의 자료로 분산을 추정한다.
전제는 모든 그룹의 분산이 같다 (등분산 가정) 는 것이다. 이 가정이 성립하면 모든 그룹의 자료 로 추정한 \(\text{MS}_W\) 가 두 그룹만 사용한 추정보다 더 정확 하다.
이는 자유도에서 직접 보인다.
- Two-sample t (두 그룹만): 자유도 = \(n_1 + n_2 - 2\)
- 개별 비교 t (전체 ANOVA): 자유도 = \(n - J\) (총 표본 - 그룹 수)
\(n - J > n_1 + n_2 - 2\) 일 때 (즉 다른 그룹의 자료가 있을 때), 개별 비교 t 의 자유도가 더 크다 → 임계값 작음 → 검정력 더 높음.
이것이 ANOVA 후 사후 검정에서 전체 \(\text{MS}_W\) 를 쓰는 이유다.
5 대비의 일반화 — Complex Contrasts
두 그룹 비교는 가장 단순한 대비 이다 (계수 \((1, -1, 0, \ldots, 0)\)).
더 일반적인 대비는 복합 비교 (complex contrast) 이다.
5.1 예시 1 — 한 그룹 vs 나머지
\[ \psi = \mu_1 - \frac{1}{3}(\mu_2 + \mu_3 + \mu_4) \]
계수: \(c = (1, -1/3, -1/3, -1/3)\). 합 = 0.
5.2 예시 2 — 두 그룹 vs 두 그룹
\[ \psi = \frac{1}{2}(\mu_1 + \mu_2) - \frac{1}{2}(\mu_3 + \mu_4) \]
계수: \(c = (1/2, 1/2, -1/2, -1/2)\). 합 = 0.
5.3 예시 3 — 선형 추세 (Linear Trend)
수준이 순서 있는 (예: 약물 용량 0, 10, 20, 30 mg) 경우:
\[ \psi = -3 \mu_1 - 1 \mu_2 + 1 \mu_3 + 3 \mu_4 \]
계수: \(c = (-3, -1, 1, 3)\). 이는 그룹 평균이 선형으로 증가하는가 를 검정한다.
대비 계수 \(c_j\) 는 그 그룹이 비교에 어떤 부호와 가중치로 기여하는가 를 나타낸다.
- \(c_j > 0\): 그 그룹의 평균이 클 가설
- \(c_j < 0\): 그 그룹의 평균이 작을 가설
- \(c_j = 0\): 그 그룹은 비교에 미참여
합이 0 인 제약 (\(\sum c_j = 0\)) 은 대비가 평균 차이만 측정 하도록 한다. 만약 합이 0 이 아니면, 대비는 절대 수준 (예: 모든 그룹의 평균) 도 측정하게 되어 해석이 복잡해진다.
A/B 테스트에서 4 변형 중 2 개씩 비교 한다고 하자. 대비 \((1, -1, 0, 0)\) 는 변형 1 과 2 의 차이만, \((1/2, 1/2, -1/2, -1/2)\) 는 변형 1, 2 의 평균 vs 변형 3, 4 의 평균 차이를 검정한다. 비즈니스 질문에 따라 다른 대비를 설계한다.
6 대비 검정의 일반 형태
대비 \(\psi = \sum c_j \mu_j\) 의 표본 추정량:
\[ \widehat{\psi} = \sum_{j=1}^{J} c_j \bar{Y}_j \]
이 추정량의 분산:
\[ \text{Var}(\widehat{\psi}) = \sigma^2 \sum_{j=1}^{J} \frac{c_j^2}{n_j} \]
표본에서 \(\sigma^2\) 을 \(\text{MS}_W\) 로 추정하면 표준 오차:
\[ \text{SE}(\widehat{\psi}) = \sqrt{\text{MS}_W \sum_{j=1}^{J} \frac{c_j^2}{n_j}} \]
t 통계량:
\[ t = \frac{\widehat{\psi}}{\text{SE}(\widehat{\psi})} = \frac{\sum c_j \bar{Y}_j}{\sqrt{\text{MS}_W \sum c_j^2 / n_j}} \]
자유도 \(n - J\). F 통계량은 \(t^2\).
7 직교 대비 (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 \quad (\text{균형 설계에서는 } \sum c_{1j} c_{2j} = 0) \]
7.1 직교의 의미
직교 대비는 서로 독립인 정보 를 제공한다. 즉 두 검정 결과가 상관 없다.
7.2 직교 대비의 SS 가산성
\(J\) 그룹 ANOVA 에서 서로 직교인 \(J - 1\) 개의 대비 를 만들 수 있고, 이들의 제곱합이 \(\text{SS}_B\) 와 같다.
\[ \text{SS}_B = \text{SS}_{\psi_1} + \text{SS}_{\psi_2} + \cdots + \text{SS}_{\psi_{J-1}} \]
여기서 \(\text{SS}_{\psi_k} = \widehat{\psi}_k^2 / \sum (c_{kj}^2 / n_j)\).
즉 옴니버스 \(\text{SS}_B\) 가 \(J - 1\) 개의 독립적인 비교로 완전 분해 된다.
7.3 예시 — 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} = 0 + 0 + 0 + 0 = 0\). \(\sum c_{1j} c_{3j} = 1 - 1 + 0 + 0 = 0\). \(\sum c_{2j} c_{3j} = 0 + 0 - 1 + 1 = 0\). 모두 직교.
7.4 직교 분해의 가치
직교 분해는 다음 장점을 가진다.
- 독립적 정보 — 한 대비의 결과가 다른 대비에 영향 X
- 다중 비교 보정 단순 — Bonferroni 등이 단순 적용
- 해석 명료 — 각 대비가 고유한 비교를 검정
8 대비의 효과 크기
대비도 자체 효과 크기를 가진다. Cohen 의 d for contrast:
\[ d_\psi = \frac{\widehat{\psi}}{s_p \cdot \sqrt{\sum c_j^2}} \]
여기서 \(s_p = \sqrt{\text{MS}_W}\) 는 풀링된 표준편차.
8.1 부분 \(\eta^2\) for Contrast
\[ \eta^2_{\psi} = \frac{\text{SS}_{\psi}}{\text{SS}_T} \]
또는 (다른 효과 통제 후) partial \(\eta^2\):
\[ \eta^2_{\text{partial}, \psi} = \frac{\text{SS}_{\psi}}{\text{SS}_{\psi} + \text{SS}_W} \]
8.2 신뢰 구간
\(\widehat{\psi}\) 의 95 % CI:
\[ \widehat{\psi} \pm t_{0.025, n-J} \cdot \text{SE}(\widehat{\psi}) \]
이 CI 가 효과 크기 보고 의 핵심이다. 점추정 + CI + p 값이 완전한 보고 형식이다.
9 Planned vs Post Hoc 비교
- Planned (a priori): 자료 수집 전 에 결정된 비교. 연구 가설에 기반.
- Post hoc (a posteriori): 자료를 본 후 결정된 비교. 데이터 탐색 후 발견된 패턴.
9.1 차이의 의미
| 측면 | Planned | Post hoc |
|---|---|---|
| 결정 시점 | 연구 가설 단계 | 자료 분석 단계 |
| 검정 횟수 | 보통 적음 (1-3 개) | 보통 많음 (모든 쌍) |
| \(\alpha\) 통제 | 단순 (Bonferroni) | 복잡 (Tukey, Scheffé) |
| 검정력 | 일반적으로 높음 | 일반적으로 낮음 |
| 정직성 | 높음 (사전 등록) | 낮음 (cherry picking 위험) |
9.2 Cherry Picking 의 문제
Post hoc 비교에서 유의한 결과만 보고 하는 것은 p-hacking 의 한 형태이다. 4 그룹 사례에서 가능한 쌍별 비교는 \(\binom{4}{2} = 6\) 개이다. 모든 6 개를 검정하고 유의한 것만 보고 하면, 진정한 \(\alpha\) 가 5 % 보다 크다.
이것이 Maxwell Ch.5 의 다중 비교 보정 의 동기다.
A/B 테스트에서 4 가지 디자인 (A, B, C, D) 을 비교한다고 하자.
Planned 시나리오: 실험 시작 전에 “B 가 A 보다 더 나을 것이다” 라는 단일 가설을 등록한다. 자료 수집 후 그 한 가설 만 검정한다. \(\alpha = 0.05\) 가 그대로 유지된다.
Post hoc 시나리오: 자료를 본 후 “어, C 가 가장 좋네!” 발견한다. C vs 나머지 3 개의 비교를 한다. \(\alpha = 0.05\) 검정에서 적어도 한 비교는 우연만으로 유의해질 가능성이 높다. 실제 \(\alpha\) 가 5 % 보다 훨씬 크다.
이 차이는 통계적 정직성 의 문제다. Planned 비교는 사전 등록된 가설에 책임을 지지만, post hoc 은 자료를 보고 가설을 만든 셈이다.
해결책: 사전 등록 (preregistration) 을 통해 검증할 가설을 명시한다. 그 외 결과는 탐색적 분석 으로 표시하고 다중 비교 보정한다.
10 대비 분석의 흐름
연구 가설 → 대비 설계 (계수 $c_j$ 지정)
↓
자료 수집
↓
ANOVA F 검정 (옴니버스)
↓
선택 1: F 유의 → 사후 비교 (Tukey, Scheffé) — Ch.5
선택 2: 사전 등록된 대비 → 직접 검정 (Bonferroni 보정)
선택 3: 직교 분해 → SS 가산성 활용
11 코드 예시 — 대비 분석
import numpy as np
import pandas as pd
from scipy.stats import t, f
import statsmodels.api as sm
from statsmodels.formula.api import ols
np.random.seed(42)
n_each = 15
# 4 그룹 자료 (고혈압 치료)
group_drug = np.random.normal(120, 10, n_each)
group_biofeedback = np.random.normal(125, 10, n_each)
group_diet = np.random.normal(123, 10, n_each)
group_combined = np.random.normal(115, 10, n_each) # 복합이 가장 좋음
groups = ['drug']*n_each + ['biofeedback']*n_each + ['diet']*n_each + ['combined']*n_each
all_data = np.concatenate([group_drug, group_biofeedback, group_diet, group_combined])
df = pd.DataFrame({'bp': all_data, 'treatment': groups})
# 1. 옴니버스 ANOVA
model = ols('bp ~ C(treatment)', data=df).fit()
anova_table = sm.stats.anova_lm(model)
print(anova_table)
ms_w = anova_table['mean_sq'].iloc[1]
df_w = anova_table['df'].iloc[1]
n = len(df)
J = 4
# 2. 그룹 평균
means = df.groupby('treatment')['bp'].mean()
print(f"\n그룹 평균:\n{means}")
# 3. 대비 1 — 약물 vs 바이오피드백 (단순 비교)
c1 = {'drug': 1, 'biofeedback': -1, 'diet': 0, 'combined': 0}
psi1 = sum(c1[g] * means[g] for g in c1)
se_psi1 = np.sqrt(ms_w * sum(c1[g]**2 / n_each for g in c1))
t_psi1 = psi1 / se_psi1
p_psi1 = 2 * (1 - t.cdf(abs(t_psi1), df_w))
print(f"\n대비 1 (drug vs biofeedback): ψ = {psi1:.2f}, t = {t_psi1:.3f}, p = {p_psi1:.4f}")
# 4. 대비 2 — 복합 vs 개별 평균 (복합 비교)
c2 = {'drug': -1/3, 'biofeedback': -1/3, 'diet': -1/3, 'combined': 1}
psi2 = sum(c2[g] * means[g] for g in c2)
se_psi2 = np.sqrt(ms_w * sum(c2[g]**2 / n_each for g in c2))
t_psi2 = psi2 / se_psi2
p_psi2 = 2 * (1 - t.cdf(abs(t_psi2), df_w))
print(f"대비 2 (combined vs others avg): ψ = {psi2:.2f}, t = {t_psi2:.3f}, p = {p_psi2:.4f}")
# 5. 대비의 95 % 신뢰 구간
ci_psi2 = (psi2 - t.ppf(0.975, df_w) * se_psi2,
psi2 + t.ppf(0.975, df_w) * se_psi2)
print(f"대비 2 의 95 % CI = ({ci_psi2[0]:.2f}, {ci_psi2[1]:.2f})")
# 6. 대비의 효과 크기 (d for contrast)
s_p = np.sqrt(ms_w)
sum_c2_squared = sum(c2[g]**2 for g in c2)
d_psi2 = psi2 / (s_p * np.sqrt(sum_c2_squared))
print(f"d for contrast 2 = {d_psi2:.3f}")
# 7. 직교성 점검 (대비 1 과 2)
orthogonal = sum(c1[g] * c2[g] for g in c1) # = 0 이면 직교
print(f"\n대비 1 과 2 의 직교성: Σ c1·c2 = {orthogonal:.3f}")이 코드는 옴니버스 ANOVA + 두 개의 대비 + 효과 크기 + CI + 직교성 점검 을 한 번에 수행한다.
12 후속 — 다중 비교
이 글에서는 개별 비교의 골격 을 다뤘다. 그러나 여러 비교를 동시에 수행 하면 \(\alpha\) 가 인플레이션된다 (Cherry picking). 이를 정식으로 다루는 것이 Ch.5 의 다중 비교 보정 (Bonferroni, Tukey, Scheffé, FDR) 이다. 후속 시리즈 A-MAX5-* 에서 다룬다.
13 관련 주제
선행 지식
후속 주제 (Phase A)
- A-MAX4-1 t-F 관계 (F = t²) 자세히
- A-MAX4-2 Contrast 정의와 일반화
- A-MAX4-3 Orthogonal Contrasts 와 효과 크기
- A-MAX5-* 다중 비교 보정
다른 카테고리 연결