温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者: 甘徐沁 (厦门大学)
邮箱: 1072759894@qq.com
目录
实证研究中工具变量是最常用的用来解决内生性的工具。关于工具变量的基础可见连享会推文:“Stata: 工具变量法 (IV) 也不难呀!”。
先来做一个复习,常规的工具变量法模型建立如下:
其中
当
下面的 Stata 代码参考 Cameron(2009), pp.143 Section 4.6.5,连老师的讲义「蒙特卡洛模拟分析」对此也进行了详细分析。
*-Ref: Cameron(2009), pp.143 Section 4.6.5
*--------------DGP----------------
*
* y = a + b*x + u; u~N(0,1)
*
* x = z + 0.5*u; z~N(0,1)
*
* a=10; b=2; N=150
*
*---------------------------------
cap program drop endogreg
program define endogreg, rclass
version 11.0
syntax [, obs(int 150) iv Rho(real 1)] //rho 用来控制 iv 和 x 的相关性程度
drop _all
set obs `obs'
gen u = rnormal()
gen z = rnormal() //corr(u,z) =0, 因为二者是分别生成的
gen x = `rho'*z + 0.5*u //corr(x,u)!=0(内生), corr(x,z)!=0(IV)
gen y = 10 + 2*x + u
if "`iv'" != ""{ //如果用户未输入 iv 选项
ivregress 2sls y (x=z) // IV回归,z 是 x 的工具
}
else{ //否则进行 OLS 回归
regress y x
}
return scalar b = _b[x]
return scalar se = _se[x]
return scalar t = (_b[x]-2)/_se[x] //Ho: b(x)=2
local alpha = invttail(`obs'-2, 0.025)
// t 分布 5% 显著水平临界值
dis in red "alpha = " in y `alpha'
return scalar over_rej= (abs(return(t))>`alpha') //过度拒绝取 1
return scalar p = 2*ttail($N-2, abs(return(t)))
end
进行模拟,并将模拟结果储存于数据中:
simulate b=r(b) se=r(se) t=r(t) over_rej=r(over_rej), ///
reps(1000) seed(135): endogreg_OLS, obs(500)
查看所得结果 (
tabstat b se t over_rej, ///
s(mean sd min p5 p50 p95 max) f(%6.3f) c(s)
variable | mean sd min p5 p50 p95 max
----------+--------------------------------------------------------
b | 2.400 0.037 2.281 2.338 2.398 2.463 2.504
se | 0.036 0.002 0.031 0.033 0.036 0.039 0.043
t | 11.162 1.145 7.543 9.364 11.146 13.027 15.026
over_rej | 1.000 0.000 1.000 1.000 1.000 1.000 1.000
-------------------------------------------------------------------
可以看到,此时估计出的系数 b 是有偏的(真实值为2),这是因为 OLS 的基本假设被打破了。我们可以画出 b 的核密度分布来确认。
kdensity b, xscale(range(1.9 2.6)) ///
xlabel(1.9(0.1)2.6) xline(2,lp(dash))
接下去我们使用 z 作为 x 的工具变量进行估计:
simulate b=r(b) se=r(se) t=r(t) over_rej=r(over_rej), ///
reps(1000) seed(135): endogreg, iv obs(500)
tabstat b se t over_rej, ///
s(mean sd min p5 p50 p95 max) f(%6.3f) c(s)
variable | mean sd min p5 p50 p95 max
----------+-------------------------------------------------------
b | 1.998 0.045 1.825 1.923 2.001 2.070 2.144
se | 0.045 0.003 0.037 0.040 0.045 0.050 0.057
t | 0.004 1.010 -3.233 -1.564 0.012 1.714 3.686
over_rej | 0.050 0.218 0.000 0.000 0.000 0.500 1.000
------------------------------------------------------------------
kdensity b, xscale(range(1.9 2.6)) ///
xlabel(1.9(0.1)2.6) xline(2,lp(dash)) ///
title("IV is unbiased")
此时可以看到, IV 的估计量是无偏的。这个经典的例子体现出了在满足外生性和相关性情况下工具变量对于解决内生性的作用。
Source: Damian Clarke, Benjamín Matta, 2018, Practical Considerations for Questionable IVs, Stata Journal, 18(3): 663–691. -PDF-, -PDF2-
实际研究中,工具变量的外生性是一个没有办法严格论证的条件 (untestable),尽管存在一些必要的统计检验方法,如过度识别检验等 (Sargan 1958; Hansen 1982; Kitagawa 2015) ,但这些方法并不是外生性的充分条件。因此我们需要考虑在 不满足工具变量外生性条件下的识别。
传统的线性 IV 框架为:
工具变量的有效性可以用以下两种思路:
当清除掉工具变量
这两个表达方式在 simultaneous equation model 的框架下是等价的 (参考文献注释 3) ,但是二者提供了对于放松 IV 有效性的不同思路。下面我们分别考虑。
plausexog
)(这一部分还可以参考连享会推文:"IV-估计:工具变量不外生时也可以用!")
实际上,完整的工具变量框架可如下表示:
当
Conley et al. (2012) 将这种方法称为" Union of Confidence Intervals " (UCI) 。
除去直接假设
此时工具变量的方差多了一项,其中
实际估计过程中,我们可以采取模拟方法。可假设
如果选择假设
更加复杂的情况中,如果对外生性限制的结构还有更多的假设,还可以使用贝叶斯方法来进行。此时需要提供关于 R
语言中可以使用 bayesm
(Rossi 2015) 命令。
这里工具变量违反外生性的先前信念在最终估计中起重要作用。决定一个确定的
imperfectiv
)传统的工具变量法中,依靠不可观测的假设,
我们用
这个假设在 Nevo and Rosen (2012b) 的原文中称为 assumption 3 ,表达的涵义是工具 Z 和误差项的(弱)相关方向,与内生变量 X 和 误差项的相关方向一致。同时我们加入下面这个原文中的 assumption 4 。
假设 3 和假设 4 ,给出了" Imperfect Instrumental Variable "的定义,即一个工具,其和误差项的相关方向,与感兴趣的内生变量 X 和误差项的相关方向一致,但其内生性要小于此内生变量 X 。 因此我们可以定义一个工具变量 Z 的内生程度和内生变量 X 的内生程度的比例:
在无相关假设成立情况下,显然有
Nevo and Rosen (2012b) 的建议是使用
值得注意的是,在一个工具仅能估计出单边区间的情况中,如果使用两个及以上工具,则可以估计出两个区间。并且更多的工具通常会得到更窄的区间估计。
假设数据生成过程如下:
由公式可知,若
这里,我们将 plausexog
和 imperfectiv
命令的效果。
该命令的语法为 ( 详见 help plausexog
):
plausexog method depvar [varlist1 ] (varlist2 = varlist iv) , ///
[ vce(vcetype) gmin(numlist) gmax(numlist) grid(#) ///
mu(numlist) omega(numlist) distribution(name, params) seed(#) ///
iterations(#) graph(varname) graphmu(numlist) ///
graphomega(numlist) graphdelta(numlist) * ]
其中:
method
,必选,可为 uci 或者 ltz 。vce
,标准误估计方法。gmin
,为工具设定 gmax
,为工具设定 method
为 uci
才可以设定。必须为每一个工具设定一个 gmax 。grid
,设定[ gmin , gmax ]区间内用于计算区间的点数。默认为 2 。仅当 method
为 uci
才可以设定。mu
,设定 omega
,设定 distribution
,允许假设一个 seed
,设定模拟算法的随机数种子。iterations
,设定模拟算法的迭代次数。graph
,指定为一系列外生性限制不满足时的假设画出区间估计图。graphmu
,仅当 LTZ 模型时才可使用。为想要画出的点设置 mu
值。graphomega
,仅当 LTZ 模型时才可使用。每个值对应 graphmu
中的每个值,对给定的 mu
设定高斯分布的方差。graphdelta
,允许图像的值绘制在图像上方。twoway options
,...。其中 method
为必选,包括了 uci (Union of confidence intervals) ,此时需给出 help
文件。下面我们生成数据,并使用此命令进行估计。
set obs 100
set seed 1234
foreach var in u z v w {
gen `var' = rnormal()
}
gen x = -0.6*z + 0.33*u + v
gen y1 = 3.0*x + 0.10*z + u
// UCI Method
. plausexog uci y1 (x=z), gmin(0) gmax(0.2) //设定gamma的上下界
Estimating Conely et al.'s uci method
Exogenous variables:
Endogenous variables: x
Instruments: z
Conley et al (2012)'s UCI results Number of obs = 100
------------------------------------------------------------------------------
Variable Lower Bound Upper Bound
------------------------------------------------------------------------------
x 2.5844218 3.540548
_cons -.19070535 .20726121
------------------------------------------------------------------------------
// LTZ Method
. plausexog ltz y1 (x=z), mu(0.1) omega(0.01) //mu为分布的均值,omega为分布的方差,这里默认高斯分布
Estimating Conely et al.'s ltz method
Exogenous variables:
Endogenous variables: x
Instruments: z
Conley et al. (2012)'s LTZ results Number of obs = 100
------------------------------------------------------------------------------
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | 3.072 0.233 13.18 0.000 2.615 3.529
_cons | 0.003 0.101 0.03 0.979 -0.195 0.200
------------------------------------------------------------------------------
注意到在以上两个例子中,我们的先验信息都“正确”设定了工具变量违反外生性的程度 0.1 ,所以在两个例子中,
下面我们展示另外一个命令在同一个数据生成过程下的估计。这个命令的语法为:
imperfectiv depvar [varlist1 ] (varlist2 = varlist iv) [, ///
level(#) vce(vcetype) ncorr prop5 noassumption4 ///
exogvars(varlist) bootstraps(#) seed(#) verbose ]
这个命令符合 ivregress
的语法,所有外生变量需要在 varlist1
中设定,内生变量设定在 varlist2
中,imperfect 工具变量设定在 varlist_iv
中。
level
,置信区间。vce
,标准误估计方法。ncorr
,设定内生变量和不可观测误差项之间的相关性为负。默认为正。prop5
,设定 Nevo and Rosen (2012b) 的命题 5 成立。如果内生变量和每个不完美工具之间的相关性是负的,那么估计的区间结果仅包含一侧区间。如果有多于 1 个的不完美工具,那么可以使用命题 5 来生成双侧区间。如果设定此选项,那么 varlist_iv
的前两个工具会被用来计算此双侧区间,并且假设第一个工具是更“好”的。noassumption4
,设定Nevo and Rosen (2012) 假设 4 不成立。即不完美工具和误差项之间的相关性,小于内生变量和误差项之间的相关性。exogvars
,展示外生变量的区间估计。bootstraps
,在有多个上或下区间时,对于每个估计值的统计推断过程考虑不确定性接近 binding 的情况,使用 bootstrap 过程的次数。seed
,设定 bootstraps
方法的随机数种子。verbose
,展示详细的命令运行过程。我们分别进行区间估计,在无假设 4(不完美工具和误差项之间的相关性,小于内生变量和误差项之间的相关性)和存在假设 4 情况下。
. imperfectiv y1 (x=z), noassumption4
Nevo and Rosen (2012)'s Imperfect IV bounds Number of obs = 100
------------------------------------------------------------------------------
Variable Lower Bound(CI) LB(Estimator) UB(Estimator) Upper Bound(CI)
------------------------------------------------------------------------------
x [2.5844218 (2.9063368 3.1372705) 3.284754]
------------------------------------------------------------------------------
.
. imperfectiv y1 (x=z)
Nevo and Rosen (2012)'s Imperfect IV bounds Number of obs = 100
------------------------------------------------------------------------------
Variable Lower Bound(CI) LB(Estimator) UB(Estimator) Upper Bound(CI)
------------------------------------------------------------------------------
x [2.5844218 (2.9063368 3.0629197) 3.2337844]
------------------------------------------------------------------------------
下面考虑一系列数据生成过程,包含不同的 plausexog
和 impefectiv
的估计结果。
可以观察到,几乎在所有的情况下区间估计都包含了真实的 imperfectiv
命令应该设置 noassumption4
选项。
总体而言,尽管 Nevo and Rosen (2012b) and Conley et al.(2012) 的两种方法都允许设定工具变量和不可观测误差项之间很强的假设关系来进行区间估计。理想状况中,这些假设应该从 IV 不成立的经济理论中去寻找。感兴趣的读者可以参阅原文 P17 ,作者简单列举了两个根据理论来确定工具变量和误差项关系的例子。
工具变量法是经济学实证研究中用于探究因果关系的最常用的方法之一。工具变量的两个假设之一,相关性假设可以验证,而不可观测的外生性假设是无法严格论证的。在外生性假设不成立的情况下,我们可以通过假设工具和误差项之间的关系来估计真实系数 stata
应用, impefectiv
和 plausexog
。数值模拟表明,这种区间估计的准确性依赖于对于工具和误差项假设的前定信念是准确的。实际研究时,我们可以从经济理论或者现实中来寻找前定信念。
Note:产生如下推文列表的命令为:
lianxh IV 工具变量 内生, m
安装最新版lianxh
命令:ssc install lianxh, replace
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 因果推断, 空间计量,寒暑假班等 | |
⭕ 数据清洗系列 | 游万海 | 直播, 88 元,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh