【python计量】statsmodels进行OLS回归——以伍德里奇数据为例

伍德里奇的《计量经济学导论》,是目前国内外最经典的计量经济学教材,非常适合新手入门学习。本文将围绕伍德里奇《计量经济学导论》的案例,探讨如何用python实现。

【python计量】statsmodels进行OLS回归——以伍德里奇数据为例_第1张图片

一、获取伍德里奇《计量经济学导论》中的数据集

我们只安装woodridge包,即可直接调用相关数据。

(一)安装

pip install wooldridge

(二)导入库

import wooldridge

(三)导入数据

以伍德里奇《计量经济学导论》例6.3为例,获取该案例的数据集attend,代码如下:

attend = woo.dataWoo('attend')

在Spyder中查看数据:

【python计量】statsmodels进行OLS回归——以伍德里奇数据为例_第2张图片

image-20220415180125530

二、回归分析

statsmodels的线性模型有两种不同的接口:

1、基于数组:import statsmodels.api as sm,需要配合 add_constant()来生成自变量矩阵。 2、基于公式:import statsmodels.formula.api as smf,写公式直接拟合方程,公式中自变量可以变为平方项、交叉项等。 基于公式的方法较为方法,下面介绍该方法。

(一)导入相关库

import statsmodels.formula.api as smf

在statsmodels.formula.api下调用ols方法。ols用法如下:

sml.ols(formula,data)
-formula是回归的公式
-data为使用的数据,必须是pandas.DataFrame格式

formula公式的形式为parm1~parm2+parm3+parm4

formula的常见符号和用途如下表所示:

符号 用途
~ 分隔符号,左边为因变量,右边为自变量
+ 分隔自变量,自变量之间用+连接
表示变量的交互项。
* 表示所有可能交互项的间接形式。例如,x*z表示x+z+x:z
0 当公式中加入0,意味着模型中没有常数项;如:y~x+w+v代表模型中有截距项,y~x+w+v+0代表模型中没有常数项
I( ) 变量保护函数, I 内的表达式按照算术意义进行解释;如w+z 表示变量w和变量z都包含在公式中,I(w+z)表示 w+z 之和包含在公式中
function 可以在表达式中用的数学函数。例如,np.log(y)~x+w+z表示log(y)对x、w、z和常数项做回归。

示例:

formula 代表含义
y~x+w+z
y~x+I(w+z)
y~x+I(w**2)
y~x+w:z
y~x+w*z
y~x+I(w*z)
y~(x+w)*z

以上文获取的attend数据集为例,用出勤率百分数、读大学之前的GPA和ACT分数来解释期末考试标准化成绩的一个模型是

(二)调用ols方法进行回归

import statsmodels.formula.api as smf
reg = smf.ols(formula='stndfnl ~ atndrte*priGPA + ACT + I(priGPA**2) + I(ACT**2)',
              data=attend)
results = reg.fit()

(三)获取回归结果

得到的results为 statsmodels.regression.linear_model.RegressionResultsWrapper类,我们通过summary()方法获取模型回归结果。

print(results.summary())
#Out:
                           OLS Regression Results                            
==============================================================================
Dep. Variable:                stndfnl   R-squared:                       0.229
Model:                            OLS   Adj. R-squared:                  0.222
Method:                 Least Squares   F-statistic:                     33.25
Date:                Sun, 03 Apr 2022   Prob (F-statistic):           3.49e-35
Time:                        13:36:16   Log-Likelihood:                -868.90
No. Observations:                 680   AIC:                             1752.
Df Residuals:                     673   BIC:                             1783.
Df Model:                           6                                         
Covariance Type:            nonrobust                                         
==================================================================================
                     coef    std err          t      P>|t|      [0.025      0.975]
----------------------------------------------------------------------------------
Intercept          2.0503      1.360      1.507      0.132      -0.621       4.721
atndrte           -0.0067      0.010     -0.656      0.512      -0.027       0.013
priGPA            -1.6285      0.481     -3.386      0.001      -2.573      -0.684
atndrte:priGPA     0.0056      0.004      1.294      0.196      -0.003       0.014
ACT               -0.1280      0.098     -1.300      0.194      -0.321       0.065
I(priGPA ** 2)     0.2959      0.101      2.928      0.004       0.097       0.494
I(ACT ** 2)        0.0045      0.002      2.083      0.038       0.000       0.009
==============================================================================
Omnibus:                        2.581   Durbin-Watson:                   2.279
Prob(Omnibus):                  0.275   Jarque-Bera (JB):                2.474
Skew:                          -0.095   Prob(JB):                        0.290
Kurtosis:                       3.226   Cond. No.                     2.43e+04
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 2.43e+04. This might indicate that there are
strong multicollinearity or other numerical problems.

回归结果表示估计出来的方程是:

接下来我们来解释一下上述表格的几个参数:

第一个表格 披露模型基本信息
名称 说明
Dep. Variable 因变量
Model 采用的模型
Method 模型系数计算方法
No. Observations 样本数量
DF Residuals 残差的自由度
DF Model 模型的自由度
R-squared 可决系数,表示所有自变量对因变量的联合的影响程度,用于度量回归方程拟合度的好坏,越接近于 1说明拟合程度越好。
Adj. R-squared 调整的可决系数
F-statistic F统计量,用于对整体回归方程进行显著性检验,检验所有自变量在整体上对因变量的影响是否显著。
Prob (F-statistic) F统计量的p值
Log-likelihood 对数似然
AIC AIC信息准则
BIC BIC信息准则
第二个表格 披露系数相关信息
名称 说明
coef 回归系数
std err 标准差,也称标准偏差,是方差的算术平方根,反映样本数据值与回归模型估计值之间的平均差异程度。
t t统计量,等于回归系数除以标准差,用于对每个回归系数分别进行检验,检验每个自变量对因变量的影响是否显著。如果某个自变量的影响不显著,意味着可以从模型中剔除这个自变量。
P > |t| t检验的p值,反映每个自变量与因变量的相关性假设的显著性。
[0.025,0.975] 估计参数的 95%置信区间的下限和上限
第三个表格
名称 说明
Skewness 偏度,反映数据分布的非对称程度
Kurtosis 峰度,反映数据分布陡峭或平滑程度
Omnibus Omnibus检验统计量,基于峰度和偏度进行数据正态性的检验
Prob(Omnibus) Omnibus检验统计量的p值
Jarque-Bera JB统计量,基于峰度和偏度对数据正态性的检验
Prob (JB) JB统计量的p值
Durbin-Watson DW统计量,检验残差中是否存在自相关
Cond. No 多重共线性检验

statsmodels.regression.linear_model.RegressionResultsWrapper类的常见方法和属性如下表所示:

方法/属性 说明
.summary() 获取回归结果
.t_test() 进行t检验
.F_test() 进行F检验
.params 获取回归系数
.bse 获取回归系数标准差
.pvalues 获取回归系数p值
.tvalues 获取回归系数t值
.conf_int() 获取回归系数置信区,括号中可填具体数字,比如0.05,0.1,代表显著性水平,默认5%
.fittedvalues 获取模型预测值
.resid 获取残差
.df_model 模型自由度(系数自由度)
.df_resid 获取残差自由度(样本自由度)
.nobs 获取模型样本数量
.rsquared 获取R方
.rsquared_adj 获取调整R方
.aic 获取AIC
.bic 获取BIC
.fvalue 获取F-statistic
.f_pvalue 获取F-statistic的pvalue
.mse_ 获取模型mse
.mse_resid 获取残差mse
.mse_total 获取总体mse

示例:

(1)获取回归系数:

print(results.params)
#Out:
Intercept         2.050293
atndrte          -0.006713
priGPA           -1.628540
atndrte:priGPA    0.005586
ACT              -0.128039
I(priGPA ** 2)    0.295905
I(ACT ** 2)       0.004533
dtype: float64`

(2)对线性假设的t检验

例1:检验atndrte和priGPA的系数是否相等,即检验

可输入代码:

hypotheses = 'atndrte =priGPA'
t_test = results.t_test(hypotheses)
print(t_test)
#Out:
                     Test for Constraints                             
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
c0             1.6218      0.479      3.384      0.001       0.681       2.563
==============================================================================

由结果可知,t检验的p值为0.001,说明在1%的显著性水平下,可以拒绝原假设,即atndrte和priGPA的系数不相等。

例2:检验ACT的系数否等于1,即检验

可输入代码:

hypotheses = 'ACT=1'
t_test = results.t_test(hypotheses)
print(t_test)
#Out:
                    Test for Constraints                             
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
c0            -0.1280      0.098    -11.453      0.000      -0.321       0.065
==============================================================================

由结果可知,t检验的p值分别为0.000,说明在1%的显著性水平下,可以拒绝原假设,即ACT的系数不等于1。

例3:分别检验atndrte和priGPA的系数是否相等,和检验ACT的系数否等于1,即分别检验

可输入代码:

hypotheses = 'atndrte=priGPA, ACT=1'
t_test = results.t_test(hypotheses)
print(t_test)
#Out:
                                    Test for Constraints                             
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
c0             1.6218      0.479      3.384      0.001       0.681       2.563
c1            -0.1280      0.098    -11.453      0.000      -0.321       0.065
==============================================================================

由结果可知,两个t检验的p值分别为0.001和0.000,说明在1%的显著性水平下,可以分别拒绝原假设,即tndrte和priGPA的系数不相等,ACT的系数不等于1。

(2)对线性假设的F检验

例1:考虑检验atndrte和priGPA的系数是否相等,同时ACT的系数是否等于1,即对2个约束条件进行联合检验。则原假设为

可输入代码:

hypotheses = 'atndrte =priGPA,ACT=1'
f_test = results.f_test(hypotheses)
print(f_test)
#Out:

由结果可知,F检验的p值<1%,说明在1%的显著性水平下,可以拒绝原假设。

欢迎关注:

公众号Python for Finance

你可能感兴趣的:(python计量,python)