본문 바로가기

IT & AI/AI 지식

분산 분석(ANOVA): 일원 분산 분석, 이원 분산 분석

by 빛나는해커 2024. 12. 7.

안녕하세요! 저번 내용이었던 회귀 분석에 이어 이번에는 분산분석 즉, 일원 분산 분석과 이원 분산 분석에 대해 자세히 알아보려 합니다.

분산 분석(ANOVA)은 여러 집단의 평균 차이가 통계적으로 유의미한지 여부를 검정하는 통계 기법이다.
이 글에서는 분산 분석의 주요 개념부터 일원 분산 분석, 이원 분산 분석, 그리고 사후검정까지 다룰 것이다.

1. 일원 분산 분석 (One-way ANOVA)

분산 분석이란?

분산 분석은 두 개 이상의 집단 간 평균 차이를 검정하여, 그 차이가 우연에 의한 것인지, 아니면 의미 있는 차이인지 판단하는 방법이다. 이 과정에서 우리는 주로 **일원 분산 분석(One-way ANOVA)**와 **이원 분산 분석(Two-way ANOVA)**를 사용한다.

  • 일원 분산 분석: 하나의 요인에 따라 여러 집단 간 평균 차이를 검정하는 방식이다.
  • 이원 분산 분석: 두 개의 요인을 기준으로 각 요인이 집단 간 차이에 미치는 영향을 분석한다.

일원 분산 분석

일원 분산 분석은 세 개 이상의 집단 간의 평균 차이가 유의미한지를 검정하는 방식으로, 하나의 요인에 따라 그룹을 나누고, 이들 그룹 간에 차이가 있는지를 확인하는 데 사용된다.

 

기본 가정

  1. 독립성: 각 집단의 관측치는 서로 독립적이어야 한다.
  2. 정규성: 각 집단은 정규분포를 따라야 한다. 이를 검증하기 위해 Shapiro-Wilk 검정을 사용한다.
  3. 등분산성: 모든 집단이 동일한 분산을 가져야 한다. 이를 검증하기 위해 **레빈 검정(Levene's Test)**을 사용한다.

가설 설정

  • 귀무가설(H0): 모든 집단의 평균은 같다.
  • 대립가설(H1): 적어도 하나의 집단 평균은 다르다.

일원 분산 분석 코드 예시

import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

# 데이터 예시
data = {
    '요인': ['A', 'A', 'B', 'B', 'C', 'C'],
    '값': [20, 21, 19, 18, 17, 16]
}
df = pd.DataFrame(data)

# 모델 생성 및 분산 분석 수행
model = ols('값 ~ 요인', data=df).fit()
anova_results = anova_lm(model)
print(anova_results)

 

ANOVA 결과 해석

항목 설명
df 자유도
sum_sq 제곱합 (그룹 평균 간 차이를 나타냄)
mean_sq 평균 제곱 (sum_sq/자유도)
F 검정 통계량
PR(>F) p-value
  • p-value가 유의수준(0.05)보다 작으면, 귀무가설을 기각하고 적어도 한 그룹의 평균이 다르다는 결론을 내린다.

사후검정 (Post-Hoc Test)

일원 분산 분석에서 유의미한 차이가 나타났다면, 사후검정을 통해 어떤 그룹 간에 차이가 있는지를 추가로 분석한다.

  • 투키 (Tukey) 검정: 평균 간의 차이를 평가하는 대표적인 사후검정 방법이다.
  • 본페로니 (Bonferroni) 검정: 엄격한 기준으로 p-value를 보정하여 유의성을 판단한다.

아래는 투키 검정 결과 예시이다.

Group1 Group2 MeanDiff p-adj Lower Upper Reject
A B 0.41 0.0397 0.0146 0.8054 True
A C 0.09 0.9273 -0.3054 0.4854 False
B D -0.68 0.0003 -1.0754 -0.2846 True

주의할 점: 본페로니 검정은 매우 엄격한 기준을 사용해 유의성을 평가하기 때문에, 다른 방식에 비해 차이가 드물게 인정된다.


2. 이원 분산 분석 (Two-way ANOVA)

이원 분산 분석

이원 분산 분석 두 개의 요인이 존재할 때 각각의 요인과 그 상호작용이 종속 변수에 미치는 영향을 검정한다.

 

가설 설정

이원 분산 분석에서는 주효과와 상호작용효과를 동시에 검정한다:

  • 주효과 (요인1): 모든 그룹의 첫 번째 요인의 평균이 동일한지 검정한다.
  • 주효과 (요인2): 모든 그룹의 두 번째 요인의 평균이 동일한지 검정한다.
  • 상호작용효과: 두 요인의 상호작용이 있는지 검정한다.
    • 귀무가설(H0): 두 요인 간 상호작용이 없다.
    • 대립가설(H1): 두 요인 간 상호작용이 있다.

이원 분산 분석 코드 예시

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

# 두 개의 요인을 가진 데이터
data = {
    '요인1': ['A', 'A', 'B', 'B', 'C', 'C'],
    '요인2': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    '값': [15, 20, 25, 18, 19, 22]
}
df = pd.DataFrame(data)

# 이원 분산 분석 수행
model = ols('값 ~ C(요인1) * C(요인2)', data=df).fit()
anova_results = anova_lm(model)
print(anova_results)

 

이원 분산 분석 결과 해석

항목 설명
df 자유도
sum_sq 제곱합
mean_sq 평균 제곱
F 검정 통계량
PR(>F) p-value
  • C() 함수: 숫자 형태이지만 범주형 값인 경우에는 C()로 감싸줘야 한다.

분산 분석 결과 해석의 주의할 점

  1. p-value 해석: p-value가 유의수준보다 작으면 귀무가설을 기각하고, 적어도 한 집단 평균이 다르다는 결론을 내린다.
  2. 정규성, 등분산성: 분산 분석을 수행하기 전에 데이터가 정규성을 만족하고 집단 간 분산이 동일한지 확인해야 한다. 이 전제가 위배되면 잘못된 결론을 도출할 수 있다.

혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.

 

회귀 분석: 단순 선형 회귀 분석, 다중 선형 회귀 분석

안녕하세요! 이번 글은 독립 변수와 종속 변수 간의 관계를 모델링하고 예측하기 위해 사용하는 통계적 방법인 회귀 분석을 다뤄보았습니다.회귀 분석은 데이터의 패턴을 이해하고 예측을 수행

actshiny.com

분산 분석(ANOVA): 일원 분산 분석, 이원 분산 분석 소개 이미지

반응형