Вычислите двустороннюю anova типа 3 с помощью python без перехвата

#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")