1. 理论

1.1 标准表述(定义)

双重差分模型(difference-in-differences)主要被用于社会学中的政策效果评估。其原理是基于一个反事实的框架来评估政策发生和不发生这两种情况下被观测因素y的变化。如果一个外生的政策冲击将样本分为两组—受政策干预的Treat组和未受政策干预的Control组,且在政策冲击前,Treat组和Control组的y没有显著差异,那么我们就可以将Control组在政策发生前后y的变化看作Treat组未受政策冲击时的状况(反事实的结果)。通过比较Treat组y的变化(D1)以及Control组y的变化(D2),我们就可以得到政策冲击的实际效果(DD=D1-D2)。

具体地,单一冲击时点的双重差分的模型如下:

其中,Ti为政策虚拟变量;Ai为时间虚拟变量; Ti ×At为两者的交互项;b3即为我们需要的双重差分估计量。

政策冲击的实际效果: DD = D1 - D2 = ( β2 + β3 ) - β2 = β3

需要特别指出的是,只有在满足“政策冲击前Treat组和Control组的y没有显著差异”(即平行性假定)的条件下,得到的双重差分估计量才是无偏的。

详细说明

为测度“处理”(或实验)的效果,我们关心被解释变量经“处理”前后的变化,考虑以下两期面板数据:

混合OLS

只加政策变量作为核心解释变量,再加入时间D(t)等作为控制变量,进行的普通混合OLS回归,测度出x(it)的效应β,就是简单地将实验组减去控制组,得到一个有偏的估计(因为x(it)可能与不随时间改变的个体特征u(i)等固定效应相关),故下一步再做一阶差分,第二期减去第一期,将u(i)消掉。即双重差分。

双重差分DID

示意图

只有在满足“政策冲击前Treat组和Control组的y没有显著差异”(即平行性假定)的条件下,得到的双重差分估计量才是无偏的。

1.2 另一种表述(常用)

1.2.1 理解交互项的含义

例子:研究性别和学历对工资的影响,性别是F,学历是E,工资是S。如果没有交叉项,那么回归的方程是:

S = β0 + β1 × F + β2 × E

在这种情况下,性别的影响是β1,学历的影响是β2。而有交叉项,那么回归的方程是

S = β0 + β1 × F + β2 × E + β3 × F × E

在这种情况下,性别对工资的影响是β1+β3*E,学历对工资的影响是β1+β3*F

所以我们很容易发现,交叉项刻画了什么呢?

它刻画了一个人的学历对工资的影响是否受性别的影响(β1+β3*F),刻画了一个人的性别对工资的影响是否受学历的影响(β1+β3*E)。

换言之,他刻画了第一种情况下,如果把不同的性别分开回归,得出的β2是否与F有相关关系,刻画了如果把不同的学历分开回归,得出的β1是否和E有相关关系。

更简单点说,就是两个自变量对因变量的共同作用。

加交互项,就相当于分组回归(PS:离散型变量的交互项)

Y = β0 + β1× A + β2 × X + β3 × A × X + ε

A对Y有影响

X对Y有影响

β3 :X对Y的影响,因A变化而变化。

按照上述例子,性别是A,学历是X,收入是Y,那么就如同下图。

如果女的是1 男的是0

斜率差

Y = β0 + β1× A + β2 × X + β3 × A × X + ε

性别是A,学历是X,收入是Y

β2:对于男性,学历对收入的影响

β2+β3:对于女性,学历对收入影响

β3 就是两线的斜率差

β1 他们的截距差(性别对收入的影响)

1.2.2 用交互项表示的双重差分

用交互项表示的双重差分

G(i)=0时,

y(it)= β0 + β3×D(t) + ε(it)

G(i)=1时,

y(it)= β0 + β1 × D(t) + β2 + β3 × D(t) + ε(it) = β02 + ( β1+ β3 ) × D(t) + ε(it)

β3:控制组(Gi=0)的t2与t1之差,对照组前后期之差。

β1+ β3:处理组(Gi=1)的t2与t1之差,处理组前后期之差。

所以政策变量与时期变量的交互项G(i)×D(t) 的系数β3 就是双重差分估计量,表示了双重差分估计出的政策效应。

2. R、Stata操作运用

R与STATA操作

using all women with children as the treatment group:anykids为分组标识

post93:时期变量(冲击发生标识),93年前为0和93年后为1

2.1 R:

eitc$p93kids.interaction = eitc$post93*eitc$anykids

reg1 = lm(work ~ post93 + anykids + p93kids.interaction, data = eitc)

summary(reg1)

The coefficient estimate on p93kids.interaction should match the value calculated manually above.

2.2 Stata:

2.2.1 OLS_DID:

标准:

reg y treat post treat*post x1 x2 ,robust

gen Treat_Post=Treat*Post

xi: regress y Treat Post Treat*Post x1 x2 i.year, vce(robust)

est store OLS_DID

xi:命令会帮助生成出i.varname形式的虚拟变量。不加则不会生成新变量,但回归中仍然能使用这些虚拟变量(就是让虚拟变量藏于回归中不显现出来)。

简单示例:

gen interaction = post93*anykids

reg work post93 anykids interaction

或者用Stata非官方命令diff:

ssc intall diff

diff y, t(处理或分组或政策变量Gi) p(时期虚拟变量Dt) cov(协变量) robust report test

diff work, t(anykids) p(post93) robust

2.2.2 FE_DID:

did只能做混合OLS,不能做固定效应,想做固定效应,要去掉一个虚拟变量。

标准:

xtset group year

xi: xtreg y Treat*Post x1 x2 i.year,fe vce(robust)

est store FE_DID

双向固定效应估计时Post与i.year中某一虚拟变量应该多重共线,Post如同Treat一样分别被时间效应和个体效应吸收了。

输出word结果:(///表示换行)

esttab OLS_DID FE_DID, ar2(%9.3f) b(%9.3f) t(%9.3f) nogap compress ///

indicate("Year=_Iyear*") star(* 0.1 ** 0.05 *** 0.01)

输出的结果

结果显示交互项(Treat*Post)的系数显著为正,表明政策实施导致了y显著增加。然而,此时我们还不能确切的说,这一政策效果的评估是准确的,因为只有在对照组和实验组满足平行性假定的时候,Treat和post的交互项才是处理效应。因此平行趋势假定的重要性不言而喻。平行性假定的检验可以通过回归分析或者绘图的方式进行。

其他等价方法:

xtreg 与 reg 可殊途同归!(双向固定时)

xtreg y treat*post i.year, fe robust

reg y i.treat i.post i.treat#i.post, robust

注:

FE与LSDV是等价的:

(1)xtreg fatal unrate beertax, fe

(2)xi:reg fatal unrate beertax i.state

2.2.3 平行趋势假定

通过回归分析检验:

分别生成每一期的控制组和处理组:

gen Dyear=year-2012

gen Before2=(Dyear==-2 & Treat==1)

lab var Before2 "2 Year Prior"

gen Before1=(Dyear==-1 & Treat==1)

lab var Before1 "1 Year Prior"

gen Current=(Dyear==0 & Treat==1)

lab var Current "Year of Adoption"

gen After1=(Dyear==1 & Treat==1)

lab var After1 "1 Year After"

gen After2=(Dyear==2 & Treat==1)

lab var After2 "2 Year After"

gen After3_=(Dyear>=3 & Treat==1)

lab var After3_ "3 or More Year After"

xtset group year

xi:xtreg y Treat Post Before2 Before1 Current After1 ///

After2 After3_ x1 x2 i.year,fe vce(robust)

est store Dynamic

平行趋势检验

Before2,Before1均为虚拟变量,如果观测值是受到政策冲击前的第2年和第1年的数据,则该指标分别取1,否则取0;如果观测值是受到政策冲击当年的数据,则Current取值为1,否则取0;当观测值是受到政策冲击后的第1年、第2年、第3年的数据时,After1、After2、After3分别取1,否则取0。

我们看到Before2,Before1的系数均不显著,而Current、After1、After2、After3的系数均正向显著,说明双重差分模型满足平行趋势假定。

注:

1)关于Before之前选几期的问题,一个要看样本跨越的年度,一个要看已有文献的做法。一般来说,时间跨度比较长的话,会保留Before前3年的。

2)如果Before均不显著,就说明样本符合平行性假定。对于Current的显著性则不作要求。

通过绘图检验:

首先,安装外部命令:

ssc install coefplot

当我们help coefplot后可以看到其众多的功能,接下来我们介绍输出图形的模式。

1. 默认输出模式

coefplot Dynamic, keep(Before2 Before1 Current After1 After2 After3_) vertical recast(connect) yline(0)

保留关键变量: keep(Before2 Before1 Current After1 After2 After3_)

转置: vertical

系数连线,观察动态效果: recast(connect)

增加直线y=0: yline(0)

默认输出模式

2. 优化模式

graphregion & plotregion & title & notes

coefplot Dynamic, keep(Before2 Before1 Current After1 After2 After3_) vertical ///

recast(connect) lcolor(red*0.45) lpattern(-) ///

ciopts(lcolor(edkblue*0.8)) ///

mlcolor(gs6) mfcolor(white) msize(*1.2) msymbol(h) ///

yline(0,lcolor(edkblue*0.6) lwidth(*1.0)) ///

xlabel(,labsize(*0.75) labcolor(purple) tposition(crossing) tlcolor(gs10)) ///

ylabel(,nogrid tposition(crossing) tlcolor(gs10)) ///

graphregion(color(gs16)) ///

plotr(lcolor(edkblue) lpattern(1) lwidth(*1.5)) ///

title("Fig.1 The Dynamic Effect of the Policy") ///

note(" " " Notes: Vertical bands represent +(-)1.96 times the standard error of each point estimate", size(*0.8))

优化模式

3. 进阶:通过两条线展现动态变化

其实,也可以通过两条线来展现冲击发生前后两组样本y的动态变化。其思想和安慰剂实验比较相似。但是对于虚拟变量的定义要进行更改。具体代码如下:

gen Before3=(Dyear==-3)

gen Before2=(Dyear==-2)

gen Before1=(Dyear==-1)

gen Current=(Dyear==0)

gen After1=(Dyear==1)

gen After2=(Dyear==2)

gen After3=(Dyear==3)

gen After4=(Dyear==4)

xtset group year

xi:xtreg y Before3-After4 x1 x2 if Treat==1,fe vce(robust)

est store Treat

xi:xtreg y Before3-After4 x1 x2 if Treat==0,fe vce(robust)

est store Control

coefplot Treat Control, keep(Before* Current After*) vertical recast(connect) yline(0)

Before*和 Current After*后面*表示:在搜索字符串末尾指定星号(*) 以执行通配搜索。

在计算机(软件)技术中,通配符可用于代替字符。 通常地,星号“*”匹配0个或以上的字符,问号“?”匹配1个字符。如:123??? 将匹配 1231 或 12313,但不会匹配 123991991

python 双重差分_双重差分的理论与实践相关推荐

  1. python 双重差分_双重差分法(DID)介绍

    双重差分法,英文名Differences-in-Differences,别名"倍差法",小名"差中差".作为政策效应评估方法中的一大利器,双重差分法受到越来越多 ...

  2. python cnn 实例_基于CNN的纹理合成实践【附python实现】

    Q0: Preliminary knowledge of Texture Synthesis Baseline请见此处,下文所有的代码修改均建立此代码基础之上. 1. 纹理合成简述 ​纹理合成(Tex ...

  3. python 项目发布会_发布会直播技术及业务实践

    一.背景 随着直播行业的近年来的发展,直播技术现已日趋成熟.本文主要介绍目前主流的直播技术原理,以及在直播在发布会场景下的应用以及过程中遇到的问题及解决方案. 二.直播原理 2.1 流媒体技术 2.1 ...

  4. python数学编程_用Python编程解决数学问题

    编程中的逻辑算法和数学是一样的,掌握了编程技术,数学中的很多问题都能轻松解决了.比如Python是人工智能时代的热门语言,很多孩子从小就开始学习Python,今天南京小码王Python培训班老师就教教 ...

  5. ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)

    ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...

  6. python当型循环_对python while循环和双重循环的实例详解

    废话不多说,直接上代码吧! #python中,while语句用于循环执行程序,即在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务. #while是"当型"循环结构. i ...

  7. 差分隐私 机器学习_满足差分隐私的经验误差最小化方法

    手上的东西有点进行不下去,滚过来写专栏作下回顾.上次聊了聊差分隐私的定义,那么现在我们要在差分隐私的框架上实现机器学习任务. 关于差分隐私机器学习这个方向,Kamalika Chaudhuri 在ni ...

  8. 本地差分隐私 随机响应_局部差分隐私的新型实现方法

    董涛 刘芸菲 摘要:有效的隐私保护数据发布解决方案之一是局部差分隐私,随机响应是实现这种隐私保护模型的有效方式.对基于二次扰动的局部差分隐私实现方法进行了研究.为衡量D和D'的离散程度,在计算原始数据 ...

  9. 风险平价策略python代码_风险平价组合(risk parity)理论与实践

    本文介绍了风险平价组合的理论与实践:后续文章将对risk parity组合进行更深入探讨以及引入预期收益后的资产配置实战策略. 前言 资产配置是个很广泛的话题,在投资中是一个非常重要的话题 从使用场景 ...

最新文章

  1. 广东科技学院专插本c语言考卷_广东科技学院第二届红色文化节之红色影视经典配音大赛决赛...
  2. EPUB CFI 规范
  3. 福大软工1816 · 第七次作业 - 需求分析报告之拖鞋旅游队
  4. 2.Ridge Regression 岭回归
  5. 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和
  6. dataGridView 行头那一块儿空白是否可见的设置
  7. GCC常用选项使用详解
  8. python flask高级编程之restful_flask-restful使用总结
  9. linux自动断开会话,linux – 从SSH会话断开连接是否会导致程序崩溃?
  10. 浏览器的资源并发亲试
  11. 基于今日头条开源数据的词共现、新热词发现、短语发现
  12. 2月份13个jQuery最佳插件推荐
  13. 谁提供一个能用的ICHAT文字聊天室程序,急需
  14. PERT图事件、活动、松弛时间与关键路径的相关计算
  15. 如果你毕业想进央企, 那就选这些大学, 性价比很高
  16. 为什么网站总显示服务器不能创建对象,IE浏览器出现“Automation 服务器不能创建对象”解决教程...
  17. 怎么用u盘安装服务器系统,怎么安装原版Windows server 2008?U盘安装很省心
  18. 计算机原理与体系结构王海瑞答案,袁梅
  19. node 脚手架项目,快速删除 node_modules 包的 rimraf 命令
  20. PD等多协议快充诱骗触发器SINK(“Power Z 弟弟 Power Low”)DIY

热门文章

  1. educoder太原理工web程序设计——移动端电商页面制作
  2. Linux工具的基本使用
  3. python readline读文件,并且将其转化为数字形式时:ValueError: could not convert string to float:
  4. Windows 10创意者正式版下载
  5. GitHub搭建的个人博客发表文章
  6. 前端技能树,面试复习第 52 天—— 手写代码:Javascript 基础考核
  7. 单片机接收到红外对管的数据怎么用c语言程序传给led显示器,通过红外接口实现单片机之间的通信...
  8. P2895 [USACO08FEB]Meteor Shower S
  9. TWS耳机无线充电仓
  10. 智航学编程005(七彩虹)