Statsmodels来自公式的分类数据(使用pandas)

时间:2014-03-20 21:15:17

标签: python pandas statsmodels

我正在努力完成一项家庭作业,并且这样做我需要在statsmodels中使用分类变量(由于拒绝遵守像其他人一样使用stata)。我花了一些时间阅读Patsy和Statsmodels的文档,我无法弄清楚为什么这段代码不起作用。我试过打破它们并用patsy命令创建它,但是出现了同样的错误。

我目前有:

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


# This is where I'm getting data
data = pd.read_csv("http://people.stern.nyu.edu/wgreene/Econometrics/bankdata.csv")

# I want to use this form for my regression
form = "C ~ Q1 + Q2 + Q3 + Q4 + Q5 + C(BANK)"

# Do the regression
mod = sm.ols(form, data=data)
reg = mod.fit()
print(reg.summary2())

此代码引发错误:TypeError: 'Series' object is not callable。 statsmodels网站上有一个非常类似的例子here似乎工作得很好,我不确定我在做什么和他们正在做什么之间有什么区别。

非常感谢任何帮助。

干杯

1 个答案:

答案 0 :(得分:4)

问题在于C是DataFrame中其中一列的名称,以及表示您想要分类变量的简洁方式。最简单的解决方法是将列重命名为:

data = data.rename_axis({'C': 'C_data'}, axis=1) form = "C_data ~ Q1 + Q2 + Q3 + Q4 + Q5 + C(BANK)"

然后调用sm.ols就可以了。

错误消息TypeError: 'Series' object is not callable可以解释如下:

  • patsy将C解释为数据框的列。在这种情况下,它将是系列data['C']
  • 然后,紧接着括号的事实使得statsmodels尝试将data['C']作为函数调用BANK。系列对象不会实现__call__方法,因此会出现'Series' object is not callable的错误消息。
祝你好运!