【发布时间】:2014-01-10 13:44:55
【问题描述】:
我正在尝试使用statsmodels.formula.api OLS 实现的predict() 函数。当我将新数据框传递给函数以获取样本外数据集result.predict(newdf) 的预测值时,返回以下错误:'DataFrame' object has no attribute 'design_info'。这是什么意思,我该如何解决?完整的回溯是:
p = result.predict(newdf)
File "C:\Python27\lib\site-packages\statsmodels\base\model.py", line 878, in predict
exog = dmatrix(self.model.data.orig_exog.design_info.builder,
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2088, in __getattr__
(type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'design_info'
编辑:这是一个可重现的例子。当我腌制然后取消腌制结果对象时似乎会发生错误(我需要在我的实际项目中这样做):
import cPickle
import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
df = pd.DataFrame({"A": [10,20,30,324,2353], "B": [20, 30, 10, 1, 2332], "C": [0, -30, 120, 11, 2]})
result = sm.ols(formula="A ~ B + C", data=df).fit()
print result.summary()
test1 = result.predict(df) #works
f_myfile = open('resultobject', "wb")
cPickle.dump(result, f_myfile, 2)
f_myfile.close()
print("Result Object Saved")
f_myfile = open('resultobject', "rb")
model = cPickle.load(f_myfile)
test2 = model.predict(df) #produces error
【问题讨论】:
-
请编辑您的问题并包含一些示例代码以及完整的堆栈跟踪。
-
我已经添加了完整的回溯。如果没有人知道为什么通常会发生此错误,我可以尝试添加一个可重现的示例。
-
我认为我们需要一个可重现的例子。我看不出公式信息
design_info不存在的原因,但我不完全理解与 patsy 交互的代码路径。你也可以在 github 上打开一个关于 statsmodels 的问题。将公式信息附加到原始数据帧可能不是很可靠。 -
添加了一个可重现的示例,似乎与对象的酸洗和脱酸有关。
-
是的,我正在考虑将其作为可能的候选人。如果我们只想在 unpickling 之后进行预测,也可以在 pickling 之前删除数据,这也会导致同样的问题。我的猜测是,当使用公式时,statsmodels 没有任何用于酸洗的单元测试。
标签: python pandas scipy pickle statsmodels