2015-11-02 40 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]])