ANOVA en python utilisant pandas dataframe avec statsmodels ou scipy?

je veux utiliser la base de données Pandas pour décomposer la variance en une variable.

par exemple, si j'ai une colonne appelée "degrés", et que j'ai ceci indexé pour diverses dates, villes, et nuit vs. jour, je veux savoir quelle fraction de la variation de cette série vient de la variation transversale ville, combien vient de la variation de série temporelle, et combien vient de nuit vs. jour.

Dans Stata je voudrais utiliser Fixe effets et regardez le r^2. J'espère que ma question a du sens.

fondamentalement, ce que je veux faire, est de trouver la ventilation ANOVA de "degrés" par trois autres colonnes.

26
demandé sur wolfsatthedoor 2014-08-28 01:41:10

1 réponses

j'ai mis en place une comparaison directe pour les tester, constaté que leurs hypothèses peuvent légèrement différer , obtenu un indice d'un statisticien, et voici un exemple D'ANOVA sur une base de données pandas correspondant aux résultats de R:

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


# R code on R sample dataset

#> anova(with(ChickWeight, lm(weight ~ Time + Diet)))
#Analysis of Variance Table
#
#Response: weight
#           Df  Sum Sq Mean Sq  F value    Pr(>F)
#Time        1 2042344 2042344 1576.460 < 2.2e-16 ***
#Diet        3  129876   43292   33.417 < 2.2e-16 ***
#Residuals 573  742336    1296
#write.csv(file='ChickWeight.csv', x=ChickWeight, row.names=F)

cw = pd.read_csv('ChickWeight.csv')

cw_lm=ols('weight ~ Time + C(Diet)', data=cw).fit() #Specify C for Categorical
print(sm.stats.anova_lm(cw_lm, typ=2))
#                  sum_sq   df            F         PR(>F)
#C(Diet)    129876.056995    3    33.416570   6.473189e-20
#Time      2016357.148493    1  1556.400956  1.803038e-165
#Residual   742336.119560  573          NaN            NaN
17
répondu cphlewis 2017-05-23 12:17:55