Python:使用 Statsmodels 预测 y 值 - 线性回归

Posted

技术标签:

【中文标题】Python:使用 Statsmodels 预测 y 值 - 线性回归【英文标题】:Python: Predict the y value using Statsmodels - Linear Regression 【发布时间】:2016-08-26 21:14:22 【问题描述】:

我正在使用 Python 的 statsmodels 库来预测使用线性回归的未来余额。 csv文件显示如下:

年份 | 平衡 3 | 30 8 | 57 9 | 64 13 | 72 3 | 36 6 | 43 11 | 59 21 | 90 1 | 20 16 | 83 它包含“Year”作为独立的“x”变量,而“Balance”是依赖的“y”变量

以下是此数据的线性回归代码:

import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
import numpy as np
from matplotlib import pyplot as plt

import os
os.chdir('C:\Users\Admin\Desktop\csv')

cw = pd.read_csv('data-table.csv')
y=cw.Balance
X=cw.Year

X = sm.add_constant(X)  # Adds a constant term to the predictor

est = sm.OLS(y, X)
est = est.fit()
print est.summary()

est.params

X_prime = np.linspace(X.Year.min(), X.Year.max(), 100)[:, np.newaxis]
X_prime = sm.add_constant(X_prime)  # add constant as we did before

y_hat = est.predict(X_prime)


plt.scatter(X.Year, y, alpha=0.3)  # Plot the raw data
plt.xlabel("Year")
plt.ylabel("Total Balance")
plt.plot(X_prime[:, 1], y_hat, 'r', alpha=0.9)  # Add the regression line, colored in red
plt.show()

问题是如何在 'Year'=10 的值时使用 Statsmodels 预测 'Balance' 值?

【问题讨论】:

【参考方案1】:

您可以使用结果对象 est 中的 predict 方法,但要成功使用它,您必须将其用作公式

est = sm.ols("y ~ x", data =data).fit()
est.predict(exog=new_values) 

new_values 是字典。

看看这个link。

【讨论】:

写了这一行:ypred=est.predict(exog=dict(x1=10)) 它给出了一个错误。 exog如何输入Year=10? exog = 10 不是字典试试 est.predict(exog=dict(X=10)) 还是不行。获取:ValueError:形状(1,1)和(2,)未对齐:1(dim 1)!= 2(dim 0)? 添加常量(拦截)? 手动可以使用 y=c+x.m。 est.params 给出 c 和 m 值。但是如何使用 predict 和 dict 计算呢?

以上是关于Python:使用 Statsmodels 预测 y 值 - 线性回归的主要内容,如果未能解决你的问题,请参考以下文章

Python statsmodels ARIMA 预测

使用 statsmodels 进行预测

Python基于statsmodels包构建多元线性回归模型:模型构建模型解析模型推理预测

Python使用sklearn和statsmodels构建多元线性回归模型(Multiple Linear Regression)并解读

动手实战 | Statsmodels 中经典的11种时间序列预测方法

Statsmodels ARIMA - 使用预测()和预测()的不同结果