Statistics
Python OLS简单一元线性回归之Statsmodels包(二)
续上期 : Python OLS简单一元线性回归之Scipy包(一)
代码:
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
datas = pd.read_excel('D:\\vscode\\第八章\\顺丰β系数.xlsx',sheet_name='Sheet1',header=2,index_col=0,usecols=4,skip_footer=5)
datas.head()
datas=datas.dropna()
y = datas.iloc[:, 2] # 因变量为第 4 列数据(注意index_col=0的操作)
x = datas.iloc[:, 3] # 自变量为第 5 列数据
x = sm.add_constant(x) # 若模型中有截距,必须有这一步。假如没有截距项可以不需要这一行代码。
model = sm.OLS(y, x).fit() # 构建最小二乘模型并拟合
model.summary() # 输出回归结果
效果图:
说明:这里我们使用的是statsmodels.api模块,其中表示OLS回归的关键代码是:
model = sm.OLS(y, x).fit() # 构建最小二乘模型并拟合
model.summary() # 输出回归结果
其中model = sm.OLS(y, x).fit() 的参数附加代码进行说明:
import statsmodels.api as sm
model_shjc=sm.OLS(endog=datas.iloc[:,2],exog=datas.iloc[:,3])
result_shjc=model_shjc.fit()
result_shjc.summary()###回归结果
注意:endog(endogenous variable:内生变量);
exog(exogenous variable:外生变量)
预测:比scipy 中scipy.stats linregress 函数的回归分析更强大的是,statsmodels.api模块可以做预测。代码如下:
预测代码:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
predicts = model.predict() # 模型的预测值
x = datas.iloc[:, 3] # 自变量为第 3 列数据
plt.scatter(x, y, label='实际值') # 散点图
plt.plot(x, predicts, color = 'red', label='预测值')
plt.legend() # 显示图例,即每条线对应 label 中的内容
plt.show() # 显示图形
效果图:
附:多元统计分析:statsmodels.api模块可以进行多元统计分析,具体在这里不展开讨论。
代码:
##附:多元统计分析代码
y = datas.iloc[:, 1] # 因变量为第 2 列数据
x = datas.iloc[:, 2:6] # 自变量为第 3 列到第 6 列数据
x = sm.add_constant(x) # 若模型中有截距,必须有这一步
model = sm.OLS(y, x).fit() # 构建最小二乘模型并拟合
model.summary()# 输出回归结果
评价: statsmodels.api模块比scipy 中scipy.stats linregress 函数的回归分析功能更强大,操作起来也比较方便,回归解释summary也更加规范,因此经济学相关专业可能更加常用。