目录

  • 平行性趋势检验
  • 安慰剂检验

本来打算把DID讲一讲,结果网页上一搜,讲DID的还是挺多的,另外DID相对于RD好理解得多,也没有什么需要着重解释的东西,所以就直接写写平行性趋势检验和安慰剂检验over。第一次写博客,这个专栏断断续续两个多月才完成,总体来说我还是挺满意的,哈哈哈哈。以后stata也没啥好讲的,有机会用这个博客写写数据分析的随笔(当然也要看我input怎么样)。Stata系列最后一篇,完结撒花~~

平行性趋势检验

  1. 时间趋势图
    平行性趋势检验最简单粗暴的方法就是画时间趋势图,将控制组和对照组随着时间的趋势在同一张图中表现出来,如果事件前两组趋势平行,事件后,两组的趋势开始产生差异,说明DID的前提性假设成立。具体如何画图请参考画线性图。
    这里需要注意的一点是,如果你的数据频率比较高,时间跨度大(如日度数据,持续三年),最好将原始数据以月份或者季度为单位取均值,这样图形看起来比较清晰,从而不会被误会没有进行平行性趋势检验(别问我怎么知道的)。
  2. 画系数与置信区间图
    这个方法更为科学令人信服,依然用我们前面说的日度数据、持续三年举例子,如果政策实施时间点为最后一年,那么我们使用季度(或者半年度)的虚拟时间变量与treatment group产生交互,形成一个具有多个交互项的回归式。
    我们传统的DID模型是这样:
    y c t = β 0 + β 1 p o s t c + β 2 t r e a t t + δ p o s t c × t r e a t t + λ X c t + ξ c t y_{ct}=\beta_{0}+\beta_{1}post_{c}+\beta_{2}treat_{t}+\delta post_{c}\times treat_{t}+\lambda X_{ct}+\xi_{ct} yct​=β0​+β1​postc​+β2​treatt​+δpostc​×treatt​+λXct​+ξct​
    在这里我们需要画图的DID模型变成这样:
    y c t = β 0 + ∑ i = 0 N β 1 i t i m e i + β 2 t r e a t t + ∑ i = 0 N δ i t i m e i × t r e a t t + λ X c t + ξ c t y_{ct}=\beta_{0}+\sum_{i=0}^N \beta_{1i}time_{i}+\beta_{2}treat_{t}+\sum_{i=0}^N \delta_{i} time_{i}\times treat_{t}+\lambda X_{ct}+\xi_{ct} yct​=β0​+i=0∑N​β1i​timei​+β2​treatt​+i=0∑N​δi​timei​×treatt​+λXct​+ξct​
    最终我们需要画出的就是 δ i \delta_{i} δi​以及它的置信区间图。结果中,如果在政策实施前, δ i \delta_{i} δi​的值为0或者置信区间包括0,政策后,该值不为0,则假设成立。
    如何完成这幅图,首先我们要先写出回归公式(参照第二个回归方程),这里大家就根据自己的模型去写,这里要注意的是,在回归前,我们需要把交互项先乘出来,不要直接在reg里写i.post#i.treat
* inter_*表示treat和time_*的交互项 *
reg y i.treat i.time_* inter_*

然后使用coefplot画出置信区间和系数图

coef, keep(inter_*)   vertical  addplot(line @b @at)

vertical的意思是回归系数在Y轴上表示,addplot选项是把各回归系数的点用直线连接起来,addplot里的选项照抄就行。最后画出来的图是这样,我这个图的结果根本就不好,只是给大家一个图形范例。

安慰剂检验

相信大家都碰到300+次随机取post(或treat)进行反事实检验,将关注变量的回归系数画成分布图,这个分布图的结果通常分布在0附近,与文章本身基准回归结果存在较大差异,从而证明基准回归结果的得出不是偶然。

** 这是随机指定post(政策执行时间)的代码 **
forvalue i=1/LOOP_TIME{  //loop_time处填入你要进行安慰剂检验的次数use "simdid.dta", clear  //调入数据,自己去看你的数据路径drop post //去掉原来DID中的post变量gen random_digit=ceil(runiform(1,1028)) //我的数据时间是1028天,根据自己的数据填,通过encode来生成数字化时间变量replace random_digit = random_digit[1]g new_post= (date>random_digit[1])set matsize 11000g x = new_post*treatreg y i.new_post i.treat x ,vce(cluster citycode)g _b_new_post= _b[x]  //提取x的回归系数g _se_new_post= _se[x] //提取x的标准误keep_b_new_post  _se_new_postduplicates drop _b_new_post, forcesave placebo`i', replace  //把第i次placebo检验的系数和标准误存起来
}* 纵向合并loop_time次的系数和标准误 *
use placebo1, clear
forvalue i=2/LOOP_TIME{append using placebo`i' //纵向合并1000次回归的系数及标准误
}  gen tvalue= _b_new_post/ _se_new_post
kdensity tvalue, xtitle("t值") ytitle("分布") tline(-17.805 , lp(dash) lc(black) )  tlabel(-17.805 , add  labsize(*.75)) //-17.805是我基准回归中的系数,这里也改成你基准回归中系数* 删除临时文件 *
forvalue i=1/loop_time{erase  placebo`i'.dta
}
save 123.dta
** 这是随机指定treat变量的代码 **
forvalue i=1/LOOP_TIME{ //loop_time处填入你要进行安慰剂检验的次数use "simdid.dta", clear  //调入数据drop treat //去掉原来DID中的post变量gen random_digit1=ceil(runiform(1,285)) //生成随机数,我这里treat+control group共有285个个体g new_treat=0forvalue j=1/28{ //指定28个个体为treatment groupreplace new_treat=1 if citycode==random_digit1[`j']} //citycode是我有285个个体(城市),依然通过encode为它们生成的数字变量)* 合并,回归,提取系数 *set matsize 11000g x = post*new_treatreg y i.post i.new_treat x,vce(cluster citycode)g _b_new_treat = _b[x]  //提取x的回归系数g _se_new_treat = _se[x] //提取x的标准误keep _b_new_treat  _se_new_treatduplicates drop _b_new_treat, forcesave placebo`i', replace  //把第i次placebo检验的系数和标准误存起来
}* 纵向合并loop_time次的系数和标准误 *
use placebo1, clear
forvalue i=2/loop_time{append using placebo`i' //纵向合并1000次回归的系数及标准误
}  gen tvalue= _b_new_treat/ _se_new_treat
kdensity tvalue, xtitle("t值") ytitle("分布") tline(-15.253 , lp(dash) lc(black) ) tlabel(-15.253 , add  labsize(*.75)) // 我基准回归的值为-15.253* 删除临时文件 *
forvalue i=1/loop_time{erase  placebo`i'.dta
}
save 123.dta,replace

代码不是我原创,是我根据Stata如何做1000次安慰剂检验改编,可能会更适合DID。

References
https://zhuanlan.zhihu.com/p/136685666
https://zhuanlan.zhihu.com/p/53906368
coefplot官方文档

如何用Stata完成(shui)一篇经济学论文(十五):平行性趋势检验与安慰剂检验相关推荐

  1. 【Stata】利用Stata快速完成一篇实证论文的模板(代码分享)

    目录:利用Stata快速完成一篇实证论文的模板 一.数据整理 二.描述性统计 三.相关性分析 四.共线性诊断 五.模型选择检验 六.检验结果,应该选择固定效应回归分析 七.滞后效应 八.分组回归 九. ...

  2. LINUX学习基础篇(三十五)日志管理

    LINUX学习基础篇(三十五)日志管理 日志管理 系统中常见的日志文件 日志文件格式 rsyslogd服务的配置文件 日志轮替 logrotate配置文件 配置文件夹 /etc/logrotate.d ...

  3. 如何用Stata完成(shui)一篇经济学论文(九):画线性图

    目录 普通线性图 多图并列 一图多线 什么?为什么只讲线形图?因为我只用过线形图- 言归正传,我的确只用过线形图(说了跟没说一样-).Stata画图给我的感觉一直都是很复杂.很多命令,我觉得好像也没有 ...

  4. 如何用Stata完成(shui)一篇经济学论文(四):数字相关

    文章目录 数字的运算 生成随机数 数据导入Stata后,我们的第一件事就是打开数据面板看一眼,在命令栏输入"bro"后按回车键或点击菜单栏下的这个图标查看数据. 可以看到我的数据列 ...

  5. 如何用Stata完成(shui)一篇经济学论文(十二):描述性统计、回归与结果保存

    文章目录 描述性统计 回归命令 结果保存 描述性统计 描述性统计的命令我一般使用summerize,用法为summerize加上你所想要总结的变量名称,如果summerize后什么都不加,则表示描述所 ...

  6. 如何用Stata完成(shui)一篇经济学论文(十三):断点回归(上)

    目录 连续性检验:检验配置变量 断点处变化的唯一性:前定变量的检验 断点回归涉及的知识点挺多的,相关文章介绍也很详细了,相信香樟的[经典回顾]运用断点回归设计做研究的规定动作大家都已经看过(没看过赶紧 ...

  7. 如何用Stata完成(shui)一篇经济学论文(一):软件安装与语法规范

    目录 Stata软件的安装 语法规范 Stata软件的安装 Stata软件的安装途径:1.学校一般会买正版软件:2.自行搜索,网上很多,随便下一个就行,听说15.1以上支持中文,不过我觉得影响不大,反 ...

  8. 深度学习核心技术精讲100篇(六十五)-万字长文从ReLU到GELU通讲神经网络激活函数

    前言 在计算每一层的激活值时,我们要用到激活函数,之后才能确定这些激活值究竟是多少.根据每一层前面的激活.权重和偏置,我们要为下一层的每个激活计算一个值.但在将该值发送给下一层之前,我们要使用一个激活 ...

  9. R语言实战应用精讲50篇(二十五)-时空数据统计模型:确定性预测模型

    前言 本章的主要目的是详细讨论时空统计建模的三个目标: 在给定时空数据的空间新位置进行预测 用时空数据进行参数推断 预测未来的新值 我们还强调了在我们的预测.参数估计和预测中量化不确定性的重要性.我们 ...

最新文章

  1. Pymol | Pymol绘制GridBox图
  2. buildPyramid函数
  3. 实现局部动态的3种建议
  4. 白盒测试中几种逻辑覆盖法及其优缺点
  5. Python使用RSA+MD5实现数字签名
  6. js模块封装示例_AngularJS模块教程示例
  7. 科技部:中国131家独角兽企业 名单文字版
  8. 在线把pdf文件转换成word详细教程
  9. 百面机器学习03-经典算法
  10. google提示这个不是私密连接
  11. 划词翻译脚本--AutoHotkey
  12. Kali/Ubuntu GVM (openvas)安装及使用
  13. 〖Python 数据库开发实战 - Python与MySQL交互篇③〗- MySQL Connector的事务控制与异常处理
  14. 最常用算法汇总(一)
  15. 百度语音合成模型Deep Voice3
  16. FaceBook中国程序员之死,38岁跳楼轻生,压力让他生不如死!
  17. 办公用计算机的配置,各取所需硬道理 办公用电脑配置如何选
  18. 阿里云客户案例——周大福珠宝集团
  19. 带你揭秘学习编程的7大优势!还有可以提升文化课的成绩?
  20. Mac 下截图聚焦、局部放大、按键 GIF 录屏的最佳实践

热门文章

  1. MinGW64安装及环境配置
  2. “让机器像人一样思考”2022年北京科技周AI科普课堂完美收官
  3. 高新技术企业怎么申报评分
  4. 点分十进制字符串IP和32位int整数互转Java实现
  5. 网商银行×SOFAStack:首家云上银行的微服务架构实践与演进
  6. 【PHP基础】PHP概述及简单语法
  7. CANOE学习(5) CAPL简介
  8. 基于Linux的c语言知识
  9. 人工神经网络的发展趋势,神经网络前沿理论研究
  10. html让矩形块向上浮动,CSS的浮动