Tukey-Kramer와 FCR로 다중 비교 오류를 통제하는 방법
Tukey-Kramer의 모든 쌍 평균 비교와 FCR 신뢰구간을 통해 다중 비교 오류와 선택 후 추정을 관리하는 방법
2026-08-14 · 최초 발행 2024-04-29
모든 비교를 한꺼번에 해석할 때 생기는 문제
여러 실험군을 비교하면 개별 검정의 유의성만으로는 충분하지 않다. 다중 가설 검정과 다중 추정에서는 전체 오류율을 통제하면서 유의한 차이를 찾고, 선택된 효과에 대해서는 신뢰구간의 보장 범위까지 관리해야 한다.
Multiple Comparison Procedures(MCP)는 이런 상황을 위한 절차의 집합이다. Bonferroni, Holm, Tukey, Scheffé, BH(FDR) 등이 여기에 속하며, 모든 평균 쌍을 비교하는지, 임의의 대조를 다루는지, 선택된 효과의 구간을 제시하는지에 따라 선택 기준이 달라진다.
모든 집단 평균 쌍에는 Tukey-Kramer를 쓴다
Tukey-Kramer는 일원 분산분석(One-way ANOVA)에서 집단 평균의 모든 쌍을 비교할 때 가족 단위 오류율(FWER)을 α 수준으로 보장하는 방법이다. 표본 수 n_i가 서로 다른 불균형 표본에서도 Tukey HSD를 일반화해 적용할 수 있다.
각 쌍의 검정과 신뢰구간은 studentized range 분포의 q 임계값을 사용하며, 분산 추정에는 ANOVA의 MSE와 자유도 df가 들어간다. 집단 i, j의 평균 차이에 대한 100(1−α)% 신뢰구간은 다음과 같다.
(ȳ_i − ȳ_j) ± q_{α; k, df} × sqrt(MSE/2 × (1/n_i + 1/n_j))
이 방법은 모든 쌍 비교를 하나의 가족으로 다루므로 해석의 일관성을 확보할 수 있다. 다만 정규성, 등분산(σ^2 동일), 독립성을 전제로 한다. 등분산성이 깨졌다면 Games-Howell을 대안으로 검토한다.
선택한 효과의 구간을 보장하는 FCR
False Coverage Rate(FCR)는 선택된 파라미터에 대해 만든 신뢰구간 가운데 진실값을 포함하지 않는 구간의 비율, 즉 E[V/R]의 기대값을 q 이하로 통제하는 개념이다.
FDR이 거짓 기각의 비율을 다루는 반면, FCR은 선택된 신뢰구간의 미포함 비율을 다룬다. 따라서 많은 후보에서 신호를 먼저 고른 뒤 그 효과 크기를 해석해야 하는 고차원 분석에 맞는다.
Benjamini–Yekutieli(2005)의 기본 절차에서는 임의의 단조 선택 규칙으로 R개를 선택했을 때, 선택된 각 파라미터에 대해 신뢰수준 1 − q·R/m의 구간을 구성한다. 독립·정규 근사 등의 전제 아래 FCR ≤ q를 보장한다. 선택 수가 늘수록 구간이 넓어지는 적응형 구조다.
강한 상관 구조에서는 보수적 조정이 필요할 수 있다. 선택 규칙의 단조성과 독립성 또는 약한 상관 가정도 함께 확인해야 한다.
분석 목적에 따라 갈리는 흐름
분석 전에는 결측치와 이상치를 확인하고 정규성·등분산을 진단한다. ANOVA가 유의하면 Tukey-Kramer로 모든 쌍을 비교하고, 고차원 문제에서는 BH로 신호를 선택한 뒤 FCR 구간을 구성할 수 있다.
그룹 수가 2보다 적거나 표본 수가 부족하면 분석을 중단하고 샘플링 계획을 다시 세운다. 등분산성이 위배되면 Games-Howell이나 Welch-ANOVA로 분기한다. 선택 결과가 R=0이면 FCR 구간은 만들지 않으며, 표본 확장이나 효과크기 기반 설계를 검토한다.
비교 범위와 가정이 결정하는 선택
| 방법 | 성능(탐지력) | 확장성(불균형/고차원) | 일관성(오류 보장) | 안정성(가정 위반 민감도) | 운영 편의 |
|---|---|---|---|---|---|
| Tukey–Kramer | Bonferroni보다 우수(쌍비교 특화) | 불균형 표본 지원(k 중간 규모) | FWER≤α 보장 | 등분산 위배 시 민감 | 도구 지원 풍부 |
| Bonferroni | 보수적 | 제약 적음(일반 목적) | FWER≤α 보장 | 견고하나 과보수 | 쉬움 |
| Scheffé | 아주 보수적(임의 대조 보장) | 임의 선형대조까지 포괄 | FWER≤α(모든 대조) | 안정적이나 탐지력 낮음 | 중간 |
| Games–Howell | Tukey 유사 또는 우수(이분산) | 불균형/이분산에 강함 | 쌍비교의 EER 제어(근사) | 이분산에 견고 | 구현 다양 |
| FCR-구간(BY) | 선택 후 추정에 합리적 | m 매우 큼(고차원) | FCR≤q 보장 | 상관 강하면 보수적 | 구현 약간 복잡 |
R에서 불균형 표본을 비교하는 예
아래 예시는 불균형 표본에서 ANOVA를 적합한 뒤 multcomp 패키지로 Tukey 대비와 신뢰구간을 구한다.
# R >= 4.3
set.seed(42)
n <- c(12, 18, 10) # 불균형 표본
grp <- factor(rep(LETTERS[1:3], times = n))
mu <- c(0, 0.6, 1.0)
y <- rnorm(sum(n), mean = rep(mu, times = n), sd = 1)
fit <- aov(y ~ grp)
summary(fit)
# multcomp 패키지는 Tukey 대비(불균형 포함)와 신뢰구간 제공
install.packages("multcomp")
library(multcomp)
tk <- glht(fit, linfct = mcp(grp = "Tukey"))
confint(tk) # Tukey–Kramer 신뢰구간
summary(tk) # 다중 비교 결과(FWER 통제)
등분산 위배가 의심되면 onewaytests::welch.test와 userfriendlyscience::oneway(…, posthoc = "games-howell") 등의 대안을 적용할 수 있다.
Python에서 Tukey HSD 결과를 확인하는 예
statsmodels의 Tukey HSD는 불균형 표본에 Tukey-Kramer 근사를 사용한다.
# Python 3.10+, statsmodels 0.14+
import numpy as np
import pandas as pd
from statsmodels.stats.multicomp import pairwise_tukeyhsd
rng = np.random.default_rng(42)
sizes = [12, 18, 10]
groups = np.repeat(['A','B','C'], sizes)
means = {'A':0.0,'B':0.6,'C':1.0}
y = np.concatenate([rng.normal(loc=means[g], scale=1.0, size=s) for g,s in zip(['A','B','C'], sizes)])
res = pairwise_tukeyhsd(endog=y, groups=groups, alpha=0.05)
print(res.summary()) # 쌍비교 결과 및 구간
BH 선택 뒤 FCR 구간을 구성하는 예
다음 코드는 BH로 유의 피처를 선택한 뒤 Benjamini–Yekutieli(2005) 절차에 따라 선택된 효과의 FCR 구간을 만든다.
# Python 3.10+, numpy, scipy, statsmodels
import numpy as np
from scipy.stats import norm
from statsmodels.stats.multitest import multipletests
rng = np.random.default_rng(7)
m = 200 # 파라미터 수
theta = np.zeros(m)
signal_idx = rng.choice(m, size=30, replace=False)
theta[signal_idx] = rng.normal(1.0, 0.3, size=30) # 일부 신호
se = np.full(m, 1.0) # 표준오차(알려짐 가정)
yhat = theta + rng.normal(0, se, size=m)
# 양측 z-검정 p-값
z = yhat / se
pvals = 2 * (1 - norm.cdf(np.abs(z)))
# 선택: BH(FDR q=0.1)
q = 0.10
rej, p_adj, _, _ = multipletests(pvals, alpha=q, method='fdr_bh')
selected = np.where(rej)[0]
R = len(selected)
print("Selected R =", R)
# BY(2005) FCR-구간: 신뢰수준 = 1 - q*R/m
if R > 0:
alpha_sel = q * R / m
zc = norm.ppf(1 - alpha_sel/2)
lb = yhat[selected] - zc * se[selected]
ub = yhat[selected] + zc * se[selected]
intervals = list(zip(selected, lb, ub))
print("First 5 intervals:", intervals[:5])
else:
print("No selections; FCR intervals not constructed.")
이 절차는 단조 선택 규칙인 BH와 독립 정규 근사를 사용할 때 FCR ≤ q를 보장한다. 상관 구조가 강하면 효과적 m 조정이나 permutation 기반의 보수적 조정을 고려한다.
분석 현장에서의 적용 범위
다군 A/B/n 실험에서는 로그 변환, 이상치 처리, 등분산 진단을 거친 뒤 ANOVA가 유의할 때 Tukey-Kramer로 모든 쌍을 비교한다. 유의한 군 조합은 효과크기와 함께 보고해 의사결정에 사용한다.
제조 공정에서 여러 레시피를 비교할 때는 불균형 표본과 결측이 함께 나타날 수 있다. 평균 차이는 Tukey-Kramer로 평가하되 이분산이면 Games-Howell로 바꾼다. 로트 효과가 크다면 혼합모형과 수준별 Tukey 대조를 병행한다.
오믹스나 광고 피처 스크리닝처럼 고차원인 경우에는 BH로 유의 피처를 선택하고 FCR 구간으로 선택 후 추정의 신뢰도를 제시한다. 보고서에는 선택된 피처별 점추정과 FCR 구간, 선택 기준인 R과 q를 명시한다.
오류 보장을 보고 품질로 연결하기
Tukey-Kramer는 모든 쌍 비교에서 FWER ≤ 0.05를 보장하며, 데이터 구조와 k에 따라 Bonferroni 대비 검정력이 5~20%p 개선된다. FCR은 선택된 신뢰구간의 미포함 비율 기대값을 ≤ q로 보장하며, 예를 들어 q=0.1을 설정할 수 있어 선택 후 과대추정 리스크를 완화한다.
가정 위반 시의 대체 경로를 명시하고, 효과 크기와 오류 보장 기준을 함께 자동 보고하면 재현성과 해석의 일관성을 높일 수 있다.