일원분산분석 :: Python 기초 통계 - mindscale
Skip to content

일원분산분석

일원분산분석의 가설

  • 영가설: 모든 집단의 평균이 동일하다
  • 대안가설: 적어도 한 집단의 평균이 다른 집단들과 다르다

일원분산분석 수행하기

PlantGrowth.csv를 다운로드 받아 연다.

import pandas as pd

df = pd.read_csv('PlantGrowth.csv')
df.head()
weight group
0 4.17 ctrl
1 5.58 ctrl
2 5.18 ctrl
3 6.11 ctrl
4 4.50 ctrl

이 자료에서 group 요인은 수준이 ctrl, trt1, trt2 세 개. 다시 말해 세 집단을 비교하는 것.

df.group.unique()
array(['ctrl', 'trt1', 'trt2'], dtype=object)

aov 함수로 분산분석을 수행. group이 독립변수, weight가 종속변수. 즉, group에 따라 weight가 달라지는지 검증.

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

model = ols('weight ~ C(group)', df).fit()
anova_lm(model)
df sum_sq mean_sq F PR(>F)
C(group) 2.0 3.76634 1.883170 4.846088 0.01591
Residual 27.0 10.49209 0.388596 NaN NaN

결과 해석

  • Pr(>F)가 p-value. 이 값이 0.05보다 작으면 통계적으로 유의미한 차이가 있음.
  • 위의 예시에서는 0.0159로 0.05보다 작음. 따라서 유의미한 차이.
  • 구체적으로 어떤 수준(집단)이 차이가 있는지 확인하려면 사후분석(post hoc tests)
  • 유의미한 차이가 없는 경우에는 사후분석할 필요가 없음