비균형자료의 이원분산분석 :: Python 기초 통계 - mindscale
Skip to content

비균형자료의 이원분산분석

예제 데이터 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)