顶刊实证方法地图与真实复现工作流
The EJD Method Map & Replication Workflow
Ulm 大学 Sebastian Kranz 维护的 EJD(Empirical Journal Articles)库把约 1.1 万篇顶刊论文连同数据与代码一并归档。本页用真实抓取统计画出"方法地图"——顶刊到底用什么期刊、什么语言、什么识别策略发文;再用两篇 2025 年 AEJ:Policy 真实复现包,演示"验证前人结论稳健性"的标准操作。它是本站实证组的导航图与工程范式。
A EJD 方法地图:顶刊到底用什么方法发文
EJD 库(Empirical Journal Articles,由 Ulm 大学 Sebastian Kranz 维护)长期收录 AER、QJE、JPE、REStat、AEJ 系列、Management Science、Econometrica 等顶刊的实证论文,并把作者公开的数据 + 代码一并归档。下面所有数字均来自对该库全量条目的抓取:库规模 11,470 篇,覆盖 2005–2025 二十年,其中 97.8% 的条目附带可下载的数据文件——这是它区别于普通论文库的核心价值:你看到的不只是题目,还有能跑的代码。
A.1 期刊分布:钱与注意力流向哪里
下图按论文数排序。可以看到 AER 一枝独秀(约 2000 篇),Management Science、REStat、REStud 构成第二梯队;AEJ 三大刊(Policy / Applied / Macro / Micro)合计已超过 2,400 篇,是近年"中型顶刊"里最活跃、且数据代码开放度最高的阵地。对学生而言,AEJ 系列复现包友好度最高——这正是本页 B 部分两个案例都选自 AEJ:Policy 的原因。
A.2 代码语言分布:Stata 仍是实证事实标准
把所有复现代件按语言归类,Stata(.do + .ado)合计超过 7,300 篇次,是绝对主力;MATLAB(结构估计 / 校准 / 宏观模型常用)约 2,300 篇居次;R 与 Python 合计约 1,450 篇,增长最快但仍非主流;Julia 仍处早期。这一分布告诉你:想复现绝大多数顶刊,先把 Stata 练熟,边际收益最大;做结构估计再补 MATLAB,做文本 / ML 再补 Python。
A.3 方法分布:从摘要关键词看识别策略
对全部论文摘要做方法关键词命中统计(一篇论文可命中多个方法,故合计大于总篇数)。随机实验 / RCT 遥遥领先(约 700 篇),反映近年"实验革命";面板固定效应(330)、DID(231)、RDD(201)、IV(196)构成准实验四件套;bunching、合成控制、空间、placebo/多重检验等更细的方法命中数较小但都已稳定出现在顶刊。
A.4 每个方法的真实代表论文
下面挑出每个方法在 EJD 库中可下载、可复现的真实代表条目。作者、期刊、卷期、年份均已按 AEA / UCPress 官方信息核验;凡标"数据大小 / 代码语言"者均为 EJD 复现包元数据。
| 方法 | 代表论文(题名 / 期刊 / 年份) | 复现包特征 |
|---|---|---|
| DID | Li, Song, Zhang & Zhang, "The Effects of a Multifaceted Poverty Alleviation Program on Rural Income and Household Behavior in China", AEJ: Economic Policy, 17(2), 2025, pp.319–357 | 县级 DID + CFPS 户政;数据约 35.8MB,Stata .do 约 186KB |
| RDD | Management Science 2025 一篇断点回归复现包(EJD 收录条目,以期刊 / 年份 / 语言检索 RDD 关键词可得) | Stata .do;含 RD 图与带宽敏感性表 |
| 合成控制 SCM | Kumar & Liang, "Labor Market Effects of Credit Constraints: Evidence from a Natural Experiment", AEJ: Economic Policy, 16(3), 2024, pp.1–26 | 州级合成控制 + ML 改进权重;Stata / MATLAB |
| 结构估计 | De Groote, "Dynamic Effort Choice in High School: Costs and Benefits of an Academic Track", Journal of Labor Economics, 43(2), 2025, pp.467–502 | 动态离散选择(MLE),MATLAB;弗拉芒学生追踪数据 |
| 机器学习 | Ash, Galletta & Giommoni, "A Machine Learning Approach to Analyze and Support Anticorruption Policy", AEJ: Economic Policy, 17(2), 2025, pp.162–193 | 文本/监督学习检测腐败;Python + R |
| RCT | Kessler & Roth, "Increasing Organ Donor Registration as a Means to Increase Transplantation: An Experiment with Actual Organ Donor Registrations", AEJ: Economic Policy, 17(2), 2025, pp.60–83 | "field-in-the-lab"随机实验 + 州级注册数据;Stata .do 约 84.8KB |
不要按"方法名词"去学,要按"你手上有什么数据 → 它落在哪个方法格子 → 该格子里顶刊怎么写、怎么复现"来学。比如你有中国县级面板 + 一个 2012 年开始的政策,你就在 DID / 面板固定效应那两个格子里,直接去 EJD 搜本页表中的 Li et al. (2025) 复现包照着做。
B 真实复现工作流:两个完整案例
下面两个案例都来自 2025 年 AEJ:Economic Policy 同一期(Vol.17 No.2),是 EJD 库里数据与代码开放度最高的一类。它们恰好覆盖两种最典型的工程结构:案例一是"多源中文数据 + 受限数据 + 手工图"的复杂 DID;案例二是"单 master.do 一键跑全部图表"的干净 RCT + 合成控制。
B.1 案例一:中国扶贫 DID(Li, Song, Zhang & Zhang, 2025)
① 真实中文数据来源清单
这类中国县域研究的"硬资产"是把多源中文数据拼成一张面板。复现时必须逐源核对口径、年份、县级行政区划调整:
- CFPS 2010–2018(中国家庭追踪调查,北京大学开放研究数据平台):户层面收入、消费、行为变量,是 household 分析部分的核心。
- World Bank Open Data:国家级贫困率、人口等宏观对照序列。
- WITS / TRAINS:中国出口关税 MFN 税率,用于构造县级对外暴露控制变量。
- 《中国农村贫困监测报告 2020》(CNKI / 国家统计局):重点县名单与贫困监测口径。
- 《中国农村统计年鉴》2008–2021:县级农业产值、耕地、农业人口等。
- WIND(受限数据):县级财政、信贷等金融变量——受限,需凭机构授权访问。
- 第六次全国人口普查 2010:县级人口结构、城乡比。
- 县级 / 省级统计年鉴:财政、教育、卫生等县级协变量。
② 复现包工程规范:Raw/ → Data/ 双层目录 + 输出溯源
该复现包的精髓在于每个中间 / 输出文件都标注它服务正文哪张表哪张图,让审阅者能从最终表反推到原始数据。这是"可审阅论证"的工程化。
poverty_alleviation_replication/
├── Raw/ # 只读原始下载(CFPS csv、年鉴扫描表、WIND导出)
│ ├── cfps_2010_2018/
│ ├── yearbook_rural_*.csv
│ └── wind_restricted/ # 受限数据,不入版本库,仅本地
├── Data/ # 清洗后中间/分析数据,可由代码重生成
│ ├── county_panel.dta # 县级面板(服务 Tables 1,3,9 & Figures 4,5,A4)
│ ├── household_cfps.dta # 户级(服务 Tables 5-8)
│ └── county_baseline.dta # 基线(服务 Tables 1,3,9 & Figures 4,5,A4)
├── Code/
│ ├── clean_raw.do # Raw -> Data(每步 count 记 N)
│ ├── Table_Do.do # 行号映射:Table 1 = 26-54行 -> Table1.csv
│ └── Figure_Do.do
└── Output/
├── Tables/ Table1.csv ... Table9.csv
├── Figures/ Figure2_arcgis.png(手工) Figure3_ppt.png(手工)
└── logs/ wind_restricted.smcl + wind_restricted.png
③ 行号映射:Table_Do.do 第 26–54 行 → Table1.csv
规范的复现包会在 do 文件里用注释标出"这一段对应正文哪张表"。复现者据此核对:打开 Table_Do.do,定位到第 26–54 行,跑出来的就是正文 Table 1;第 26 行附近是 eststo 收集各列,第 54 行附近是 esttab using .../Table1.csv。
*==============================================================
* Table_Do.do —— 每段注释标注服务正文哪张表
*==============================================================
use "$root/Data/county_baseline.dta", clear
xtset county_id year
*----- Table 1:描述性统计(重点县 vs 非重点县) -----
* [行号 26-54] -> Output/Tables/Table1.csv
eststo clear
estpost summarize rural_income ln_agr_output urban_share ///
if treat==1, detail
esttab using "$root/Output/Tables/Table1.csv", replace ///
cells("mean(fmt(3)) sd(fmt(3)) min max") ///
title("Table 1: Summary Statistics, Treated Counties")
*----- Table 3:DID 主回归(县级,双向固定效应) -----
* [行号 60-95] -> Output/Tables/Table3.csv
eststo clear
eststo m1: reghdfe ln_rural_income post_treat $covars, ///
absorb(county_id year) vce(cluster county_id)
eststo m2: reghdfe ln_rural_income post_treat $covars, ///
absorb(county_id year province#year) vce(cluster county_id)
esttab m1 m2 using "$root/Output/Tables/Table3.csv", replace ///
se star(* 0.1 ** 0.05 *** 0.01)
*----- Table 9:机制异质性(比较优势) -----
* [行号 102-140] -> Output/Tables/Table9.csv
④ 受限数据与手工图:区分"可自动"与"需手工"
这类论文有两个复现陷阱,必须提前知道:
- 受限数据(WIND):作者无法把原始数据放进复现包。规范做法是提供一份
wind_restricted.smcl日志 + 导出 PNG,证明"如果你有 WIND 授权,跑这几行就能复现该县级金融变量"。复现者没有授权时,这部分只能核对日志,不能重跑数字。 - 手工图:Figure 2 需要在 ArcGIS 里手工分级设色县级地图(地理 shapefile + 处理标签),Stata 无法一键出图;Figure 3 是 PowerPoint 手工拼的事件研究示意图。复现包会给出"数据已算好、请手工排版"的说明——不要指望 master.do 自动生成这两张。
(1) 县级行政区划调整:2008–2021 年间撤县设区、县界合并频繁,CFPS / 年鉴 / 普查三套县级代码必须先统一到同一口径,否则 merge 后样本莫名其妙减少。(2) 重点县名单时点:处理组身份要用"被列为国家重点县"的起始年份,而不是论文写作年份——DID 的 post 时点错了,主系数会系统性偏。
B.2 案例二:Kessler & Roth 器官捐赠 RCT + 合成控制(2025)
这个案例是"教科书级干净复现包":一个 master.do 跑全部 9 图 9 表。它的工程范式正好与案例一相反——数据来源单一(实验面板 + 州级登记 CSV),所以能做到高度自动化。
clear all / set seed / cd / log using,然后依次 do clean_data.do → 各图各表子程序。从 raw CSV 一路生成最终图,预计运行 1–2 小时(实验数据量不大,但 bootstrap / 随机化推断较慢)。final_analysis.dta。这一步对应正文 Data Availability and Provenance Statements 里声明的每一个数据来源。*==============================================================
* Kessler & Roth (2025) 复现主程序示意
* 单 master.do 跑全部 9 图 9 表,预计运行 1-2 小时
*==============================================================
clear all
set more off
set varabbrev off
set seed 20250501 // 固定种子(随机化推断/permutation)
global root "C:/你路径/KesslerRoth2025"
cd "$root"
capture log close
log using "log/master_$S_DATE.log", replace
* --- 数据清洗:raw CSV -> final_analysis.dta ---
do "code/clean_data.do" // 读 raw/experiment.csv + raw/state_reg.csv
// 生成 data/final_analysis.dta
* --- 9 表 ---
do "code/Tables/Table1_balance.do" // 随机化平衡性检验
do "code/Tables/Table2_itt.do" // 意向处理效应 ITT
do "code/Tables/Table3_complier.do" // 依从者效应 CACE
* ... Table4-9 ...
* --- 9 图 ---
do "code/Figures/Figure1_frame.do" // 不同提问措辞对照
do "code/Figures/Figure2_state_sc.do" // 州级合成控制外推
* ... Figure3-9 ...
display _n "===== 全部完成,请核对 Output/Tables 与 Figures ====="
log close
案例一(中国扶贫)= 多源中文数据 + 受限数据 + 手工图,工程难点在数据拼合与"哪些能自动跑"的边界;案例二(器官捐赠)= 单源干净数据 + 一键 master,工程难点在随机化推断与依从性。真实研究落在两者之间:先判断你属于哪一端,再决定你的复现包该长什么样。
B+ 验证前人结论稳健性:标准操作三步法
"复现"只到"跑通核对"为止;"验证稳健性"是在跑通之后,主动改动设定、看主结论动不动摇。这是把一篇别人的论文变成你自己方法训练的关键。标准三步如下。
第一步:下载包 → 读 README → 跑 master → 核对表图数字
严格按 12 复现流程五步走:从 raw 重跑到 output,把生成表与正文逐列比对(符号、量级、显著性)。这一步的产出是一张"复现核对表":哪几张表对上了、哪几张差多少、差在哪一步 do 文件。
第二步:改动设定重跑(核心训练)
在跑通的包上,系统地改下列设定,每改一次重跑一次,记录主系数变化:
| 方法 | 可改的稳健性维度 | 对应 Stata 命令 |
|---|---|---|
| DID | 换聚类层级(县→省→双向);换控制变量;换样本窗口;换估计器(TWFE → CSDID → stacked) | reghdfe ... cluster();csdid;eventdd |
| RDD | 换带宽(IK / CCT / 手动);换核函数;换多项式阶数;换边界 | rdrobust y x, h();rdplot |
| 合成控制 | 换权重非负 / 凸组合约束;换预测变量;换 donor pool;安慰剂检验 | synth_runner;pysynth |
| IV | 换工具变量;换弱 IV 稳健推断;换过度识别检验 | ivreg2;weakiv;xtivreg2 |
| RCT | ITT vs CACE;换随机化推断;换协变量调整;排除分析性 attrition | ritest;teffects |
DID 换估计器:TWFE → CSDID → stacked 的代码骨架
*==============================================================
* did_robustness.do:在跑通主回归后,系统换估计器重跑
* 用法:接在主回归包之后,use 已构造好的 final.dta
*==============================================================
use "$root/Data/analysis/final.dta", clear
* --- (0) 基准:双向固定效应 TWFE ---
eststo twfe: reghdfe ln_rural_income post_treat $covars, ///
absorb(county_id year) vce(cluster county_id)
* --- (1) 换聚类层级:从县级 -> 省级 ---
eststo twfe_prov: reghdfe ln_rural_income post_treat $covars, ///
absorb(county_id year) vce(cluster province_id)
* --- (2) Callaway & Sant'Anna (2021) 异质性稳健 DID ---
* ssc install csdid, replace
csdid ln_rural_income $covars, ivar(county_id) time(year) ///
gvar(first_treat_year) cluster(county_id)
estat event // 事件研究动态效应
* --- (3) stacked regression(Sun & Abraham 2021 思路)---
* 为每个处理队列构造干净对照,避免负权重
* ssc install eventdd, replace
eventdd ln_rural_income $covars, timevar(rel_year) ///
eventvar(treat) cluster(county_id) ///
coefplot(-5(1)5) lag(4) leads(5) ///
graph_op(ytitle("动态效应") title("Event Study"))
* --- 输出对照:一列 TWFE,一列 CSDID,一列 stacked ---
esttab twfe twfe_prov using "$root/Output/robust_estimator.csv", ///
se star(* 0.1 ** 0.05 *** 0.01) ///
mtitles("TWFE" "TWFE省聚类")
第三步:与原文数字对照 → 写复现 / 稳健性报告
改完一轮后,把"原文数字 vs 你复现数字 vs 你改设定后数字"放在一张表里,写一份简短报告。报告模板如下(可直接抄成你自己的练习):
《[作者 年份] 复现与稳健性报告》
1. 复现对象:题名 / 期刊 / 卷期 / 年份 / DOI
2. 环境:Stata 版本、外部命令及版本、运行时长
3. 复现核对:
- 成功复现:Table X(主系数 0.xxx,与原文差异 < 0.00x)
- 未完全复现:Table Y(差在 …,定位到 do 文件第 … 行)
- 受限/手工:WIND 部分仅有 log;Fig2 ArcGIS 手工
4. 稳健性改动与结论:
| 设定 | 主系数 | 标准误 | 显著性 | 与原文一致? |
| 原文 TWFE | 0.109 | ... | *** | - |
| 省聚类 | 0.109 | ... | *** | 是 |
| CSDID | 0.098 | ... | *** | 是 |
| 缩窗 ±3年 | 0.115 | ... | ** | 是 |
5. 结论:主结论在 X/Y/Z 种设定下稳健;在 … 设定下敏感,
可能原因是 …(如交叠处理异质性、弱平衡趋势)。
C 数据清洗 / 可视化 / 建模实操清单(配 Stata 代码)
C.1 三阶段文件夹规范:Raw → Clean → Analysis
无论复现别人还是做自己,第一天就把目录搭成三层。Raw 只读、绝不修改;Clean 是可重生成的中间产物;Analysis 是最终回归样本。每个阶段开头固定日志、固定种子、记录 N。
*==============================================================
* 00_setup.do:每个项目第一步
*==============================================================
clear all
set more off
set varabbrev off
set seed 20260911 // 固定种子,保证可复现
set linesize 120
global root "C:/你路径/your_project"
cd "$root"
* 三阶段目录
global raw "$root/Raw" // 只读,绝不 save,replace
global clean "$root/Clean" // 中间数据,可重生成
global analysis "$root/Analysis" // 最终回归样本
global out "$root/Output"
global logdir "$root/Log"
capture mkdir "$clean"
capture mkdir "$analysis"
capture mkdir "$out/Tables"
capture mkdir "$out/Figures"
capture mkdir "$logdir"
capture log close
log using "$logdir/run_$S_DATE.log", replace
* 外部命令版本登记(写进 log,方便日后核对)
which reghdfe
which estout
which coefplot
C.2 变量构造、codebook 与缺失 / 受限数据处理
每构造一个变量,就在 codebook 里登记:变量名、单位、来源、构造公式。缺失值要分"真缺失"与"结构性零";受限数据(WIND、企业保密数据)只放本地、不入版本库,并保留导出 log。
*==============================================================
* 01_clean.do:Raw -> Clean,变量构造 + 缺失处理
*==============================================================
use "$raw/county_raw.dta", clear
* 1) 关键被解释变量:log 农村收入(加 1 防 log(0))
gen ln_rural_income = ln(rural_income + 1)
label var ln_rural_income "log(农村人均可支配收入+1), 来源:农村统计年鉴"
* 2) 处理变量:是否国家重点县 x 政策后
gen post_treat = (treat==1 & year>=2012)
label var post_treat "DID处理=重点县且2012年后"
* 3) 缺失值:区分结构性零与真缺失
* 企业未报告 -> 缺失;本就无此收入 -> 0,不要盲目 replace
mvdecode rural_income, mv(-999 = .) // 把 -999 编码缺失转为系统缺失
* 4) 缩尾:按年份组内 1%/99%(winsor2)
* ssc install winsor2, replace
winsor2 ln_rural_income $covars, cuts(1 99) by(year) replace
* 5) 生成 codebook,留档供审阅
codebook county_id year ln_rural_income post_treat ///
using "$out/codebook.md", markdown replace
* 6) 每步记 N(做 flow chart)
count
display "清洗后 N = " r(N)
save "$clean/county_clean.dta", replace
C.3 顶刊图规范:事件研究 / RD / 系数森林 / 时间序列
顶刊图有约定俗成的画法:事件研究图要画动态系数 + 95% CI + 归一化在事件前一期为 0;RD 图要局部线性拟合叠加散点分箱;系数森林图横放、按大小排序;时间序列图要标政策时点。
*==============================================================
* figures.do:四类顶刊标准图
*==============================================================
use "$analysis/final.dta", clear
* --- (1) 事件研究图:eventdd / coefplot ---
* ssc install eventdd, replace
eventdd ln_rural_income $covars, ///
timevar(rel_year) eventvar(post_treat) ///
absorb(county_id year) cluster(county_id) ///
lag(5) leads(5) baseline(-1) ///
graph_op(ytitle("政策效应") xtitle("相对政策年份") ///
title("Figure X: Event Study") ///
yline(0, lcolor(red%40)) xline(0, lcolor(red%40)))
graph export "$out/Figures/fig_eventstudy.png", replace width(2000)
* --- (2) RD 图:rdplot(局部线性 + 分箱散点)---
* ssc install rdrobust, replace
rdplot y running_var, c(0) h(10) ///
title("Figure Y: RD Plot") ///
graph_options(ytitle("结果") xtitle("分配变量"))
graph export "$out/Figures/fig_rd.png", replace width(2000)
* --- (3) 系数森林图:coefplot(异质性分组系数横放)---
eststo g1: reghdfe ln_rural_income c.post_treat#c.female $covars, ///
absorb(county_id year) cluster(county_id)
eststo g2: reghdfe ln_rural_income c.post_treat#c.old $covars, ///
absorb(county_id year) cluster(county_id)
coefplot g1 g2, keep(*post_treat*) vertical ///
title("Figure Z: Heterogeneity Forest") ///
yline(0, lcolor(red))
graph export "$out/Figures/fig_forest.png", replace width(2000)
* --- (4) 时间序列图:标政策时点 ---
twoway (line ln_rural_income year, lwidth(2)) ///
(rcap lo ci_hi year), ///
xline(2012, lpattern(dash) lcolor(red)) ///
xtitle("年份") ytitle("log农村收入") ///
title("Figure W: 处理县均值与政策时点")
graph export "$out/Figures/fig_ts.png", replace width(2000)
C.4 主回归建模设定决策树
拿到一个研究问题,建模设定按下面顺序决策:① 估计器(实验?准实验?结构?)→ ② 固定效应组合(个体 / 时间 / 个体×时间趋势)→ ③ 聚类层级(处理层级是什么就聚到哪)→ ④ 控制变量策略(先不加、再加时不变协变量、最后加 pre-trend)。
*==============================================================
* decision_tree.do:建模设定逐步递进(避免"控制变量轰炸")
*==============================================================
use "$analysis/final.dta", clear
* 第1层:仅双向固定效应(最干净,先看 raw 相关)
eststo m1: reghdfe ln_rural_income post_treat, ///
absorb(county_id year) vce(cluster county_id)
* 第2层:加时不变协变量(人口、初始收入)
eststo m2: reghdfe ln_rural_income post_treat $x0, ///
absorb(county_id year) vce(cluster county_id)
* 第3层:加省份×年份趋势(吸收省级时变冲击)
eststo m3: reghdfe ln_rural_income post_treat $x0, ///
absorb(county_id province#year) vce(cluster county_id)
* 第4层:换更稳的 DID 估计器(交叠处理时)
* csdid ln_rural_income $x0, ivar(county_id) time(year) ///
* gvar(first_treat) cluster(county_id)
esttab m1 m2 m3 using "$out/Tables/main_spec.csv", replace ///
se star(* 0.1 ** 0.05 *** 0.01) ///
mtitles("FE only" "+协变量" "+省×年趋势")
D 模型设定假设清单:识别假设 + 检验 + 常见违规
每类因果方法都靠一组"不可直接检验、只能做证伪性检验"的识别假设成立。下表把本站涉及的方法逐一列出:核心假设、可做的检验、以及顶刊审稿人最常攻击的违规情形。写论文时,这张表就是你的"审稿人清单"——先自问每一行,再送审。
| 方法 | 核心识别假设 | 可做的检验 | 常见违规 / 审稿人攻击点 |
|---|---|---|---|
| DID 平行趋势(含交叠处理) | 无处理时处理组与对照组结果趋势平行;交叠处理下还要求无负权重异偏误 | 事件研究图看处理前系数是否贴 0;安慰剂(假处理时点);换 CSDID / stacked | 事前趋势不平行;处理时点交错导致 TWFE 负权重;预期效应 |
| IV 相关性 + 排他性 | 工具与内生变量强相关;工具只通过内生变量影响结果(排他约束) | 第一阶段 F 统计量(弱 IV,经验值 >10);过度识别 J 检验;弱 IV 稳健 Anderson-Rubin | 弱工具变量(F<10);排他性被违反(工具走其他渠道) |
| RDD 连续性 | 潜在结果在断点处连续;个体不能精确操纵分配变量 | McCrary / 密度连续性检验;协变量在断点连续;换带宽/核/多项式 | 精确堆点(manipulation);操纵分配变量;带宽敏感 |
| 合成控制 SCM | 权重非负 + 凸组合(权重和=1);事前拟合良好;donor pool 未受污染 | 事前 RMSPE 比值;安慰剂检验;换 donor pool / 预测变量 | 事前拟合差;处理组受其他冲击溢出;权重退化到单一 donor |
| RCT | SUTVA(无干扰);随机化;依从性(非依从时用 ITT/CACE) | 平衡性检验(处理前协变量均值差);attrition 差异;随机化推断 | SUTVA 违反(溢出/一般均衡);非随机 attrition;部分依从 |
| 面板固定效应 | 严格外生性(过去 / 现在 / 未来解释变量与误差项不相关) | Arellano-Bond 序列相关;加入未来值做 Granger 式检验;动态面板 GMM | 动态面板滞后被解释变量与 FE 相关(Nickell 偏误);反向因果 |
| 结构估计 MLE/GMM | 模型设定正确(效用/生产函数形式);矩条件/分布假设正确;参数可识别 | 过度识别 Sargan/Hansen;拟合优度;out-of-sample 预测;反事实稳定性 | 函数形式误设;矩条件弱;参数不可识别(弱识别) |
| 机器学习 | 区分预测 vs 因果;正则化引入偏误需去偏(DML) | 样本外预测误差;双重交叉拟合;安慰剂 / 假标签检验 | 把预测精度当因果证据;过拟合;正则化偏误未校正 |
假设本身永远无法"证明成立",只能"尽量不被证伪"。顶刊与普通期刊的差距,不在于假设更强,而在于作者把每一个可能的证伪性检验都做了、并把结果摆出来。你写自己论文时,按这张表逐条准备检验,就等于提前回答了审稿人。
E 严谨论证框架:从故事到可审阅工程
E.1 顶刊论文论证链模板
一篇顶刊实证论文,无论用什么方法,论证链都高度同构。下面这条链可以直接当你写论文的目录骨架:
E.2 复现包 = "可审阅论证"的组成部分
过去复现包被当作论文的"附属品";现在 AER / AEJ / QJE / Management Science 都把 Data Availability and Provenance Statements 与可重跑复现包当成论文正式组成部分。原因很简单:正文 8000 字无法承载从原始数据到主表的几百个决策,只有代码能承载。一个规范的复现包(master file、行号映射、README、数据来源声明)本身就是论证严谨性的证据——它让"你声称做了什么"变成"任何人都能核对你做了什么"。
E.3 借鉴方式:选一篇目标期刊论文,用其框架 + 自己的数据重做
最快的训练路径不是泛读,而是:选一篇你想投的期刊的目标论文(如本页 B 的 AEJ:Policy 两篇),完全照搬它的论证链骨架与复现工程规范,把它的数据换成你自己的、把它的政策换成你研究的政策。这样你同时练了"怎么讲顶刊的故事"和"怎么搭顶刊的工程",比读十篇综述都管用。
F 方法归位核验:本站实证组怎么分工
本页是"地图",告诉你每个方法在本站哪一页展开。下表逐项核验 EJD 方法分布里出现的方法是否都在实证组有对应页面,方便你按图索骥、交叉跳转。
| 方法 | 归入本站哪个页面 | 本页角色 |
|---|---|---|
| 面板固定效应 / 基准回归 | 04 基准回归 · 02 数据合并与面板 | 地图 + 决策树 |
| DID / 交叠处理 | 07 DID · 本页 B 案例一 + CSDID 代码 | 真实复现案例 |
| RDD 断点回归 | 08 RDD | rdrobust / McCrary 假设检验 |
| IV 内生性 | 06 IV | 弱 IV 检验清单 |
| 合成控制 SCM | 25 SCM | 本页 Kumar & Liang 代表论文 |
| RCT 随机实验 | 本页 Kessler & Roth 案例 · 16 因果图 | ITT/CACE、SUTVA |
| 机器学习 / DML / 因果森林 | 17 DML · 18 因果森林 | Ash et al. ML 代表论文 |
| 结构估计 MLE/GMM | 结构 02 MLE · 结构 03 GMM · 结构 07 动态结构 | De Groote 代表论文 |
| 动态面板 GMM | 26 动态面板 GMM | 严格外生假设 |
| 分位数 / 非参 | 21 分位数与 GaR | 方法分布定位 |
| 空间计量 | 27 空间计量 | 方法分布定位 |
| bunching / placebo / 多重检验 | 24 显著性手法库 · 12 显著性诊断 | 规范判别 |
| 复现流程 / 工程规范 | 13 复现流程(前置) | 本页为其方法地图与真实案例延伸 |
交叉链接:本页与 12 论文复现流程(复现包结构与调用链)、11 显著性诊断实务(统计推断规范)、23 显著性手法库与规范判别(p-hacking / 多重检验)形成闭环——那三页讲"流程与规范",本页讲"顶刊真实怎么做、怎么照着复现与验证稳健性"。
G 网站引用、数据来源与版权说明
- EJD 库:Empirical Journal Articles,由 University of Ulm 的 Sebastian Kranz 维护,网址 https://ejd.econ.mathematik.uni-ulm.de/。本页所有库规模、期刊 / 语言 / 方法统计数字均来自对该库公开条目的抓取,仅作学习素材引用,非课程广告。请尊重原作者与各期刊的版权条款,复现包下载后仅限个人学习使用。
- 本页引用的真实论文(题名 / 期刊 / 卷期 / 年份 / 作者均按官方信息标注):
- Li, Rui, Hong Song, Jun Zhang, and Junsen Zhang. 2025. "The Effects of a Multifaceted Poverty Alleviation Program on Rural Income and Household Behavior in China." American Economic Journal: Economic Policy, 17(2): 319–357. DOI: 10.1257/pol.20210485.
- Kessler, Judd B., and Alvin E. Roth. 2025. "Increasing Organ Donor Registration as a Means to Increase Transplantation: An Experiment with Actual Organ Donor Registrations." American Economic Journal: Economic Policy, 17(2): 60–83. DOI: 10.1257/pol.20220760.
- Kumar, Anil, and Che-Yuan Liang. 2024. "Labor Market Effects of Credit Constraints: Evidence from a Natural Experiment." American Economic Journal: Economic Policy, 16(3): 1–26. DOI: 10.1257/pol.20200683.
- De Groote, Olivier. 2025. "Dynamic Effort Choice in High School: Costs and Benefits of an Academic Track." Journal of Labor Economics, 43(2): 467–502. DOI: 10.1086/726702.
- Ash, Elliott, Sergio Galletta, and Tommaso Giommoni. 2025. "A Machine Learning Approach to Analyze and Support Anticorruption Policy." American Economic Journal: Economic Policy, 17(2): 162–193. DOI: 10.1257/pol.20210618.
- Stata 代码为本页教学示意(基于上述复现包的公开工程范式改写),变量名与行号为说明性示例;实际复现请以 EJD / AEA 官方复现包中的原始代码为准。