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)
我编写了以下代码,但我就是无法使 '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)