#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
как числовые, а не как категорические