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.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add brycewang-stanford/Awesome-Journal-Skills --skill er-robustness --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Er Robustness?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/brycewang-stanford-er-robustness)More formats (shields.io, HTML) on the badges page.
---
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 张图表,以投稿当期官网为准),不要喧宾夺主
## 执行桥(StatsPAI / Stata MCP)
把稳健性 battery **跑出来**,而不是只罗列。完整映射见
[`execution-with-mcp`](../../../shared-resources/empirical-methods/execution-with-mcp.md)。《经济研究》是中文经济学顶刊,识别可信度通常是约束;交错 DID、弱工具稳健 IV、RDD 与机制检验。
- **多结果 / 多设定:**`romano_wolf`(逐步 FWER)或 `benjamini_hochberg`,报告校正后阈值。
- **遗漏变量敏感性:**`oster_delta` / `sensemakr`。
- **推断:**少聚类用 `wild_cluster_bootstrap`;视依赖结构用 `twoway_cluster` / `conley`。
- **从一个 handle 复跑:**`audit_result(result_id)` 列出缺失检查及对应 `suggest_function`。
- **出表:**`etable` / `did_summary_to_latex` 直接从 handle 生成,不手抄数字。
正文留决定性检查,详尽 battery 进附录。执行链见 [JF 执行 walkthrough](../../../Journal-of-Finance-Skills/resources/worked-examples/02-execution-walkthrough.md)。
## 必查清单
- [ ] 遗漏变量 / 内生性类:至少一项(更换识别或 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
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!