查看原文
其他

“粉墨登场”——多期双重差分法(DID)的Stata操作

The following article is from 功夫计量经济学 Author 江河JH

如果政策实施时点一致的话,那么我们就可以使用标准DID愉快地玩耍了。但是,更多情况下,政策实施时点是不一致的,这时候就该多期DID粉墨登场了。在多期DID模型中,因为不同个体实施政策的时点(period)不同,所以政策分期变量会变成(注意下标)。与标准DID一样,我们需要生成地区维度的政策分组变量treat和时间维度的政策分期变量period,交互项treat×period的系数反映的就是经过政策实施前后、处理组和控制组两次差分后所得到的政策效应。那么,如何在Stata中实现多期DID的操作呢?让我们看一个经典的案例!

数据说明

贾瑞雪老师(2014)的论文《The Legacies of Forced Freedom: China’s Treaty Ports》是一篇经典的计量史学论文,《Review of Economics and Statistics》官网上公布了这篇论文的数据和代码,接下来我就使用作者公布的数据和代码跟大家分享一下多期DID的Stata操作。

Replication Data for: Ruixue Jia . The Legacies of Forced Freedom: China's Treaty Ports[J]. Review of Economics and Statistics, 2014, 96(4):596-608.

建议大家在看下面的内容之前,最好先看一下“殖民的遗产:通商口岸给近现代中国带来了什么?”这篇推文,这样可能理解起来更加顺畅。

识别策略

清朝末期,清政府与西方列强签订了一系列不平等条约,开放沿江沿海等城市作为通商口岸即是不平等条约的主要内容之一。贾瑞雪老师(2014)将近代通商口岸的设置作为一项准自然实验,评估了通商口岸对中国近现代人口和经济发展的长期影响。从1840年至1910年,中国一共被迫开放了40多个通商口岸。不同通商口岸开放的时间(政策时点)是不同的,例如,广州、福州、厦门、宁波和上海是在1842年《南京条约》后开放的,汉口、九江、南京、镇江等城市是在1858年《天津条约》后开放的,而苏州、杭州等城市是在1895年《马关条约》后开放的......
地区年份开放年份treatperiodtreat×period
苏州府17761896100
苏州府18201896100
苏州府18511896100
苏州府18801896100
苏州府19101896111
苏州府19531896111
苏州府19641896111
苏州府19821896111
苏州府19901896111
苏州府20001896111
......




嘉兴府1776.000
嘉兴府1820.000
嘉兴府1851.000
嘉兴府1880.000
嘉兴府1910.000
嘉兴府1953.000
嘉兴府1964.000
嘉兴府1982.000
嘉兴府1990.000
嘉兴府2000.000
如上表所示,苏州府是在1896年被开放为通商口岸的,所以苏州府的政策分期变量period在1896年之后取值为1,之前取值为0;而同处苏杭地区的嘉兴府则一直没有被开放为通商口岸,所以嘉兴府的政策分组变量treat和政策分期变量period一直取值为0。事实上,我们可以发现交互项treat×period的取值和政策分期变量period的取值是一毛一样的,所以在多期DID中,我们其实就没有必要去生成什么交互项,只需用一个政策虚拟变量予以替代就可以了,用以表示地区期是否实施政策。当然,如果为了便于理解的话,可以尝试去生成交互项,结果都一样滴!

Stata操作

多期双重差分法(DID)的Stata操作可以分为如下两步:(1)我们需要生成一个政策虚拟变量post_cmc,用以表示地区期是否被开放为通商口岸。我们只需比较样本各期时间与开放时间(政策时点)即可,如果是在政策时点后,则取值为1,否则为0。gen post_cmc=(year>cmcyear)
对于像嘉兴府这样未被开放为通商口岸的控制组个体,其开放时间是缺失的,Stata中将缺失值定义为无穷大,所以政策虚拟变量post_cmc会一直取值为0。(2)使用被解释变量人口增长率AnnualGrowth对政策虚拟变量post_cmc进行回归(加入个体固定效应和时间固定效应,用以更为精确地反映个体特征和时间特征),政策虚拟变量post_cmc反映的就是通商口岸的设置对近现代人口增长的影响。DID模型与固定效应模型有着千丝万缕的关系,和之前一样,多期DID的Stata命令主要有三个,分别是reg命令、xtreg命令和reghdfe命令。reg命令使用的估计方法最小二乘虚拟变量方法(LSDV),通过在回归方程中引入虚拟变量来代表不同的个体,可以起到和固定效应组内估计方法(FE)同样的效果(已经被证明),贾瑞雪老师使用的就是reg命令。reg AnnualGrowth post_cmc $control_fe i.id i.year, vce(cluster id)

xtreg,fe是固定效应模型的官方命令,使用这一命令估计出来的系数是最为纯正的固定效应估计量(组内估计量),所以对于面板数据的DID模型,我们使用更多的是xtreg,fe命令。
xtset id year
xtreg AnnualGrowth post_cmc $control_fe i.year,fe vce(cluster id)

第三个命令是reghdfe命令,也是一直以来我最推荐的固定效应命令。reghdfe命令支持多维固定效应,运算速度快,并且不会汇报一大长串虚拟变量回归结果。
reghdfe AnnualGrowth post_cmc $control_fe, absorb(id year) vce(cluster id)

需要本篇推文使用的数据和代码的朋友,请在后台对话框内回复关键词“DID2”!


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐
Python与百度地图合璧,绘制棒呆的热力地图

【数据可视化】统计图绘制神器:Seaborn

检索Stata推文的“任意门”
学会了这些,分分钟提升你的毕业体验

【爬虫实战】双一流大学的月关注度

【爬虫实战】“中国人不吃这一套”——人民日报微博评论分析

进化的标签管理助手——elabel命令

“学术明星”——双重差分法(DID)的Stata操作

偷懒小妙招| selenium之玩转鼠标键盘操作(上)

【爬虫实战】南京地铁又上热榜——客流量分析

renfiles:批量重命名文件的利器

Stata中字符串的处理

物以类聚——浅述k-means聚类算法

我在哪里?调用高德API获取地址经纬度信息

超级简单的条件函数,轻松生成虚拟变量

Python云端课程福利大放送!0基础也能学~

【爬虫实战】“我们,继续新故事”——爬取LOL英雄皮肤

“人像动漫化”—Python实现抖音特效

跨框架合并数据|frlink的用法,你get到了吗

《唐探3》做错了什么?|来自150万字影评的证据

爬虫俱乐部年度总结|《请回答2020》

春节假期临近,来爬爬豆瓣看看有什么好剧

putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

爬虫实战|Selenium爬取微信公众号标题与链接

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:

1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存