PSM+DID

PSM-DID 模型是由倾向得分匹配模型 (Propensity Score Matching,以下简称 PSM) 和双重差分模型 (Differences-in-Differences,以下简称 DID) 结合而成。其中,PSM 负责为受处理的个体筛选对照个体,DID 负责识别政策冲击所产生的影响。

PSM 适用于截面数据,而 DID 适用于面板数据。针对二者适用范围不同的问题,学者们一般有两种解决方案:

  • 一是将面板数据直接转化为截面数据进行处理;

  • 二是在面板数据的每期截面上进行逐期匹配

1.  “自匹配” 问题

将面板数据直接转化为截面数据处理,会产生不同期样本匹配的问题,这使得最终的识别结果中掺杂了大量时间趋势信息。而且,匹配变量 x  越多,给予的约束越强,发生 “自匹配” 的概率就越大。

2. 逐期匹配的不足

如果选择逐期匹配的方案,即在每期截面上都进行一次匹配,虽较好地解决了样本不同期匹配的问题,但可能还会受到其他问题的困扰。

首先是特殊类变量的错配。特殊类变量 (x) 是指包含众多不可观测信息,在实际研究中需要对照组与处理组在该变量上保持相同的种类变量。比如研究产品质量时,需要保证处理组与其对照企业在行业上相同 (产品种类相同)。然而 PSM 模型采用估计的倾向得分值 p 做配对时,对照组中可能存在一个与 i 不同种类的个体l ,且l  与i  在 p 值上的间距小于s  类中所有个体,按照 “1:1 最近邻” 的匹配原则,l 便与 i 成功配对,尽管它们属于不同种类。

其次,当数据类型为非平衡面板数据时,逐期匹配会因数据缺失而产生一定的缺失偏误。例如如图 3 中 (a) 所示,最优的匹配对象是数据出现了缺失,因此识别结果中可能包含因数据缺失而造成的匹配偏误,且偏误随数据缺失程度的增加而增大。

此外,对照组的不稳定性 (处理组个体的匹配对象在冲击前后发生了变化) 也会产生部分匹配偏误。对照对象在冲击前后同样发生了较大改变。

3.  解决方法

如果 PSM 模型筛选所得的对照组兼具可比性和稳定性,则 PSM-DID 模型的识别结果将更加稳健可靠。

可以看出,改进方法中的关键点如下:

  • 首先,匹配变量搜寻完毕后,还要从中判断是否存在特殊类变量 x ;

  • 其次,在面板数据的每个截面上进行逐期回归,计算每个个体每一期的ps  值;

  • 最后,对样本个体在ps   值序列间进行匹配。

据此,我们便可得到具有可比性和稳定性的对照组 (种类相同并且状况相似,且冲击前后为相同个体),从而保证了 DID 模型分析的有效性。

4. stata代码

webuse nlswork  //使用系统自带数据库
xtset idcode year, delta(1)  //设置面板
xtdescribe   //描述一下这个面板数据情况

gen age2= age^2
gen ttl_exp2=ttl_exp^2
gen tenure2=tenure^2

global xlist "grade age age2 ttl_exp ttl_exp2 tenure tenure2 not_smsa south race"
sum ln_w $xlist  //统计描述相关变量

**DID方法
gen time = (year >= 77) & !missing(year)  //政策执行时间为1977年
gen treated = (idcode >2000)&!missing(idcode) //政策执行地方为idcode大于2000的地方
gen did = time*treated  //这就是需要估计的DID,也就所交叉项

reg ln_w did time treated $xlist //这就是一个OLS回归,也可以用diff命令
xtreg ln_w did time treated $xlist i.year, fe //也可以这去做,会省略掉一个虚拟变量

**PSM-DID方法
** PSM的部分
set seed 0001 //定义种子
gen tmp = runiform() //生成随机数
sort tmp //把数据库随机整理
psmatch2 treated $xlist, out(ln_w) logit ate neighbor(1) common caliper(.05) ties //通过近邻匹配,这里可以要outcome,也可以不要它
pstest $xlist, both graph  //检验协变量在处理组与控制组之间是否平衡
gen common=_support
drop if common == 0  //去掉不满足共同区域假定的观测值
*drop _weight ==0  //也有情况是把没有匹配的直接删除

** DID的部分,根据上面匹配好的数据
reg ln_w did time treated $xlist 
xtreg ln_w did time treated $xlist i.year, fe

DID方法需要满足的五个条件检验

**1.共同趋势假设检验

tab year, gen(yrdum) //产生year dummy,即每一年一个dummy变量

forval v=1/7{gen treated`v'=yrdum`v'*treated}                    

 //这个相当于产生了政策实行前的那些年份与处理虚拟变量的交互项

xtreg ln_w did treated*  i.year ,fe  //这个没有加控制变量

xtreg ln_w did treated* $xlist i.year ,fe //如果did依然显著,且treated*这些政策施行前年份交互项并不显著,那就好

xtreg ln_w did treated* $xlist i.year if union!=1 ,fe //我们认为工会会影响这个处理组和控制组的共同趋势,因此我们看看union=0的情形


**2.政策干预时间的随机性

gen time1 = (year >= 75) & !missing(year)  //政策执行时间提前到1975年
gen treated1= (idcode >2000)&!missing(idcode) //政策执行地方为idcode大于2000的地方
gen did1 = time1*treated1  //这就是需要估计的DID,也就所交叉项

gen time2 = (year >= 76) & !missing(year)  //政策执行时间提前到1976年
gen treated2= (idcode >2000)&!missing(idcode) //政策执行地方为idcode大于2000的地方
gen did2 = time2*treated2  //这就是需要估计的DID,也就所交叉项

xtreg ln_w did1 $xlist i.year,fe 
xtreg ln_w did2 $xlist i.year,fe //看看这两式子里did1和did2显著不


**3.控制组将不受到政策的影响

gen time = (year >= 77) & !missing(year)  
gen treated3= (idcode<1600 & idcode>1000)&!missing(idcode) //我们考虑一个并没有受政策影响地方假设其受到政策影响
gen did3 = time*treated3  
xtreg ln_w did3 $xlist i.year,fe //最好的情况是did3不显著,证明控制组不受政策影响


**4.政策实施的唯一性,至少证明这个政策才是主要影响因素

gen time = (year >= 77) & !missing(year)  
gen treated4= (idcode<3000 & idcode>2300)&!missing(idcode) //我们寻找某些受到其他政策影响的地方
gen did4 = time*treated4  
xtreg ln_w did4 $xlist i.year,fe //did4可能依然显著,但是系数变小,证明还受到其他政策影响


**5.控制组和政策影响组的分组是随机的

xi:xtivreg2 ln_w (did=hours tenure) $xlist i.year,fe first 

//用工具变量来替代政策变量,解决因为分组非随机导致的内生性问题

**附加的,一般而言,我们需要看看这个政策的动态影响

forval v=8/15{gen treated`v'=yrdum`v'*treat  }               

//注意,这里yrdum8就相当于year=78
reg  ln_w treated* 

xtreg  ln_w treated*, fe

xtreg ln_w treated* i.year,fe

xtreg ln_w treated* $xlist i.year,fe  //一般而言上面这些式子里的treated*应该至少部分显著

  • 37
    点赞
  • 280
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值