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

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

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

(一)安装

pip install wooldridge

(二)导入库

import wooldridge

(三)导入数据

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

attend = woo.dataWoo('attend')

在Spyder中查看数据:

python的statsmodels建立GARCH python statsmodels教程_拟合

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 test: F=73.54403151459535, p=1.29722128738922e-29, df_denom=673, df_num=2>

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