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

此文章首发于公众号:Python for Finance
链接:【python计量】statsmodels进行OLS回归——以伍德里奇数据为例

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

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

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

(一)安装

pip install wooldridge

(二)导入库

import wooldridge

(三)导入数据

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

attend = woo.dataWoo('attend')

在Spyder中查看数据:

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-statisticF统计量,用于对整体回归方程进行显著性检验,检验所有自变量在整体上对因变量的影响是否显著。
Prob (F-statistic)F统计量的p值
Log-likelihood对数似然
AICAIC信息准则
BICBIC信息准则
第二个表格披露系数相关信息
名称说明
coef回归系数
std err标准差,也称标准偏差,是方差的算术平方根,反映样本数据值与回归模型估计值之间的平均差异程度。
tt统计量,等于回归系数除以标准差,用于对每个回归系数分别进行检验,检验每个自变量对因变量的影响是否显著。如果某个自变量的影响不显著,意味着可以从模型中剔除这个自变量。
P > |t|t检验的p值,反映每个自变量与因变量的相关性假设的显著性。
[0.025,0.975]估计参数的 95%置信区间的下限和上限
第三个表格
名称说明
Skewness偏度,反映数据分布的非对称程度
Kurtosis峰度,反映数据分布陡峭或平滑程度
OmnibusOmnibus检验统计量,基于峰度和偏度进行数据正态性的检验
Prob(Omnibus)Omnibus检验统计量的p值
Jarque-BeraJB统计量,基于峰度和偏度对数据正态性的检验
Prob (JB)JB统计量的p值
Durbin-WatsonDW统计量,检验残差中是否存在自相关
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%的显著性水平下,可以拒绝原假设。

欢迎关注:

公众号Python for Finance

  • 19
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在使用statsmodels进行OLS回归时,首先要调用statsmodels.regression.linear_model中的OLS函数来创建一个回归模型。然后,可以使用fit()方法对模型进行拟合,得到回归结果的摘要信息,这个摘要信息是由statsmodels.regression.linear_model.RegressionResultsWrapper类提供的。通过调用params属性,可以获取计算出的回归系数。此外,RegressionResultsWrapper类还提供了其他常用方法和属性,如summary()获取回归结果的摘要信息,t_test()进行t检验,F_test()进行F检验,bse获取回归系数的标准差,pvalues获取回归系数的p值等。StatsmodelsPython中一个强大的统计分析包,它提供了多种功能,包括回归分析、时间序列分析、假设检验等。虽然在计量的简便性上不及其他软件如Stata,但它与Python的其他任务(如NumPy、Pandas)结合紧密,可以提高工作效率。OLS(ordinary least square)是statsmodels中最常用的回归分析功能之一。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Statsmodels 统计包之 OLS 回归](https://blog.csdn.net/qq_17119267/article/details/79108333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [【python计量statsmodels进行OLS回归——以伍德里奇数据为](https://blog.csdn.net/mfsdmlove/article/details/124213324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值