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.01Small
0.06Medium
0.14Large

구체적 해석

η² = 0.10이면, 종속변수 분산의 **10%**가 집단 간 차이로 설명된다.
나머지 90%는 개인 차이, 오차 등 다른 요인에 의한 것.


Omega-squared (ω²): 편향 보정

η²는 모집단 effect size를 과대추정하는 경향이 있다. ω²는 이를 보정:

수식 변수 풀이

  • : 집단 간 자유도 = 집단 수 − 1
  • : 오차의 평균 제곱 =
  • 보정 원리: 분자에서 를 빼서 우연에 의한 분산을 제거 → η²보다 보수적
  • 편향이 적어 모집단 추정에 더 적합
  • 보고 빈도는 partial η²보다 낮지만, meta-analysis에서 선호

η² vs R² vs ω²

지표맥락편향
η²ANOVA과대추정 (특히 소표본)
partial η²Factorial ANOVA각 요인별 독립적
ω²ANOVA (모집단 추정)편향 보정
회귀 분석adjusted R²로 보정 가능

ANOVA 표에서의 위치

SourceSSdfMSFpη²partial η²
Group12026015.0.001.50.56
Error96244
Total21626

(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}")

관련 문서