본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Test for Homogeneity of Variances; 등분산성 검정
둘 이상의 모집단 분산이 서로 같은지를 판단하는 검정

독립표본 T-검정과 분산분석은 집단 간 분산이 같다는 등분산성(homogeneity of variance)을 가정한다. 등분산 검정은 이 가정을 확인하는 단계로, 결과에 따라 Student t-검정과 Welch t-검정, 일반 분산분석과 Welch 분산분석 가운데 하나를 고른다. 대표적인 방법은 두 집단의 F 검정, Bartlett 검정, Levene 검정과 그 변형인 Brown-Forsythe 검정이다.

  • 귀무가설 H0: σ12=σ22=⋯=σk2 (모든 집단의 분산이 같다)
  • 대립가설 H1: 적어도 한 쌍의 분산이 다르다.
  • P-값이 유의수준보다 크면 등분산 가정을 받아들인다. 정규성 검정처럼 "기각하지 못하는 것"이 가정 충족을 뜻한다.

F 검정은 두 집단의 표본분산 비를 F 분포와 비교한다. 비가 1에서 멀어질수록 분산이 다르다는 증거이다. 두 집단만 비교할 수 있고, 정규성이 깨지면 결과를 믿기 어렵다.

F=s12s22∼F(n1−1, n2−1)

Bartlett 검정은 k개 집단에 쓸 수 있으며, 통계량 T가 자유도 k − 1인 카이제곱 분포를 따른다. sp2은 합동분산, N은 전체 표본 수, Ni는 i번째 집단의 표본 수이다.

T=(N−k)ln⁡sp2−∑i=1k(Ni−1)ln⁡si21+13(k−1)(∑i=1k1Ni−1−1N−k)

Levene 검정은 각 관측값이 집단 중심에서 떨어진 절댓값 편차 Zij를 만든 뒤, 이 편차에 일원 분산분석을 하는 방식이다.

W=N−kk−1⋅∑i=1kNi(Z¯i⋅−Z¯⋅⋅)2∑i=1k∑j=1Ni(Zij−Z¯i⋅)2

Levene(1960)의 원래 방법은 집단 평균을 중심으로 썼고(Zij=|Yij−Y¯i⋅|), Brown과 Forsythe(1974)는 중앙값이나 절사평균을 중심으로 쓰는 변형을 제안했다. 중앙값을 쓰는 형태를 흔히 Brown-Forsythe 검정이라고 부르며, 치우친 분포에서 더 안정적이다.

검정 집단 수 정규성 위반에 대한 민감도 R Python
F 검정 2 매우 민감하다. 정규성이 확인될 때만 쓴다 var.test() scipy.stats.f로 직접 계산
Bartlett 2 이상 민감하다. 비정규 자료에서는 등분산이 아니라 비정규성을 검정하는 꼴이 될 수 있다. 정규성이 확실하면 검정력이 더 좋다 bartlett.test() scipy.stats.bartlett
Levene(평균) 2 이상 덜 민감하다. 대칭이고 꼬리가 보통인 분포에 알맞다 car::leveneTest(center = mean) scipy.stats.levene(center="mean")
Brown-Forsythe(중앙값) 2 이상 가장 강건한 편이다. 치우친 분포에 알맞다 car::leveneTest() (기본값이 중앙값) scipy.stats.levene() (기본값이 중앙값)
  • R car::leveneTest와 scipy levene은 둘 다 기본 중심이 중앙값이라서, 이름은 Levene이지만 실제로는 Brown-Forsythe 형태를 계산한다.

결과에 따른 검정 선택

편집 원본 편집
상황 등분산 만족 등분산 불만족
두 집단 평균 비교 Student t-검정(합동분산 사용) Welch t-검정(자유도를 Welch-Satterthwaite 식으로 조정)
세 집단 이상 평균 비교 일원 분산분석 Welch 분산분석
사후 검정 Tukey HSD 등 Games-Howell 등 등분산을 가정하지 않는 방법

Welch t-검정의 통계량과 자유도는 다음과 같다.

t=x¯1−x¯2s12n1+s22n2,ν≈(s12n1+s22n2)2(s12/n1)2n1−1+(s22/n2)2n2−1

R의 t.test()는 기본값이 var.equal = FALSE여서 따로 지정하지 않으면 Welch t-검정을 한다. 등분산을 가정하려면 var.equal = TRUE를 준다.

# df: 값 y, 집단 g(factor)인 데이터프레임
var.test(y ~ g, data = subset(df, g %in% c("a", "c")))   # 두 집단 F 검정
bartlett.test(y ~ g, data = df)
library(car)
leveneTest(y ~ g, data = df)                  # 기본 center = median (Brown-Forsythe)
leveneTest(y ~ g, data = df, center = mean)   # 원래 Levene

t.test(y ~ g, data = subset(df, g %in% c("a", "c")))   # 기본이 Welch
oneway.test(y ~ g, data = df, var.equal = FALSE)        # Welch 분산분석
import numpy as np
from scipy import stats
from statsmodels.stats.oneway import anova_oneway

rng = np.random.default_rng(1)
a = rng.normal(70, 5, 20)
b = rng.normal(73, 5, 20)
c = rng.normal(75, 12, 20)   # 분산이 큰 집단

# 두 집단 F 검정 (a vs c), 양측
f = np.var(a, ddof=1) / np.var(c, ddof=1)
dfn, dfd = len(a) - 1, len(c) - 1
p_f = 2 * min(stats.f.cdf(f, dfn, dfd), stats.f.sf(f, dfn, dfd))
print(f"F 검정(a, c): F={f:.4f}, p={p_f:.6f}")

for name, r in [("Bartlett", stats.bartlett(a, b, c)),
                ("Levene(mean)", stats.levene(a, b, c, center="mean")),
                ("Brown-Forsythe(median)", stats.levene(a, b, c, center="median"))]:
    print(f"{name}: stat={r.statistic:.4f}, p={r.pvalue:.4f}")

t = stats.ttest_ind(a, c, equal_var=False)            # Welch t
print(f"Welch t(a, c): t={t.statistic:.4f}, df={t.df:.2f}, p={t.pvalue:.4f}")
res = anova_oneway([a, b, c], use_var="unequal")      # Welch ANOVA
print(f"Welch ANOVA: F={res.statistic:.4f}, p={res.pvalue:.4f}")

실행 결과:

F 검정(a, c): F=0.1180, p=0.000021
Bartlett: stat=18.1805, p=0.0001
Levene(mean): stat=8.4903, p=0.0006
Brown-Forsythe(median): stat=7.7673, p=0.0010
Welch t(a, c): t=-1.4651, df=23.42, p=0.1562
Welch ANOVA: F=2.2541, p=0.1214
  • 네 가지 등분산 검정 모두 p-값이 0.05보다 작으므로 등분산 가정을 기각한다. 집단 c의 분산이 다른 집단보다 크다.
  • 따라서 두 집단 비교는 Welch t-검정, 세 집단 비교는 Welch 분산분석을 쓴다. Welch t의 자유도는 38(= 20 + 20 − 2)이 아니라 약 23.42로 줄어든다.
  • 두 검정 모두 p-값이 0.05보다 커서, 분산 차이를 고려하면 평균 차이는 유의하지 않다.
  • 등분산 검정의 귀무가설은 "모든 집단의 분산이 같다"이다.
  • Bartlett 검정은 정규성 위반에 민감하고 Levene(특히 중앙값 기반 Brown-Forsythe) 검정은 덜 민감하다. 정규성이 의심되면 Levene을 쓴다.
  • 등분산이면 Student t-검정과 일반 분산분석, 이분산이면 Welch t-검정과 Welch 분산분석을 쓴다는 선택 흐름을 서술할 수 있어야 한다.
  • F 검정은 두 집단만 비교하며, 통계량은 두 표본분산의 비이다.