logo

[basic-stat-python] 일원분산분석

 

일원분산분석의 가설

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

일원분산분석 수행하기

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

import pandas as pd

df = pd.read_csv('PlantGrowth.csv')
df.head()
weightgroup
04.17ctrl
15.58ctrl
25.18ctrl
36.11ctrl
44.50ctrl

이 자료에서 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)
dfsum_sqmean_sqFPR(>F)
C(group)2.03.766341.8831704.8460880.01591
Residual27.010.492090.388596NaNNaN
 

결과 해석

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