查看原文
其他

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

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:李   虎,中南财经政法大学统计与数学学院

本文编辑:王   彤

技术总编:戴   雯

Stata&Python云端课程来啦!

     寒雪梅中尽,春风柳上归。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》;原价600元的正则表达式课程,现在仅需49.9元,详情请查看推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》;另外,原价600元的基本字符串函数课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!
1导读 
双重差分法(DID)是近年来的“学术明星”,常用于各种经济政策的评估。只要有一个政策外生冲击使得我们的被解释变量y在两个维度发生变化,那么就可以考虑DID。当然,这两个维度一般都是时间维度和地区维度,并且这两个维度一般都用0-1变量刻画。所以,在传统的DID模型中,地区维度的政策分组变量 treat 和时间维度的政策分期变量 period 都是二值虚拟变量。这种设定有它的好处,交互项treat×period的系数反映的就是经过政策实施前后、处理组和控制组两次差分后所得到的政策效应。
那么,如何在Stata中实现DID的估计呢?接下来,我们通过一个案例在Stata中实现双重差分法的相关操作。
2数据说明 

    我们使用的数据是Nathan NunnNancy Qian(2011)发表在QJE上面的论文《The potato's contribution to population and urbanization: evidence from a historical experiment》的数据。

Replication Data for: Nathan Nunn, Nancy Qian. The potato's contribution to population and urbanization: evidence from a historical experiment[J]. The Quarterly Journal of Economics, 2011, 126(2):593-650.

3识别策略 
在这篇论文中,作者将土豆的传入看作一项准自然实验,使用DID方法对土豆在旧大陆人口增长和城市化进程中的历史作用进行了全面的定量分析。在时间维度上,土豆传入旧大陆的时间是在17世纪末和18世纪初,因而我们可以轻松划分出土豆传入前和土豆传入后两个时期。在地区维度上,土豆几乎传入了旧大陆的所有国家,所以不存在明确的实验组和控制组,但是,不同国家对土豆种植的适宜性不同(这是由不随时间变化的地理气候条件决定的),这就会导致土豆的传入对不同国家的影响程度是不同的。

这篇文章使用的并不是传统的DID识别策略,而是连续DID的识别策略。通过比较在旧大陆土豆种植之前和之后,更适合土豆种植的旧大陆地区和不太适合土豆种植的地区之间的人口和城市化水平(所谓双重差分),我们即可识别出土豆在旧大陆人口增长和城市化进程中的历史作用。

4Stata操作 
时间维度变异:土豆传入旧大陆前后,用时间虚拟变量 post 来表示,如果是在1700年之后,则取值为1,否则取值为0(一共包含1000、1100、1200、1300、1400、1500、1600、1700、1750、1800、1850和1900年12期数据)。
地区维度变异:不同国家对土豆种植的适宜性,用适合种植土豆的土地总面积的自然对数 ln_wpot 来表示。
双重差分法的Stata操作可以分为如下两步:
(1)我们需要生成时间虚拟变量post和不同国家适合种植土豆的土地总面积的自然对数ln_wpot的交互项ln_wpot_post,相关数据集大家可以通过在公众号后台回复 ”DID“获取~
use country_level_panel_for_web.dta,clear
gen ln_wpot_post = ln_wpot*post //生成交互项
(2)使用被解释变量人口(城市化率)对时间虚拟变量post、不同国家适合种植土豆的土地总面积的自然对数ln_wpot和二者交互项ln_wpot_post进行回归。交互项ln_wpot_post的系数反映的就是土豆的传入对旧大陆人口增长的影响。
DID模型实际上就是一个包含交互性的回归模型,所以DID回归使用一般的回归命令即可。我们经常使用的回归命令主要有三个,分别是reg命令、xtreg命令和reghdfe命令。其中,reg命令是最一般的回归命令,对数据格式没有要求,常用于截面数据和混合截面数据的DID模型回归。
reg ln_population ln_wpot_post ln_wpot post,cluster(isocode)

通常情况下,我们都习惯将固定效应引入DID模型,因为固定效应能够更为精确地反映两个维度上的变异性,并且可以在一定程度上帮助我们缓解遗漏变量导致的偏误问题。所以,对于面板数据的DID模型,我们使用更多的是xtreg命令。xtreg对数据格式有严格要求,要求必须是面板数据,在使用xtreg命令之前,我们首先需要使用xtset命令进行面板数据声明,定义截面(个体)维度和时间维度。
encode isocode,gen(code) //字符型变量转为数值型变量
xtset code year //面板数据声明
xtreg ln_population ln_wpot_post i.year,fe cluster(isocode)

有些时候,我们可能会在DID模型中引入高维固定效应(2维以上),这个时候reghdfe命令会是更好的选择。reghdfe命令可以包含多维固定效应,只需 absorb (var1,var2,var3,...),不需要使用i.var的方式引入虚拟变量,相比xtreg命令方便许多,并且不会汇报一大长串虚拟变量回归结果。reghdfe是一个外部命令,所以大家在使用之前需要安装(ssc install reghdfe)。可以发现,reghdfe命令和xtreg命令对系数的估计结果是一样的。

reghdfe ln_population ln_wpot_post,absorb(isocode year) cluster(isocode)

好了,这就是今天推文的全部内容了,我们下期再见~

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

往期推文推荐
偷懒小妙招| selenium之玩转鼠标键盘操作(上)

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

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

Stata中字符串的处理

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

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

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

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

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

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

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

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

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

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

putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

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

轻轻一点,就知有没有|rqrs命令介绍

强大的正则表达式

自动群发邮件(二)——附带附件

自动群发邮件--email和smtplib基本模块的使用

批量处理变量名和标签的小方法

计算工作日的小能手——workdays

Seminar | 企业错报与银行贷款合同

Seminar | 共同基金行业的性别歧视

关于我们 


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



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

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


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

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