(十四)用StatsModels模块建立线性回归模型

使用StatsModels中的api子模块,主要使用的函数有(注意大小写):

  • OLS:普通最小二乘法
  • GLS:广义最小二乘法
  • WLS:加权最小二乘法
  • GLM:广义线性模型
  • mixed:混合效应模型

以OLS为例,函数格式为OLS(endog,exdog),参数分别表示因变量和自变量,其中自变量可以有多个,格式为X=data[[‘a’, ‘b’, ‘c’,…]]。以螺纹钢的期货和现货价格数据为样本,用简单OLS回归计算最优套保比率(期货收益率为x,现货收益率为y):

import statsmodels.api as sm
import pandas as pd
LWG=pd.read_excel('C:/Users/lenovo/Desktop/螺纹钢期货+现货数据.xlsx')
LWG.head()
Out[1]:  
            日期  期货价格  现货价格   期货价格收益率   现货价格收益率
0   2016/01/04  1777  1920       NaN       NaN
1   2016/01/05  1789  1940  0.006730  0.010363
2   2016/01/06  1775  1940 -0.007856  0.000000
3   2016/01/07  1773  1930 -0.001127 -0.005168
4   2016/01/08  1759  1910 -0.007928 -0.010417
LWG=LWG.dropna()#删除缺失值
x=LWG.iloc[:,3]
y=LWG.iloc[:,4]
x_addc=sm.add_constant(x)#线性回归增加常数项y=kx+b
model=sm.OLS(y,x_addc).fit()
#OLS(y,x);fit函数从模型获得拟合数据
model.summary()#输出线性回归的结果
Out[2]: 
<class 'statsmodels.iolib.summary.Summary'>
"""
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                现货价格收益率   R-squared:                       0.267
Model:                            OLS   Adj. R-squared:                  0.267
Method:                 Least Squares   F-statistic:                     343.5
Date:                Wed, 22 Jan 2020   Prob (F-statistic):           1.31e-65
Time:                        13:16:27   Log-Likelihood:                 2902.4
No. Observations:                 943   AIC:                            -5801.
Df Residuals:                     941   BIC:                            -5791.
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0006      0.000      1.531      0.126      -0.000       0.001
期货价格收益率        0.3384      0.018     18.533      0.000       0.303       0.374
==============================================================================
Omnibus:                      592.523   Durbin-Watson:                   1.704
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            30065.285
Skew:                           2.180   Prob(JB):                         0.00
Kurtosis:                      30.316   Cond. No.                         50.3
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
"""

可以看到套保比率为0.3384。接下来对回归模型进行可视化:

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus']=False
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
plt.scatter(x,y,c='k',marker='o')
plt.plot(x,model.params[0]+model.params[1]*x,'r')#取出“model”中的两个参数
plt.xlabel('螺纹钢期货收益率')
plt.ylabel('螺纹钢现货收益率')
plt.title('螺纹钢期货与现货收益率的OLS回归')
plt.grid()

在这里插入图片描述
个人认为python在计量经济学模型的建立和处理上,操作比较繁琐,功能不够强大,使用eviews、stata等软件会更好一些。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值