分享

双重差分倾向得分匹配(PSM

 晶晶晶晶323 2020-02-03

Angela镇楼,尽管是奔着CAROLE & TUESDAY去的,谁能想到被Angela圈了粉~

Angela的ED《not afraid》很好听。

Angela和Tao,意难平。

由于最近过于沉迷楠神的《政策信息学》,

so  鸽了好久欸(理直气壮.JPG)

我们来完整操作一遍吧。

PSM-DID,本质就是先利用PSM的手段进行分组,再利用DID计算政策效应。

outline

一、变量介绍及基础准备

二、计算p-score

  • 第一种 pscore程序

  • 第二种 psmatch2程序

  • 第三种 nnmatch

三、匹配前后的平衡情况

  • 第一种  psmatch2程序后估计

  • 第二种 核密度曲线前后对比

  • 第三种 diff里面的test support

四、双重差分

一、变量介绍及基础准备

因变量:政策实施可能带来的影响Y。

实验处理效应:是否实施某项政策(要求treatment effect严格外生,不存在内生性问题)。

匹配变量(协变量:使用尽可能多的协变量可以最大程度的满足“可忽略假设”

这里面可以认为实验处理效应D是一个格外关注的自变量,协变量Xi是控制变量。因此,对于Y和D的选择要直接相关,譬如说处理效应是“职业培训”,那么Y应该是工资;处理效应是“河长制”的建立,那么Y应该是河流治理水平;处理效应是“新药”,那么Y应该是寿命或者其他健康指标。

同样重要的是协变量的选取,有两大准则,首先当然和treatment effects垂直独立,其次是要在已有文献中研究能够对Y有影响的变量,譬如说

  • 李贲&吴利华(2018)研究开发区设立(D)和企业成长(Y)的关系,对于协变量的选取就是企业年龄(Age 及其二次项Age×Age)、企业规模(Scale)、企业资产收益率(ROA)、企业资本密集度(Clr)、企业杠杆率(Leverage)、企业融资约束(Finance)、企业工资水平(Wage)、国有控股虚拟变量(State)、地区虚拟变量以及行业虚拟变量作为匹配的特征变量。

  • Jiahuan Lu(2015)研究的是以绩效为基础的外包(D)和绩效(Y)之间的关系,协变量的选取包括State and service year、Demographic background、Race、Gender (female)、Veteran、Primary disability、Secondary disability、Preservice status、Employment services。

  • 石大千等(2018)研究的是智慧城市建设(D)和降低环境污染(Y),对于协变量的选取包括经济发展水平、城市化、对外开放、技术创新和产业结构。

  • Urban & Niebler(2014)研究的是在摇摆州投放广告(D)和总统竞选(Y)之间的关系,对于协变量取值包括该州的median household income, percent hispanic, percent african american, percen college graduates, and population density等。

此外,协变量的选取也应该符合一般线性回归,不存在多重共线性,不存在内生性等问题。

第一步 安装程序

安装psmatch2,pscore diff 等程序

* Download and install Stata ado files for psmatch2、diff

【ssc install psmatch2, replace
ssc install diff, replace】

第二步 变量定义

对自变量、因变量、treatment variable进行定义,如

* Define treatment, outcome, and independent variables

global treatment treatment
global ylist Score
global xlist mobile_phone internet gdp_pc ……
global breps 2000

这里面【breps】表示bootstrap抽样次数,一般200应该差不多。

*Define  panel data variable

encode city , gen(city2)
xtset city2 year

、计算p-score

之前的时候,小白上传的Ani Katchova老师的视频

里面的【pscore】程序,可以直接计算pscore

pscore estimates the propensity score (pscore) of the treatment on varlist (the control variables) using a probit (or logit) model and stratifies individuals in blocks according to the pscore; displays summary statistics of the pscore and of the stratification; checks that the balancing property is satisfied; if not satisfied asks for a less parsimonious specification of the pscore; saves the estimated pscore and - optionally - the block number. The estimated propensity scores can then be used together with attr, attk, attnw, attnd, and atts to obtain estimates of the average treatment effect on the treated using, respectively, radius matching, kernel matching, nearest neighbour matching (in one of the two versions: equal weights and random draw), and stratification, the latter using the block numbers as an input.

第一种 pscore程序

* Propensity score matching with common support
pscore $treatment $xlist, pscore(myscore) blockid(myblock) comsup

这个程序会比陈强老师书里面提到的psmatch2可以输出更为详细的匹配得分计算细节

第一张表告知实验组和控制组的频次等基本情况

第二张表显示倾向得分计算情况,不过看样子默认是用probit reg,我们待会用logit计算看看


紧接着的note告诉我们common support的范围。

common support中的p-score的描述情况,包括百分位数,样本数,均值,峰度等等

这个还有一个显著的优势就是“分区块”,保证区块内的实验组和对照组的pscore不存在统计学差异

紧接着的就是平衡性检验,如果平衡性检验通过了,就是黑色的字体告诉你“satisfied”,如果不满足就会是红色的warning字体,告诉你“unsatisfied”

如果遇到unsatisfied的情况,会告诉你是因为你选择的那个协变量导致common support过低,平衡性检验不通过,这时候我的建议是删除这个协变量。

回到data视图,可以看见新增了三个变量

第二步 进行匹配

①匹配方法选择

在实际进行匹配中,究竟应使用哪种具体方法或参数(比如k临近匹配的k取值,是否放回,如何处理并列),目前文献中尚未明确指明。一般认为,根据具体数据来选择具体方法。比如控制组个体不多,则应该进行有放回的匹配,如果存在较多具有可比性的控制组个体,则考虑一对多或核匹配,以提高匹配效率。在实践中,一般建议尝试不同的匹配方法,然后比较其结果(类似于敏感性分析);如果不同方法的结果相似,说明结果是稳健的,不依赖于具体方法,如果差异较大,则需要考察具体出现的原因。

我们看其他学者的做法,也是直接汇报采用了哪一种匹配方法

  • 徐志刚等(2018)采用的是核匹配方法,选择默认值0.06作为区间间隔。

  • Urban & Niebler(2014)采用了局部线性匹配、核匹配

  • Jiahuan Lu(2015)采用的是one-to-one nearest neighbor matching without replacement. A caliper is included to ensure that matched units are chosen only when the absolute distance between the two units is within the caliper. Higher powers and interaction terms of the covariates are added when necessary to achieve the best possible matching outcomes (Guo and Fraser 2010).

  • 李贲&吴利华(2018)借鉴Abadie et al.(2004)的研究,采用“k 近邻匹配”(k=4)方法;匹配时不允许并列,当存在倾向得分相同的并列个体, 按照数据排序选择。

  • 石大千等(2018)采用的是核匹配法

所以说,大家都没有说明为什么选这个方法。。。。

所以比较tricky的做法就是,把所有匹配方法都做一下,哪个效果最好汇报哪一个咯~

本狗

程序见下

* Nearest neighbor matching
attnd $ylist $treatment $xlist, pscore(myscore) comsup boot reps($breps) dots

* Radius matching
attr $ylist $treatment $xlist, pscore(myscore) comsup boot reps($breps) dots radius(0.1)

* Kernel Matching
attk $ylist $treatment $xlist, pscore(myscore) comsup boot reps($breps) dots

kernel matching运行起来好慢好慢好慢好慢好慢啊

* Stratification Matching
atts $ylist $treatment $xlist, pscore(myscore) blockid(myblock) comsup boot reps($breps) dots

第二种 psmatch2程序

psmatch2可以直接选择匹配的方法。程序的介绍详见陈强老师P545页。

需要注意的是,

  • 默认程序里面估计方法是probit,不过我们常用的是logit,

  • 默认是全部匹配,common表示只仅对common support内的个体进行匹配,最好用common。

  • 默认是仅汇报ATT,可以用ate补充汇报ATT, AUT, ATT

采用不同的匹配方法

* Matching methods 

* K neighbor matching K临近匹配

psmatch2 treatment $xlist, neighbor(1) logit  out(score)

会输出很多新的变量

如果我们选择【psmatch2 treatment $xlist, neighbor(1) logit  ate common out(score)】

会多输出ATU ATE以及_score -n1等值

* Radius matching 

psmatch2 treatment $xlist, radius logit  

* Kernel Matching

psmatch2 treatment $xlist, kernel  logit

欸,用psmatch2的kernel匹配比pscore程序快很多欸

第三种 nnmatch程序

一些学者还喜欢借鉴Abadie et al.(2004)的研究,采用“k 近邻匹配”(k=4)方法;匹配时不允许并列,当存在倾向得分相同的并列个体, 按照数据排序选择;并选择作为匹配的特征变量。

记得安装一下nnmatch

程序安装

*Abadie et al.(2004)的程序

nnmatch score treatment $xlist, tc(att) m(4) bias(bias)

这个程序运行起来会比较慢。bias可以不用。

原文示例

小白自己的结果见下。

三、匹配前后的平衡情况

在进行PSM-DID 估计前,还需进行模型有效性检验。其中首先需要检验匹配后各变量实验组和控制组是否变得平衡, 也就是说实验组和控制组协变量的均值在匹配后是否具有显著差异。如果不存在显著差异,则支持使用PSM-DID 方法。

H0:实验组与控制组协变量之间无显著差异。

第一种 psmatch2后估计

刚才的psmatch2还有一个优点就是,自带两个“估计后命令”(post-estimation commands),分别用来检验匹配后数据是否平衡,以及画图显示倾向得分的共同取值范围。

输入

【pstest $xlist, both graph】

会输出两张表,第一张介绍匹配前后不同维度的协变量的t检验。结果非常理想。

Ideally, after the matching procedure, the absolute standardized difference of covariate means should be less than 5%, and the t-statistic should no longer be significant (D’Agostino 1998; Haviland, Nagin, and Rosenbaum 2007).

可以看见,match以后,所有的协变量T检验都不显著了

其次就是输出匹配前后的对比图


重点看匹配以后的值是否接近0,一般只要小于10%就可以接受。

另外一个post-estimation command 是直方图

输入【psgraph, bin(20)】

这个图有点奇怪,没有区分on support和off support。没有查到原因,

要不然正常情况下输出应该是这样的

第二种 绘制匹配前的密度函数图

第一步,绘制匹配前的密度函数图

 *-(a)before matching: 匹配前的密度函数图

        twoway (kdensity _ps if treatment==1,lp(solid) lw(*2.5))      ///

               (kdensity _ps if treatment==0,lp(dash)  lw(*2.5)),     ///

            ytitle("核密度")                                      ///

ylabel(,angle(0))                                      ///

            xtitle("倾向得分值")                             ///

xscale(titlegap(2))                                    ///

            xlabel(0(0.2)0.8, format(%2.1f))                       ///

            legend(label(1 "实验组") label(2 "控制组") row(2)  ///

                   position(12) ring(0))                            ///

            scheme(s1mono) 

         graph export "01.wmf", replace fontface("Times New Roman")   

效果图见下:

第二步,绘制匹配后的倾向得分图

采用psmatch2计算匹配后的p-score

 psmatch2 t $xlist, neighbor(1) logit  out(score) 

 *-(b)after matching: 匹配后的密度函数图

        twoway (kdensity _ps if  treatment==1,lp(solid) lw(*2.5))         ///

               (kdensity _ps if  treatment==0&_wei!=.,lp(dash) lw(*2.5)), ///

               ytitle("核密度") ylabel(,angle(0))                    ///

               xtitle("倾向得分值") xscale(titlegap(2))         ///

               xlabel(0(0.2)0.8, format(%2.1f))                       ///

               legend(label(1 "实验组") label(2 "控制组") row(2)  ///

                      position(12) ring(0))                            ///

               scheme(s1mono) 

        graph export "02.wmf", replace fontface("Times New Roman")    

效果图见下:

在匹配后实验组和控制组倾向得分值的概率密度已经比较接近,说明匹配效果较好。因此,在共同支撑假设基础上进一步证明了PSM-DID方法的可行性和合理性。

第三种 diff里面的test support

*检验匹配后各变量实验组和控制组是否变得平衡

diff score,t($treatment) p(t_2012) kernel id(city2) logit cov($xlist)  test support

判断匹配过程的有效性主要可以从匹配前后的t 统计量的变化、匹配前后标准偏差的变化两个方面来看:①从t 统计量的变化中可以发现,特征变量在匹配之后均不再具有显著差异【红色方框显示】。从各协变量的检验结果看,匹配后所有变量均不存在显著性差异,而结果变量score存在十分显著的差异,从而证明使用PSM-DID 方法是合理的。

②匹配后标准偏差的绝对值越小,说明匹配的效果越好;Rosenbaum and Rubin(1985)认为若匹配后标准偏差的绝对值能够小于20%,则匹配处理是有效的。根据匹配过程中处理组与对照组的平衡性检验结果,差不多20%,还差一点点理想。

【diff score,t($treatment) p(t_2012) kernel id(city2) logit cov($xlist)  report support】

上面这个表格还可以进一步整理成为类似下面的表格

四、双重差分

一、没有匹配的普通差分

所谓“双重差分估计量”(difference-in-differences estimator),指实验组的平均变化与控制组的平均变化之差。采用DID可以剔除实验组与控制组“实验前差异”(pretreatment differences);双重差分的隐含假设是,即使没有政策变化,控制组与实验组的时间趋势也一样。

倍差法(Difference-in-Differences)不要求假设实验组和控制组样本在实验前同质,它是在假设实验组和控制组前后变化趋势相同的情况下,通过两次差分来计算实验处理效应对实验组的平均处理效应ATT(Blundell R. and Dias M. C.,2002)。但是采用倍差法的假设是遵循“共同趋势”假设,否则参数估计结果会有偏差(Heckman et al.,1998)。

尽管刚才我们提到了【diff】,但我们还是follow Jiahuan Lu(2015)等学者的做法,手工计算。

Puhani (2012) and Karaca-Mandic, Norton, and Dowd (2012) further demonstrate that with DID models only, the incremental effect of the coefficient of the interaction term could approximate the treatment effect on the treated.

写出DID的回归方程

Y= β0+β1Treatment + β2Policy+ β3Treatment *Policy+εit

其中policy表示政策效果,为政策效果虚拟变量,实施某政策前为0,实施后为1。

汇报表格也和Jiahuan Lu(2015)一样,首先汇报DID结果

程序【xtreg $ylist t_2012 treatment jh $xlist,re r】

其中,t_2012是上面的政策效果虚拟变量,2012年及以前为0,2012年以后为1

jh为政策效果虚拟变量和实验效果的交互项。

交互项显著表示政策效果有效。

二、匹配以后的差分

我们采用一对一无放回邻匹配

程序

【psmatch2 treatment $xlist, neighbor(1) logit  ate common out(score) noreplacement】

结果会多出来几个变量,其中比较重要的是生产了新的对照组

PSM-DID是指基于PSM结果进行的DID。

所以DID的程序是一样的,只不过变量改变了。

生成新的交互项

gen newjh=_treated*t_2012

再跑一遍DID

xtreg $ylist t_2012 _treated newjh $xlist,re r, if _support==1

一般而言不会再去汇报普通DID的结果了,直接汇报PSM-DID结果。和刚才的普通DID相比,样本量显著的降低了。但是交互项的显著性还是不变的。

完结撒花✿✿ヽ(°▽°)ノ✿

关于PSM-DID我还是一知半解,如果有比较了解的大佬,还望帮忙挑出毛病和指导一下~~

参考文献

田利辉,王可第.社会责任信息披露的“掩饰效应”和上市公司崩盘风险——来自中国股票市场的DID-PSM分析[J].管理世界,2017(11):146-157. 

李贲,吴利华.开发区设立与企业成长:异质性与机制研究[J].中国工业经济,2018(04):79-97. 

Lu J. The performance of performance-based contracting in human services: a quasi-experiment[J]. Journal of Public Administration Research and Theory, 2015, 26(2): 277-293.

石大千,丁海,卫平,刘建江.智慧城市建设能否降低环境污染[J].中国工业经济,2018(06):117-135.

Urban C, Niebler S. Dollars on the Sidewalk: Should US Presidential Candidates Advertise in Uncontested States?[J]. American Journal of Political Science, 2014, 58(2): 322-336.

何文盛,姜雅婷,唐序康.行政审批制度改革可以提升地方政府绩效吗?——基于中国15个副省级城市2001—2015年面板数据的分析[J].公共行政评论,2019,12(03):118-138+192-193.

徐志刚,宁可,钟甫宁,纪月清.新农保与农地转出:制度性养老能替代土地养老吗?——基于家庭人口结构和流动性约束的视角[J].管理世界,2018,34(05):86-97+180.

彩蛋

先获得每年的处理组和对照组样本,如果使用的是“渐进式”DID 方法,需要将样本按照进入年份逐年进行匹配。

我前几天无所事事查文献的时候,看见了Gary King 18年的这篇《Why Propensity Scores Should Not Be Used for Matching》,还是比较新。虽然看见Gary king我就想起他提出的半监督学习的Readme程序bug过多,害我花了很久时间都没有搞出来(记小本本),但是我还是仔细拜读了一下。总体和我们这篇操作是唱反调的,p-score不适用匹配。

感悟

其实刚开始接触PSM-DID的时候走了很多很多很多很多弯路啊。这篇专栏一度流产。知道论文的ddl来了。。我果然还是ddl驱动的。

最大的感悟就是,JPART不愧是我最爱的期刊。

真的,管理世界和JPART这两个期刊对学方法的人来说简直太友好了,每一个步骤都讲得很详细,AJPS经管“数据公开”,可是经常复制不出来文章中的结果,很多书里面的都是理论,没有操作细节。JPART就好圈粉。detailedly&systemly。

尤其是Jiahuan Lu(2015)的这篇文章太令我感动了,比较少人在跑回归前还检验异方差并校正,都是直接用个robust或者普通ols。说好的跑ols要满足高斯马尔科夫定理,但是很少人遵守。感动。T^T

我一定要强迫我们南霸天老师也看!!!!

吃我安利!!!!!!!

小白和南霸天的日常

Angela结尾。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多