---
name: er-robustness
description: Use when building or writing the robustness-check section of an Economic-Research manuscript — organizes checks by the identification threat each one answers, not as an undifferentiated pile.
---

# 稳健性检验体系（er-robustness）

## 触发时机

- 主回归已定稿，准备补稳健性，但只想到"换控制变量""缩尾"几招
- 审稿人质疑识别（遗漏变量 / 测量误差 / 样本选择），不知道该补哪类检验
- 已堆了一大堆稳健性表，但都没正面回应审稿人最担心的那个威胁
- 把异质性 / 机制误当稳健性写进了"稳健性检验"小节
- DID 文章只画了一张事件研究图，安慰剂只跑了一次

## 核心区分：稳健性不是机制也不是异质性

| 类型 | 回答的问题 | 操作 |
|---|---|---|
| **基准结果** | 主效应是什么 | 主回归 |
| **稳健性** | 换个方式做主回归，结论变不变 | 同一个 Y、同一个核心解释变量，改度量 / 样本 / 方法 |
| **机制** | 为什么有这个效应 | 换中介变量做被解释变量 |
| **异质性** | 在什么条件下效应更强 | 分组 / 交互 |

判定法则：**稳健性检验的结论句永远是"核心结论不变"。** 如果一段话的结论是"在 A 组更强""通过 M 起作用"，它就不是稳健性，挪到 er-mechanism / er-heterogeneity。

## 稳健性检验分类与清单（按识别威胁组织）

### 威胁 1：遗漏变量 / 内生性

- 更换识别策略（OLS → IV / DID / RDD，见 er-identification）
- 工具变量 / Bartik 工具，报告第一阶段 F
- 逐步加入更高维固定效应（个体×年份、行业×年份、地区×年份）与更多控制变量，看系数稳定性
- **Oster (2019) δ 与 β 边界**（`psacalc` / `oster_bounds`）：在"观测变量解释力强、担心不可观测选择"时报告 δ（处理效应归零所需的不可观测/可观测选择比）与受限 β 边界。δ > 1 是常用门槛（Altonji, Elder & Taber, 2005 的思想）
- 安慰剂检验（见下方专节）

### 威胁 2：测量误差 / 变量定义

- 替换核心被解释变量（如 TFP 的 OP / LP / ACF 不同算法）
- 替换核心解释变量的度量（连续 vs. 离散、不同阈值、不同数据源）
- 不同指标构造方式（主成分 vs. 熵权 vs. 简单加总）

### 威胁 3：样本选择

- 剔除特殊样本：直辖市、金融业、ST/*ST、IPO 当年、极端规模
- 不同时间窗（剔除危机年份 / 政策预热期 / 疫情年）
- PSM 后再估（共同支撑域内重做主回归）
- Heckman 两步法（存在自选择进入时）

### 威胁 4：估计方法 / 标准误

- 更换聚类层次（个体 → 行业 / 地区 / 处理层级）
- 双向聚类（个体 + 时间）
- Bootstrap 标准误
- **少聚类（cluster 数 < ~40）时用 wild cluster bootstrap**（`boottest` / `wild_cluster_bootstrap`）
- winsorize / 缩尾比例敏感性（1% vs. 5% vs. 不缩尾）

### 威胁 5：功能形式

- 加入核心变量二次项 / 检验非线性（U 型、倒 U 型）
- 分位数回归（效应在分布不同位置是否一致）
- 对数 vs. 水平、不同标准化

### DID 专属稳健性

- **平行趋势事件研究图**（前期系数不显著、置信区间包含 0）
- **安慰剂**：随机化处理时点 / 处理对象，跑 500–1000 次，画估计系数分布图，看真实系数是否落在尾部
- 排除同期政策干扰（控制其他在窗口内生效的政策虚拟变量）
- 异质性稳健估计量（`csdid` Callaway-Sant'Anna / `did_imputation` Borusyak 等）替换 TWFE
- 改变处理组定义（不同的处理强度阈值 / 剔除边缘处理单位）

## 安慰剂检验的两种类型

**(a) 随机化处理**——伪造处理组或处理时点，重复 500–1000 次，主张"如果效应是真实政策造成的，随机安慰剂应得到围绕 0 的系数分布，真实系数应是离群值"。

**(b) 伪造结果变量**——把不该被政策影响的 Y 当被解释变量跑主回归，主张"如果效应是机制驱动而非数据噪声，安慰剂 Y 上应无显著效应"。

安慰剂写作模板：

```
为排除[不可观测因素 / 偶然性]驱动结果的可能，本文进行安慰剂检验。
本文随机抽取[处理组 / 处理时点]并重复 N 次估计，图 X 报告 N 次估计的系数（核密度）分布。
结果显示，安慰剂系数集中分布于 0 附近，而本文真实估计值（垂直虚线）位于分布尾部，
表明基准结果并非由随机因素或遗漏变量驱动。
```

## 写作模板（每个稳健性检验一段，固定结构）

```
为回应[某识别威胁]，本文[具体做法：替换/剔除/更换/加入……]。
结果见表 X，核心解释变量系数为 [数值]，[在 X% 水平显著]，
与基准回归相比方向一致、量级相近（基准为 Y），核心结论不变。
```

要点：**每段都要报量级**，明说"与基准的 Y 相比量级相近"，而不是含糊地说"结果依然显著"。

## 稳健性检验的"度"

- 不是越多越好。正文聚焦回应**审稿人最可能质疑的 2–4 个识别威胁**
- 正文留最关键的检验（通常：更换识别 / 安慰剂 / 替换核心变量 / Oster 边界）
- 次要检验（缩尾比例、聚类层次、剔除子样本逐项）放附录，正文一句话索引
- 正文稳健性表数有限（经验值约 3–5 张图表，以投稿当期官网为准），不要喧宾夺主

## 必查清单

- [ ] 遗漏变量 / 内生性类：至少一项（更换识别或 IV 或加固定效应+控制）已做
- [ ] 测量误差类：核心被解释变量、核心解释变量度量各替换过
- [ ] 样本选择类：剔除特殊样本 / 不同时间窗 / PSM 至少一项
- [ ] 估计方法类：更换聚类层次或 winsorize 敏感性已做；少聚类时用了 wild cluster bootstrap
- [ ] 安慰剂检验已做，且为分布形式（500–1000 次），不是单次
- [ ] 观测变量选择问题严重时，报告了 Oster δ 与 β 边界（δ > 1）
- [ ] DID：事件研究平行趋势 + 异质性稳健估计量替换 TWFE 都做了
- [ ] 每个稳健性段落都报告了与主回归一致的**量级**（不只是显著性）
- [ ] 没有把机制 / 异质性贴标签当稳健性

## 反模式

- 稳健性检验堆一大摞，但没有一个正面回应核心识别威胁
- 把机制分析 / 异质性分析贴上"稳健性"标签充数
- 安慰剂只随机一次就下结论，不画系数分布
- 缩尾比例或子样本一变结论就翻，却不讨论、悄悄选有利的那版报告
- 只写"加入控制变量后结果依然显著"，从不看系数方向与量级
- 报了 Oster δ < 1 还宣称稳健（δ < 1 意味着合理的不可观测选择即可推翻结果）
- 用 TWFE 做 staggered DID 的稳健性，却不换 Callaway-Sant'Anna 类估计量

## 输出格式

```
【已回应的识别威胁】[遗漏变量 / 测量误差 / 样本选择 / 估计方法 / 功能形式]
【正文稳健性检验】[更换识别, 安慰剂分布, 替换核心 Y, Oster 边界, ...]
【附录稳健性检验】[缩尾敏感性, 聚类层次, 剔除子样本, ...]
【安慰剂类型】随机化处理 / 伪造结果变量 / 两者
【Oster δ】[数值，若适用]
【量级一致性】每段是否都报了与基准的量级对比：是 / 否
【下一步】er-tables-figures
```
