2015-11-02 43 views
2

我写了下面的代码,但我就是不能得到“预测”方法的工作:的Python Statsmodels:OLS回归没有预测

import statsmodels.api as sm 
from statsmodels.formula.api import ols 
ols_model = ols('Consumption ~ Disposable_Income', df).fit() 

我的“东风”是大熊猫数据框与列标题“消费'和'Disposable_Income'。当我运行,例如,

ols_model.predict([1000.0]) 

我得到: “类型错误:列表索引必须是整数,而不是STR”

当我运行,例如,

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

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

I' m非常困惑,因为我认为这两种格式正是文档所说的 - 为x变量放入一个数组值。我应该如何使用“预测”方法?

这是怎么了我的DF一看: enter image description here

+0

你可以发布df.head()吗? – WoodChopper

+0

@WoodChopper OK,看后期编辑 – suncup224

+0

'〜'是从R. – WoodChopper

回答

2

既然你与模型公式的工作,配方信息也将在exog在解释使用predict

我认为你需要使用一个数据帧或字典的解释变量(一个或多个)的正确名称。

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)

+0

你是对的 - 它的工作原理!我完全不知道我需要使用字典语法。谢谢你教我新东西 – suncup224

0

不知道这是最好的方法,但是很多很多摆弄周围后,我得到这个代码工作(似乎升技笨拙和低效):

说我要预测在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]])