【问题标题】:Statsmodels Categorical Data from Formula (using pandas)来自公式的 Statsmodels 分类数据(使用熊猫)
【发布时间】:2018-07-10 23:45:10
【问题描述】:

我正在尝试完成一项家庭作业,为此我需要在 statsmodels 中使用分类变量(由于拒绝像其他人一样使用 stata)。我花了一些时间阅读 Patsy 和 Statsmodels 的文档,但我不太明白为什么这个 sn-p 代码不起作用。我尝试将它们分解并使用 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 似乎工作正常,但我不确定我在做什么和他们在做什么之间有什么区别。

非常感谢任何帮助。

干杯

【问题讨论】:

  • 请提供完整的回溯。
  • 我很佩服你的不合格!你的代码对我有用;您是否使用当前版本的pandasstatsmodels
  • 我使用的是 pandas 13.0 版和 statsmodels 0.5.0 版。我很高兴代码为你工作 DSM(你在哪个版本?),下面的答案确定了它(抱歉延迟,在发布问题后昨晚出去了,直到很晚才回来)。我只是没想到列名C 会干扰C()。谢谢大家。

标签: python pandas statsmodels


【解决方案1】:

问题在于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 的错误消息。

祝你好运!

【讨论】:

  • 我需要在 data.rename_axis 中更改为 axis=0 以使其与 pandas 0.12.0 一起使用。
  • 有趣。我正在从主 github 存储库运行当前的 master 分支,因此他们必须在 0.12.0 和现在之间更改了 rename_axis 的行为。不过感谢您的提醒!
猜你喜欢
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 2017-07-20
  • 2016-05-19
相关资源
最近更新 更多