本文是对最近上课的实践做了个总结。

值得一提的是,PSM、DID是一种计量分析工具,在实证研究中,比工具更重要的可能是如何构建因果分析框架。

PSM-DID的主要步骤如下:

  • PSM
  1. 计算倾向得分
  2. 以合适的匹配方法选择控制组(0)和处理组(1)
  3. 平衡性检验、检验匹配前后的偏差
  4. 如果是多个年份的面板数据,可每年都匹配一个控制组,重复1-3步后合并数据即可

DID

  1. 在PSM的基础上增加年份虚拟变量,生成年份虚拟变量和处理控制虚拟变量的交互项
  2. 跑回归
  3. 平行趋势图检验,安慰剂检验等稳健性检验

下面介绍在STATA的操作

参考文献

石大千, 丁海, 卫平, et al. 智慧城市建设能否降低环境污染[J]. 中国工业经济, 2018, No.363(06):119-137.

可以在工业经济网站下载该论文的数据附件

http://www.ciejournal.org/Magazine/show/?id=54281

网址无法直接在微信内打开,请复制后在浏览器打开或点击页尾的阅读原文

需要留意的是,由于附件中没有给出智慧城市的名单,我在网上找了一份,在处理数据过程中会多出合并数据merge这一步骤

下文回归方程的是ln_so,一氧化硫排放量的对数值

PSM

本文的数据是2005-2015年的面板数据,需要重复PSM的1-3步完成匹配,具体方法为:

  • 数据预处理
  1. merge命令合并数据

    merge m:1 city using 2012智慧城市名单 ,nogendrop if pop == .replace T = 0 if T == .
  2. 选择合适的控制变量,并取对数

    global xlist "pop zl gdp rgdp ex sgdp sl l so"foreach x in $xlist{  gen ln_`x' = ln(1 + `x')}
  • psmatch2命令匹配
  1. 计算倾向得分

    set seed 1000gen tmp = runiform()sort tmp
    
    global xlist "ln_pop ln_zl ln_gdp ln_rgdp ln_ex ln_sgdp ln_sl ln_l"psmatch2 T $xlist , n(3) out(ln_so) logit ate

    前三行的目的是根据psmatch2的help文件提示,为了保证结果可复现,需要设置种子并对数据排序。这里使用了1:3近邻匹配。关于psmatch2的其他匹配方法可以使用help psmatch2命令参考,或者参看本公众号另一篇文章——《PSM在STATA中怎么操作》

  2. 平衡性检验

    pstest $xlist ,both graph

    下图是2010年匹配后的结果,匹配前后控制组和处理组的偏差显著降低。匹配质量较好的情况下,偏差应降低到10%以内(即*号在横轴的10以内)。


  3. 匹配质量

    ***匹配前tw (kdensity _pscore if T == 1) ///   (kdensity _pscore if T == 0)
    
    **匹配后tw (kdensity _pscore if T == 1) ///   (kdensity _pscore if (T == 0& _weight != .))

    psmatch2命令运行后会生成_weight变量,当_weight变量不为空时,表示匹配成功。

    匹配前倾向得分的密度曲线重合度低,匹配后倾向得分的密度曲线重合度较高,密度较集中。

    理想情况下,匹配后倾向得分的密度曲线应高度重合。

    在实际操作中,建议使用graph export命令保存图片,否则运行中绘出来的图将一闪而过。

  • 匹配前


  • 匹配后



PSM的操作到此结束。在开始DID分析前,我们要去掉匹配不成功的城市(即_weight为空值的城市),并保存这一年的匹配结果,最后合并10年的数据。使用forvalues循环可以轻松解决10年的匹配、合并问题。

forvalues i = 2005/2015{preserve   keep if year == `i'  /*这里填写上面的PSM匹配代码*/   drop if _weight == .   save psm_`i',replacerestore}

use psm_2005,clearforvalues i = 2006/2015{    append using psm_`i'}

DID

DID的步骤比PSM稍简单,但事实上面板数据的分析涉及很多技术性计量问题,这不在本文的讨论范围内。

DID的计量方程为

上述方程省略了各类固定效应。其中:

是年份处理变量,政策实施前为0,政策实施后为1。

是控制组(0)、处理组(1)虚拟变量。

交互项的系数是我们关注的回归系数。

具体步骤如下:

  1. 生成不同城市对应的编号,并设置面板

    encode city , gen(city_)xtset year city_
  2. 生成上述三个回归系数

    gen time = (year>=2012)gen treat = Tgen did = time * treat
  3. 跑回归

    global xlist "ln_pop ln_zl ln_gdp ln_rgdp ln_ex ln_sgdp ln_sl ln_l"xtreg ln_so time treat didxtreg ln_so time treat did $xlist

    这一步关注的时变量did的系数。

    根据不同的论文不同的选材,可以选取不同的控制变量,并逐步添加固定效应。需要注意的是,若使用固定效应,timetreat项有时可以省略。

  4. 平行趋势检验

    这是DID的关键假设,实际论文写作时完全可以放在回归前检验。

    为了图形好看,我们使用各年中位数而不是各年均值来绘图。

    DID的平行趋势绘图可参考本公众号的另一篇DID文章——DID平行趋势怎么绘图?。

    bysort year T : egen median_so = median(so)
    
    twoway (connected median_so year if T == 1, msize(large) msymbol(square)        lwidth(thick) lpattern(solid)) ///       (connected median_so year if T == 0, msize(large)            msymbol(diamond) lwidth(thick) lpattern(dash)) ///     , graphregion(color(white)) xline(2012,lc(black) lp(dot)) ytitle(SO emission during 2005-2015 , size(small))  xlabel(2005(1)2015) legend(size(small))

    绘制的图形如下,上方的为处理组,下方的为控制组,在政策实施前,其一氧化硫排放量中位数趋势基本平行,政策实施后处理组的排放量明显下降。两曲线的差距在缩小(不平行)。


  5. 安慰剂检验

    一个方法是更改第2步中的time变量,即人为更改政策的实施时间,检验是否确实是政策发挥了作用。


写在后面:实际的实证研究中,数据的获取、预处理是很繁琐的,很多情况下比跑回归更困难更耗时的。

本推文的作者感谢石大千, 丁海, 卫平三位老师的论文和数据,可点击“阅读原文”直达《中国工业企业》网站。本文上述提及的数据和do文件可以通过下方连接获取。

链接:https://pan.baidu.com/s/1IVLjZYoPQAKW_LQouGx0XA 提取码:xeyh

stata psm命令_PSMDID在STATA中的操作——一个概述相关推荐

  1. mysql cmd grep_通过 mysqlbinlog 和 grep 命令定位binlog文件中指定操作

    1.binlog日志基本知识 MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗 ...

  2. mysql binlog grep_通过mysqlbinlog和grep命令定位binlog文件中指定操作

    1.binlog日志基本知识 MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗 ...

  3. linux 获取文件父目录权限,Linux 文件权限中,操作一个文件需要父目录的那些权限?...

    eudore:linux 文件权限中,操作一个文件需要父目录的那些权限? 是否需要检查每级目录?想找到一份完整规范正确的指导,自己在写检查 linux 用户文件权限的代码. 例如读取一个文件 /hom ...

  4. stata psm命令_伍德里奇先生的问题:PSM的配对小蝌蚪找妈妈

    ? 连享会主页:lianxh.cn ? 因果推断-内生性 专题   ⌚ 2020.11.12-15 ? 主讲: 王存同 (中央财经大学):司继春(上海对外经贸大学) ? 课程主页:https://gi ...

  5. stata psm命令_互助问答第301期:关于面板数据的PSM问题

    关于面板数据的PSM问题 老师: 您好!我在微信公众号上看到了互助问答第289期的详细解答,您在其中建议可找工具变量并指出方法服务研究而非指导研究这一观点,让我收益颇多,谢谢您!这里我还想再追加问一些 ...

  6. stata代码命令全集:跟检验do文件、stata常用命令、代码大合集、面板熵值法

     一.常用模型代码整理 1.数据来源: 2.时间跨度:无 3.区域范围:无 4.指标说明: 包含如下模型代码: l OLS模型 l Heckman两阶段模型 l PSM+DID模型 l 固定效应模型( ...

  7. Stata 新命令 readWind:快速读入并转换万德数据

      作者:朱红兵 (南京大学) Stata 连享会: 知乎 | 简书 | 码云   Stata连享会 精彩推文1 || 精彩推文2 前言:WIND 数据库是大家在科研路上常用的数据下载利器,但遗憾的是 ...

  8. Stata:如何处理固定效应模型中的单期数据-xtfesing

    全文阅读:Stata:如何处理固定效应模型中的单期数据-xtfesing| 连享会主页 目录 1. 简介 2. 理论背景 3. Stata 实操 4. 参考文献 5. 相关推文 1. 简介 固定效应模 ...

  9. Stata:外部命令的搜索、安装与使用

    原文链接:https://www.lianxh.cn/news/c2ab130d9873d.html 目录 1. 路径设置 2. 外部命令的下载 2.1 ssc 命令 2.2 search 命令 2. ...

最新文章

  1. Runtime编译环境搭建
  2. 课堂上我们为什么不发言
  3. 机器学习中的异常检测手段
  4. 比特币这么火热,看看这篇比特币初学者指南
  5. python字符串合并去重_Python合并同类项的字符串,一对多
  6. Golang 单元测试详尽指引
  7. gdb好文章:GDB十分钟教程
  8. python界面-(八)Python 图形化界面设计
  9. ad系统安装配置指南(java-jndi-ldap),AD系统安装配置指南(JAVA-JNDI-LDAP-Exchange)
  10. 当自己觉得特别迷茫的时候,是怎么走出这个困境的
  11. 连续翻页浏览器面临的共同问题
  12. 笔记本电脑计算机无法显示u盘,小编告诉你为什么笔记本电脑识别不了u盘
  13. a href=javascript作用
  14. 基于springboot的在线小说阅读平台设计与实现-计算机毕业设计源码+LW文档
  15. 跨境电商如何做好引流?做亚马逊速卖通独立站的看过来
  16. 2021-08-22dc6靶机实战wp插件漏洞利用+suid提权+rockyou+sudo -l换命令写shell+nmap运行nse提权(转)
  17. excel高效之删除空行
  18. 2023前端面试题及答案整理(JavaScript)
  19. 计算机工作过程的流程图,电脑画流程图工具哪个好?迅捷画图5分钟快速制作流程图...
  20. 数据仓库建设流程及概念

热门文章

  1. centos7安装mysql 的教程及mysql初始化操作
  2. python 偏函数应用
  3. Last.fm数据集主要属性:artist,album, and track name
  4. EasyX教程(一)续:画十字
  5. Android入门(一)——结构
  6. 免费的VISA汇率查询接口
  7. selenium 反爬虫之跳过淘宝滑块验证(2020/8)
  8. 毕业设计 基于javaWeb的图书销售管理系统的设计与实现
  9. html页面加载内容从左侧滑入,CSS 3从左过渡处滑入
  10. 程序员讨论 《黑客帝国》 (三) 情感