1 도입 — 어느 오류율을 통제할까
다중 비교 보정의 핵심 결정은 어느 오류율을 0.05 로 통제할 것인가 이다. A-MAX5-0 에서 3 종류 오류율을 소개했다. 이 글은 그들의 수학적 관계, 통제의 트레이드오프, 실무 권장 을 자세히 다룬다.
2 3 종류 오류율 — 자세히
2.1 Per-Comparison Error Rate (\(\alpha_{PC}\))
특정 한 개의 비교가 거짓으로 유의해질 확률.
\[ \alpha_{PC} = \Pr(\text{한 비교가 거짓 양성} \mid H_0 \text{ 참}) \]
표준 t 검정·F 검정의 \(\alpha\) 가 이것이다.
\(\alpha_{PC} = 0.05\) 의 의미: 한 비교를 무한히 반복하면, 5 % 의 시도에서 (거짓으로) 유의함.
2.2 Experimentwise Error Rate (\(\alpha_{EW}\))
한 실험 내의 어떤 비교라도 거짓 양성일 확률.
\[ \alpha_{EW} = \Pr(\text{적어도 한 비교가 거짓 양성} \mid \text{모든 } H_0 \text{ 참}) \]
\(C\) 개 독립 비교에서:
\[ \alpha_{EW} = 1 - (1 - \alpha_{PC})^C \]
비독립 비교에서는 일반적으로
\[ \alpha_{EW} \leq C \cdot \alpha_{PC} \]
(Bonferroni 부등식).
2.3 Expected Number of Errors Per Experiment (ENEPE)
한 실험에서 발생하는 기대 거짓 양성 수.
\[ \text{ENEPE} = E[\text{거짓 양성 수}] = \sum_{k=1}^{C} \Pr(A_k) = C \cdot \alpha_{PC} \]
(각 비교의 \(\alpha_{PC}\) 가 같다고 가정).
ENEPE 는 확률 이 아니라 기대값 이다. 1 보다 클 수 있다.
3 수치 예시 — 4 그룹 3 직교 대비
| 오류율 | 4 그룹 3 비교, \(\alpha_{PC} = 0.05\) |
|---|---|
| \(\alpha_{PC}\) | 0.05 |
| ENEPE | \(3 \times 0.05 = 0.15\) |
| \(\alpha_{EW}\) | \(1 - 0.95^3 \approx 0.143\) |
ENEPE 와 \(\alpha_{EW}\) 는 작은 \(C\) 에서 비슷하지만, 큰 \(C\) 에서 다르다.
| \(C\) | ENEPE | \(\alpha_{EW}\) |
|---|---|---|
| 1 | 0.05 | 0.05 |
| 3 | 0.15 | 0.143 |
| 5 | 0.25 | 0.226 |
| 10 | 0.50 | 0.401 |
| 20 | 1.00 | 0.642 |
| 50 | 2.50 | 0.923 |
| 100 | 5.00 | 0.994 |
큰 \(C\) 에서 ENEPE 가 1 을 넘지만 \(\alpha_{EW}\) 는 1 에 접근만 한다 (0 ~ 1 확률).
동전 던지기 비유.
- ENEPE = 동전 100 개 던졌을 때 앞면 나오는 동전의 기대 수 (예: 5 개)
- \(\alpha_{EW}\) = 동전 100 개 던졌을 때 적어도 한 동전이 앞면일 확률 (대부분 1 에 가까움)
작은 \(C\) 에서 두 값이 비슷한 이유: 1 개 이하의 양성 사건 시나리오가 대부분이라 기대값과 발생 확률이 가까움. 큰 \(C\) 에서 두 값이 다른 이유: 기대값이 1 보다 커지지만 발생 확률은 항상 1 이하.
ENEPE 가 기대 거짓 발견 수 라는 점에서 실용적 정보 이다. 그러나 가설 검정의 형식적 통제 도구는 일반적으로 \(\alpha_{EW}\) 또는 FDR 이다.
4 Bonferroni 부등식 — 보정의 토대
임의의 사건 \(A_1, A_2, \ldots, A_C\) 에 대해:
\[ \Pr\left(\bigcup_{k=1}^{C} A_k\right) \leq \sum_{k=1}^{C} \Pr(A_k) \]
각 \(A_k\) 가 “비교 \(k\) 가 거짓 양성” 이면 좌변이 \(\alpha_{EW}\), 우변이 ENEPE.
\[ \alpha_{EW} \leq \text{ENEPE} = C \cdot \alpha_{PC} \]
부등식 왼쪽 = 오른쪽 인 경우는 비교들이 상호 배타 일 때 (현실에서는 거의 X). 따라서 일반적으로
\[ \alpha_{EW} < C \cdot \alpha_{PC} \]
이며, 보정의 보수성 의 원천이다. Bonferroni 보정 (\(\alpha_{PC} = \alpha / C\)) 은 이 부등식을 활용하여 \(\alpha_{EW} \leq \alpha\) 를 보장한다.
5 통제 선택의 트레이드오프
세 오류율 모두를 동시에 통제할 수 없다. 어느 것을 통제하는가 는 의사결정이다.
5.1 시나리오 1 — \(\alpha_{PC} = 0.05\) 통제
장점: 각 비교의 검정력이 보존됨. 단점: 비교가 많을수록 전체 거짓 양성 발생률이 폭증.
100 개 비교 → ENEPE = 5, \(\alpha_{EW} \approx 0.994\). 거의 확실히 한 개 이상 거짓 양성.
5.2 시나리오 2 — \(\alpha_{EW} = 0.05\) 통제
장점: 실험 단위에서 거짓 양성이 5 % 로 제한. 단점: 각 비교의 \(\alpha_{PC}\) 가 작아져 검정력 감소.
100 개 비교, \(\alpha_{EW} = 0.05\) → \(\alpha_{PC} \approx 0.0005\). 각 비교가 매우 보수적.
5.3 시나리오 3 — ENEPE = 0.05 통제
장점: 기대 거짓 발견 수가 0.05 (한 실험에 평균 0.05 개 거짓 양성). 단점: 직접적 통제 도구가 적음.
ENEPE = 0.05, \(C\) 개 비교 → \(\alpha_{PC} = 0.05 / C\). Bonferroni 와 동일한 결과 (ENEPE 와 \(\alpha_{EW}\) 가 작은 \(C\) 에서 비슷한 이유).
6 \(\alpha_{EW}\) 통제의 권장 이유
Maxwell 은 일반적으로 \(\alpha_{EW}\) 통제를 권장한다. 이유:
- 연구 단위의 명확성 — 한 실험에서의 거짓 양성 발생률이 5 % 로 제한되면, 실험 결과 자체에 대한 신뢰도 가 보장됨.
- 출판 편향 방지 — \(\alpha_{PC}\) 통제 + 다중 비교 → 우연으로 유의해진 결과만 출판되는 cherry picking 의 자유.
- 재현성 확보 — 한 실험의 신뢰성이 보장되면 후속 재현 연구에서 정직한 평가 가능.
6.1 반대 입장 — Cohen 1990, Rothman 1990
일부 통계학자는 \(\alpha_{PC}\) 통제 + 효과 크기 보고를 선호한다. 이유:
- 지식의 누적 — 모든 연구가 사전 등록되지 않으므로 단일 실험의 \(\alpha_{EW}\) 통제는 전체 출판 문헌 의 신뢰성을 보장하지 못함.
- 검정력 손실 — 보수적 보정이 작지만 진짜인 효과 를 잡지 못하게 함.
- 베이즈 분석의 대안 — \(\alpha\) 통제보다 사후 확률 분석이 더 정보적.
이 논쟁은 통계학에서 현재 진행형 이다. 실무 권장은 분야별로 다르다.
7 분야별 관행
| 분야 | 표준 | 이유 |
|---|---|---|
| 임상시험 (Phase III) | \(\alpha_{EW}\) 엄격 | 신약 승인의 사회적 영향 |
| 심리학 학술 | \(\alpha_{EW}\) (Bonferroni 또는 FDR) | 출판 편향 방지 |
| 유전체학 (GWAS) | FDR | 매우 많은 비교 (\(10^6\)) |
| IT A/B 테스트 (사전 가설) | \(\alpha_{EW}\) | 의사결정의 신중성 |
| IT A/B 테스트 (탐색) | FDR 또는 ENEPE | 발견의 효율성 |
| 베이즈 분석 | 명시적 사전 + 사후 | \(\alpha\) 개념 자체 X |
8 동시 신뢰 구간 (Simultaneous CI)
다중 비교 보정은 p 값 보정 으로 이해되지만, 동등하게 신뢰 구간 보정 으로 표현된다.
여러 대비 \(\psi_1, \psi_2, \ldots, \psi_C\) 의 신뢰 구간이 동시에 참 모수를 포함할 확률이 \(1 - \alpha\) 인 구간.
\[ \Pr\left(\bigcap_{k=1}^{C} \{\psi_k \in \text{CI}_k\}\right) = 1 - \alpha \]
8.1 표준 (개별) CI
\[ \widehat{\psi}_k \pm t_{\alpha/2, n-J} \cdot \text{SE}(\widehat{\psi}_k) \]
각 CI 가 개별적 으로 \(1 - \alpha\) 신뢰 수준.
8.2 Bonferroni 동시 CI
\[ \widehat{\psi}_k \pm t_{\alpha/(2C), n-J} \cdot \text{SE}(\widehat{\psi}_k) \]
각 CI 의 임계값을 \(t_{\alpha/(2C)}\) 로 더 큼 (보수적). 결과: 더 넓은 CI.
8.3 일반 동시 CI
절차마다 임계값이 다르다.
| 절차 | 임계값 (예: 4 그룹, 6 쌍별 비교) |
|---|---|
| 개별 (무보정) | \(t_{0.025, n-J}\) |
| Bonferroni | \(t_{0.025/6, n-J}\) |
| Šidák | \(t_{(1 - 0.95^{1/6})/2, n-J}\) |
| Tukey HSD | \(q_{0.05, J, n-J} / \sqrt{2}\) |
| Scheffé | \(\sqrt{(J-1) \cdot F_{\alpha, J-1, n-J}}\) |
각 절차의 임계값 비교 가 보수성 비교의 직접 형태이다.
9 동시 CI 의 폭 비교
4 그룹, \(n = 80\) (\(n_j = 20\)), \(\text{MS}_W = 1.0\) 가정. 두 그룹 평균 차이의 표준 오차 = \(\sqrt{1 \cdot (1/20 + 1/20)} \approx 0.316\).
| 절차 | 임계값 | CI 폭 (예: 평균 차 = 0.5) |
|---|---|---|
| 개별 95 % | 1.992 | \(0.5 \pm 0.629\) |
| Bonferroni 6 비교 | 2.834 | \(0.5 \pm 0.896\) |
| Tukey HSD | 2.643 | \(0.5 \pm 0.835\) |
| Scheffé | 2.876 | \(0.5 \pm 0.909\) |
보수적 절차일수록 CI 폭이 넓다. 이는 추정의 불확실성을 더 정직하게 표현 하는 것이다.
10 동시 CI 의 장점
- 추론의 강도 명시 — 모든 CI 가 동시에 모수 포함을 보장.
- 시각적 판단 용이 — 0 을 포함하는지로 검정 결과 직접 확인 (귀무가설 기각 = 0 미포함).
- 효과 크기 + 보정 통합 — 효과 크기 추정과 다중 비교 보정을 한 도구로.
11 의사결정 — 통제할 오류율 선택
연구 목적은?
↓
의사결정 (신약 승인, A/B 테스트 채택)
Yes → α_EW 엄격 통제 (Bonferroni, Tukey, Scheffé)
↓
탐색적 분석 (가설 생성)
Yes → FDR 또는 ENEPE 통제
↓
재현 연구
Yes → α_PC 통제 + 효과 크기 보고
각 시나리오에서 목적이 통제 선택 을 결정한다.
12 A/B 테스트 사례
12.1 시나리오 — 4 변형, 1 메트릭
A/B/C/D 테스트 (대조군 + 신규 3 개) 에서 대조군 vs 각 신규 를 검정.
- 비교 수: 3
- 적절한 절차: Dunnett (대조군 vs 처치군 특화)
- \(\alpha_{PC, \text{Dunnett}}\): 약 0.020 (3 비교, \(\alpha_{EW} = 0.05\))
- 검정력 손실 정도: 약 10 %
12.2 시나리오 — 2 변형, 5 메트릭
A vs B 테스트에서 클릭률, 매출, 체류시간, 리텐션, NPS 검정.
- 비교 수: 5
- 적절한 절차: FDR (BH) 또는 Bonferroni
- Primary metric 1 개를 사전 지정하고 나머지는 secondary 로 분리하여 family 단위 보정도 가능
12.3 시나리오 — 2 변형, 1 primary + 5 secondary
- Primary metric (매출) 에 전체 \(\alpha = 0.05\) 할당
- Secondary metrics (5 개) 에 FDR 보정 (탐색용)
- 이 계층적 보정 이 효율적
13 코드 예시 — 동시 CI 구성
import numpy as np
from scipy.stats import t as t_dist, studentized_range, f as f_dist
np.random.seed(42)
n_each = 20
J = 4
n = J * n_each
df_w = n - J
ms_w = 1.0 # 가정
# 두 그룹 평균 차이 (가상)
mean_diff = 0.5
se_diff = np.sqrt(ms_w * (1/n_each + 1/n_each))
print("두 그룹 평균 차이 = 0.5, SE = {:.3f}\n".format(se_diff))
# 1. 개별 95 % CI
t_crit_individual = t_dist.ppf(0.975, df_w)
ci_indiv = (mean_diff - t_crit_individual * se_diff,
mean_diff + t_crit_individual * se_diff)
print(f"개별 95 % CI: t = {t_crit_individual:.3f}, CI = ({ci_indiv[0]:.3f}, {ci_indiv[1]:.3f})")
# 2. Bonferroni (6 비교)
C = 6
t_crit_bonf = t_dist.ppf(1 - 0.025/C, df_w)
ci_bonf = (mean_diff - t_crit_bonf * se_diff,
mean_diff + t_crit_bonf * se_diff)
print(f"Bonferroni 95 % CI: t = {t_crit_bonf:.3f}, CI = ({ci_bonf[0]:.3f}, {ci_bonf[1]:.3f})")
# 3. Šidák
t_crit_sidak = t_dist.ppf(1 - (1 - 0.95**(1/C))/2, df_w)
ci_sidak = (mean_diff - t_crit_sidak * se_diff,
mean_diff + t_crit_sidak * se_diff)
print(f"Šidák 95 % CI: t = {t_crit_sidak:.3f}, CI = ({ci_sidak[0]:.3f}, {ci_sidak[1]:.3f})")
# 4. Tukey HSD
q_crit = studentized_range.ppf(0.95, J, df_w)
margin_tukey = q_crit * np.sqrt(ms_w / n_each) # 균형 설계 기준
ci_tukey = (mean_diff - margin_tukey, mean_diff + margin_tukey)
print(f"Tukey HSD 95 % CI: q = {q_crit:.3f}, margin = {margin_tukey:.3f}, CI = ({ci_tukey[0]:.3f}, {ci_tukey[1]:.3f})")
# 5. Scheffé
F_crit = f_dist.ppf(0.95, J-1, df_w)
margin_scheffe = np.sqrt((J-1) * F_crit) * se_diff
ci_scheffe = (mean_diff - margin_scheffe, mean_diff + margin_scheffe)
print(f"Scheffé 95 % CI: F = {F_crit:.3f}, margin = {margin_scheffe:.3f}, CI = ({ci_scheffe[0]:.3f}, {ci_scheffe[1]:.3f})")14 오류율의 추가 종류
14.1 Family-wise Error Rate (FWER)
다중 요인 ANOVA 또는 multi-stage 검정에서:
- EWER (Experimentwise): 한 실험 내의 적어도 한 거짓 양성 확률
- FWER (Family-wise): 한 family 내의 적어도 한 거짓 양성 확률
Family 의 정의는 분석 단위별:
- 다요인 ANOVA: 각 요인 = family
- 임상시험: Primary endpoints + Secondary endpoints = 별도 family
14.2 Generalized FWER (gFWER)
적어도 \(k\) 개 거짓 양성 확률 통제 (k > 1).
엄격한 FWER (k=1) 보다 덜 보수적. GWAS 등에서 사용.
14.3 k-FWER
위와 동등.
14.4 Per-Family Error Rate (PFER)
Family 별 기대 거짓 양성 수. ENEPE 와 유사.
각 오류율의 적합 시점:
| 오류율 | 시나리오 |
|---|---|
| FWER | 임상 의사결정, 매우 보수적 |
| FDR | 발견 탐색, 균형적 |
| gFWER | 작은 발견 허용 |
| PFER | 보고용 |
15 다중성 보정의 비대칭
15.1 One-sided vs Two-sided 보정
양측 검정의 Bonferroni: \(\alpha_{PC} = \alpha / C\). 한 측 검정 + 명확한 방향: 단순.
A-MAX5 의 모든 절차는 양측 가정. 한 측은 별도 보정.
15.2 이질적 가설 가족
각 가설의 중요성 이 다른 경우:
Family A (Primary): 매출
α_A = 0.04
Family B (Secondary): 클릭률, 체류시간, NPS
α_B = 0.01 (각 0.01/3 보정)
Total: 0.05. 알파 분배 사전 결정.
16 Simultaneous CI 의 추가 변형
16.1 Bonferroni vs Tukey vs Scheffé CI
같은 자료에서 4 그룹의 모든 쌍별 차이 CI 비교:
import numpy as np
from scipy.stats import t as t_dist, f as f_dist, studentized_range
J = 4
n_per = 25
df_w = J * (n_per - 1)
mean_diff = 0.5 # 가상
se = np.sqrt(2 / n_per)
# Bonferroni (6 비교)
n_comp = 6
t_bonf = t_dist.ppf(1 - 0.025/n_comp, df_w)
ci_bonf = (mean_diff - t_bonf * se, mean_diff + t_bonf * se)
# Tukey HSD
q_tukey = studentized_range.ppf(0.95, J, df_w)
margin_tukey = q_tukey * np.sqrt(1 / n_per) # 균형 설계
ci_tukey = (mean_diff - margin_tukey, mean_diff + margin_tukey)
# Scheffé
F_crit = f_dist.ppf(0.95, J-1, df_w)
margin_scheffe = np.sqrt((J-1) * F_crit) * se
ci_scheffe = (mean_diff - margin_scheffe, mean_diff + margin_scheffe)
# 개별 (보정 X)
t_indiv = t_dist.ppf(0.975, df_w)
ci_indiv = (mean_diff - t_indiv * se, mean_diff + t_indiv * se)
print("CI 비교:")
print(f"개별: ({ci_indiv[0]:.3f}, {ci_indiv[1]:.3f}), 폭 {ci_indiv[1]-ci_indiv[0]:.3f}")
print(f"Bonferroni: ({ci_bonf[0]:.3f}, {ci_bonf[1]:.3f}), 폭 {ci_bonf[1]-ci_bonf[0]:.3f}")
print(f"Tukey HSD: ({ci_tukey[0]:.3f}, {ci_tukey[1]:.3f}), 폭 {ci_tukey[1]-ci_tukey[0]:.3f}")
print(f"Scheffé: ({ci_scheffe[0]:.3f}, {ci_scheffe[1]:.3f}), 폭 {ci_scheffe[1]-ci_scheffe[0]:.3f}")CI 폭이 보수성에 비례. 임상적 결정의 보수성 선택.
17 후속 — Hsu 와 Bonferroni 자세히
다음 글 A-MAX5-2 는 Hsu 의 5 추론 강도와 Bonferroni 절차의 자세한 도출·실무 사용을 다룬다.
18 관련 주제
선행 지식
후속 주제 (Phase A)
- A-MAX5-2 Hsu 5 추론 강도 + Bonferroni
- A-MAX5-3 Tukey HSD, Scheffé, Dunnett
- A-MAX5-4 FDR + 실무 조정
다른 카테고리 연결