비균형자료의 이원분산분석
예제 데이터 poison.csv를 다운로드 받는다.
데이터를 연다. poison
이 수치형으로 표현되어 있으므로 factor
로 변환해준다.
import pandas as pd
dat = pd.read_csv('poisons.csv', index_col=0)
예시를 위해 자료를 하나 삭제하여 비균형 설계로 바꿔보자.
dat2 = dat.loc[1:,:] # 데이텃의 첫 행을 제거한다
삭제된 자료는 poison은 1, treat는 A이다. 해당하는 집단의 표본 수가 다른 집단보다 하나씩 적은 것을 확인할 수 있다.
이제 집단별 표본수가 동일하지 않으므로 비균형설계자료가 되었다.
이원분산분석을 실시한다.
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('time ~ C(poison) * C(treat)', dat).fit()
비균형설계자료의 경우 typ=3
옵션을 추가해준다.
anova_lm(model, typ=3)
sum_sq | df | F | PR(>F) | |
---|---|---|---|---|
Intercept | 0.680625 | 1.0 | 30.600393 | 0.000003 |
C(poison) | 0.082217 | 2.0 | 1.848200 | 0.172157 |
C(treat) | 0.453950 | 3.0 | 6.803085 | 0.000947 |
C(poison):C(treat) | 0.250137 | 6.0 | 1.874333 | 0.112251 |
Residual | 0.800725 | 36.0 | NaN | NaN |
treat
만 통계적으로 유의미하다. (p < .05)