logo

[basic-stat-python] 비균형자료의 이원분산분석

예제 데이터 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_sqdfFPR(>F)
Intercept0.6806251.030.6003930.000003
C(poison)0.0822172.01.8482000.172157
C(treat)0.4539503.06.8030850.000947
C(poison):C(treat)0.2501376.01.8743330.112251
Residual0.80072536.0NaNNaN

treat만 통계적으로 유의미하다. (p < .05)

Previous
이원분산분석