1 도입 — 유의성 너머의 보고
F 검정의 결과로 “p \(<\) 0.05, \(H_0\) 기각” 만 보고하는 것은 불충분 하다 (A-MAX2-2 의 ASA 6 원칙). 효과 크기 (effect size) 가 동반되어야 한다. 이 글은 F 검정의 분포 특성과 효과 크기의 다양한 형태를 정리한다.
2 F 분포의 특성
두 독립적 카이제곱 변량 \(X_1 \sim \chi^2_{d_1}\), \(X_2 \sim \chi^2_{d_2}\) 의 비율로 정의되는 분포:
\[ F = \frac{X_1 / d_1}{X_2 / d_2} \sim F_{d_1, d_2} \]
- \(d_1\): 분자 자유도 (between groups, \(J - 1\))
- \(d_2\): 분모 자유도 (within groups, \(n - J\))
2.1 F 분포의 모양
F 분포는 다음 특성을 가진다.
- 비음수 — \(F \geq 0\)
- 우편향 — 오른쪽 꼬리가 길다
- 모드 (\(d_1 \geq 3\) 일 때) — \(\frac{(d_1 - 2) d_2}{d_1 (d_2 + 2)}\)
- 평균 (\(d_2 > 2\) 일 때) — \(\frac{d_2}{d_2 - 2}\)
- 분산 (\(d_2 > 4\) 일 때) — \(\frac{2 d_2^2 (d_1 + d_2 - 2)}{d_1 (d_2 - 2)^2 (d_2 - 4)}\)
자유도 \(d_2\) 가 클수록 F 분포는 더 좁아지고 오른쪽 꼬리가 짧아진다. 즉 큰 표본에서 F 통계량이 1 근처에 집중된다.
2.2 임계값 (Critical Value)
\(\alpha\) 수준 검정을 위한 임계값 \(F_{\alpha, d_1, d_2}\) 는 \(\Pr(F > F_{\alpha}) = \alpha\) 인 값이다.
| \(\alpha\) | \(d_1 = 1, d_2 = 30\) | \(d_1 = 2, d_2 = 30\) | \(d_1 = 3, d_2 = 30\) |
|---|---|---|---|
| 0.10 | 2.88 | 2.49 | 2.28 |
| 0.05 | 4.17 | 3.32 | 2.92 |
| 0.01 | 7.56 | 5.39 | 4.51 |
분자 자유도가 클수록 (그룹 수가 많을수록) 임계값이 작아진다는 점에 주목한다. 직관: 그룹 수가 많으면 어느 두 그룹이 차이날 기회가 많으므로 같은 \(\alpha\) 수준의 임계값이 낮아진다.
2.3 F 분포와 t 분포의 관계
이미 보았듯이 \(F_{1, d_2} = (t_{d_2})^2\) 이다. 이는 다음을 의미한다.
- F 분포는 양측 t 검정 만 표현 가능 (단측은 직접 표현 X)
- t 분포의 양극단 (\(t < -t_{\alpha/2}\) 또는 \(t > t_{\alpha/2}\)) 이 F 분포의 오른쪽 꼬리 (\(F > t_{\alpha/2}^2\)) 에 대응
2.4 비중심 F 분포 (Non-central F)
대립가설 하에서 F 통계량은 비중심 F 분포 를 따른다. 비중심성 모수 \(\lambda\) 는 효과 크기와 표본 크기의 함수다.
\[ \lambda = \sum_{j=1}^{J} n_j \frac{(\mu_j - \mu)^2}{\sigma^2} \]
이 분포가 검정력 분석 에 사용된다.
F 분포가 왜 우편향인지 직관적으로 본다.
F 의 분자와 분모는 모두 카이제곱 변량 (제곱합) 이라 비음수 다. 비율이 0 이 되려면 분자가 0 이어야 한다. 반면 비율이 무한대가 되려면 분모가 0 에 접근해야 하는데, 이는 매우 드문 사건이다.
따라서 F 분포의 왼쪽 꼬리는 0 에서 막혀 있고, 오른쪽 꼬리는 길게 펼쳐져 있다. 이 비대칭이 우편향이다.
자유도가 커질수록 (분모가 더 안정적이어서 0 에 잘 가지 않으므로) F 분포가 더 좁고 정규에 가까워진다. \(d_2 \to \infty\) 일 때 \(F_{d_1, d_2} \cdot d_1 \to \chi^2_{d_1}\) 으로 수렴한다.
3 효과 크기 — 왜 필요한가
p 값은 통계적 유의성 을 알려 주지만 효과의 실제 크기 를 알려 주지 않는다. 같은 자료에서 표본을 두 배로 늘리면 같은 효과의 p 값이 작아지지만, 효과 자체는 변하지 않는다.
“Statistical significance is not effect size.” — Cohen (1990, 1994)
따라서 p 값과 함께 효과 크기 를 보고해야 한다. ANOVA 의 표준 효과 크기는 다음 4 가지다.
- \(\eta^2\) (eta squared) — 표본의 설명 분산 비율
- \(\omega^2\) (omega squared) — 모집단 분산 비율의 편향 보정 추정량
- Cohen’s \(d\) — 두 그룹 사이 표준화된 평균 차이
- Cohen’s \(f\) — ANOVA 검정력 분석용 효과 크기
4 \(\eta^2\) — 표본 효과 크기
자료에서 그룹 차이로 설명되는 분산 비율:
\[ \eta^2 = \frac{\text{SS}_B}{\text{SS}_T} = 1 - \frac{\text{SS}_W}{\text{SS}_T} \]
- 범위: \([0, 1]\)
- 해석: 표본 자료에서 그룹 라벨이 설명하는 분산 비율
4.1 계산 예시
A-MAX3-2 의 mood induction 자료에서:
- \(\text{SS}_B = 45\), \(\text{SS}_W = 27\), \(\text{SS}_T = 72\)
- \(\eta^2 = 45 / 72 \approx 0.625\)
즉 자료 변동의 약 62.5 % 가 그룹 라벨로 설명된다. 큰 효과다.
4.2 \(\eta^2\) 의 한계
\(\eta^2\) 는 두 가지 한계를 가진다.
- 모집단 추정의 편향 — \(\eta^2\) 는 표본 자료의 비율이라 모집단 비율을 과대 추정 한다. 표본이 작으면 편향이 크다.
- 다요인 ANOVA 의 모호성 — 두 요인 이상에서는 partial \(\eta^2\) 를 써야 한다 (한 요인의 효과를 다른 요인 통제 후 측정).
이 한계를 보완한 것이 \(\omega^2\) 다.
5 \(\omega^2\) — 편향 보정 모집단 효과 크기
모집단 분산 비율의 편향 보정 추정량:
\[ \omega^2 = \frac{\text{SS}_B - (J - 1) \cdot \text{MS}_W}{\text{SS}_T + \text{MS}_W} \]
5.1 \(\eta^2\) 와의 관계
\(\omega^2\) 는 표본 크기를 고려해 모집단 비율 을 추정한다. 일반적으로
\[ \omega^2 < \eta^2 \]
이며, 표본이 작거나 효과가 작을 때 두 값의 차이가 크다.
5.2 Mood induction 사례
- \(\text{SS}_B = 45\), \(\text{MS}_W = 1\), \(\text{SS}_T = 72\)
- \(\omega^2 = (45 - 2 \cdot 1) / (72 + 1) = 43 / 73 \approx 0.589\)
\(\eta^2 \approx 0.625\) 보다 약간 작다. 표본 크기가 충분히 클 때는 둘이 거의 같다.
표본 자료에서 SS 를 계산하면, 우연으로 인한 그룹 차이 도 \(\text{SS}_B\) 에 포함된다. 즉 효과가 0 인 모집단에서 자료를 뽑아도 \(\text{SS}_B > 0\) 이 된다.
\(\omega^2\) 는 이 우연 효과의 기대값 을 빼서 보정한다. 만약 모집단에서 진짜 효과가 0 이라면, 기대값에서 \(\omega^2 \approx 0\) 이 된다. 반면 \(\eta^2\) 는 자료 자체의 비율을 그대로 보고하므로 일정 부분 우연으로 부풀려진다.
\(n\) 이 작을수록 우연 효과의 기여가 크고, 보정의 영향도 크다. \(n \to \infty\) 일 때 \(\eta^2 \to \omega^2\) 으로 수렴한다.
6 Cohen’s \(d\) — 두 그룹 표준화 차이
두 그룹의 평균 차이를 풀링된 표준편차로 표준화한 값:
\[ d = \frac{\bar{Y}_1 - \bar{Y}_2}{s_p}, \quad s_p = \sqrt{\frac{(n_1 - 1) s_1^2 + (n_2 - 1) s_2^2}{n_1 + n_2 - 2}} \]
6.1 Cohen 의 관습 기준
| \(|d|\) | 효과 크기 |
|---|---|
| 0.2 | small |
| 0.5 | medium |
| 0.8 | large |
이 기준은 행동 과학에서 평균적으로 관찰되는 효과 크기 를 기반으로 Cohen (1988) 이 제시했다. 분야마다 다른 관습이 있다 (예: 의학에서는 \(d = 0.2\) 도 큰 효과로 간주됨).
6.2 Cohen’s \(d\) 의 직관
\(d\) 는 두 분포의 중첩 정도 와 관련된다.
| \(d\) | 분포 중첩 (대략) |
|---|---|
| 0.0 | 100 % |
| 0.2 | 85 % |
| 0.5 | 67 % |
| 0.8 | 53 % |
| 1.0 | 45 % |
| 1.5 | 30 % |
| 2.0 | 19 % |
\(d = 0.2\) 는 두 분포가 거의 겹치지만, 평균이 표준편차의 0.2 배 만큼 떨어져 있다 는 의미다. A/B 테스트의 작은 효과 (0.5 % 향상) 는 보통 \(d < 0.05\) 정도라 매우 큰 표본이 필요하다.
7 Cohen’s \(f\) — ANOVA 효과 크기
3 그룹 이상의 ANOVA 에서 Cohen’s \(d\) 는 직접 적용되지 않는다. 대신 Cohen’s \(f\) 를 사용한다.
ANOVA 의 효과 크기:
\[ f = \frac{\sigma_{\text{between}}}{\sigma_{\text{within}}} = \sqrt{\frac{\eta^2}{1 - \eta^2}} \]
여기서 \(\sigma_{\text{between}}\) 은 그룹 평균 표준편차, \(\sigma_{\text{within}}\) 은 그룹 내 표준편차다.
7.1 Cohen’s \(f\) 의 관습 기준
| \(f\) | 효과 크기 | \(\eta^2\) 환산 |
|---|---|---|
| 0.10 | small | 0.01 |
| 0.25 | medium | 0.06 |
| 0.40 | large | 0.14 |
7.2 \(f\) 와 검정력
ANOVA 검정력 분석은 Cohen’s \(f\), 표본 크기 \(n\), 그룹 수 \(J\), \(\alpha\) 의 함수다. 표본 크기 산정에 사용되며, A-WOO8-* 에서 자세히 다룬다.
8 효과 크기 비교 표
| 지표 | 사용 시점 | 범위 | 해석 |
|---|---|---|---|
| \(\eta^2\) | 단일 ANOVA, 보고용 | \([0, 1]\) | 표본 분산 비율 |
| \(\omega^2\) | 단일 ANOVA, 모집단 추정 | \([0, 1]\) | 편향 보정 |
| Cohen’s \(d\) | 두 그룹 비교 | \(\mathbb{R}\) | 표준화 차이 |
| Cohen’s \(f\) | ANOVA 검정력 | \([0, \infty)\) | 표준화 분산비 |
9 신뢰 구간 — 효과 크기의 불확실성
효과 크기 점추정 만 보고하는 것도 부족하다. 신뢰 구간 도 같이 보고해야 한다.
9.1 Cohen’s \(d\) 의 신뢰 구간
근사적 95 % CI:
\[ d \pm 1.96 \cdot \text{SE}(d), \quad \text{SE}(d) = \sqrt{\frac{n_1 + n_2}{n_1 \cdot n_2} + \frac{d^2}{2(n_1 + n_2)}} \]
9.2 \(\eta^2\) 의 신뢰 구간
\(\eta^2\) 의 CI 는 비중심 F 분포로부터 계산된다 (단순 닫힌 형태가 없음). Python 의 scipy.stats.ncf 또는 R 의 MBESS::ci.pvaf() 를 사용한다.
효과 크기만 보고하면 추정의 정확성 을 알 수 없다. 예시:
- A: \(d = 0.5\), 95 % CI [0.45, 0.55]
- B: \(d = 0.5\), 95 % CI [-0.1, 1.1]
두 결과 모두 점추정 \(d = 0.5\) 다. 그러나 A 는 효과의 위치를 정밀하게 파악했고, B 는 거의 모르는 상태다 (CI 가 0 을 포함하므로 효과 부호조차 불확실).
A/B 테스트 결과 보고에서 효과 크기 + CI 가 가장 정보적인 형태다. p 값은 부수적으로 보고된다.
10 코드 예시 — 효과 크기 계산
import numpy as np
import pandas as pd
from scipy.stats import f, f_oneway, ttest_ind
import statsmodels.api as sm
from statsmodels.formula.api import ols
np.random.seed(42)
n_each = 10
group_pleasant = np.random.normal(5.5, 1.0, n_each)
group_neutral = np.random.normal(4.0, 1.0, n_each)
group_unpleasant = np.random.normal(2.5, 1.0, n_each)
# 1. ANOVA F 검정과 SS
all_data = np.concatenate([group_pleasant, group_neutral, group_unpleasant])
groups = ['P']*n_each + ['N']*n_each + ['U']*n_each
df = pd.DataFrame({'y': all_data, 'group': groups})
model = ols('y ~ C(group)', data=df).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)
ss_b = anova_table['sum_sq'].iloc[0]
ss_w = anova_table['sum_sq'].iloc[1]
ss_t = ss_b + ss_w
ms_w = ss_w / anova_table['df'].iloc[1]
J = 3
# 2. η² 계산
eta_sq = ss_b / ss_t
print(f"η² = {eta_sq:.3f}")
# 3. ω² 계산
omega_sq = (ss_b - (J - 1) * ms_w) / (ss_t + ms_w)
print(f"ω² = {omega_sq:.3f}")
# 4. Cohen's f 계산
cohens_f = np.sqrt(eta_sq / (1 - eta_sq))
print(f"Cohen's f = {cohens_f:.3f}")
# 5. Pleasant vs Unpleasant Cohen's d
mean_diff = group_pleasant.mean() - group_unpleasant.mean()
pooled_sd = np.sqrt(((n_each-1)*group_pleasant.var(ddof=1) +
(n_each-1)*group_unpleasant.var(ddof=1)) / (2*n_each - 2))
cohens_d = mean_diff / pooled_sd
print(f"Cohen's d (P vs U) = {cohens_d:.3f}")
# 6. d 의 95 % CI
se_d = np.sqrt(2/n_each + cohens_d**2/(4*n_each))
ci_d = (cohens_d - 1.96*se_d, cohens_d + 1.96*se_d)
print(f"d 의 95 % CI = ({ci_d[0]:.3f}, {ci_d[1]:.3f})")이 코드는 효과 크기의 4 가지 지표 + CI 를 한 번에 계산한다. 보고 시 다음 형식이 권장된다.
“F(2, 27) = 22.5, p < 0.001. 효과 크기는 \(\eta^2 = 0.625\) (\(\omega^2 = 0.589\), Cohen’s \(f = 1.29\), 큰 효과). Pleasant vs Unpleasant 비교의 Cohen’s \(d = 3.0\), 95 % CI [1.6, 4.4].”
11 효과 크기와 분야별 관습
| 분야 | 작은 효과 | 중간 효과 | 큰 효과 |
|---|---|---|---|
| 심리학 (Cohen) | \(d = 0.2\) | \(d = 0.5\) | \(d = 0.8\) |
| 의학 임상 | \(d = 0.1\) | \(d = 0.3\) | \(d = 0.5\) |
| 교육학 | \(d = 0.2\) | \(d = 0.4\) | \(d = 0.7\) |
| IT A/B 테스트 | \(d < 0.05\) | \(d = 0.05 \sim 0.1\) | \(d > 0.1\) |
IT 의 작은 효과 기준은 비즈니스 임팩트 에서 온다. 0.5 % 전환율 향상이 연 매출 수십억 영향을 줄 수 있다. 따라서 작은 효과도 통계적으로 잡아내는 것이 핵심이고, 이것이 큰 표본 이 필요한 이유다.
12 검정력 분석 — 효과 크기와 표본 크기
검정력 \(1 - \beta\) 는 효과 크기와 표본 크기의 함수다. 일반 ANOVA 의 검정력은:
\[ 1 - \beta = \Pr(F > F_{\alpha} \mid \lambda) \]
여기서 \(\lambda = n \cdot f^2\) 는 비중심성 모수 (Cohen’s \(f\) 와 표본 크기로 결정).
| Cohen’s \(f\) | 검정력 0.80 을 위한 그룹당 \(n\) (\(J = 3\)) |
|---|---|
| 0.10 (small) | 약 322 |
| 0.25 (medium) | 약 52 |
| 0.40 (large) | 약 21 |
이 표는 작은 효과를 잡으려면 큰 표본이 필요 함을 정량화한다. 자세한 계산은 A-WOO8-* 에서 다룬다.
13 Effect Size 의 추가 변형
13.1 Generalized \(\eta^2\)
다요인 ANOVA 의 공통 분모 사용:
\[ \eta^2_G = \frac{\text{SS}_{\text{effect}}}{\text{SS}_{\text{effect}} + \text{SS}_{\text{within}} + \text{SS}_{\text{covariates}}} \]
다요인 설계에서 효과 크기 비교 가능 (다른 설계 간).
13.2 Hedges’ \(g\)
Cohen’s \(d\) 의 작은 표본 보정:
\[ g = d \cdot \left(1 - \frac{3}{4(n_1 + n_2) - 9}\right) \]
작은 표본에서 \(d\) 가 약간 과대 추정 → \(g\) 가 비편향.
13.3 Glass’s \(\Delta\)
대조군 표준편차만 사용:
\[ \Delta = \frac{\bar{Y}_T - \bar{Y}_C}{s_C} \]
이분산성 자료에서 대조군 기준 비교.
13.4 Probability of Superiority
import numpy as np
from itertools import product
def prob_superiority(group1, group2):
"""P(X > Y) 추정"""
count = 0
total = 0
for x in group1:
for y in group2:
if x > y:
count += 1
elif x == y:
count += 0.5
total += 1
return count / total직관적 해석: “그룹 1 의 무작위 자료가 그룹 2 의 무작위 자료보다 클 확률”.
14 Effect Size 보고의 표준
14.1 APA (American Psychological Association)
F(2, 27) = 22.50, p < 0.001, η² = 0.625, 95 % CI [0.45, 0.75]
- F 통계량 + 자유도
- p 값 (정확)
- η² 또는 Cohen’s d
- CI 동반
14.2 CONSORT (임상)
Risk Difference: -3.6 % (95 % CI -6.2, -1.0; p = 0.008)
Relative Risk: 0.72 (95 % CI 0.55, 0.94)
NNT: 28
- 효과 크기 + 95 % CI
- 통계적 검정
- NNT (이진 outcome)
14.3 A/B 테스트
Lift: +8.5 % (95 % CI +5.2 %, +11.8 %, p = 0.001)
Effect size (Cohen's h): 0.12 (small)
Business impact: $1.2M / year (CI: $0.7M, $1.8M)
- Lift (relative change)
- 비즈니스 환산 (매출 영향)
- 효과 크기 표준화
15 효과 크기의 분야별 해석
15.1 임상시험
| 지표 | Small | Medium | Large |
|---|---|---|---|
| Cohen’s d | 0.2 | 0.5 | 0.8 |
| Hazard Ratio | 0.85 | 0.70 | 0.50 |
| Risk Difference | 1 % | 5 % | 10 % |
| NNT | 100 | 20 | 10 |
15.2 A/B 테스트
| 지표 | Small | Medium | Large |
|---|---|---|---|
| Lift | 1 % | 5 % | 15 % |
| Cohen’s h | 0.05 | 0.10 | 0.20 |
| 매출 영향 | < 1 % | 1~5 % | > 5 % |
각 분야의 MCID 가 다름. 비즈니스 의사결정의 출발점.
16 효과 크기와 검정력의 관계
검정력 0.80 을 위한 표본 크기:
| Cohen’s \(f\) (ANOVA) | 효과 | \(n\) / 그룹 (J=3) |
|---|---|---|
| 0.10 (small) | 작음 | ~ 322 |
| 0.25 (medium) | 중간 | ~ 52 |
| 0.40 (large) | 큼 | ~ 21 |
작은 효과 검출 = 큰 표본. 이 trade-off 가 표본 크기 결정의 핵심.
A/B 테스트: - 0.1 % lift 검출 → 수십만 표본 필요 - 5 % lift 검출 → 수천 표본 충분
비즈니스 의사결정: 어떤 최소 lift 가 의미 있나?
17 코드 — 통합 효과 크기
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
np.random.seed(42)
# 가상 자료
n_per = 30
df = pd.DataFrame({
'group': np.repeat(['A', 'B', 'C', 'D'], n_per),
'value': np.concatenate([
np.random.normal(5, 1, n_per),
np.random.normal(6, 1, n_per),
np.random.normal(7, 1, n_per),
np.random.normal(8, 1, n_per),
])
})
# ANOVA
model = ols('value ~ C(group)', data=df).fit()
anova = sm.stats.anova_lm(model)
ss_b = anova['sum_sq'].iloc[0]
ss_w = anova['sum_sq'].iloc[1]
ss_t = ss_b + ss_w
ms_w = anova['mean_sq'].iloc[1]
J = 4
# 모든 효과 크기
eta_sq = ss_b / ss_t
omega_sq = (ss_b - (J-1)*ms_w) / (ss_t + ms_w)
cohens_f = np.sqrt(eta_sq / (1 - eta_sq))
# Pairwise Cohen's d (각 쌍별)
groups = df.groupby('group')['value']
print(f"옴니버스 결과:")
print(f" η² = {eta_sq:.4f}")
print(f" ω² = {omega_sq:.4f}")
print(f" Cohen's f = {cohens_f:.4f}")
print("\n쌍별 Cohen's d:")
for g1 in ['A', 'B', 'C', 'D']:
for g2 in ['A', 'B', 'C', 'D']:
if g1 < g2:
d1 = groups.get_group(g1)
d2 = groups.get_group(g2)
sp = np.sqrt((d1.var(ddof=1) + d2.var(ddof=1)) / 2)
d = (d2.mean() - d1.mean()) / sp
print(f" {g1} vs {g2}: d = {d:+.3f}")18 후속 — 가정 진단
이 글까지 ANOVA 의 기본 통계량 과 효과 크기 보고 를 다뤘다. 다음 글 A-MAX3-4 는 F 검정의 작동 가정 (정규성·등분산·독립성) 진단을 다룬다. 가정 위반 시 결과 해석이 어떻게 달라지는가 가 핵심이다.
19 관련 주제
선행 지식
후속 주제 (Phase A)
- A-MAX3-4 통계적 가정과 Levene
- A-MAX3-5 Robust Methods
- 표본 크기 산정 (A-WOO8-* 시리즈)
다른 카테고리 연결