ANOVA와 MANOVA로 집단 평균 차이 해석하기

일원·이원 ANOVA와 MANOVA의 가정, 사후검정, 효과크기, 실무 해석과 R·Python 구현 예시를 정리합니다.

2026-08-14 · 최초 발행 2025-10-14

평균 차이를 검정할 때 설계부터 정해야 하는 이유

분산분석(ANOVA, Analysis of Variance)은 여러 집단 평균이 같은지 판단할 때 집단 간 분산과 집단 내 분산의 비인 F 통계량을 사용한다. 귀무가설 H0는 모든 집단의 평균이 동일하다는 것이다.

요인이 하나라면 일원 ANOVA로 각 수준의 평균 차이를 검정한다. 두 요인을 함께 다루면 이원 ANOVA가 주효과와 교호작용을 동시에 검정한다. 이때 교호작용이 유의하다면 주효과를 단독으로 읽기보다 단순효과를 후속 분석하는 편이 낫다.

여러 종속변수를 하나의 벡터로 묶어 집단 효과를 검정해야 할 때는 MANOVA를 쓴다. Wilks’ Lambda, Pillai’s Trace 같은 다변량 통계량을 이용하며, 유의한 결과 뒤에는 종속변수별 ANOVA와 조정된 다중비교가 이어진다.

분석 전에는 관측치의 독립성, 잔차의 정규성, 그룹 간 등분산성(ANOVA) 또는 등공분산성(MANOVA)을 확인한다. 표본 설계에서는 통상적으로 각 그룹 n ≥ 20을 권장하며, 비대칭·극단치가 있으면 더 큰 표본이 필요하다. MANOVA에서는 그룹별 n > 종속변수 차원 p가 권장된다.

가정 위반과 사후비교를 함께 설계하기

정규성은 Shapiro–Wilk와 Q–Q plot으로, 등분산성은 Levene/Brown–Forsythe로 검토할 수 있다. MANOVA에서는 Box’s M과 다변량 Q–Q를 확인한다.

가정이 흔들릴 때 선택지는 모형과 사후검정까지 연결되어야 한다. 등분산성이 맞지 않는 ANOVA에는 Welch ANOVA와 Games–Howell을 고려할 수 있다. 로그나 Box–Cox 변환, Kruskal–Wallis/Friedman 같은 비모수 방법도 대안이다. MANOVA에서는 Pillai’s Trace가 상대적으로 견고하다.

사후검정은 질문의 성격에 따라 고른다. Tukey HSD는 모든 쌍별 비교와 가족 단위 오류율(FWER) 제어가 필요하고 표본수가 균형적이거나 유사할 때 적합하다. Bonferroni/Bonferroni–Holm은 범용적이지만 보수적이며, 계획된 비교나 소수 비교에 맞는다. 대비(contrast) 기반 가설을 사전등록하면 검정력을 높일 수 있다.

유의성만 남기지 말고 효과크기와 신뢰구간도 함께 보고한다. ANOVA에서는 η², 부분 η²(partial η²), ω²를 사용할 수 있고, 사후비교에는 평균차·Hedges’ g·CI를 병기한다. 분석 과정에서는 전처리, 가정검토, 모형식(Type I/II/III SS), 효과크기, 다중비교 보정, 재현 가능한 코드를 공개한다.

정규성 위반등분산 위반(ANOVA)등공분산 위반(MANOVA)1요인2요인다변량아니오입력: 데이터, 요인 설계,종속변수(들)탐색: 결측/극단치/정규성 점검가정 점검변환(로그/Box–Cox) 또는비모수 대안(KW/Friedman)Welch ANOVA +Games–Howell 사후Pillai's Trace 사용 또는공변량/표본수 재설계모형 선택일원 ANOVA이원 ANOVA(주효과+교호작용)MANOVA검정: F 통계량, p값, η²/ω²검정: Wilks/Pillai, 다변량 η²후속: 종속변수별 ANOVA보정유의?사후검정: Tukey HSD,Bonferroni/Holm, 대비보고: 비유의,효과크기·CI·검정력보고: 추정치, CI, 보정 p,효과크기, 해석

분석 범위에 따라 달라지는 해석 부담

기법 성능(검정력) 확장성(요인/변수) 일관성(가정 충족) 안정성(가정 위반 민감도) 운영 편의(해석/보고)
일원 ANOVA 중간~높음(쌍별 차이 탐지) 낮음(1요인) 높음(요건 단순) 중간(등분산 민감) 높음(해석 단순, Tukey 용이)
이원 ANOVA 높음(블로킹·상호작용 반영) 중간(2요인+교호작용) 중간(균형·SS타입 영향) 중간(불균형·교호작용 민감) 중간(해석 복잡)
MANOVA 높음(공변 구조 활용) 높음(다변량) 낮음(다변량 가정 엄격) 중간~높음(Pillai 비교적 견고) 중간(후속 단변량 필요)

주: 성능=검정력 관점, 운영 편의=분석·보고 난이도.

평균 비교가 제품·공정·평가에서 만나는 지점

제품 A/B/n 실험에서 3개 이상 변형의 전환율 차이를 비교할 때는 일원 ANOVA 뒤에 Tukey HSD를 적용해 우수 변형을 식별하고 FWER를 통제할 수 있다.

재료(3수준)와 온도(3수준)가 함께 작용하는 제조 공정이라면 이원 ANOVA로 주효과와 교호작용을 분석한다. 교호작용이 유의하면 조건별 최적 조합을 도출한다.

교육·HR 평가에서 수학·언어·과학 점수의 집단 차이를 비교할 때는 MANOVA로 종합 차이를 먼저 검정한 뒤, 종속변수별 보정된 후속 분석으로 세부 결과를 확인한다. 처치군 간 다중 생체지표를 비교하는 임상·생명과학 분석에서도 MANOVA는 1종 오류 누적을 억제하며, Pillai’s Trace는 견고성 확보에 쓰일 수 있다.

이원 설계에서 공변 요인(블록)을 통제하면 효과크기·상관 구조에 따라 필요한 표본수가 10~30% 범위로 감소할 수 있다. FWER 통제는 예를 들어 α=0.05를 유지하는 데 쓰이며, 계획된 대비는 검정력을 높인다. 효과크기와 CI를 함께 제시하면 실질적 중요도를 보고할 수 있고, 사전등록과 코드 공유는 검증 가능한 분석 체계를 만든다.

R과 Python으로 실행하는 분석

전제조건:

  • R ≥ 4.2 또는 Python ≥ 3.10
  • R 패키지: stats, car, multcomp
  • Python 패키지: pandas, numpy, statsmodels, scikit-posthocs(선택)

R

# 데이터 예시: df(group, y), 균형 설계 가정
# 일원 ANOVA + Tukey
fit1 <- aov(y ~ group, data = df)
summary(fit1)
TukeyHSD(fit1)  # 사후검정
# 효과크기(η² 근사)
eta2 <- anova(fit1)[["Sum Sq"]][1] / sum(anova(fit1)[["Sum Sq"]])

# 이원 ANOVA(교호작용 포함)
fit2 <- aov(y ~ A * B, data = df)
car::Anova(fit2, type = 2)  # 불균형시 Type II/III 고려
# 단순효과(교호작용 유의 시)
# by(A, B) 하위 집단별 lm 등 추가 분석

# MANOVA
# df: Y1, Y2, ..., group
Y <- cbind(df$Y1, df$Y2)
fit_m <- manova(Y ~ group, data = df)
summary(fit_m, test = "Wilks")
summary(fit_m, test = "Pillai")  # 견고 대안
# 후속 단변량 + 다중비교 보정
summary.aov(fit_m)  # 각 종속변수별 ANOVA

Python

import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.stats.multicomp import pairwise_tukeyhsd

# 일원 ANOVA + Tukey
# df: columns ['group','y']
model1 = smf.ols('y ~ C(group)', data=df).fit()
anova1 = sm.stats.anova_lm(model1, typ=2)
print(anova1)
tk = pairwise_tukeyhsd(df['y'], df['group'])
print(tk.summary())

# 이원 ANOVA(교호작용)
# df: ['A','B','y']
model2 = smf.ols('y ~ C(A)*C(B)', data=df).fit()
anova2 = sm.stats.anova_lm(model2, typ=2)
print(anova2)

# MANOVA
from statsmodels.multivariate.manova import MANOVA
# df: ['Y1','Y2','group']
maov = MANOVA.from_formula('Y1 + Y2 ~ C(group)', data=df)
print(maov.mv_test())  # Wilks, Pillai 등 제공

불균형 설계에서는 Type II/III 제곱합 선택을 명시하고, Type III를 사용할 때는 효과코딩을 확인한다. 등분산성이 맞지 않으면 Welch ANOVA(statsmodels.stats.oneway.anova_oneway with use_var='unequal')와 Games–Howell(scikit-posthocs)을 고려한다. 사전 계획 대비에는 Bonferroni/Holm을, 포괄적 쌍별 비교에는 Tukey를 적용하며, 탐색적 분석에는 FDR(BH)을 병기한다.

분산분석ANOVAMANOVA사후검정통계