안녕하세요! 저번 내용이었던 회귀 분석에 이어 이번에는 분산분석 즉, 일원 분산 분석과 이원 분산 분석에 대해 자세히 알아보려 합니다.
분산 분석(ANOVA)은 여러 집단의 평균 차이가 통계적으로 유의미한지 여부를 검정하는 통계 기법이다.
이 글에서는 분산 분석의 주요 개념부터 일원 분산 분석, 이원 분산 분석, 그리고 사후검정까지 다룰 것이다.
1. 일원 분산 분석 (One-way ANOVA)
분산 분석이란?
분산 분석은 두 개 이상의 집단 간 평균 차이를 검정하여, 그 차이가 우연에 의한 것인지, 아니면 의미 있는 차이인지 판단하는 방법이다. 이 과정에서 우리는 주로 **일원 분산 분석(One-way ANOVA)**와 **이원 분산 분석(Two-way ANOVA)**를 사용한다.
- 일원 분산 분석: 하나의 요인에 따라 여러 집단 간 평균 차이를 검정하는 방식이다.
- 이원 분산 분석: 두 개의 요인을 기준으로 각 요인이 집단 간 차이에 미치는 영향을 분석한다.
일원 분산 분석
일원 분산 분석은 세 개 이상의 집단 간의 평균 차이가 유의미한지를 검정하는 방식으로, 하나의 요인에 따라 그룹을 나누고, 이들 그룹 간에 차이가 있는지를 확인하는 데 사용된다.
기본 가정
- 독립성: 각 집단의 관측치는 서로 독립적이어야 한다.
- 정규성: 각 집단은 정규분포를 따라야 한다. 이를 검증하기 위해 Shapiro-Wilk 검정을 사용한다.
- 등분산성: 모든 집단이 동일한 분산을 가져야 한다. 이를 검증하기 위해 **레빈 검정(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()로 감싸줘야 한다.
분산 분석 결과 해석의 주의할 점
- p-value 해석: p-value가 유의수준보다 작으면 귀무가설을 기각하고, 적어도 한 집단 평균이 다르다는 결론을 내린다.
- 정규성, 등분산성: 분산 분석을 수행하기 전에 데이터가 정규성을 만족하고 집단 간 분산이 동일한지 확인해야 한다. 이 전제가 위배되면 잘못된 결론을 도출할 수 있다.
혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.
반응형
'IT & AI > AI 지식' 카테고리의 다른 글
이원 분산 분석(Two-way ANOVA) 분석 절차 (0) | 2024.12.09 |
---|---|
일원 분산 분석(One-way ANOVA)의 분석 절차 (0) | 2024.12.08 |
회귀 분석: 단순 선형 회귀 분석, 다중 선형 회귀 분석 (1) | 2024.12.06 |
범주형 데이터 분석: 카이제곱 검정 (Chi-Square Test) (0) | 2024.12.05 |
대응 표본 검정, 독립 표본 검정 정리 (1) | 2024.12.04 |