Python Statsmodels:OLS 回归量未预测

Python Statsmodels: OLS regressor not predicting

我编写了以下代码,但我就是无法使 'predict' 方法起作用:

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

我的 'df' 是一个带有列标题 'Consumption' 和 'Disposable_Income' 的 pandas 数据框。当我运行,例如,

ols_model.predict([1000.0])

我得到:"TypeError: list indices must be integers, not str"

当我运行,例如,

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

我得到:"IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices"

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

这是我的 df 的样子:

不确定这是否是最好的方法,但在反复尝试之后,我使这段代码可以工作(看起来有点笨拙且效率低下):

假设我想预测 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]])

由于您使用模型中的公式,公式信息也将用于解释 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)