
【AER复刻】用 RCT、ITT、IV 和事件研究法说清干净水的价值
原文简介
论文题目:The Value of Clean Water: Experimental Evidence from Rural India
作者:Fiona Burlig, Amir Jina, Anant Sudarshan
期刊:American Economic Review
卷期页码:vol. 116, no. 3, March 2026, pp. 1148-87
这篇论文研究的是一个很现实的问题:农村家庭到底愿不愿意为“真正干净、还能送到家”的饮用水买单?
作者在印度 Odisha 农村开展了一项覆盖约 60,000 户家庭、120 个村庄 的 cluster RCT(村庄层面的随机对照试验),比较了几种不同的净水供给机制:
• 不同折扣价格
• 免费配额
• 可兑换补贴
• 纯对照组
对我们做代码复刻的人来说,这篇文章最值得学的地方,不只是结论,而是它背后那套非常完整的实验分析代码:如何把实验分组、调查数据、销售数据、健康结果和最终图表串成一套可以直接复跑的实证流水线。
思路讲解
如果只看“这套代码能做什么”,它最值得强调的是下面几点:
• 能把基线、中期、终线问卷清洗成统一的家庭面板数据
• 能把 listing、售水记录和实验分组信息合并起来,还原真实的 treatment / control 结构
• 能按 RCT 标准做分析,而不是普通相关性回归
• 能直接生成 balance、ITT、IV、动态效应、异质性、spillover、成本效果 这些顶刊论文常见结果
• 能把中间数据处理和最终图表输出打通,最后一键渲染成完整展示页
换句话说,这个项目最适合拿来学习三件事:
• 文献怎么拆:看到一篇 AER 实验论文后,如何识别核心识别策略
• 代码怎么复刻:如何从原始数据一路走到可复现结果
• RCT 代码怎么写:如何在代码里落实处理组、对照组、聚类标准误、ITT 和事件研究
它不是只给你几段回归命令,而是给你一整套可以迁移到自己项目里的实证模板。
核心代码展示
下面只挑每个方法里一小段最能体现思路的代码。
1. 主控流程:从清洗到出图一条龙
项目入口脚本把整个复现流程串起来:先加载依赖和路径,再跑调查清洗、销售数据清洗,最后渲染论文展示页。
project_root <- here::here()
source(paste0(project_root,"/code/load_file_paths.R"))
source(paste0(scripts_hfs_cleaning,"/clean_andoutput_panelcomponents.R"))
source(paste0(scripts_hfs_cleaning,"/endline.R"))
source(paste0(scripts_hfs_cleaning,"/build_panel.R"))
source(paste0(scripts_saleslist_cleaning,"/listing_panel.R"))
source(paste0(scripts_saleslist_cleaning,"/sales_panel.R"))
source(paste0(scripts_saleslist_cleaning,"/merging_full_sales.R"))
quarto::quarto_render(paste0(paper_exhibits,"/paper_exhibits.qmd"))