我正在努力完成一项家庭作业,并且这样做我需要在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似乎工作得很好,我不确定我在做什么和他们正在做什么之间有什么区别。
非常感谢任何帮助。
干杯
答案 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
可以解释如下:
C
解释为数据框的列。在这种情况下,它将是系列data['C']
data['C']
作为函数调用BANK
。系列对象不会实现__call__
方法,因此会出现'Series' object is not callable
的错误消息。