Двусторонний Anova с использованием Python

#python #pandas #statsmodels #anova

#python #pandas #statsmodels #anova

Вопрос:

Я пытаюсь выполнить двусторонний ANOVA, где я пытаюсь найти важность двух переменных (B и M) для классификации выборок (задается параметром C).

Я пытаюсь изменить структуру данных, чтобы сделать ее подходящей для statsmodels пакета. Однако я смог включить только одну переменную за раз (либо B, либо M), используя pd.melt.

Любое предложение о том, как я могу использовать значения обеих переменных для выполнения двухстороннего ANOVA (таким образом, как последние две строки кода, приведенные ниже), было бы большим подспорьем.

Значения B, M и C:

 B : [10.,4.,4.,6.,5.]
M : [9.,6.,8.,4.,6.]
C : [1.,2.,2.,3.,1.]

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
d = pd.read_csv("/Users/Hrihaan/Desktop/Data.txt", sep="s ")
d_melt = pd.melt(d, id_vars=['C'], value_vars=['B'])
#model = ols('C ~ C(B)   C(M)   C(B):C(M)', data=d_melt).fit()
#anova_table = sm.stats.anova_lm(model, typ=2)
  

Комментарии:

1. зачем вам преобразовывать B и M в категориальные? И что именно такое C?

Ответ №1:

Вы были близки к ответу:

 B = [10.,4.,4.,6.,5.]
M = [9.,6.,8.,4.,6.]
C = [1.,2.,2.,3.,1.]

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

d = pd.DataFrame()
d["B"]=B
d["M"]=M
d["C"]=C
model = ols("C ~ B   M   B:M",data = d).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
  

Вы создаете фрейм данных, устанавливаете свою модель, выполняете Anova

Комментарии:

1. это трактует B и M как числовые, а не как категорические