内生性处理是什么?
内生性处理回答的是核心解释变量 X 是否可能和误差项相关。如果 X 受到反向因果、遗漏变量或测量误差影响,普通 OLS 的系数就不能直接解释为因果效应。
先用一句话理解
把内生性想成 X 和看不见的因素缠在一起。你以为 X 在影响 Y,但可能是 Y 反过来影响 X,或者某个没放进模型的因素同时推着 X 和 Y。
什么时候用
| 判断项 | 教科书式判断 |
|---|---|
| 适合用在 | 核心变量存在反向因果、遗漏变量、测量误差或选择偏误风险。 |
| 先不要用在 | 没有清楚的内生性来源,只是为了让论文看起来高级。 |
| 最关键的前提 | 工具变量或识别策略必须同时说明相关性和外生性。 |
| 读表顺序 | 先看内生性来源,再看工具变量第一阶段和第二阶段。 |
| 论文表述边界 | 工具变量结果只能在工具变量假设可信时解释为因果。 |
把它和相近方法分清楚
| 容易混淆的对象 | 怎么区分 | 初学者记法 |
|---|---|---|
| 控制变量 | 控制可观察混杂。 | 不能处理不可观察且与 X 相关的误差。 |
| 固定效应 | 控制不随时间变化的不可观察因素。 | 不能处理随时间变化的内生性。 |
| 工具变量 | 用外生变动识别 X 的因果部分。 | 需要相关性和排除限制。 |
核心直觉和模型公式
两阶段最小二乘
工具变量常见两阶段结构为:
\[X_{it}=\pi Z_{it}+\boldsymbol{\delta}'\mathbf{W}_{it}+FE+v_{it}\]
\[Y_{it}=\beta \widehat{X}_{it}+\boldsymbol{\gamma}'\mathbf{W}_{it}+FE+\varepsilon_{it}\]
第一阶段用工具变量 Z 解释 X,第二阶段只使用 X 中由 Z 带来的外生部分。
公式里的符号怎么读
| 符号 | 含义 | 在本页怎么理解 |
|---|---|---|
| X | 内生解释变量 | 可能与误差项相关的核心变量。 |
| Z | 工具变量 | 影响 X,但不应直接影响 Y。 |
| π | 第一阶段相关性 | Z 是否足够解释 X。 |
| X_hat | 预测的 X | 由工具变量解释出的 X 的外生部分。 |
| β | IV 估计效应 | 在工具变量假设下的局部因果效应。 |
专业使用口径
专业内生性处理的重点是识别逻辑,不是简单把 OLS 换成 IV。
| 口径 | 专业写法 |
|---|---|
| 内生性来源 | 明确是反向因果、遗漏变量、测量误差还是选择偏误。 |
| 相关性 | 第一阶段要有足够解释力。 |
| 外生性 | 论证 Z 不直接影响 Y,也不通过其他路径影响 Y。 |
| 弱工具诊断 | 报告第一阶段、弱 IV 或 Anderson-Rubin 等诊断。 |
一步一步做:从问题到结果的五步
| 步骤 | 这一页具体做什么 | 做到什么程度才算读懂 |
|---|---|---|
| 1. 写出内生性风险 | 说明 OLS 为什么可能有偏。 | 不能只说存在内生性。 |
| 2. 提出识别策略 | 工具变量、准实验或其他外生冲击。 | 策略要对应风险来源。 |
| 3. 检查第一阶段 | Z 是否显著解释 X,强度是否足够。 | 弱工具会让 IV 推断失真。 |
| 4. 估计第二阶段 | 用 X_hat 解释 Y。 | 解释的是工具变量诱导的变化。 |
| 5. 做诊断和边界 | 过识别、弱 IV、稳健性和理论排除限制。 | 诊断不过要保守表述。 |
结果怎么读:先读口径,再读数字
本页案例读表时,先记住这个口径:endogeneity = diagnostic_skipped;'y'。
| 读表顺序 | 本页怎么读 | 不要这样读 |
|---|---|---|
| 先看内生性叙述 | 风险来源是否具体。 | 泛泛而谈不够。 |
| 再看第一阶段 | 工具变量是否相关。 | 第一阶段弱时第二阶段不可靠。 |
| 然后看第二阶段 | 核心效应方向和量级。 | 不能脱离工具变量解释范围。 |
| 最后看诊断 | 弱 IV、过识别和稳健性是否支持。 | 只看第二阶段星号不够。 |
初学者最容易错在哪里
| 误读 | 为什么错 |
|---|---|
| 只说有内生性,不说来源 | 错。风险必须具体。 |
| 工具变量只讲相关性 | 不够。外生性更难也更关键。 |
| 弱工具仍强解释 | 错。弱 IV 下常规推断可能失真。 |
| 把 IV 结果当全样本平均效应 | 风险很高。IV 通常是局部平均处理效应。 |
先看这个案例的结论
- endogeneity = diagnostic_skipped;'y'。
- 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。
变量要求和案例口径
| 字段 | 口径 |
|---|---|
| 数据 | CSMAR 风格 A 股企业创新面板 |
| 原始样本 | 196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准 |
| 因变量 | patent_count;回归页通常使用 ln(1 + patent_count) |
| 核心解释变量 | dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index |
| 控制变量 | roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age |
| 输出文件 | endogeneity_iv.csv |
| 角色要求 | 因变量、核心解释变量 |
| 依赖包 | 无额外 Stata 社区包要求 |
实际代码
下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。
import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year
global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0
ivregress 2sls $y $controls i.year ($x = L.$x), vce(cluster firm_id)
estat firststage
export delimited using "$JOB_DIR/endogeneity_iv.csv", replace
实际输出表
这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。
| method | status | reason | N |
|---|---|---|---|
| endogeneity | diagnostic_skipped | 'y' | 96 |
案例图
这是一张由同一份案例数据生成的页面内诊断图。

论文里怎么写
为缓解模型设定或内生性担忧,本文补充报告内生性处理。相关估计输出见 endogeneity_iv.csv。该检验不替代研究设计本身,但可以说明核心结论在替代识别、标准误或稳健性口径下是否保持一致。
检查清单
- 工具变量必须同时满足相关性和外生性;第一阶段强不代表外生性成立。
- 报告第一阶段、弱工具诊断和第二阶段,不能只贴 2SLS 主结果。
- 如果 IV 结果和 OLS 差异很大,要解释 LATE、样本和工具变量来源。