# IV：工具变量不满足外生性怎么办？

Stata连享会   主页 || 视频 || 推文 || 知乎

New！ `lianxh` 命令发布了：

`. ssc install lianxh`

`. help lianxh`

## 1. 回顾：内生性、工具变量估计的数值模拟

``````*-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
-------------------------------------------------------------------
``````

``````kdensity b, xscale(range(1.9 2.6))  ///
xlabel(1.9(0.1)2.6) xline(2,lp(dash))
``````

``````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")
``````

## 2. 扩展：外生性不满足的工具变量

Source： Damian Clarke, Benjamín Matta, 2018, Practical Considerations for Questionable IVs, Stata Journal, 18(3): 663–691. -PDF-, -PDF2-

• 第一个方法 来自于 Conley et al. (2012)，这种方法将外生性条件转换为了对于其支持域 (support) 或者分布的假设
• 第二个方法 来自于 Nevo and Rosen (2012b) ，他们则将工具变量和第二阶段扰动项无关的假设转换为了二者相关性的符号。在两种不同的放松假设之下，我们再考虑工具变量估计。

### 2.1 理论框架

1. 当清除掉工具变量 $Z$ 在 $X$ 上的效果后，其对 $Y$ 没有直接影响。

2. $Z$ 和 $\epsilon$ 无相关。

### 2.2 放松外生性假设 (`plausexog`)

（这一部分还可以参考连享会推文："IV-估计：工具变量不外生时也可以用！")

Conley et al. (2012) 将这种方法称为" Union of Confidence Intervals " (UCI) 。 $\gamma$ 的区间根据研究者的先验信念来确定，实际上是衡量了工具变量违反外生性的程度。在估计时，工具变量的估计区间是这一系列 $\gamma$ 取值情况下的并集。在有多个工具的情况下，不同工具可以有不同的 $\gamma$ 假设区间。

### 2.3 放松无相关假设 (`imperfectiv`)

Nevo and Rosen (2012b) 的建议是使用 $V\left(1\right)=\left({\sigma }_{X}Z-1{\sigma }_{Z}X\right)$ ，来代替这个复合的工具变量，其对 $\beta$ 的估计值为 ${\beta }_{v\left(1\right)}^{iv}$ 。根据 ${\sigma }_{xz}$ 和 ${\rho }_{x\epsilon }$ 的符号的不同关系，我们可以得到 $\beta$ 的单侧或者双侧区间估计。下表截取自 D Clarke, B Matta (2018) 的 table1 ，我们仅截取了 Panel A ，即一个工具的情况，关于更多工具的情形请读者自行参阅原文。

## 3. Stata 实操与模拟分析

### 3.1 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`，为工具设定 $\gamma$ 的最小值，仅仅当 method 为 uci 才可以设定。必须为每一个工具设定一个 gmin 。
• `gmax`，为工具设定 $\gamma$ 的最大值，仅仅当`method``uci`才可以设定。必须为每一个工具设定一个 gmax 。
• `grid`，设定[ gmin , gmax ]区间内用于计算区间的点数。默认为 2 。仅当 `method``uci` 才可以设定。
• `mu`，设定 $\gamma$ 的均值，假设高斯分布，使用 LTZ 方法。对于每一个工具必须设定一个 mu 。
• `omega`，设定 $\gamma$ 的方差，假设高斯分布和 LTZ 方法。对于每一个工具必须设定一个 omega 。
• `distribution`，允许假设一个 $\gamma$ 的非高斯分布。使用基于模拟的算法估计。
• `seed`，设定模拟算法的随机数种子。
• `iterations`，设定模拟算法的迭代次数。
• `graph`，指定为一系列外生性限制不满足时的假设画出区间估计图。
• `graphmu`，仅当 LTZ 模型时才可使用。为想要画出的点设置 `mu` 值。
• `graphomega`，仅当 LTZ 模型时才可使用。每个值对应 `graphmu` 中的每个值，对给定的 `mu` 设定高斯分布的方差。
• `graphdelta`，允许图像的值绘制在图像上方。
• `twoway options`，...。

``````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
------------------------------------------------------------------------------

``````

### 3.2 imperfectiv 命令

``````imperfectiv depvar [varlist1 ] (varlist2 = varlist iv) [,    ///
level(#) vce(vcetype) ncorr prop5 noassumption4  ///
exogvars(varlist) bootstraps(#) seed(#) verbose ]
``````

• `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`，展示详细的命令运行过程。

``````. 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]
------------------------------------------------------------------------------
``````

## 5. 参考文献

• 连玉君. "内生性问题模拟分析" Stata连享会. (2020)
• Cameron, A. C. and P. Trivedi. “Microeconometrics Using Stata.” (2009).
• Damian Clarke, Benjamín Matta, 2018, Practical Considerations for Questionable IVs, Stata Journal, 18(3): 663–691. -PDF-, -PDF2-

## 6. 相关推文

Note：产生如下推文列表的命令为：`lianxh IV 工具变量 内生, m`

## 相关课程

http://lianxh.duanshu.com

### 课程一览

Note: 部分课程的资料，PPT 等可以前往 连享会-直播课 主页查看，下载。

#### 关于我们

• Stata连享会 由中山大学连玉君老师团队创办，定期分享实证分析经验。直播间 有很多视频课程，可以随时观看。
• 连享会-主页知乎专栏，300+ 推文，实证分析不再抓狂。
• 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标，输入简要关键词，以便快速呈现历史推文，获取工具软件和数据下载。常见关键词：`课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法`

✏ 连享会学习群-常见问题解答汇总：
https://gitee.com/arlionn/WD

New！ `lianxh` 命令发布了：

`. ssc install lianxh`

`. help lianxh`