“粉墨登场”——多期双重差分法(DID)的Stata操作
The following article is from 功夫计量经济学 Author 江河JH
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年《马关条约》后开放的......地区 | 年份 | 开放年份 | treat | period | treat×period |
---|---|---|---|---|---|
苏州府 | 1776 | 1896 | 1 | 0 | 0 |
苏州府 | 1820 | 1896 | 1 | 0 | 0 |
苏州府 | 1851 | 1896 | 1 | 0 | 0 |
苏州府 | 1880 | 1896 | 1 | 0 | 0 |
苏州府 | 1910 | 1896 | 1 | 1 | 1 |
苏州府 | 1953 | 1896 | 1 | 1 | 1 |
苏州府 | 1964 | 1896 | 1 | 1 | 1 |
苏州府 | 1982 | 1896 | 1 | 1 | 1 |
苏州府 | 1990 | 1896 | 1 | 1 | 1 |
苏州府 | 2000 | 1896 | 1 | 1 | 1 |
...... | |||||
嘉兴府 | 1776 | . | 0 | 0 | 0 |
嘉兴府 | 1820 | . | 0 | 0 | 0 |
嘉兴府 | 1851 | . | 0 | 0 | 0 |
嘉兴府 | 1880 | . | 0 | 0 | 0 |
嘉兴府 | 1910 | . | 0 | 0 | 0 |
嘉兴府 | 1953 | . | 0 | 0 | 0 |
嘉兴府 | 1964 | . | 0 | 0 | 0 |
嘉兴府 | 1982 | . | 0 | 0 | 0 |
嘉兴府 | 1990 | . | 0 | 0 | 0 |
嘉兴府 | 2000 | . | 0 | 0 | 0 |
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元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐【数据可视化】统计图绘制神器:Seaborn
【爬虫实战】双一流大学的月关注度
【爬虫实战】“中国人不吃这一套”——人民日报微博评论分析
“学术明星”——双重差分法(DID)的Stata操作
【爬虫实战】南京地铁又上热榜——客流量分析
Stata中字符串的处理
我在哪里?调用高德API获取地址经纬度信息
超级简单的条件函数,轻松生成虚拟变量
Python云端课程福利大放送!0基础也能学~
【爬虫实战】“我们,继续新故事”——爬取LOL英雄皮肤
“人像动漫化”—Python实现抖音特效
《唐探3》做错了什么?|来自150万字影评的证据
爬虫俱乐部年度总结|《请回答2020》
模糊匹配我只用这一招!
利用tushare获取财务数据
爬虫实战|Selenium爬取微信公众号标题与链接
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。