일원분산분석
일원분산분석의 가설
- 영가설: 모든 집단의 평균이 동일하다
- 대안가설: 적어도 한 집단의 평균이 다른 집단들과 다르다
일원분산분석 수행하기
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)
- 유의미한 차이가 없는 경우에는 사후분석할 필요가 없음