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

cc7*_*768 3 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())
Run Code Online (Sandbox Code Playgroud)

此代码会引发错误:TypeError: 'Series' object is not callablestatsmodels 网站上有一个非常相似的示例,它似乎工作正常,我不确定我正在做的事情和他们正在做的事情之间有什么区别。

很感谢任何形式的帮助。

干杯

spe*_*on2 5

问题是,这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。Series 对象不实现__call__方法,因此会出现错误消息'Series' object is not callable

祝你好运!