2014-08-27 14 views
22

Desidero utilizzare il dataframe di Pandas per suddividere la varianza in una variabile.ANOVA in python usando pandas dataframe con statsmodels o scipy?

Ad esempio, se ho una colonna denominata "Gradi", e ho indicizzato per varie date, città e notte contro giorno, voglio scoprire quale frazione della variazione in questa serie proviene da variazione della sezione trasversale della città, quanto viene dalla variazione delle serie temporali e quanto sta venendo dalla notte al giorno.

In Stata userei effetti fissi e guardo R^2. Spero che la mia domanda abbia un senso.

Fondamentalmente, quello che voglio fare, è trovare la ripartizione ANOVA di "Gradi" da altre tre colonne.

+2

È Voglio esaminare i modelli scipy o stats (ho appena aggiunto quei tag, in attesa di approvazione) – JohnE

+1

In breve, statsmodels è analogo alle parti statistiche di stata (mentre i panda sono la parte di gestione dei dati). – JohnE

+0

Qualcosa di più specifico :)? – robertevansanders

risposta

14

ho creato un confronto diretto per metterli alla prova, ha scoperto che le loro ipotesi può differ slightly, ha ottenuto un suggerimento da uno statistico, e qui è un esempio di ANOVA sui risultati di un panda dataframe corrispondenza di 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 
Problemi correlati