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