STATA面板工具变量法:内生性、弱工具与过度识别检验

发布时间:2026/10/29 23:42:44
STATA面板工具变量法:内生性、弱工具与过度识别检验 跑面板回归最怕的不是跑不出结果而是结果跑出来了自己不敢往报告里写。工具变量法在横截面数据里已经够让人头疼一旦挪到面板框架下固定效应、聚类标准误、弱工具变量、过度识别检验几件事搅在一起稍不留神就会得出一个看起来很显著、其实经不起追问的系数。面板数据里的工具变量法要处理的核心问题其实就三件内生性从哪来、工具变量凭什么可信、估计结果在统计上站不站得住。这三件事在STATA里对应的是模型设定、命令选择和一套检验链条任何一环松了后面的结论都会跟着塌。这篇内容面向的是已经会用xtreg跑固定效应、但一遇到内生变量就不知道怎么接下一步的研究者也适合那些跑过ivregress却不确定面板场景下该换什么命令的人。下面我按自己做实证的顺序把整套流程拆开讲包括命令、参数、检验统计量怎么读以及那些文档里不会写的坑。1. 面板数据的内生性到底藏在哪里动手之前先要把内生性的来源想清楚因为不同来源对应完全不同的应对策略。我见过太多人上来就说我要做工具变量问一句内生变量是什么、为什么内生答不上来。这种情况下就算跑出一个漂亮的系数审稿人或者同行一句你的排他性约束怎么论证的就能把整个结果推翻。1.1 三类典型内生性来源与它们的识别信号第一类是遗漏变量。企业的管理能力、团队的隐性知识、地区的营商环境这些东西影响被解释变量也和核心解释变量相关但你在数据里根本拿不到。识别信号很直接加入某些可观测控制变量后系数大幅跳动或者固定效应前后系数符号翻转基本可以怀疑存在遗漏。第二类是测量误差。财务数据重述、问卷自报的模糊区间、指标口径变更都会让核心解释变量带上噪声。经典结论是解释变量的测量误差会导致系数向零衰减也就是你看到的效应被系统性低估。第三类是反向因果也就是联立性。研发投入影响绩效绩效好的企业又有更多钱投研发这种双向关系在面板里尤其常见因为时间维度让互为因果有了发生的空间。还有一类容易被忽略的是动态面板里的滞后因变量。当你把 $y_{t-1}$ 放进右边它和个体固定效应天然相关组内变换之后这种相关性不会消失反而会被放大这就是所谓的动态面板偏误。很多人以为加了固定效应就万事大吉实际上固定效应只解决了第一类里不随时间变化的那部分。1.2 固定效应能吃掉什么、吃不掉什么固定效应的作用机制是对每个个体做组内去均值把不随时间变化的个体特征整体消掉。所以像企业成立年份、所在城市这类恒定变量带来的遗漏固定效应确实能处理。但它有两个明确的能力边界。第一个边界是时变遗漏变量。比如某年突然出现的行业性冲击如果这个冲击同时影响了解释变量和被解释变量固定效应完全无能为力。这时候要么加入年份固定效应前提是冲击对所有个体同质要么就得靠工具变量。第二个边界是测量误差和反向因果。组内变换不会消除测量误差也不会切断双向因果链。所以我加了fe就不需要工具变量了这个判断在绝大多数实证场景下是错的。还有一个细节值得说固定效应会放大测量误差带来的衰减偏误。因为组内变换去掉了个体均值里那部分信号剩下的变异中噪声占比更高信噪比下降衰减更严重。这也解释了为什么有些变量在混合回归里显著一转固定效应就变得不显著甚至反号。1.3 面板IV和横截面IV的本质差别把工具变量法搬到面板上不是简单地在命令里加个fe就完事。核心差别在于工具变量本身也要经过组内变换。变换之后的工具变量还剩多少变异直接决定了第一阶段的强度。如果某个工具变量在个体之间差异很大、但在时间上几乎不动组内变换之后它就被消得差不多了第一阶段会直接崩掉。另一个差别是标准误的层级。面板数据存在组内相关同一家企业不同年份的观测不独立所以必须用聚类稳健标准误聚类层级通常选个体。但聚类之后一些基于独立同方差假设的检验统计量就失效了最典型的是 Cragg-Donald 统计量这时候要换成 Kleibergen-Paap 版本。这个替换不是可选项是必须项后面会细说。2. 工具变量的挑选逻辑与论证链条工具变量法的全部说服力都压在两个条件上相关性和外生性。相关性可以检验外生性基本没法直接检验。这个不对称性决定了你在写作和汇报时必须把论证重心放在外生性上而很多人的做法恰恰相反——花大篇幅报告第一阶段F值对外生性一句话带过。2.1 相关性判断不能只盯第一阶段F值经验法则说第一阶段F值大于10就不算弱工具变量这个门槛来自 Stock-Yogo 的临界值表但它是针对特定设定单一内生变量、工具变量个数有限算出来的。实际使用时有两个陷阱。第一个陷阱是面板聚类后F值的含义变了。你在xtivreg2输出里看到的 Kleibergen-Paap rk Wald F 才是聚类稳健条件下应该报告的那个数普通的第一阶段F在存在组内相关时会高估工具变量的强度。第二个陷阱是工具变量个数。工具变量越多第一阶段F越容易做大但过度识别的代价是 Hansen J 检验的功效上升同时有限样本偏误也会变大。我个人的偏好是工具变量个数控制在内生变量个数的1.5到2倍之间能just-identified就just-identified多出来的那点信息量往往不值得。2.2 排他性约束的论证只能靠逻辑和稳健性排他性约束说的是工具变量只能通过内生变量这一个渠道影响被解释变量。这个条件在恰好识别时完全不可检验在过度识别时也只能通过 Hansen J 得到一个必要条件式的检验——不拒绝不等于成立只是没有足够证据推翻。所以论证必须落到具体机制上。举个例子如果你用同行业其他企业的某项投入均值作为工具变量你需要说清楚这个均值通过影响本企业的投入来影响本企业绩效除此之外没有别的路径。但同行均值很可能同时反映了行业景气度而行业景气度直接影响绩效这就构成了排他性违反。遇到这种情况要么控制行业与年份的交互固定效应要么换一个更外生的工具。2.3 面板场景下常见的工具变量构造思路常用的几类构造方式各有各的软肋我列个表对照一下。构造方式相关性来源主要风险适用条件内生变量的滞后项变量自身的持续性序列相关时滞后项仍与复合误差相关外生性不成立误差项无序列相关或使用差分GMM体系外部冲击的暴露度冲击与内生变量的关联冲击可能直接影响结果变量排他性存疑冲击足够外生且需控制冲击的直接效应同群/同行均值共同环境导致的同步变动反射问题与共同冲击排他性难论证群体划分合理且控制群体层面固定效应制度或地理特征的初始值历史因素影响当期变量初始值可能通过其他渠道长期影响结果需论证影响路径的唯一性关于滞后项这一行要特别强调。在固定效应框架下用 $x_{t-1}$ 作为 $x_t$ 的工具变量只有在误差项不存在序列相关时才是有效的。一旦误差项有一阶自相关$x_{t-1}$ 依然和复合误差相关工具变量直接失效。这是很多人踩过的坑而且从输出结果上完全看不出来因为第一阶段F值可能还很漂亮。3. STATA实操的完整命令链条理论讲完落到具体操作。这里的关键不是记住某一条命令而是搞清楚几条命令的分工以及一条命令里每个选项在干什么。3.1 数据准备与面板结构声明第一步永远是xtset。这步看起来简单但踩坑率极高。* 声明面板结构 xtset firm_id year * 检查面板结构是否合理 xtdescribextdescribe会告诉你面板是平衡还是非平衡每个个体的观测期数分布。如果发现有大量个体只有一两期观测而你的模型又需要滞后项这些个体在估计中会被自动丢掉最终样本和你以为的样本可能差很多。我一般会在跑模型前先做一个样本流失的核对表把每一步回归的观测数记下来避免最后出现换了工具变量样本量少了三成这种无法解释的情况。* 检查关键变量的缺失情况 misstable summarize y x1 x2 z1 z2 * 生成滞后项并检查 sort firm_id year by firm_id: gen L_x2 x2[_n-1]3.2 四个命令的分工STATA里能做面板IV的命令有好几个功能差异很大选错了会白费功夫。命令固定效应聚类稳健弱工具检验过度识别检验主要用途xtivreg支持支持无无基础估计做对比用xtivreg2支持支持KP rk Wald FHansen J主力命令检验齐全ivreghdfdf高维固定效应版支持多维支持同上同上需要多维固定效应时xtabond2差分/体系GMM支持部分Hansen J动态面板日常实证我基本只用xtivreg2因为它一次输出就把第一阶段、弱工具检验、过度识别检验全给了。多维固定效应比如企业、年份、行业年份交互场景下样本量大的时候会用带高维吸收的版本速度差距非常明显。xtivreg现在主要用来做对照看加了工具变量之后系数怎么变。安装这几个命令ssc install xtivreg2, replace ssc install ivreg2, replace ssc install ranktest, replace3.3 一条完整命令的逐项拆解假设x2是内生变量z1 z2是工具变量x1是外生控制变量。xtivreg2 y x1 (x2 z1 z2), fe cluster(firm_id) first savefirst savefprefix(first_)逐项说明。y x1是外生部分包括被解释变量和所有外生控制变量这里千万别把内生变量也写进去否则命令会报错或者给出错误的估计。括号里(x2 z1 z2)声明内生变量和对应的工具变量。fe表示组内变换也就是固定效应。cluster(firm_id)指定聚类层级这里按个体聚类如果你的处理变量是在行业层面变动的聚类也应该上提到行业层面否则标准误会偏小。first让输出包含第一阶段回归结果。savefirst和savefprefix()把第一阶段结果存起来方便后面做检验。如果需要控制年份固定效应直接加虚拟变量或者用因子变量写法xtivreg2 y x1 i.year (x2 z1 z2), fe cluster(firm_id) first注意这里有个细节i.year加在fe框架下年份虚拟变量本身是外生的放在外生部分没问题。但如果你把年份虚拟变量放到工具变量那一侧命令会提示共线性或者直接剔除因为它们已经被固定效应部分吸收了。3.4 输出结果的三块关键内容跑完之后输出很长但真正要看的就是三块。第一块是主回归的系数表。这里除了系数和标准误要特别注意最下面一行显示的观测数和工具变量个数。观测数如果比你预期的少八成是被固定效应或者缺失值吃掉了。第二块是弱工具变量检验。输出里会同时给出 Cragg-Donald 和 Kleibergen-Paap 两套统计量聚类稳健条件下只认后者。如果只看到 CD 没看到 KP说明聚类选项没生效或者命令版本有问题。第三块是过度识别检验。Hansen J 的 p 值会直接打出来自由度等于工具变量个数减去内生变量个数。恰好识别时这一项不会出现因为没有可检验的约束。4. 弱工具变量面板IV最容易翻车的地方弱工具变量是面板IV里最隐蔽的问题。它不会让命令报错也不会让系数看起来异常但会让你的估计量产生严重偏误而且这种偏误是系统性的——它偏向于原来的OLS估计也就是说你会得到一个看起来合理、实际上没什么信息量的结果。4.1 第一阶段F值的门槛该怎么用Stock-Yogo 的临界值表给出的是最大IV相对偏误和最大检验水平扭曲两套标准常用的 10% 门槛对应的临界值大约是 16.38单一内生变量、工具变量个数较少的情形但很多人只记得大于10这是个简化后的经验值。实际判断时我建议分三档F 小于 10明确是弱工具变量结果不能作为主要结论F 在 10 到 20 之间属于灰色地带需要在稳健性部分补充弱工具稳健的推断方法F 大于 20基本可以放心。但即便 F 很大也不代表工具变量外生这是两码事。面板场景下还要看一个东西组内变换之后工具变量的残余变异。可以通过手工回归检查* 手工做第一阶段看变换后的拟合情况 xtreg x2 z1 z2 x1 i.year, fe predict x2_hat, xb xtreg y x1 i.year, fe如果第一阶段的 $R^2$ 在组内变换后低得离谱比如低于 0.05即使 F 值尚可也要警惕——这说明工具变量解释的变异非常有限估计结果对样本扰动会很敏感。4.2 Cragg-Donald 与 Kleibergen-Paap 的选择这两个统计量的核心区别在于假设。Cragg-Donald 假设误差项独立同分布、同方差在这个假设下它服从已知分布可以直接查表。Kleibergen-Paap 是它的稳健版本不依赖这些假设在异方差和聚类相关下依然有效。面板数据几乎不可能满足独立同方差假设所以聚类标准误下必须报告 KP 统计量。输出里你会看到两行CD 那一行的数值通常更大看起来更安全但它是错的。这一点在汇报时一定要明确写清楚用的是哪个。* 输出中定位关键统计量 xtivreg2 y x1 (x2 z1 z2), fe cluster(firm_id) first * 关注输出中的 * Kleibergen-Paap rk Wald F statistic * Hansen J statistic4.3 弱工具变量的补救路径发现工具变量弱了怎么办我按优先级排一下。第一优先是换工具变量或增加有效工具变量。这是最根本的解决办法但前提是新增的工具变量本身要能通过外生性论证不能为了做强第一阶段随便凑数。第二优先是减少工具变量个数。听起来反直觉但工具变量越多有限样本偏误越大而且过度识别检验的功效被推高容易出现Hansen J 拒绝但不知道哪个工具变量有问题的僵局。把一组弱工具变量换成单个强工具变量往往效果更好。第三优先是改用对弱工具变量稳健的推断方法。Anderson-Rubin 检验在弱工具变量下依然有正确的水平虽然它检验的是联合假设、置信区间可能偏宽但至少结论可信。* 弱工具稳健的AR检验部分版本支持 ivreg2 y x1 (x2 z1 z2), robust * 查看输出中的 Anderson-Rubin Wald test第四是考虑有限信息最大似然估计。LIML 在弱工具变量下的偏误表现比 2SLS 好中位数无偏性更好代价是方差略大。在工具变量刚好偏弱的时候报告 LIML 结果作为稳健性是很常见的做法。5. 过度识别检验与内生性检验的正确读法这两个检验最容易被误用因为它们都涉及p值大于0.05这种表述而拒绝和不拒绝的含义完全不同。5.1 Hansen J 检验拒绝才说明问题不拒绝什么也不说明Hansen J 的原假设是所有工具变量都外生。这意味着什么呢p值小于0.05你有证据说至少有一个工具变量不满足排他性约束模型设定有问题必须回头检查。p值大于0.05你只能说没有足够证据推翻外生性不能说工具变量是外生的。这个差别在汇报时非常重要。我见过不少稿件写过度识别检验p值为0.35说明工具变量外生这是逻辑错误。正确的表述是未能拒绝工具变量外生的原假设。还有几个使用条件要注意。Hansen J 要求工具变量个数严格大于内生变量个数恰好识别时没有这个检验。它的自由度是工具变量数减内生变量数工具变量越多自由度越大检验功效越高但也越容易因为一个坏工具变量而整体被拒。另外Hansen J 在聚类稳健下有效Sargan 检验则需要同方差假设面板场景下应该报 Hansen 而不是 Sargan。* Hansen J 会随 xtivreg2 输出自动报告 * 手工提取可以用 xtivreg2 y x1 (x2 z1 z2 z3), fe cluster(firm_id) * 输出中Hansen J statistic (overidentification test of all instruments)5.2 DWH检验在面板里的实现与解读Durbin-Wu-Hausman 检验的原假设是内生变量实际上是外生的。如果 p 值大说明 OLS 和 IV 的估计结果没有系统性差异直接用 OLS 就够了如果 p 值小说明确实存在内生性需要用 IV。在xtivreg2跑完之后可以直接调用xtivreg2 y x1 (x2 z1 z2), fe cluster(firm_id) estat endog这个命令给出的就是 DWH 类的检验结果。但要注意这个检验的结论依赖于工具变量的有效性——如果工具变量本身是弱的或者不外生DWH 检验的结论也不可信。所以检验顺序应该是先看弱工具变量再看过度识别最后看内生性检验顺序反了容易得出误导性结论。另一个常见的手工做法是把第一阶段残差放进原方程xtreg x2 z1 z2 x1 i.year, fe predict resid_x2, e xtreg y x1 x2 resid_x2 i.year, fe, cluster(firm_id) * resid_x2 的显著性就是内生性检验的结果这个做法很直观残差项显著说明存在内生性。但它和标准的 DWH 检验在有限样本下不完全等价汇报时最好用标准命令的结果。5.3 当几个检验结论互相矛盾时怎么办这是实际研究里最常见的情况我给你一个我自己的判断顺序。如果 DWH 不拒绝认为没有内生性但理论上内生性明显存在我倾向于仍然报告 IV 结果同时把 OLS 结果作为对照。理由很简单DWH 检验的功效有限不拒绝可能只是样本不够大。理论上有内生性、统计上没检出来这种情况报告 IV 更稳妥。如果 Hansen J 拒绝但 KP F 很大说明工具变量强度够但排他性有问题必须逐个排查工具变量通常是某个工具变量和误差项通过共同因素相关。做法是逐个剔除工具变量重跑看是哪一个导致拒绝。如果 KP F 很小同时 Hansen J 也拒绝基本说明整个工具变量设定不成立需要重新设计没有补救的余地。6. 几个必踩的坑和它们的排查路径这部分是纯经验文档里基本不会写但每一个都能让人卡半天。6.1 聚类层级选错导致标准误失真聚类层级应该和处理变量的变动层级匹配。如果核心解释变量在企业层面变动按企业聚类如果在行业-年份层面变动要上提到行业层面聚类或者至少在企业层面聚类后做进一步修正。按企业聚类而处理变量在行业层面变动会导致标准误严重低估t值虚高。我遇到过一个典型案例某研究用省级数据做处理但按个体聚类结果 t 值全部在 3 以上换成按省份聚类之后大部分掉到 1.5 以下。这种问题从输出结果本身看不出来只能靠对数据结构的设计逻辑来判断。聚类层级确定之后还要注意聚类数不能太少一般建议至少 30 到 50 个聚类单元太少的话聚类稳健标准误本身也不可靠需要考虑 wild bootstrap 之类的替代方案。6.2 工具变量被固定效应吸收这个坑特别隐蔽。你精心构造的工具变量跑完之后发现第一阶段输出里它被标了 dropped或者系数是缺失的。原因通常是这个工具变量在组内变换之后几乎是常数。诊断方法很简单* 检查工具变量在组内的变异程度 bysort firm_id: egen sd_z1 sd(z1) summarize sd_z1, detail如果大量个体的sd_z1接近零说明这个工具变量在时间维度上几乎不动组内变换后没有信息量。解决办法要么是换一个时变的工具变量要么改用随机效应框架但随机效应需要个体效应与解释变量不相关的假设通常不成立要么承认固定效应和方法本身不兼容。6.3 样本量在多次回归间不一致这个问题在做稳健性检验时特别致命。你跑了基准回归、换工具变量、换聚类层级、加控制变量每次样本量都在变结论的可比性就没了。最常见的原因是工具变量的缺失值——如果z1在部分年份缺失那么包含z1的回归就会丢掉这些观测而不用z1的回归不会丢。解决办法是在开始所有回归之前先确定一个统一样本* 用所有回归需要的最严格条件确定样本 gen sample_flag !missing(y, x1, x2, z1, z2) bysort firm_id: egen all_ok min(sample_flag) keep if all_ok 1这样后续所有回归都在同一个样本上跑观测数完全一致系数变化才能归因于模型设定而不是样本变动。代价是可能损失一些观测但换来的是结果的可解释性我觉得很值。6.4 动态面板的额外注意事项如果你的模型里包含滞后因变量那么固定效应本身就引入了偏误这时候标准的面板IV框架不够用需要转到差分GMM或体系GMM。体系GMM的有效性依赖两个条件差分方程的工具变量有效Hansen J 检验以及体系GMM额外的水平方程工具变量有效差分Hansen 检验。两个检验都要看只看 Hansen J 是不够的。另外工具变量个数膨胀是 GMM 的顽疾。工具变量个数超过个体数的时候Hansen J 会失效标准误向下偏。经验做法是控制工具变量个数不超过个体数的三分之一或者用 collapse 选项压缩工具变量矩阵。xtabond2 y L.y x1 x2, gmm(L.y x2, lag(2 3) collapse) iv(x1 i.year) /// robust twostep small * 输出中关注Hansen检验、AR(1)、AR(2)、工具变量个数与个体数之比AR(2) 检验必须不显著否则差分方程的工具变量无效整个估计体系崩塌。这一条是体系GMM的硬性前提比 Hansen J 还重要。做好面板IV这件事功夫其实大半在命令之外——想清楚内生性从哪来把工具变量的论证写扎实把样本和聚类层级这些基础设定定死剩下的才是跑命令和读输出。命令层面我最大的体会是别迷信单一指标第一阶段F值、过度识别检验、内生性检验要一起看互相矛盾时优先相信理论逻辑而不是统计结果。另外正式跑模型前先用手工第一阶段和简单的xtreg把数据结构摸一遍比直接上xtivreg2然后对着一屏输出发懵要高效得多。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询