Summary
ANOVA에서 독립변수가 종속변수 분산의 몇 %를 설명하는지 나타내는 effect size. η²는 전체 분산 대비, partial η²는 오차 분산 대비 비율이다.
용어 설명
- SS (Sum of Squares, 제곱합): 각 값과 평균의 차이를 제곱해서 합산한 값. 변동(variation)의 크기를 나타냄
- (집단 간 제곱합): 집단 평균들 간의 차이로 인한 변동
- (집단 내 제곱합): 같은 집단 안에서 개인들 간의 차이로 인한 변동
- (전체 제곱합):
- MS (Mean Square, 평균 제곱): SS를 자유도(df)로 나눈 값 = 분산의 추정치
- 분산 설명 비율: 전체 변동 중 독립변수가 “설명”하는 부분의 비율. η² = 0.10이면 10%를 설명
Eta-squared (η²)
수식
η² (Eta-squared)
수식 변수 풀이
- : 집단 간 제곱합 — 집단 평균들이 전체 평균에서 벗어난 정도 (독립변수의 효과)
- : 전체 제곱합 — 모든 데이터의 총 변동량 ()
- 직관: “전체 변동 중 집단 차이가 차지하는 비율이 얼마인가?”
- 독립변수가 전체 분산의 몇 %를 설명하는가
- 0 ≤ η² ≤ 1
- 단점: 요인이 여러 개일 때 과대추정 (모든 요인의 η² 합 ≤ 1)
Partial η² (Partial Eta-squared)
수식 변수 풀이
- : 관심 있는 특정 요인의 제곱합 (예: 교수법 효과)
- : 오차 제곱합 — 설명되지 않는 변동
- η²와의 차이: 분모에 대신 를 사용하여 다른 요인의 영향을 배제
- 다른 요인의 효과를 제거한 후 해당 요인의 설명 비율
- Factorial ANOVA에서 표준적으로 보고됨
- 주의: partial η²는 합이 1을 초과할 수 있음
해석 기준 (Cohen, 1988)
| η² / partial η² | 해석 |
|---|---|
| 0.01 | Small |
| 0.06 | Medium |
| 0.14 | Large |
구체적 해석
η² = 0.10이면, 종속변수 분산의 **10%**가 집단 간 차이로 설명된다.
나머지 90%는 개인 차이, 오차 등 다른 요인에 의한 것.
Omega-squared (ω²): 편향 보정
η²는 모집단 effect size를 과대추정하는 경향이 있다. ω²는 이를 보정:
수식 변수 풀이
- : 집단 간 자유도 = 집단 수 − 1
- : 오차의 평균 제곱 =
- 보정 원리: 분자에서 를 빼서 우연에 의한 분산을 제거 → η²보다 보수적
- 편향이 적어 모집단 추정에 더 적합
- 보고 빈도는 partial η²보다 낮지만, meta-analysis에서 선호
η² vs R² vs ω²
| 지표 | 맥락 | 편향 |
|---|---|---|
| η² | ANOVA | 과대추정 (특히 소표본) |
| partial η² | Factorial ANOVA | 각 요인별 독립적 |
| ω² | ANOVA (모집단 추정) | 편향 보정 |
| R² | 회귀 분석 | adjusted R²로 보정 가능 |
ANOVA 표에서의 위치
| Source | SS | df | MS | F | p | η² | partial η² |
|---|---|---|---|---|---|---|---|
| Group | 120 | 2 | 60 | 15.0 | .001 | .50 | .56 |
| Error | 96 | 24 | 4 | ||||
| Total | 216 | 26 |
(One-way ANOVA에서는 η² = partial η²)
Implementation
import pingouin as pg # One-way ANOVA with effect size aov = pg.anova(data=df, dv='score', between='group') print(aov[['Source', 'F', 'p-unc', 'np2']]) # np2 = partial eta-squared # Two-way ANOVA aov2 = pg.anova(data=df, dv='score', between=['group', 'condition']) print(aov2[['Source', 'F', 'p-unc', 'np2']]) # RM-ANOVA rm_aov = pg.rm_anova(data=df, dv='score', within='condition', subject='subject') print(rm_aov[['Source', 'F', 'p-unc', 'np2', 'eps']]) # eps = Greenhouse-Geisser epsilon (구형성 보정) # 수동 계산: omega-squared import numpy as np ss_between = 120 df_between = 2 ms_error = 4 ss_total = 216 omega_sq = (ss_between - df_between * ms_error) / (ss_total + ms_error) print(f"ω² = {omega_sq:.3f}")
관련 문서
- Effect Size 개요 — effect size 전체 분류
- ANOVA — η²가 사용되는 맥락
- Cohen’s d — ANOVA의 사후 검정에서 집단 쌍별 비교 시 사용
- Sample Size Determination — η² 기반 표본 크기 결정 (f = √(η²/(1-η²)))