使用pandas数据帧和statsmodels或scipy的python中的ANOVA?

wol*_*oor 29 python scipy anova pandas statsmodels

我想使用Pandas数据帧来分解一个变量的方差.

例如,如果我有一个名为'Degrees'的列,并且我已将其编入索引以适应各种日期,城市和夜晚与日期,我想找出该系列中变体的哪一部分来自横截面城市变化,来自时间序列变化的变化多少,以及从夜晚到白天变化多少.

在Stata我会使用固定效果并查看R ^ 2.希望我的问题有道理.

基本上,我想要做的是找到其他三列的"度数"的ANOVA细分.

cph*_*wis 23

我建立了一个直接的比较来测试它们,发现它们的假设可能略有不同,得到了统计学家的暗示,这里是一个关于大熊猫数据框的ANOVA匹配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
Run Code Online (Sandbox Code Playgroud)

  • 但这不是方差分析测试。这是线性模型系数分析。 (2认同)