【问题标题】:ipython notebook and patsy categorical variable (formula)ipython notebook 和 patsy 分类变量(公式)
【发布时间】:2014-11-30 14:31:34
【问题描述】:

我遇到了与 question 相同的错误。

奇怪的是,它在 ipython shell 中工作(提供的答案),但在 ipython 笔记本中不工作。但它与C() 运算符有关,因为没有它可以工作(但不能作为运算符)

example 相同:

import statsmodels.formula.api as smf
import numpy as np
import pandas


url = "http://vincentarelbundock.github.com/Rdatasets/csv/HistData/Guerry.csv"
df = pandas.read_csv(url)
df = df[['Lottery', 'Literacy', 'Wealth', 'Region']].dropna()
df.head()
mod = smf.ols(formula='Lottery ~ Literacy + Wealth + Region', data=df)
res = mod.fit()
print res.summary()

这在 ipython notebook 和 shell 中都很有效,patsyRegion 视为分类变量,因为它是由字符串组成的。

但如果我尝试这个(如教程中所示):

res = smf.ols(formula='Lottery ~ Literacy + Wealth + C(Region)', data=df).fit()

我在 ipython 笔记本中遇到错误:

TypeError: 'Series' object is not callable

请注意,在 notebook 和 shell 中 statsmodelspatsy 是相同的版本(分别为 0.5.0 和 0.3.0)

你有同样的错误吗?

【问题讨论】:

  • 我没有收到任何错误,无论是 patsy 0.2.1 还是 patsy 0.3。我正在使用 statsmodels 开发版本,但我认为没有任何与 statsmodels 相关的更改。我使用的 pandas 版本是 0.12 和 0.14.1dev。
  • @user333700 :您没有在 ipython 笔记本中收到错误消息?如果这不是错误,您对如何从我这边解决此问题有任何想法吗?
  • 笔记本没有错误。 (在笔记本中,我只有 pandas 0.12,但都有两个 patsy 版本。)我不太了解如何修复它,因为我不怀疑可能出了什么问题。尝试查看回溯的详细信息并检查可能定义了C 系列的位置。您是否有许多可能会干扰的自动导入?
  • @user333700 :实际上是因为我的命名空间中有一个名为C 的变量,但在DataFrame 中没有。感谢您的帮助

标签: ipython ipython-notebook statsmodels patsy


【解决方案1】:

我终于找到了问题。

这是因为我之前在笔记本中使用了一个名为 C 的变量。但令人惊讶的是,它不是我使用的df 的列。

无论如何,基本的解决方案是:

del C

在运行回归之前。

希望这将帮助面临同样问题的人。

但我仍然不确定这是否是 patsy 的预期行为。

【讨论】:

  • 这是预期行为。 patsy 的评估环境解析为调用者的命名空间。我们在 statsmodels 中对其进行硬编码。请参阅patsy documentation 中的eval_env 变量。我正在辩论将其公开给用户,以便更容易避免这种情况。
  • @jseabold:感谢您的评论。我认为在教程中提及这一点(如this one, section Categorical Variable)会很棒,并带有某种警告框。因为我认为这个文档对于这样的“小”问题来说有点太技术性了。如果我看到它,我不确定它是否会对我有所帮助。
  • 我添加了一个关于它的注释以及用户控制在哪个命名空间环境中计算公式的能力。github.com/statsmodels/statsmodels/pull/2031
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多