Summary

검정력(statistical power) = 실제 효과가 존재할 때 그것을 탐지할 확률 = 1 - β. 검정력은 α, 표본 크기(n), 효과 크기(effect size)와 함께 4원 관계를 이루며, 나머지 셋이 정해지면 하나가 결정된다.

용어 설명

  • α (유의수준, Significance level): “효과가 없는데 있다고 잘못 판단”할 확률의 허용 한계. 보통 0.05(5%)로 설정
  • β (Type II Error 확률): “효과가 있는데 없다고 잘못 판단”할 확률. 주의: 회귀분석의 회귀계수 β와는 완전히 다른 개념
  • Power (검정력, 1 − β): 실제 효과가 존재할 때 그것을 올바르게 탐지할 확률. 0.80이면 “효과가 있을 때 80%의 확률로 찾아낸다”는 의미
  • Effect size (효과 크기): 차이 또는 관계의 실질적 크기를 표준화한 지표 (예: Cohen’s d, η²). 효과가 클수록 같은 표본 크기에서 탐지하기 쉬움
  • 위양성 (False positive): 효과가 없는데 있다고 판단 = Type I Error
  • 위음성 (False negative): 효과가 있는데 없다고 판단 = Type II Error

Statistical Power (검정력)

Type I / Type II Error

H₀ 참 (효과 없음)H₀ 거짓 (효과 있음)
H₀ 기각Type I Error (α) — 위양성Correct (Power = 1-β)
H₀ 기각 실패Correct (1-α)Type II Error (β) — 위음성
  • α (유의수준): 효과가 없는데 있다고 판단할 확률 (보통 0.05)
  • β: 효과가 있는데 없다고 판단할 확률
  • Power = 1 - β: 효과가 있을 때 이를 탐지할 확률

관례적 기준

  • α = 0.05 (위양성 허용 5%)
  • Power ≥ 0.80 (위음성 허용 20% 이하)
  • 엄격한 연구: Power ≥ 0.90

4원 관계 (Power Quartet)

Power는 네 요소의 함수이며, 나머지 셋을 고정하면 하나가 결정된다:

flowchart LR
    A["α (유의수준)"] --> P["Power (1-β)"]
    B["n (표본 크기)"] --> P
    C["Effect Size (d, η²)"] --> P
    P --> D["β (Type II Error)"]
변화Power에 미치는 영향
α ↑ (e.g., .05 → .10)Power ↑ (but 위양성 위험↑)
n ↑Power ↑
Effect size ↑Power ↑
양측 → 단측 검정Power ↑ (but 방향 가정 필요)

검정력이 낮으면 생기는 문제

  1. 진짜 효과를 놓침 — 유의하지 않은 결과가 “효과 없음”이 아닐 수 있음
  2. 유의한 결과의 effect size 과대추정 — 낮은 power에서 유의하게 나온 결과는 effect size가 부풀려진 경향 (winner’s curse)
  3. 재현 불가 — 원 연구가 우연히 유의했을 확률↑

흔한 오해

“유의하지 않다” ≠ “효과가 없다”

검정력이 0.30밖에 안 되는 연구에서 p = 0.12가 나왔다면, 효과가 있는데 탐지 못한 것일 가능성이 70%나 된다.


Power Analysis의 용도

용도고정구함
사전 표본 크기 결정α, power, effect sizen
사후 검정력 확인α, n, effect sizepower
최소 탐지 가능 효과α, n, powereffect size

→ 가장 중요한 활용: 연구 설계 전 Sample Size Determination

Implementation

from statsmodels.stats.power import (
    TTestIndPower, TTestPower, FTestAnovaPower
)
 
# Independent t-test: d=0.5, α=0.05, power=0.8 → n=?
analysis = TTestIndPower()
n = analysis.solve_power(effect_size=0.5, alpha=0.05, power=0.8)
print(f"필요 표본 크기 (per group): {n:.1f}")  # → 63.8
 
# 표본 크기별 power 곡선
import matplotlib.pyplot as plt
import numpy as np
 
ns = np.arange(10, 200)
powers = [analysis.power(effect_size=0.5, nobs1=n, alpha=0.05) for n in ns]
plt.plot(ns, powers)
plt.axhline(y=0.8, color='r', linestyle='--', label='Power = 0.80')
plt.xlabel('Sample size (per group)')
plt.ylabel('Power')
plt.title('Power curve (d=0.5, α=0.05)')
plt.legend()
plt.show()
 
# ANOVA: f=0.25 (medium), k=3, α=0.05, power=0.8 → n=?
from statsmodels.stats.power import FTestAnovaPower
f_analysis = FTestAnovaPower()
n_anova = f_analysis.solve_power(effect_size=0.25, alpha=0.05,
                                  power=0.8, k_groups=3)
print(f"ANOVA 필요 표본 크기 (per group): {n_anova:.1f}")

관련 문서