er-robustness
GitHub用于构建经济学论文稳健性检验章节,按识别威胁分类组织内容。区分稳健性与机制/异质性,提供遗漏变量、测量误差等五大类检查清单及安慰剂检验模板,指导高效回应审稿人质疑。
Trigger Scenarios
Install
npx skills add brycewang-stanford/Awesome-Journal-Skills --skill er-robustness -g -y
SKILL.md
Frontmatter
{
"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 次,画估计系数分布图,看真实系数是否落在尾部
- 排除同期政策干扰(控制其他在窗口内生效的政策虚拟变量)
- 异质性稳健估计量(
csdidCallaway-Sant'Anna /did_imputationBorusyak 等)替换 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。《经济研究》是中文经济学顶刊,识别可信度通常是约束;交错 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。
必查清单
- 遗漏变量 / 内生性类:至少一项(更换识别或 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
Version History
- 1839142 Current 2026-07-05 12:54


