다중 검정
- 여러 가설을 동시에 검정할 때 발생하는 문제
- 각 검정마다 유의수준을 조정하지 않으면 1종 오류 발생 확률 증가
- 보정 방법: 본페로니 보정, 튜키 보정, 던넷 보정, 윌리엄스 보정 등.
유의 수준과 1종 오류
유의 수준의 의미
- 유의수준(α)은 우리가 1종 오류를 허용하는 최대 확률
- 예를 들어, 𝛼=0.05라면, 귀무가설이 참일 때 1종 오류가 발생할 확률을 최대 5%로 제한한다는 뜻
- 이는 검정 통계량의 기각 기준(critical value)을 설정할 때 사용됩니다.
통계적 검정의 작동 방식
- 데이터로부터 계산된 검정 통계량이 기각 기준을 초과하거나 해당되는 기각 영역(critical region)에 들어가는지를 확인
- 귀무가설이 참이라고 가정했을 때, 검정 통계량이 기각 영역에 들어갈 확률이 바로 α입니다.
왜 α와 1종 오류가 동일한가?
- 귀무가설이 참일 때, 기각 영역에 해당되는 확률을 α로 설정했기 때문입니다.
- 검정 과정에서, 우리가 설정한 유의수준 α는 곧 1종 오류를 허용할 확률로 작용합니다.
- 따라서, 단일 가설 검정에서 귀무가설이 참이라는 전제하에, 1종 오류가 발생할 확률은 정확히 α입니다.
다중 검정에서 누적 1종 오류가 증가하는 이유
- 유의수준 α, 즉, 1종 오류가 발생할 확률이 0.05일 때,
- 1종 오류가 발생하지 않을 확률은
- m개의 독립적인 가설 검정을 수행할 때, 모든 검정에서 1종 오류가 발생하지 않을 확률은
- 따라서 적어도 하나의 1종 오류가 발생할 확률은
1−(1−α)m
- 만약 검정해야 하는 가설의 수, 즉 m이 무한히 커진다면, 적어도 하나의 1종 오류가 발생할 확률도 점점 커진다.
∵0<α<10<(1−α)<1limm→∞(1−α)m=0limm→∞1−(1−α)m=1
본페로니 교정
- 다중 검정의 위 문제를 해결하려는 방법 중 하나.
- 유의수준을 가설의 수로 나누어 더 작게 만듦으로서 1종 오류를 더 강하게 통제.
실습
import numpy as np
import scipy.stats as stats
# 세 그룹의 데이터 생성
np.random.seed(42)
group_A = np.random.normal(10, 2, 30)
group_B = np.random.normal(12, 2, 30)
group_C = np.random.normal(11, 2, 30)
# 세 그룹 간 평균 차이에 대한 t검정 수행
p_values = []
p_values.append(stats.ttest_ind(group_A, group_B).pvalue)
p_values.append(stats.ttest_ind(group_A, group_C).pvalue)
p_values.append(stats.ttest_ind(group_B, group_C).pvalue)
# 본페로니 보정 적용
alpha = 0.05
adjusted_alpha = alpha / len(p_values)
# 결과 출력
print(f"본페로니 보정된 유의 수준: {adjusted_alpha:.4f}") # 0.05 / 3
for i, p in enumerate(p_values):
if p < adjusted_alpha:
print(f"검정 {i+1}: 유의미한 차이 발견 (p = {p:.4f})")
else:
print(f"검정 {i+1}: 유의미한 차이 없음 (p = {p:.4f})")
결과:
본페로니 보정된 유의 수준: 0.0167
검정 1: 유의미한 차이 발견 (p = 0.0000)
검정 2: 유의미한 차이 발견 (p = 0.0058)
검정 3: 유의미한 차이 없음 (p = 0.1461)