#python #statistics #anova
Вопрос:
Я вычисляю двустороннюю anova с помощью python и, сравнивая результаты, даю три разных типа для ее вычисления. Я использовал следующий код:
импорт панд в качестве pd импорт statsmodels.api в качестве sm из statsmodels.formula.api импорт ols
df = pd.read_csv("data_anova.tsv", sep="t")
model =ols('growth ~ C(st)*pc1', data=df).fit()
anova1 = sm.stats.anova_lm(model, typ=1)
anova2 = sm.stats.anova_lm(model, typ=2)
anova3 = sm.stats.anova_lm(model, typ=3)
print( anova1 )
print( anova2 )
print( anova3 )
Результаты таковы:
#тайо 1
df sum_sq mean_sq F PR(>F)
C(st) 15.0 163.438901 10.895927 25.827385 7.987675e-55
pc1 1.0 7.101165 7.101165 16.832394 4.674117e-05
C(st):pc1 15.0 14.530247 0.968683 2.296138 3.604114e-03
Residual 574.0 242.156221 0.421875 NaN NaN
#тайо 2
sum_sq df F PR(>F)
C(st) 165.403620 15.0 26.137859 2.089389e-55
pc1 7.101165 1.0 16.832394 4.674117e-05
C(st):pc1 14.530247 15.0 2.296138 3.604114e-03
Residual 242.156221 574.0 NaN NaN
#тайо 3
sum_sq df F PR(>F)
Intercept 323.190234 1.0 766.080645 9.210750e-108
C(st) 37.489725 15.0 5.924303 1.561448e-11
pc1 2.651547 1.0 6.285150 1.245057e-02
C(st):pc1 14.530247 15.0 2.296138 3.604114e-03
Residual 242.156221 574.0 NaN NaN
В отличие от типов 1 и 2, тип 3 возвращает перехват. Есть ли способ использовать python для вычисления результатов типа 3 без перехвата.
Согласно этой странице, я могу достичь этого с помощью R с:
options(contrasts = c(“contr.sum”,”contr.poly”))
model <- lm(growth ~ C(st)*pc1, data=df)
drop1(model, .~., test="F")