【Python计量】内生性问题、工具变量法与二阶段最小二乘法2SLS
我们以伍德里奇《计量经济学导论:现代方法》的”第15章 工具变量估计与两阶段最小二二乘法“的案例15.5为例,使用美国女性教育回报数据MORZ,学习工具变量法的Python实现。
变量:被解释变量log(wage)为工资的对数,解释变量educ为受正式教育年数,exper为工作经验。
构建模型如下:
log(wage)=β0+β1educ+β2exper+β3exper2+ulog(wage)=\beta_0+\beta_1educ+\beta_2exper+\beta_3exper^2+u log(wage)=β0+β1educ+β2exper+β3exper2+u
上式仅考虑了职业女性自身受正式教育年数的影响,存在遗漏变量的情况,引发内生性问题。因此,考虑将父亲的受教育程度fathereduc、母亲的受教育程度mothereduc作为工具变量,fathereduc、mothereduc应该与educ相关,而与u无关。
一、内生性问题与二阶段最小二乘法
什么是内生性?
- 内生性是指解释变量和误差项ε存在相关性,导致最小二乘估计的参数β有偏、不一致。
什么情况下会产生内生性?
- 遗漏重要解释变量
- 解释变量与被解释变量互为因果
- 变量测量误差,观测到的x,y与真实的x和y存在一定的差距
工具变量的要求
举个例子:对于简单的 y=α+βx+εy=\alpha+\beta x+\varepsilony=α+βx+ε
如果扰动项与xxx相关,我们可以设置一个工具变量zzz,使得zzz满足以下两个条件:
(1)相关性:zzz与xxx相关, Cov(x,z)≠0Cov(x,z)\neq0Cov(x,z)=0
(2)外生性:z与扰动项无关。Cov(ε,z)=0Cov(\varepsilon,z)=0Cov(ε,z)=0
工具变量法的实现
工具变量法一般通过“二阶段最小二乘法”(2SLS,Two Stage Least Square) 来实现,其中的两个阶段是:
(1)求 x 对 z 的回归,得到一个x的拟合值;
(2)求 y 对 x 拟合值的回归,得到β\betaβ,由于此阶段的回归中,x 的拟合值与扰动项不相关(OLS的正交性),所以可以得到一致的估计量。
简单来说,2SLS 在回归的第一阶段,把 x分成了两部分,一部分是x的拟合值,另一部分是与扰动项相关的部分;然后在第二阶段中求 y 对 x 拟合值的回归,也就是对消去内生性部分的 x 的回归,故可以得到一致的估计。
二、工具变量法的Python实现
(一)准备数据
import wooldridge as woo
import pandas as pd
mroz = woo.dataWoo('mroz')
#去除缺失值
mroz = mroz.dropna(subset=['lwage'])
(二)工具变量法
1、采用statsmodels进行2SLS回归
(1)内生变量对工具变量做回归,获得内生变量拟合值
educ=π0+π1exper+β2exper2+β3mothereduc+β4fathereduc+veduc=\pi_0+\pi_1exper+\beta_2exper^2+\beta_3mothereduc+\beta_4fathereduc+v educ=π0+π1exper+β2exper2+β3mothereduc+β4fathereduc+v
import statsmodels.formula.api as smf
#1阶段回归
reg_1st= smf.ols(formula='educ ~ exper + expersq + motheduc + fatheduc',data=mroz)
results_1st = reg_1st.fit()
mroz['educ_fitted'] = results_1st.fittedvalues
print(results_1st.summary()
结果如下:
OLS Regression Results
==============================================================================
Dep. Variable: educ R-squared: 0.211
Model: OLS Adj. R-squared: 0.204
Method: Least Squares F-statistic: 28.36
Date: Sun, 17 Jul 2022 Prob (F-statistic): 6.87e-21
Time: 16:34:39 Log-Likelihood: -909.72
No. Observations: 428 AIC: 1829.
Df Residuals: 423 BIC: 1850.
Df Model: 4
Covariance Type: nonrobust
==============================================================================coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 9.1026 0.427 21.340 0.000 8.264 9.941
exper 0.0452 0.040 1.124 0.262 -0.034 0.124
expersq -0.0010 0.001 -0.839 0.402 -0.003 0.001
motheduc 0.1576 0.036 4.391 0.000 0.087 0.228
fatheduc 0.1895 0.034 5.615 0.000 0.123 0.256
==============================================================================
Omnibus: 10.903 Durbin-Watson: 1.940
Prob(Omnibus): 0.004 Jarque-Bera (JB): 20.371
Skew: -0.013 Prob(JB): 3.77e-05
Kurtosis: 4.068 Cond. No. 1.55e+03
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.55e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
(2)被解释变量对内生变量拟合值做回归
log(wage)=β0+β1educ^+β2exper+β3exper2+ulog(wage)=\beta_0+\beta_1\widehat{educ}+\beta_2exper+\beta_3exper^2+u log(wage)=β0+β1educ+β2exper+β3exper2+u
#2阶段回归
reg_2nd = smf.ols(formula='lwage ~ educ_fitted + exper + expersq',data=mroz)
results_2nd = reg_2nd.fit()
print(results_2nd.summary())
结果如下:
OLS Regression Results
==============================================================================
Dep. Variable: lwage R-squared: 0.050
Model: OLS Adj. R-squared: 0.043
Method: Least Squares F-statistic: 7.405
Date: Sun, 17 Jul 2022 Prob (F-statistic): 7.62e-05
Time: 16:40:02 Log-Likelihood: -457.17
No. Observations: 428 AIC: 922.3
Df Residuals: 424 BIC: 938.6
Df Model: 3
Covariance Type: nonrobust
===============================================================================coef std err t P>|t| [0.025 0.975]
-------------------------------------------------------------------------------
Intercept 0.0481 0.420 0.115 0.909 -0.777 0.873
educ_fitted 0.0614 0.033 1.863 0.063 -0.003 0.126
exper 0.0442 0.014 3.136 0.002 0.016 0.072
expersq -0.0009 0.000 -2.134 0.033 -0.002 -7.11e-05
==============================================================================
Omnibus: 53.587 Durbin-Watson: 1.959
Prob(Omnibus): 0.000 Jarque-Bera (JB): 168.354
Skew: -0.551 Prob(JB): 2.77e-37
Kurtosis: 5.868 Cond. No. 4.41e+03
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 4.41e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
2、采用linearmodels进行2SLS回归
使用linearmodels工具包中的IV2SLS工具,首先需要导入库
from linearmodels.iv import IV2SLS
其次可加载公式,进行2SLS回归
IV2SLS(formula,data)
formula:回归方程,形式为:dep~exog+[endog~instr],其中exog表示外生变量,endog表示内生变量,instr表示工具变量
具体到本例,代码如下:
from linearmodels.iv import IV2SLS
reg_iv = IV2SLS.from_formula(formula='lwage ~ 1 + exper + expersq + [educ ~ motheduc + fatheduc]',data=mroz)
results_iv = reg_iv.fit(cov_type='unadjusted', debiased=True)
print(results_iv)
结果如下:
IV-2SLS Estimation Summary
==============================================================================
Dep. Variable: lwage R-squared: 0.1357
Estimator: IV-2SLS Adj. R-squared: 0.1296
No. Observations: 428 F-statistic: 8.1407
Date: Sun, Jul 17 2022 P-value (F-stat) 0.0000
Time: 16:42:41 Distribution: F(3,424)
Cov. Estimator: unadjusted Parameter Estimates
==============================================================================Parameter Std. Err. T-stat P-value Lower CI Upper CI
------------------------------------------------------------------------------
Intercept 0.0481 0.4003 0.1202 0.9044 -0.7388 0.8350
exper 0.0442 0.0134 3.2883 0.0011 0.0178 0.0706
expersq -0.0009 0.0004 -2.2380 0.0257 -0.0017 -0.0001
educ 0.0614 0.0314 1.9530 0.0515 -0.0004 0.1232
==============================================================================Endogenous: educ
Instruments: fatheduc, motheduc
Unadjusted Covariance (Homoskedastic)
Debiased: True
三、工具变量相关检验
构建模型如下:
log(wage)=β0+β1educ+β2exper+β3exper2+ulog(wage)=\beta_0+\beta_1educ+\beta_2exper+\beta_3exper^2+u log(wage)=β0+β1educ+β2exper+β3exper2+u
(一)变量内生性检验
1、将疑是内生变量educeduceduc对外生变量和工具变量做回归,得到残差vvv。
educ=π0+π1exper+β2exper2+β3mothereduc+β4fathereduc+veduc=\pi_0+\pi_1exper+\beta_2exper^2+\beta_3mothereduc+\beta_4fathereduc+v educ=π0+π1exper+β2exper2+β3mothereduc+β4fathereduc+v
import statsmodels.formula.api as smf
#1阶段回归
reg_1st= smf.ols(formula='educ ~ exper + expersq + motheduc + fatheduc',data=mroz)
results_1st = reg_1st.fit()
mroz['resid'] = results_1st.resid #获得残差
2、在原方程中将残差vvv也作为一个变量加入,用OLS模型检验系数及其显著性,如果vvv的系数显著异于零,则educeduceduc变量是内生的。
log(wage)=β0+β1v+β2educ+β3exper+β4exper2+ulog(wage)=\beta_0+\beta_1v+\beta_2educ+\beta_3exper+\beta_4exper^2+u log(wage)=β0+β1v+β2educ+β3exper+β4exper2+u
#2阶段回归
reg_2 = smf.ols(formula='lwage~ resid + educ + exper + expersq',data=mroz)
results_2 = reg_2.fit()
print(results_2.summary())
结果如下:
OLS Regression Results
==============================================================================
Dep. Variable: lwage R-squared: 0.162
Model: OLS Adj. R-squared: 0.154
Method: Least Squares F-statistic: 20.50
Date: Sun, 17 Jul 2022 Prob (F-statistic): 1.89e-15
Time: 17:02:34 Log-Likelihood: -430.19
No. Observations: 428 AIC: 870.4
Df Residuals: 423 BIC: 890.7
Df Model: 4
Covariance Type: nonrobust
==============================================================================coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 0.0481 0.395 0.122 0.903 -0.727 0.824
resid 0.0582 0.035 1.671 0.095 -0.010 0.127
educ 0.0614 0.031 1.981 0.048 0.000 0.122
exper 0.0442 0.013 3.336 0.001 0.018 0.070
expersq -0.0009 0.000 -2.271 0.024 -0.002 -0.000
==============================================================================
Omnibus: 74.968 Durbin-Watson: 1.931
Prob(Omnibus): 0.000 Jarque-Bera (JB): 278.059
Skew: -0.736 Prob(JB): 4.17e-61
Kurtosis: 6.664 Cond. No. 4.42e+03
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 4.42e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
(二)过度识别检测
步骤:
1、用2SLS方法估计方程,得到残差u^\hat{u}u^
2、将u^\hat{u}u^对所有外生变量和工具变量回归,得到R2R^2R2
3、原假设为:所有工具变量与uuu不相关,于是nR2∼Xq2nR^2 \sim X_q^2nR2∼Xq2,其中qqq是工具变量数量减去内生变量数量。如果nR2nR^2nR2大于Xq2X_q^2Xq2某个显著性水平的临界值,则拒绝所有变量都是外生的原假设
from linearmodels.iv import IV2SLS
import statsmodels.formula.api as smf
import scipy.stats as stats#第一步,用2SLS法估计方程,得到残差
reg_iv = IV2SLS.from_formula(formula='lwage ~ 1 + exper + expersq + [educ ~ motheduc + fatheduc]',data=mroz)
results_iv = reg_iv.fit(cov_type='unadjusted', debiased=True)#第二步,将残差对所有外生变量和工具变量回归
mroz['resid_iv'] = results_iv.resids
reg_aux = smf.ols(formula='resid_iv ~ exper + expersq + motheduc + fatheduc',data=mroz)
results_aux = reg_aux.fit()#第三步,显著性判断
r2 = results_aux.rsquared
n = results_aux.nobs
q = 2-1
teststat = n * r2
pval = 1 - stats.chi2.cdf(teststat, q)print(f'r2: {r2}')
print(f'n: {n}')
print(f'teststat: {teststat}')
print(f'pval: {pval}')
运行结果为:
r2: 0.0008833442569250449
n: 428.0
teststat: 0.3780713419639192
pval: 0.5386372330714363
经过上述步骤我们得到,有n=428条观测数据,p值为0.539,在5%的显著性水平下不能拒绝原假设,即父母的受教育程度通过了过度识别检测,可作为工具变量。
【Python计量】内生性问题、工具变量法与二阶段最小二乘法2SLS相关推荐
- 浙江大学【面板数据分析与STATA应用】——第三讲内生性与工具变量法
解释变量和误差项存在内生性问题 内生性问题来源 内生性问题主要来自于三个方面,分别为:遗漏变量.联立性以及度量误差 遗漏变量 遗漏变量是指可能与解释变量相关的变量,本来应该加以控制,但却没有控制的变量 ...
- 【中级计量经济学】Lecture 10 内生性和工具变量法
文章目录 Lecture 10 内生性和工具变量法 10.1 内生性问题 内生性的产生原因 内生性的后果 10.2 内生性问题的处理 寻找代理变量(IQ) 工具变量法(IV)估计 工具变量的选取 工具 ...
- lecture 11:内生性与工具变量法
内生性问题 "内生性"名称的由来 现在人们说某个模型有内生性问题(endogeneity issue),是指模型中的一个或多个解释变量与误差项存在相关关系. 显然,这个解释和内生性 ...
- 【初级计量经济学】内生性问题——工具变量法(Stata实现)
目录 1. 数据来源以及变量详目 1.1变量一览表 1.2数据描述性统计 2. 模型设定以及初步回归 2.1 OLS 模型 2.2 回归结果 2.3 回归结果 ...
- 内生性问题—工具变量法
文章目录 @[toc] 1 什么是内生性 2 内生性的来源 2.1遗漏变量偏差 2.2 联立方程偏差 2.3 解释变量测量误差 2.4 选择偏差 2.5 双向因果关系 2.6 模型设定偏误 2.7 动 ...
- 计量经济学(十一)工具变量法
工具变量法也就是 Instrumental Variable Analysis,简称IV,是用来处理内生性问题的重要方法,那么我们先从内生性问题出发,然后讲述工具变量法. 1. 内生性问题 对于上面式 ...
- stata 工具变量法【计量经济系列(七)】
stata 工具变量法[计量经济系列(七)] 文章目录 1. 内生性 2. 工具变量 3. 2SLS (二阶段最小二乘法) 4. 弱工具变量 5. 工具变量外生性的过度识别检验 6. 豪斯曼检验 6. ...
- 解决回归过程中内生性问题的方法之一-工具变量法
OLS是常用的回归方法之一,那么OLS在使用过程中最重要的一个前提是解释变量与扰动项不相关,解释变量可以理解为我们研究时的自变量,扰动项可以理解为我们研究时与自变量独立的控制变量,如果出现解释变量与扰 ...
- 金融计量模型(三):工具变量法
文章目录 工具变量法 内生性 Simultaneous causality 案例:供求问题 Omitted Variables Errors in Variables 其他原因 工具变量法的基本想法 ...
- 工具变量法案例【计量经济系列(八)】
stata 工具变量法案例[计量经济系列(八)] 文章目录 1.数据集 2. 初步回归,发现内生变量 3. 使用工具变量,2SLS回归 4. 检验外生性,过度识别检验 5. 检验 工具变量与内生变量 ...
最新文章
- CG-CTF-Web-SQL注入1
- 全国计算机一级考试难度高吗,计算机等级考试分几级 考试难度大不大
- 内存、磁盘硬盘、软盘、光盘、磁盘驱动器的介绍
- Poker Ⅱ 机械键盘使用说明书
- adb 版本更新后执行依旧是旧版本解决方法
- 金山打字专业文章计算机,打字测试-金山打字2003打字测试有哪些文章?金山打字2003打字测试有哪 爱问知识人...
- electron选mysql的优缺点_大型Electron应用本地数据库技术选型
- 截图工具分享(可截成gif动图)
- java从学号中提取班级_如何实现表间查询并提取班级号
- Python-量化投资(一)
- 要么旅行,要么读书,身体和灵魂必须有一个在路上
- 小龙虾炒菜机器人_开挖掘机炒小龙虾?机器人餐厅?吃饭竟也能如此炫酷!
- pythontkinter键盘_Python笔记之Tkinter(Key键盘事件)
- excel python 文字中间横杠_怎么在“excel”中的文字中间划一道横线?
- 攻击者如何破坏无人机?
- 怪异的JavaScript系列(一)
- IDEA导包报错cannot resolve symbol xxxx问题
- java整合谷歌翻译
- 01背包问题(动态规划解决)
- 音频2-ALSA/ASOC音频驱动框架