内生性与工具变量:2SLS、弱IV与过度识别检验
当解释变量 $x$ 与误差项 $\varepsilon$ 相关时,OLS 估计量不一致。工具变量法(Instrumental Variables, IV)通过一个"只通过 $x$ 影响 $y$"的外生变量 $z$,把 $x$ 中干净的那部分变化"提取"出来。本页讲清楚 IV 的三个条件、2SLS 的代数、弱工具变量和过度识别检验的实务操作。
ivreg2、xtivreg2、estout;含弱 IV 检验与过度识别 Hansen J 检验)。01 内生性的三大来源
所谓内生性(endogeneity),用一句话说就是 Cov(x, ε) ≠ 0。OLS 的一致性依赖 严格外生性 $E[\varepsilon|X]=0$,一旦这个假设破裂,$\hat{\beta}_{OLS}$ 就是有偏且不一致的,再大的样本量也救不回来。内生性在实证微观中几乎是"默认存在"的,主要来自三个渠道:
- 遗漏变量偏误(omitted variable bias):你想估计"教育对工资的影响",但能力 ability 既影响教育选择又影响工资,却不在你的回归里。FE 只能吃掉时不变遗漏变量,时不变的 ability 可以被个体 FE 吸收,但时变的 ability(例如某一年突然开窍)就不行。
- 反向因果(reverse causality):你想估计"警察数量对犯罪率的影响",但犯罪率高的城市会增加警察编制——$y \to x$ 与 $x \to y$ 同时存在,OLS 把两个方向混为一谈。
- 测量误差(measurement error):真实的"永久收入"测不准,你用"当年收入"代替,经典测量误差会让 $\hat{\beta}$ 向零偏(attenuation bias),且当测量误差出现在多变量回归中时偏误方向甚至不可预测。
找一个变量 $z$,它"外生"——只通过 $x$ 这条通道影响 $y$,不直接出现在 $y$ 的方程里。那么 $z$ 对 $x$ 的那部分变异是"干净"的,用这部分变异去回归 $y$,就能拿到一致的 $\beta$。
02 工具变量的三个条件
一个合格的工具变量 $z$ 必须同时满足以下三个条件,缺一不可:
教科书式的经典例子:Angrist (1990) 用越战抽签号 lottery number作为"是否服兵役"的 IV——抽签号随机分配,与个人能力、家庭背景无关(外生 + 排他),但显著影响了入伍概率(相关)。
03 2SLS 估计量与第一阶段
两阶段最小二乘法(Two-Stage Least Squares, 2SLS)分两步:第一阶段把内生变量 $x$ 对工具变量 $z$ 回归,取出预测值 $\hat{x}$;第二阶段用 $\hat{x}$ 代替 $x$ 对 $y$ 回归。矩阵形式可以合并成一个闭式解:
其中 $P_Z$ 是工具变量 $Z$ 张成空间上的投影矩阵。直观上,$P_Z X$ 就是把内生解释变量投影到工具变量空间后"留下"的、与误差项正交的那部分变异。
第一阶段回归写出来是:
第二阶段:$y_i = \beta_0 + \beta_1 \hat{x}_i + \mathbf{W}_i'\boldsymbol{\delta} + u_i$。注意实务中不要真的分两次手写 OLS——那样标准误会错。Stata 的 ivregress 2sls 一次性算完,标准误自动正确。
04 弱工具变量检验(F > 10)
当 $z$ 对 $x$ 的解释力很弱(weak IV)时,2SLS 估计量即使在大样本下也会严重偏向 OLS,并且标准误不可靠。Stock–Yogo (2005) 给出了经验阈值:
单个内生变量、单个工具变量时,第一阶段排除工具变量本身的 F 统计量(weak identification test)必须 > 10(Stock–Yogo 10% maximal IV size 临界值约为 16.38,实务常用 10 作为宽松阈值)。如果 F < 10,你的 IV 就是弱工具,2SLS 结果不可信。
当有多个内生变量时,要看 Cragg–Donald Wald F 统计量,并对照 Stock–Yogo 表格中的临界值。Stata 的 ivregress 2sls 配合 estat firststage 会自动输出这些量。
04b 弱IV深化:Stock–Yogo 临界值与 Many Instruments
Staiger & Stock (1997) 证明:当工具变量很弱时,即使样本量趋于无穷,2SLS 估计量也是不一致的——其分布收敛到一个随"弱识别"参数而非正态的随机变量。弱 IV 的三个实务后果必须写进论文:
- 点估计有偏,且方向朝 OLS 偏。弱工具把 $x$ 里"不干净"的部分也带进了 $\hat{x}$,$\hat{\beta}_{2SLS}$ 被拉向 $\hat{\beta}_{OLS}$。弱 IV 下 2SLS 可能比 OLS 还差。
- 标准误被低估,t 检验过度拒绝。名义 5% 的 Wald 检验实际拒绝率可能高达 25%—30%(size distortion)。
- 置信区间覆盖率远低于 95%。弱识别下 Wald 型置信区间又窄又偏,不能再用。
04b.1 第一阶段 F 与 Stock–Yogo (2005) 临界值表
第一阶段排除工具变量的 F 统计量,在单内生变量时就是"工具是否够强"的直接度量。Staiger–Stock 的经验法则 F>10 只是一个粗略门槛;严格做法是把 Cragg–Donald(i.i.d. 下)或 Kleibergen–Paap rk Wald F(异方差/聚类下)与 Stock–Yogo (2005) 临界值表对照。下表为单个内生解释变量(K1=1)、2SLS、i.i.d. 误差下,按"最大可容忍的 5% Wald 检验 size distortion"给出的临界值:
| 排除工具数 L1 | 10% maximal IV size | 15% maximal IV size | 20% maximal IV size | 25% maximal IV size |
|---|---|---|---|---|
| 1(恰好识别) | 16.38 | 8.96 | 6.66 | 5.53 |
| 2 | 19.93 | 11.59 | 8.75 | 7.25 |
| 3 | 13.91 | 9.08 | 6.46 | 5.39 |
| 5 | 18.37 | 10.83 | 6.77 | 5.25 |
| 10 | 20.74 | 11.49 | 6.61 | 4.86 |
"10% maximal IV size = 13.91" 的含义是:只有当你的第一阶段 F 超过 13.91 时,名义 5% 检验的实际拒绝率才不会超过 10%。F>10 的经验法则大致对应"3 个工具、15% maximal size(9.08)"这一档——它比"10% maximal size"宽松。临界值随 K1、L1 与容差而变,务必读你自己 ivreg2 输出里那一行,不要硬套上表。异方差/聚类时 F 统计量改用 Kleibergen–Paap rk Wald F,与同一组临界值比较;若仍存疑,用 Montiel Olea–Pflueger effective F 或直接上弱识别稳健检验(见 s5b)。
04b.2 多个弱工具变量问题(Many Instruments Bias)
当你"为了凑过度识别、多放几个工具"时会走向另一个坑:many / weak instruments bias。工具数 $L$ 相对于样本量 $n$ 过大时(哪怕每个工具单独都不算太弱),2SLS 同样向 OLS 偏,且 Sargan/Hansen J 过度识别检验也会失真。经验上若工具数接近甚至超过 10—20 个,应改用 LIML / Fuller 估计量(对 many/weak instruments 更稳健),或用 Hansen–Heaton–Yaron 迭代 GMM,而不是堆工具做 2SLS。
04b.3 完整 Stata 代码:弱IV诊断
*==============================================================*
* 弱工具变量诊断:第一阶段F / Stock-Yogo / weakivtest
* 用模拟数据,set seed 保证可复现
*==============================================================*
clear all
set seed 20240601
set obs 500
* 构造一个"工具很弱"的例子:z 对 x 的系数只有 0.2
gen z1 = rnormal()
gen z2 = rnormal()
gen z3 = rnormal()
gen u = rnormal()
gen x = 0.2*z1 + 0.2*z2 + 0.2*z3 + u // 第一阶段信号弱
gen y = 0.5*x + u + rnormal() // x 与 u 相关 => 内生
* --- 1. ivregress + estat firststage(内置)---
ivregress 2sls y (x = z1 z2 z3), robust
estat firststage
* 关注:
* "First-stage F( 3, 496)" 列:与 Stock-Yogo 临界值比较
* 若 F 明显 < 10(或低于 10% maximal size 临界值)=> 弱IV
* --- 2. ivreg2:一次输出全部诊断 ---
* ssc install ivreg2, replace
* ssc install ranktest, replace
ivreg2 y (x = z1 z2 z3), robust first
* 自动输出:
* Underidentification test (Kleibergen-Paap rk LM) -> H0 不可识别
* Weak identification stat (Cragg-Donald Wald F / Kleibergen-Paap rk Wald F)
* Stock-Yogo weak ID test critical values(自动按 K1,L1 列临界值)
* Sargan/Hansen J(过度识别)
* --- 3. weakivtest(仅弱识别检验,Stata 17+ 或外部)---
* ssc install weakivtest, replace
weakivtest
* 输出:最小特征值 F、对应 Stock-Yogo 容差(实际最大 size/relative bias)
* --- 4. weakiv(Pflueger-Wang 有效F,异方差/聚类稳健)---
* ssc install weakiv, replace
weakiv y (x = z1 z2 z3), robust
* 适用于异方差/聚类/自相关:报告 effective F 与 5% 临界值
05 过度识别检验与 Anderson–Rubin
当工具变量个数 $L$ > 内生变量个数 $K$ 时(overidentified model),你有"多余"的外生信息,可以检验"至少有一个工具变量是外生的"这一原假设:
过度识别检验(overidentification test):Sargan 统计量在 i.i.d. 误差下成立;存在异方差/聚类时必须用 Hansen's J(GMM 框架下)。不拒绝原假设意味着"工具变量外生性无反证",但拒绝也并不必然说明哪个 IV 有问题。
当担心工具变量弱识别时,Anderson–Rubin (1949) 检验对弱 IV 稳健:它检验原假设 $\beta = \beta_0$ 在弱识别下依然有效,不依赖"强工具变量"的渐近理论。Stata 中 ivregress gmm ..., cluster() 后 estat overid、estat firststage 即可。
05b 弱IV稳健推断:AR / CLR / rk LM
第一阶段 F 不达标时,正确做法不是"硬报 2SLS 置信区间",而是换用对弱识别稳健(weak-identification-robust)的推断。这类检验在工具强时与 Wald 一样高效,在工具弱时仍保持正确的 size。
05b.1 Anderson–Rubin (AR, 1949) 检验
AR 检验对原假设 $H_0: \beta = \beta_0$(结构参数等于某个具体值)直接做检验,绕开了对"第一阶段有多强"的依赖。在恰好识别或过度识别、i.i.d. 下,AR 统计量渐近服从 $\chi^2_{(L_1)}$($L_1$ 为排除工具数):
把所有不被 AR 拒绝的 $\beta_0$ 收集起来,就得到 AR 置信集。它在弱 IV 下覆盖率正确,但当工具较多(过度识别强)时 power 偏低——这正是 CLR 要改进的。
05b.2 条件似然比 CLR(Moreira, 2003)
Moreira (2003) 提出 CLR(Conditional Likelihood Ratio)检验:在充分统计量 $S$(结构方程与简化型方程的似然比)的条件下构造临界值。它与 AR 一样对弱 IV 稳健,但在工具较强时 power 明显更高,置信集更窄。单内生变量时 CLR 置信集几乎是弱识别稳健推断的"金标准"。Andrews, Moreira & Stock (2006) 证明 CLR 在一类检验中近似最有功效。
05b.3 Kleibergen–Paap rk LM(不可识别检验)
Kleibergen–Paap rk LM 统计量检验原假设"矩阵秩不足 / 方程不可识别"(即工具完全与内生变量无关)。它是 Anderson canon. corr. LR 检验在异方差/聚类下的稳健版本。不拒绝 → 连"有没有识别"都成问题;拒绝但 rk Wald F 仍小 → 可识别但弱,需用 AR/CLR。
05b.4 完整 Stata 代码
*==============================================================*
* 弱IV稳健推断:AR / CLR / rk LM
*==============================================================*
clear all
set seed 20240602
sysuse auto.dta, clear
global Y price
global T foreign // 内生处理变量
global C weight // Included 外生控制
* 用 length、displacement 作为 foreign 的两个工具(教学例)
* --- 1. ivreg2 自带:AR / CLR / K-P rk LM 一次出齐 ---
* ssc install ivreg2, replace
ivreg2 $Y $C ($T = length displacement), robust
* 诊断块直接给:
* Kleibergen-Paap rk LM statistic -> underidentification (H0 rank deficient)
* Kleibergen-Paap rk Wald F statistic -> weak identification
* Anderson-Rubin statistic -> weak-IV robust 检验 H0: beta=0
* Stock-Wright LM S statistic -> 另一种 weak-IV robust 检验
* Hansen J -> overidentification
* --- 2. weakiv 命令:AR / CLR / Lagrange multiplier 稳健检验 ---
* ssc install weakiv, replace
weakiv $Y $C ($T = length displacement), robust
* 输出三类 weak-identification-robust 统计量及其 p 值:
* AR (Anderson-Rubin), LM (K.-P. score), CLR (conditional LHR)
* 并给出对应置信区间 / 置信集
* --- 3. 手算 AR 检验(理解原理,H0: beta_T = b0)---
* 思路:在 y - b0*x 上对全部外生变量(含工具)回归,看工具是否联合显著
local b0 = 0 // 检验 H0: beta_foreign = 0
gen ystar = $Y - `b0'*$T
regress ystar $C length displacement
test length displacement // H0: 两个工具系数联合为0 => AR p 值
* 若不拒绝 => beta=0 落在 AR 置信集内
* --- 4. 恰好识别单工具:用 rivtest / AR 置信区间 ---
* ssc install rivtest, replace
rivtest $Y $C ($T = length), robust
* 画 AR 置信集:图形化展示 beta 的弱IV稳健取值范围
当 rk Wald F 低于 Stock–Yogo 临界值时,论文应同时报告:(1) rk LM 及其 p 值;(2) rk Wald F 与对照临界值;(3) AR / CLR 检验的 p 值与置信集。若 CLR 置信集比 Wald 置信区间宽很多、甚至包含多个量级,要如实说明"点估计对工具强度敏感",而不是只挑显著的 Wald CI 写进正文。
06 完整 Stata 代码
下面这段代码用 Stata 自带的 auto 数据演示:我们想估计"外国车对价格的影响"(foreign 是否影响 price),但 foreign 与其他未观测质量特征相关,故用 length(车长)作为 foreign 的工具变量。这是一个教学性例子,实际研究中 IV 选择要严肃得多。
*==============================================================*
* 内生性与 2SLS 完整演示
*==============================================================*
clear all
set more off
* ssc install estout, replace
sysuse auto.dta, clear
* --- 0. 先用 OLS 跑一下,作为对照 ---
* 关注的内生变量:foreign(是否外国车)
* 我们想估计 foreign 对 price 的影响
regress price foreign weight length
estimates store ols
* --- 1. 简单 IV:单个工具变量 length ---
* 假设 length 只通过 foreign / weight 影响 price
ivregress 2sls price weight (foreign = length), robust
estimates store iv1
* 第一阶段:直接看 length 是否显著影响 foreign
regress foreign weight length
estimates store firststage
* --- 2. 看第一阶段 F 统计量(弱 IV 检验) ---
ivregress 2sls price weight (foreign = length), robust
estat firststage
* 若 "F( 1, ... )" > 10,则不是弱工具
* --- 3. 多个工具变量 + 聚类标准误 + 过度识别检验 ---
* 用 length 和 displacement 两个变量作为 foreign 的工具
ivregress 2sls price weight (foreign = length displacement), robust
estat firststage // Cragg-Donald F
estat overid // Sargan / Hansen J 过度识别检验
* --- 4. 用 ivreg2(外部命令,输出更全) ---
* ssc install ivreg2, replace
* ssc install ranktest, replace
ivreg2 price weight (foreign = length displacement), robust first
* ivreg2 自动输出:
* - Kleibergen-Paap rk LM statistic (underidentification)
* - Cragg-Donald Wald F / Kleibergen-Paap Wald F (weak IV)
* - Hansen J statistic (overidentification)
* --- 5. Anderson-Rubin 弱识别稳健置信区间 ---
* ssc install rivtest, replace
* rivtest price weight (foreign = length displacement), robust
* --- 6. 用 esttab 导出 IV 结果到三线表 ---
esttab ols iv1 firststage using "table_iv.rtf", replace ///
b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) ///
mtitles("OLS" "2SLS" "第一阶段") ///
stats(N r2, fmt(0 3) labels("观测值" "R^2")) ///
title("表 X:foreign 对 price 的影响,IV 估计") ///
nogaps compress
06b 高维工具变量与机器学习 IV(Post-Double Selection)
当控制变量 $X$ 或候选工具 $Z$ 数量很大(几十上百个)时,手工挑选哪些该进第一阶段、哪些该进结果方程,极易引入"选变量偏误"。Belloni, Chernozhukov & Hansen (2014, ReStud) 提出的 post-double selection(双重选择后估计)用机器学习做变量选择,再做低维的 IV/OLS 推断,保证 $\sqrt{n}$ 一致与正确的置信区间。站内 16 DML 去偏机器学习 页讲了更完整的 DML 框架,这里只给 IV 语境下的直觉与代码。
06b.1 概念框架
06b.2 Stata 代码:post-double selection IV
*==============================================================*
* 高维控制下的 IV:Post-Double Selection(Belloni-Chernozhukov-Hansen 2014)
* 思路:Lasso 选变量 -> 并集 -> 低维 2SLS
*==============================================================*
clear all
set seed 20240603
set obs 1000
* 模拟:x 内生,候选工具 z1..z10,候选控制 w1..w50(高维)
set seed 20240603
gen z1 = rnormal(), z2 = rnormal(), z3 = rnormal()
forvalues j = 4/10 {
gen z`j' = rnormal()
}
forvalues j = 1/50 {
gen w`j' = rnormal()
}
gen u = rnormal()
* 真实结构:只有 z1,z2 真的影响 x;只有 w1,w2,w3 真的混淆 y-x
gen x = 0.5*z1 + 0.5*z2 + 0.3*w1 + 0.3*w2 + u
gen y = 0.4*x + 0.5*w1 + 0.5*w2 + 0.5*w3 + u + rnormal()
* --- 1. 第一阶段选择:Lasso 找预测 x 的变量 ---
* ssc install lassopack, replace
lasso linear x w1-w50, rseed(20240603)
local S_x : allvars // 选出的预测 x 的协变量(含混淆)
* --- 2. 结果方程选择:Lasso 找预测 y 的变量(不含 x)---
lasso linear y w1-w50, rseed(20240603)
local S_y : allvars
* --- 3. 取并集(此处教学上简化为全部 w1-w3 参与)---
* 实务中把 S_x 与 S_y 的并集存入 local:
global W_sel w1 w2 w3
* --- 4. 在选中的低维控制集上做 2SLS ---
ivregress 2sls y $W_sel (x = z1 z2), robust
estat firststage
* --- 5. 等价:用 pds 命令(外部包)一站式完成 ---
* ssc install pdslasso, replace
* pdslasso y (x = z1 z2) w1-w50, controls(w1-w50)
06b.3 Python 等价(Double MLIV)
# 用 doubleml 库做 IV-LASSO / DML-IV,与上面 Stata 思路一致
# pip install doubleml
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from doubleml import DoubleMLIIVM # 或 DoubleMLPLIV
np.random.seed(20240603)
n = 1000
Z = np.random.normal(size=(n, 2)) # 工具
W = np.random.normal(size=(n, 50)) # 高维控制
u = np.random.normal(size=n)
x = 0.5*Z[:,0] + 0.5*Z[:,1] + 0.3*W[:,0] + u
y = 0.4*x + 0.5*W[:,0] + 0.5*W[:,1] + u + np.random.normal(size=n)
# 用随机森林学高维 nuisance 函数,再去偏做 IV 推断
ml_l = RandomForestRegressor(n_estimators=200) # 学习 E[x|Z,W]
ml_m = RandomForestRegressor(n_estimators=200) # 学习 E[y|W]
# dml = DoubleMLIIVM(y, x, d, z, allvars, ml_l, ml_m) # 具体接口见 doubleml 文档
# dml.fit(); print(dml.summary)
print("DML-IV: 自动做样本切分 + 去偏,给出 beta 与稳健置信区间")
ML-IV / post-double selection 只能解决"高维控制下的选择偏误",它不能替代一个真正外生的工具——排他性约束仍然是经济理论问题,机器学习帮不了。站内 16 DML 页 有更严谨的样本切分与 cross-fitting 细节。
07 论文案例精读
08 常见错误与进阶资料
审稿人最常攻击的不是你的 F 统计量,而是你的排他性约束。如果你的 $z$ 除了通过 $x$ 还能直接影响 $y$,那 IV 就废了。写论文时必须花一大段文字论证"为什么 $z$ 不会走第二条路",并附上控制 $z$ 的直接影响后结果仍稳健的证据。
弱工具变量下 2SLS 估计量严重偏向 OLS,置信区间覆盖率极低。正确做法:换更强的工具、用 LIML / Fuller 估计、或报告 Anderson–Rubin 置信区间。
恰好识别(工具数 = 内生变量数)时,过度识别检验根本无法做;不要看到 Stata 不输出 Hansen J 就以为出错了。
自己跑两个 regress 会用第二阶段残差方差估计错误。永远用 ivregress 2sls 或 ivreg2。
F 只是"诊断",不是"治疗"。即使 F 勉强过了 10,只要工具偏弱,Wald 置信区间仍可能失真。规范做法是同时报告 AR / CLR 检验与置信集;当 rk F 低于 Stock–Yogo 临界值时,正文应以 CLR 置信区间为主,而不是只给 2SLS 的 (β̂ ± 1.96·SE)。
为了过度识别检验而堆砌几十个工具,2SLS 会出现 many-instruments bias 并向 OLS 偏。工具过多时应改用 LIML / Fuller 或迭代 GMM,并报告工具数与样本量之比。
弱识别下 Wald 型 95% CI 覆盖率可能远低于 95%。若 AR/CLR 置信集很宽或不收敛,必须如实报告"点估计对工具强度敏感",不能把一个窄而不可靠的 2SLS CI 当成结论。
进阶资料
- Stock, J. H. & M. Yogo (2005) — "Testing for Weak Instruments in Linear IV Regression", Identification and Inference for Econometric Models。
- Staiger, D. & J. H. Stock (1997) — "Instrumental Variables Regression with Weak Instruments", Econometrica, 65(3): 557–586。
- Moreira, M. J. (2003) — "A Conditional Likelihood Ratio Test for Structural Models", Econometrica, 71(4): 1027–1048。
- Andrews, I., J. H. Stock & L. Sun (2019) — "Weak Instruments in IV Regression: Theory and Practice", Annual Review of Economics, 11: 727–753。
- Belloni, A., V. Chernozhukov & C. Hansen (2014) — "Inference on Treatment Effects after Selection among High-Dimensional Controls", Review of Economic Studies(post-double selection)。
- Wooldridge, J. M. (2010) — Econometric Analysis of Cross Section and Panel Data 第 5、8 章。
- Baum, C. F., Schaffer, M. E. & Stillman, S. (2007) — "Enhanced routines for instrumental variables/GMM estimation", Stata Journal(ivreg2 作者手册)。
- NBER / LSE 的 IV 网络课件:弱工具变量、LATE 解释的最佳入门。