Python Statsmodels:OLS回归器没有预测

时间:2015-11-02 11:47:59

标签: python regression statsmodels

我编写了以下代码,但我无法让“预测”方法起作用:

ols_model.predict([1000.0])

我的'df'是一个pandas数据框,其列标题为“消费”和“Disposable_Income”。例如,当我跑步时,

ols_model.predict(df['Disposable_Income'].values)

我得到:“TypeError:list indices必须是整数,而不是str”

例如,当我跑步时,

:

我得到:“IndexError:只有整数,切片(...),省略号(None),numpy.newaxis(awk)和整数或布尔数组是有效索引”< / p>

我很困惑,因为我认为这两种格式正是文档所说的 - 放入x变量的值数组。我究竟应该如何使用'预测'方法?

这就是我的df外观: enter image description here

2 个答案:

答案 0 :(得分:2)

由于您使用模型中的公式,公式信息也将用于解释predict中的exog。

我认为您需要使用具有正确解释变量名称的数据框或字典。

ols_model.predict({'Disposable_Income':[1000.0]})

或类似

df_predict = pd.DataFrame([[1000.0]], columns=['Disposable_Income'])
ols_model.predict(df_predict)

另一个选择是避免公式处理预测是否有可用的预测的完整设计矩阵,包括常数

AFAIR,这也应该有效:

ols_model.predict([[1, 1000.0]], transform=False)

答案 1 :(得分:0)

不确定这是否是最好的方法,但经过大量的摆弄后,我得到了这个代码(似乎abit笨拙和低效):

假设我想预测X = 10和X = 1000的值:

import statsmodels.api as sm
from statsmodels.formula.api import ols
ols_model = ols('Consumption ~ Disposable_Income', df).fit()
regressor = ols('Consumption ~ Disposable_Income', df)
regressor.predict(ols_model.params, exog=[[1,10],[1,1000]])