F-검정과 ANOVA: 분산 동질성 검증과 강건한 분석 경로

F-검정과 ANOVA 전제 검증의 원리, 분산 동질성 검사 선택 기준, Welch ANOVA와 강건한 대안을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

평균 비교 전에 확인할 데이터의 조건

실험이나 관찰 데이터에서 집단 차이를 판단할 때는 평균 비교 결과만으로 충분하지 않다. ANOVA를 적용하려면 잔차의 정규성, 집단 간 분산 동질성, 관측치의 독립성을 함께 확인해야 한다. 이 조건이 흔들리면 검정 방법과 사후검정의 선택도 달라진다.

F-검정은 두 정규 모집단의 분산이 같은지 확인하는 분산비 검정이다. 검정통계량은 F = s1^2 / s2^2이며, 자유도는 df1=n1-1, df2=n2-1로 두고 F-분포에서 p-값을 산출한다. ANOVA에서도 F-통계량을 쓰지만, 이때는 MS_between/MS_within으로 집단 평균 차이를 검정한다.

ANOVA에 적용되는 가정은 다음과 같다.

  • 정규성: 각 집단의 잔차가 정규분포를 따른다고 가정한다.
  • 분산 동질성: 집단 간 분산이 같다고 가정한다.
  • 독립성: 관측치가 서로 독립이라고 가정하며, 이는 실험설계와 수집 절차에서 보장된다.

분산 동질성이 맞지 않으면 Welch ANOVA와 Games–Howell 사후검정을 고려한다. 정규성 위반이 심하면 Kruskal–Wallis 같은 비모수 방법이나 Box–Cox, 로그 변환을 검토할 수 있다. 이상치에 민감한 상황에서는 Levene, Brown–Forsythe, Fligner–Killeen이 분산 검정의 대안이 된다.

데이터 상태에 따라 달라지는 검정 선택

정규성 점검에는 Shapiro–Wilk, Q–Q plot, 잔차 진단을 사용할 수 있다. 표본이 n≥30 이상이면 중심극한정리에 기대할 수 있지만, 왜도와 이상치는 여전히 확인해야 한다.

분산 동질성 검정은 집단 수와 데이터의 성격에 따라 선택한다. 두 집단에서는 정규성 가정이 강한 고전 F-검정 외에 Levene, Brown–Forsythe, Bartlett을 사용할 수 있다. 여러 집단에서는 Levene/Brown–Forsythe, Bartlett, 순위 기반의 Fligner–Killeen이 후보가 된다. 독립성은 설계를 먼저 검토하고, 시계열성이 있다면 Durbin–Watson과 잔차 대 순서 플롯으로 확인한다.

정규성이 충족되고 이상치가 드문 경우에는 Bartlett와 2집단 F-검정이 적합하다. Bartlett는 검정력이 우수하지만 정규성에 민감하다. 정규성이 불확실하거나 이상치가 예상되면 중앙값을 중심으로 하는 Brown–Forsythe가 더 강건하며, 평균 중심 Levene은 이상치에 민감할 수 있다.

표본 불균형과 이분산이 함께 나타나면 평균 비교에는 Welch ANOVA, 사후검정에는 Games–Howell을 사용한다. 비정규성이 완만한 경우에는 Fligner–Killeen을 선택하거나 변환을 적용할 수 있다.

분석 경로를 바꾸는 전제 진단

정규성 양호정규성 의심/이상치2집단k집단동질성 통과동질성 위반심한 비정규자기상관입력: 설계/데이터EDA: 이상치·왜도·불균형 확인정규성 체크: Shapiro-Wilk,QQ-plot독립성 체크: 설계 검토,Durbin–Watson분산 동질성 검사강건 동질성 검사(BF/Fligner)F-test 또는 LeveneBartlett 또는 Levene대안 선택:Brown–Forsythe/Fligner동질성 결과ANOVA + TukeyWelch ANOVA +Games–Howell변환(Box–Cox) 또는Kruskal–Wallis효과크기/CI 보고(η²/ω²)블록/혼합모형 고려

분산 검정과 평균 비교 방법의 차이

검정/방법 정규성 가정 이상치 민감도 비정규 강건성 정상성 하 검정력 주 용도
F-검정(2집단 분산) 강함 높음 낮음 높음 두 집단 분산 동질성
Bartlett 강함 높음 낮음 매우 높음 k집단 동질성(정규성 확실)
Levene(평균) 중간 중간 중간 중간 일반적 동질성
Brown–Forsythe(중앙값) 낮음 낮음 높음 정상성에서 약간 낮음 이상치/비정규 대응 동질성
Fligner–Killeen 없음(순위) 낮음 매우 높음 비정규에서 우수 분포 자유 동질성
Welch ANOVA 평균 비교(이분산 허용) 중간 높음 이분산에서 우수 이분산 다집단 평균 비교

결과 보고에 포함할 내용

ANOVA 결과에는 η², ω², 부분 η²를 보고한다. Welch ANOVA를 사용한 경우에도 효과크기를 함께 제시한다. 분산 동질성 통과 여부와 그에 따른 분석 경로를 명시하고, 신뢰구간과 함께 해석해야 한다.

사후검정은 분산 조건과 연결된다. 분산 동질성이 성립하는 경우에는 Tukey HSD로 FWER를 통제할 수 있고, 이분산 상황에서는 Games–Howell을 사용한다. 전제 검증 결과, 대안 선택 근거, 효과크기, 신뢰구간을 같은 형식으로 기록하면 분석 결과의 재현 가능성을 높일 수 있다.

공정·임상·제품 데이터에서의 적용

제조 공정에서는 동일 규격 생산 라인의 분산 동질성을 검정해 공정 안정성을 판단할 수 있다. 동질성이 깨지면 공정 재조정이나 관리상수 재설정이 필요할 수 있다.

임상시험의 다군 비교에서는 치료군 간 분산 불균형을 확인한 뒤 Welch ANOVA를 사용해 제1종 오류를 통제하고, Games–Howell로 군 간 비교를 수행할 수 있다.

디지털 제품의 A/B/n 테스트에서는 트래픽과 변동성이 불균형한 환경에서 Levene 또는 Brown–Forsythe로 동질성을 점검한다. 이분산이면 Welch t/ANOVA로 평균 차이를 평가한다.

네트워크 성능 벤치마킹에서는 환경별 레이턴시 분산을 비교해 SLA 리스크를 식별한다. 로그 변환으로 분산을 안정화한 뒤 ANOVA를 수행하는 방법도 있다.

변환과 강건 검정이 필요한 경우

분산 안정화 변환은 신호대잡음비를 개선해 필요한 표본수를 줄일 가능성이 있다. 강건 검정을 선택하면 재실험 비용을 최소화할 수 있다. 다만 로그, 제곱근, Box–Cox 변환은 분산 안정화와 정규성 개선에 유효한 반면 해석 단위가 바뀐다는 점을 함께 고려해야 한다.

전제 위반이 확인되면 Welch나 강건 검정을 사용해 제1종 오류율을 목표 수준에 가깝게 유지할 수 있다. 이상치가 있는 환경에서 Brown–Forsythe를 적용하면 과도한 거짓 양성을 줄일 수 있다.

실무에서는 설계 정보와 그룹별 원시 데이터를 입력으로 삼는다. EDA 이후 정규성(Shapiro–Wilk/QQ), 동질성(F/Levene/BF/Bartlett/Fligner), 독립성(DW/설계)을 점검하고, 필요하면 변환을 거쳐 ANOVA/Welch/Kruskal과 사후검정으로 진행한다. 표본 불균형, 소표본(n<10), 이상치 다수 상황에서는 강건 또는 비모수 방법을 우선한다. 최종 출력에는 검정 통계량, p-값, 효과크기(η²/ω²), 95% CI, 전제 진단 요약, 사후검정 결과를 포함한다.

Python과 R로 확인하는 방법

전제조건

  • Python 3.11+, numpy 1.24+, scipy 1.11+, statsmodels 0.14+
  • R 4.3+, stats, car 패키지

Python

import numpy as np
from scipy import stats
from statsmodels.stats.oneway import anova_oneway
from statsmodels.stats.stattools import durbin_watson

# 샘플 데이터
g1 = np.array([10.2, 9.8, 10.5, 10.1, 9.9])
g2 = np.array([11.5, 11.0, 11.8, 12.1, 11.7])
g3 = np.array([10.9, 10.7, 11.2, 11.0, 10.8])

# 1) 두 집단 분산 F-검정 (정규 가정)
s1, s2 = np.var(g1, ddof=1), np.var(g2, ddof=1)
F = s1 / s2
df1, df2 = len(g1) - 1, len(g2) - 1
p_two_sided = 2 * min(stats.f.cdf(F, df1, df2), 1 - stats.f.cdf(F, df1, df2))
print("F-test var equality:", F, p_two_sided)

# 2) 동질성(강건) Levene/Brown–Forsythe
print("Levene(mean):", stats.levene(g1, g2, g3, center='mean'))
print("Brown-Forsythe(median):", stats.levene(g1, g2, g3, center='median'))

# 3) Bartlett (정규성 민감)
print("Bartlett:", stats.bartlett(g1, g2, g3))

# 4) 일원 ANOVA (동질성 가정)
print("One-way ANOVA:", stats.f_oneway(g1, g2, g3))

# 5) Welch ANOVA (이분산 허용)
# statsmodels 0.14+: use_var='unequal'로 Welch
data = np.concatenate([g1, g2, g3])
groups = np.array(['g1']*len(g1) + ['g2']*len(g2) + ['g3']*len(g3))
welch = anova_oneway(data, groups, use_var='unequal')
print(welch)

# 6) 정규성/독립성 간단 점검
print("Shapiro g1:", stats.shapiro(g1))
residuals = g1 - np.mean(g1)
print("Durbin-Watson (순서 의존성 탐지):", durbin_watson(residuals))

R

# install.packages("car") # 최초 1회
library(car)

g1 <- c(10.2, 9.8, 10.5, 10.1, 9.9)
g2 <- c(11.5, 11.0, 11.8, 12.1, 11.7)
g3 <- c(10.9, 10.7, 11.2, 11.0, 10.8)
grp <- factor(c(rep("g1", length(g1)), rep("g2", length(g2)), rep("g3", length(g3))))
y <- c(g1, g2, g3)

# 1) 두 집단 분산 F-검정
var.test(g1, g2)

# 2) Bartlett (정규성 가정)
bartlett.test(list(g1, g2, g3))

# 3) Levene / Brown–Forsythe
leveneTest(y ~ grp, center=mean)    # Levene
leveneTest(y ~ grp, center=median)  # Brown–Forsythe

# 4) ANOVA (동질성)
anova(lm(y ~ grp))

# 5) Welch ANOVA (이분산)
oneway.test(y ~ grp, var.equal = FALSE)

분산 비교와 ANOVA 전제 검증은 결과 신뢰도와 재현 가능한 리포팅을 위한 조건이다. 정규성, 이상치, 표본 불균형을 함께 보고 F/Bartlett/Levene/Brown–Forsythe/Fligner–Killeen 및 Welch ANOVA 중 데이터에 맞는 방법을 선택한다. 강건 검정과 효과크기·신뢰구간 보고를 표준 절차에 포함하면 제1종 오류 통제와 실무 해석을 함께 확보할 수 있다.

F-검정ANOVA분산 동질성통계 분석효과크기가설검정