当前位置:   article > 正文

stata:DID双重差分模型基础作业_双重差分模型stata命令

双重差分模型stata命令

目录

一、双重差分模型(DID)基本介绍

1.1传统DID模型

(1)传统命令

(2)  外部命令:diff

1.2双向固定DID模型(更常用)

(1) reg

(2) xtreg

(3) areg

二、DID的检验

2.1DID的三个前提假设

2.2平行趋势检验(动态效应检验)

2.3政策外生性检验

2.4安慰剂检验

三、实证过程


以下题为例:

核心变量的描述性统计

· sum

可以得出id为个体变量,year为时间变量,treatment为分组虚拟变量,post为分期虚拟变量,did为treatment和post的交互项;

  1. . sum id year treatment post did lnpgdp
  2. Variable | Obs Mean Std. dev. Min Max
  3. -------------+---------------------------------------------------------
  4. id | 735 25 14.15177 1 49
  5. year | 735 2009 4.323436 2002 2016
  6. treatment | 735 .1428571 .3501654 0 1
  7. post | 735 .2666667 .4425178 0 1
  8. did | 735 .0380952 .1915566 0 1
  9. -------------+---------------------------------------------------------
  10. lnpgdp | 735 9.852075 .9338246 7.095918 11.77851

一、双重差分模型(DID)基本介绍

DID的两种常见形式

注意:

1.区分分期虚拟变量(政策实施虚拟变量)和时间虚拟变量;前者只有0和1两种取值,代表是否实施了政策,而后者则是区分各种不同的时间,通常T个时间段有T-1个时间虚拟变量。相应有 分期效应 和 时间效应 两种。

2.区分分组虚拟变量个体变量;前者只有0和1两种取值,代表是否属于处理组,后者则是区分不同的个体。相应的也有 组间异质性 和 个体异质性 两种。

3.DID模型不要求政策实施前后所选的样本完全一致。(若一致,可以使用双向固定DID模型;若不一致,使用传统DID模型)

1.1传统DID模型:

适用范围:非面板模型,在政策实施前后选用的样本不相同(只要保证时间趋势相同即可)。此时,个体效应时间效应分别用对应的分组和政策实施时间虚拟变量来粗糙替代。

(1)传统命令

  1. · reg y did X i.t i.dt,r
  2. t:分组虚拟变量,t=0为treatment组,t=1control
  3. dt:政策实施时间虚拟变量
  4. did:t*dt 双重差分模型的核心解释变量
  5. X:控制变量
  6. i.t:粗糙的组间异质性,替代个体效应;
  7. i.dt:粗糙的分期时间效应,替代时间效应;

(2)  外部命令:diff

· diff y,treat(t) period(dt) cov(X) robust

1.2双向固定DID模型(更常用)

适用范围:面板模型,在政策实施前后研究的样本保持不变。此时,个体效应与个体效应的设置与双向固定面板效应类似。

法一:reg

  1. reg lnpgdp did $cv i.id i.year,vce(cluster id)
  2. //$cv为使用设定的全局变量(此处为控制变量)
  3. Linear regression Number of obs = 608
  4. F(21, 43) = .
  5. Prob > F = .
  6. R-squared = 0.9800
  7. Root MSE = .12897
  8. (Std. err. adjusted for 44 clusters in id)
  9. ------------------------------------------------------------------------------
  10. | Robust
  11. lnpgdp | Coefficient std. err. t P>|t| [95% conf. interval]
  12. -------------+----------------------------------------------------------------
  13. did | .1612596 .0424702 3.80 0.000 .0756103 .2469089
  14. popden | -2.83359 4.271172 -0.66 0.511 -11.44723 5.780049
  15. sav | -.826351 .1212829 -6.81 0.000 -1.070941 -.5817607
  16. industry | .123654 .0352388 3.51 0.001 .0525882 .1947198
  17. non_agri | -1.220827 .3814877 -3.20 0.003 -1.990171 -.4514841
  18. welfare | -.0013941 .0021004 -0.66 0.510 -.00563 .0028417
  19. fdi | -.4705762 .6373817 -0.74 0.464 -1.755979 .8148265
  20. exp | .1311563 .0920516 1.42 0.161 -.0544835 .316796
  21. |
  22. id |
  23. 2 | -.599242 .0829293 -7.23 0.000 -.7664849 -.431999
  24. 3 | -.4309197 .0438624 -9.82 0.000 -.5193766 -.3424628
  25. 4 | .0159189 .0823923 0.19 0.848 -.1502411 .1820789
  26. 5 | .6129284 .2612016 2.35 0.024 .0861651 1.139692
  27. 6 | .8708063 .1940028 4.49 0.000 .4795624 1.26205
  28. 7 | .5938385 .1355898 4.38 0.000 .3203956 .8672815
  29. 8 | .5970364 .1555135 3.84 0.000 .2834135 .9106592
  30. 9 | -.2133781 .0503604 -4.24 0.000 -.3149395 -.1118168
  31. 10 | -.2149078 .0947671 -2.27 0.028 -.4060239 -.0237918
  32. 11 | .9978647 .2299034 4.34 0.000 .5342202 1.461509
  33. 12 | -.4611409 .1524103 -3.03 0.004 -.7685055 -.1537763
  34. 13 | -.4717708 .1328164 -3.55 0.001 -.7396206 -.203921
  35. 14 | -.5159563 .1206059 -4.28 0.000 -.7591813 -.2727313
  36. 15 | -.2170632 .1307039 -1.66 0.104 -.4806527 .0465263
  37. 16 | -.2670158 .1208296 -2.21 0.032 -.510692 -.0233396
  38. 17 | -.1888095 .1052775 -1.79 0.080 -.4011217 .0235027
  39. 18 | .4277456 .0532271 8.04 0.000 .3204029 .5350884
  40. 19 | .1488939 .0929514 1.60 0.117 -.0385606 .3363483
  41. 20 | -.32777 .0613168 -5.35 0.000 -.4514272 -.2041129
  42. 21 | -.7692016 .0676439 -11.37 0.000 -.9056186 -.6327847
  43. 22 | -.226435 .0549437 -4.12 0.000 -.3372396 -.1156304
  44. 23 | -.2079738 .0505605 -4.11 0.000 -.3099389 -.1060088
  45. 24 | -.1715741 .0949496 -1.81 0.078 -.3630582 .0199099
  46. 25 | .4029898 .0995619 4.05 0.000 .2022042 .6037754
  47. 26 | -.6548432 .1240178 -5.28 0.000 -.904949 -.4047374
  48. 27 | -.8356669 .1082983 -7.72 0.000 -1.054071 -.6172625
  49. 28 | -.2335387 .0645286 -3.62 0.001 -.3636731 -.1034043
  50. 29 | -.0778349 .0310321 -2.51 0.016 -.1404171 -.0152528
  51. 30 | -.1241396 .0507693 -2.45 0.019 -.2265257 -.0217535
  52. 31 | -.2122203 .1101972 -1.93 0.061 -.4344542 .0100135
  53. 32 | -.5505511 .0650699 -8.46 0.000 -.6817771 -.4193251
  54. 33 | -.8061707 .1096685 -7.35 0.000 -1.027338 -.5850032
  55. 34 | -.1823216 .199542 -0.91 0.366 -.5847364 .2200932
  56. 35 | .3302556 .2543698 1.30 0.201 -.1827301 .8432412
  57. 36 | -.1942807 .0642742 -3.02 0.004 -.323902 -.0646594
  58. 37 | -.9824465 .0676922 -14.51 0.000 -1.118961 -.8459321
  59. 38 | -.3232847 .1119534 -2.89 0.006 -.5490601 -.0975092
  60. 39 | -.7595989 .0737988 -10.29 0.000 -.9084284 -.6107694
  61. 40 | -.3370776 .1204593 -2.80 0.008 -.580007 -.0941483
  62. 41 | -.1841472 .0937726 -1.96 0.056 -.3732576 .0049632
  63. 42 | -.1523469 .0816846 -1.87 0.069 -.3170796 .0123858
  64. 43 | -.7588555 .1185358 -6.40 0.000 -.9979058 -.5198053
  65. 44 | -.1398632 .0957483 -1.46 0.151 -.3329581 .0532318
  66. |
  67. year |
  68. 2003 | .0867016 .0177547 4.88 0.000 .0508958 .1225074
  69. 2004 | .1497615 .0234327 6.39 0.000 .1025051 .197018
  70. 2005 | .2401505 .0370452 6.48 0.000 .1654417 .3148593
  71. 2006 | .285288 .0475912 5.99 0.000 .1893112 .3812649
  72. 2007 | .4044815 .0519725 7.78 0.000 .299669 .5092939
  73. 2008 | .618554 .064974 9.52 0.000 .4875215 .7495865
  74. 2009 | .7602133 .0720347 10.55 0.000 .6149415 .9054851
  75. 2010 | .9474614 .0787456 12.03 0.000 .7886558 1.106267
  76. 2011 | 1.12886 .0840711 13.43 0.000 .9593141 1.298405
  77. 2012 | 1.230967 .0942061 13.07 0.000 1.040982 1.420952
  78. 2013 | 1.302292 .1021949 12.74 0.000 1.096196 1.508387
  79. 2014 | 1.283281 .116348 11.03 0.000 1.048643 1.517919
  80. 2015 | 1.397266 .1128194 12.38 0.000 1.169744 1.624788
  81. 2016 | 1.489624 .1268996 11.74 0.000 1.233706 1.745541
  82. |
  83. _cons | 8.934893 .445487 20.06 0.000 8.036483 9.833303
  84. ------------------------------------------------------------------------------

法二:xtreg

  1. xtset id year //设定面板模型的时间和个体
  2. xreg lnpgdp did $cv i.year,vce(cluster id)

法三:areg

优点:相比较上述两种方法,可以省去个体效应的估计结果,大大提升运行效率。

  1. areg lnpgdp did $cv i.year,absorb(id) vce(cluster id)
  2. Linear regression, absorbing indicators Number of obs = 608
  3. Absorbed variable: id No. of categories = 44
  4. F(22, 43) = 381.30
  5. Prob > F = 0.0000
  6. R-squared = 0.9800
  7. Adj R-squared = 0.9776
  8. Root MSE = 0.1290
  9. (Std. err. adjusted for 44 clusters in id)
  10. ------------------------------------------------------------------------------
  11. | Robust
  12. lnpgdp | Coefficient std. err. t P>|t| [95% conf. interval]
  13. -------------+----------------------------------------------------------------
  14. did | .1612596 .0424702 3.80 0.000 .0756103 .2469089
  15. popden | -2.83359 4.271172 -0.66 0.511 -11.44723 5.780049
  16. sav | -.826351 .1212829 -6.81 0.000 -1.070941 -.5817607
  17. industry | .123654 .0352388 3.51 0.001 .0525882 .1947198
  18. non_agri | -1.220827 .3814877 -3.20 0.003 -1.990171 -.4514841
  19. welfare | -.0013941 .0021004 -0.66 0.510 -.00563 .0028417
  20. fdi | -.4705762 .6373817 -0.74 0.464 -1.755979 .8148265
  21. exp | .1311563 .0920516 1.42 0.161 -.0544835 .316796
  22. |
  23. year |
  24. 2003 | .0867016 .0177547 4.88 0.000 .0508958 .1225074
  25. 2004 | .1497615 .0234327 6.39 0.000 .1025051 .197018
  26. 2005 | .2401505 .0370452 6.48 0.000 .1654417 .3148593
  27. 2006 | .285288 .0475912 5.99 0.000 .1893112 .3812649
  28. 2007 | .4044815 .0519725 7.78 0.000 .299669 .5092939
  29. 2008 | .618554 .064974 9.52 0.000 .4875215 .7495865
  30. 2009 | .7602133 .0720347 10.55 0.000 .6149415 .9054851
  31. 2010 | .9474614 .0787456 12.03 0.000 .7886558 1.106267
  32. 2011 | 1.12886 .0840711 13.43 0.000 .9593141 1.298405
  33. 2012 | 1.230967 .0942061 13.07 0.000 1.040982 1.420952
  34. 2013 | 1.302292 .1021949 12.74 0.000 1.096196 1.508387
  35. 2014 | 1.283281 .116348 11.03 0.000 1.048643 1.517919
  36. 2015 | 1.397266 .1128194 12.38 0.000 1.169744 1.624788
  37. 2016 | 1.489624 .1268996 11.74 0.000 1.233706 1.745541
  38. |
  39. _cons | 8.772451 .4469524 19.63 0.000 7.871086 9.673816
  40. ------------------------------------------------------------------------------

二、双重差分模型DID的检验

2.1DID的三个前提假设

①共同趋势假设(DID不要求随机分组,只要外生即可;处理组和对照组在政策实施之前必须有共同的变化趋势)

②政策外生性假定(个体在政策生效前不能对未来政策是否实施产生预期,否则会干扰政策实施效果)即:did可以与ui有关系,但不可以与误差项eit有相关关系)

③非观测性因素的影响(1.个体无法预估政策实施时间,2.个体变换不受同时期其他政策的影响)

2.2平行趋势检验(动态效应检验)

· 该假设的重要性:共同趋势假设是DID的重要前提,若违背了该假设,则使用差分法也无法消除时间趋势项,使得估计得到的结果不一致,从而失去实际含义。

· 检验方法:

法一:画图(精度很低,不推荐,仅可作为辅助使用)

法二:动态效应检验

动态效应检验实质:引入有限个时间虚拟变量,并将其与处理组虚拟变量交乘,考察政策实施前后交乘项的显著性。动态效应检验和平行趋势检验是有区别的,平行趋势检验中,只要考察0时期前的交乘项是否显著,如果不显著,说明处理组和控制组在事前并没有显著差异,可以使用DID。

【如果满足动态平行趋势检验,理想的情况应当是在政策实施前,交互项回归系数不显著;在政策实施后,回归系数显著且应当异于0;若只是平行趋势检验,则只要求政策实施前不显著,实施后显不显著不影响。】

参考文章:双重差分法之平行趋势检验_KEMOSABEr的博客-CSDN博客_平行趋势检验

注:在进行平行趋势检验时,一般会设政策实施当年为基期(即0期),观察前后的系数变化。(回归方程由于多重共线性,一定会有一个年份的系数被omitted,因为平行趋势检验重点关注政策实施前后的系数变换,则此处相当于手动设定omitted掉政策实施当年的系数) 

  1. //平行趋势检验
  2. *忽略掉13年当年的系数
  3. *政策生效前05-12 8个时期和处理组的交互项
  4. forvalues i=8(-1) 1{
  5. gen pre_`i'= ( year == 2013-`i' & treatment== 1)
  6. }
  7. *政策生效后14-16 3个时期和处理组的交互项
  8. forvalues j=1(1) 3{
  9. gen post_`j'= ( year == 2013+`j' & treatment== 1)
  10. }
  11. //建立新的含交互项的模型(动态效应检验)
  12. *此处选用了普通的标准误(但我不知道为什么)
  13. areg lnpgdp pre_* post_* $cv i.year,absorb(id)
  14. //将平行趋势检验结果绘图
  15. //ssc install coefplot
  16. coefplot,keep(pre_* post_*) vertical recast(connect) yline(0) xline(9,lp(dash))

回归结果显示:通过了平行趋势检验,在政策实施前,pre8-pre5的回归系数在5%显著水平下无法通过检验,是不显著的,在政策实施后pre4-pre0的系数在10%检验水平下显著。此时可以认为符合共同趋势假设。

延申:关于回归系数与其置信区间绘图的命令coefplot

参考文章:https://zhuanlan.zhihu.com/p/489077475?utm_id=0

2.3政策外生性检验

检验政策外生性假定(待补充)

2.4安慰剂检验

检验:其他遗漏的非观测性因素的影响。

两种情况:a.虚构政策实施时间 b.虚构处理组;

关于政策实施时间:如果怀疑个体可以提前预估政策实施时间,则使用法a:在虚构了不同政策实施时间后,若结果仍然普遍显著,则不通过检验;若估计结果不显著或是在0附近,则认为个体无法预测政策实施时间,通过了安慰剂检验。

关于处理组:(1)怀疑两组的变换还受到了同时期,未被控制到的其他政策的影响;(2) 或是认为个体可以预知自己是否被执行政策,则使用法b:若重复虚拟分组后,回归结果普遍不好,则认为通过了安慰剂检验,政策是外生的。

虚构处理组:在样本中随机选取与初始处理组和控制组数量一致的样本,进行DID建模。该随机过程重复进行n次(n通常取200-500),得到的核心解释变量系数的估计结果绘制出密度曲线,若其结果集中在0附近,且不显著,则认为分组结果的效果并不好,因而证明了政策是外生的,可以忽略其他政策和随机性因素的影响。

本题进行安慰剂检验绘图结果如下,显然估计的系数普遍在0附近波动,通过了该假设检验。

代码:【较为复杂】

第一步:建立一个虚构处理组的循环,重复进行n次,将得到的估计结果放到矩阵当中

 第二步:将上一步的系数估计结果绘图

三.实证过程

step1:准备工作

  1. use "F:\个人嘿嘿嘿\北师大BNU\研一上-课业资料\商务与经济统计\作业2:DID模型的操作\mainresult\mainresult.dta",clear
  2. sum id year treatment post did lnpgdp //核心变量的描述性统计
  3. //设定全局变量(暂时性存储单元),此处为控制变量集合
  4. global cv "popden sav industry non_agri welfare fdi exp"
  5. xtset id year //设定面板模型的时间和个体

step2:基础DID模型的两种命令形式

  1. //DID模型
  2. reg lnpgdp did $cv i.id i.year,vce(cluster id) //$cv为使用设定的全局变量
  3. areg lnpgdp did $cv i.year,absorb(id) vce(cluster id)

step3:平行趋势检验

  1. //平行趋势检验
  2. *政策生效前05-12 8个时期和处理组的交互项
  3. forvalues i=8(-1) 1{
  4. gen pre_`i'= ( year == 2013-`i' & treatment== 1)
  5. }
  6. *政策生效后14-16 3个时期和处理组的交互项
  7. forvalues j=1(1) 3{
  8. gen post_`j'= ( year == 2013+`j' & treatment== 1)
  9. }
  10. areg lnpgdp pre_* post_* $cv i.year,absorb(id) vce(cluster id)
  11. areg lnpgdp pre_* post_* $cv i.year,absorb(id)
  12. //ssc install coefplot
  13. coefplot,keep(pre_* post_*) vertical recast(connect) yline(0) xline(9,lp(dash))

step4:安慰剂检验

  1. //安慰剂检验
  2. *设置系统能容纳的矩阵大小
  3. set matsize 500
  4. *建立矩阵内系数、标准误、p值的矩阵,维度为500*1,其中用0填充
  5. mat b=J(500,1,0) //系数矩阵
  6. mat se=J(500,1,0) //标准误矩阵
  7. mat p=J(500,1,0) //P值矩阵
  8. *建立循环
  9. forvalues i = 1(1) 500{
  10. *以下部分较为繁琐可以省去
  11. use "F:\个人嘿嘿嘿\北师大BNU\研一上-课业资料\商务与经济统计\作业2:DID模型的操作\mainresult\mainresult.dta",clear
  12. *将上述导入的原始数据保存为did1_data
  13. save did1_data,replace
  14. *使用以上数据
  15. use did1_data,clear
  16. *开始随机抽样(此处有一些疑问)
  17. sample 1,count by(id)
  18. sample 7,count
  19. *得到抽取样本的id号码
  20. keep id
  21. *将所抽取到的id号码存储起来
  22. save matchid,replace
  23. *与原数据进行匹配
  24. use did1_data,clear
  25. merge m:1 id using matchid
  26. *删除原有的处理组变量,生成新的抽样得到的处理组
  27. drop treatment
  28. gen treatment=(_merge==3) //_merge==3代表匹配成功的部分=1为新的处理组,其余为0作为控制组
  29. drop _merge
  30. *更新数据集
  31. save did1_data,replace
  32. use did1_data,replace
  33. global cv "popden sav industry non_agri welfare fdi exp" //设定全局变量(暂时性存储单元),此处为控制变量集合
  34. *产生新的did处理序列
  35. gen new_did=treatment*post
  36. *按照id重新排序
  37. sort id
  38. *虚构处理组后做回归
  39. areg lnpgdp new_did $cv i.year,absorb(id) vce(cluster id)
  40. *将回归结果赋值到对应矩阵中
  41. mat b[`i',1]=_b[new_did]
  42. mat se[`i',1]=_se[new_did]
  43. mat p[`i',1]=2*ttail(e(df_r),abs(_b[new_did]/_se[new_did]))
  44. }
  45. *矩阵转化为向量
  46. svmat b,names(coef_lnpgda)
  47. svmat se,names(se_lnpgdp)
  48. svmat p,names(pvalue_lnpgdp)
  49. *删除空值并添加标签
  50. drop if pvalue_lnpgdp == .
  51. label var pvalue_lnpgdp p值
  52. label var coef_lnpgda 估计系数
  53. *绘图和图形参数设置
  54. twoway(kdensity coef)(scatter pvalue_lnpgdp coef_lnpgda,msymbol(smcircle_hollow) mcolor(blue)), ///
  55. title("Placcebo Test") ///
  56. xlabel(-0.3(0.1)0.3) ///
  57. ylabel(0(1)8,angle(0)) yline(0.1,lwidth(vthin) lp(dash)) ///
  58. xtitle("cofficients") ///
  59. yline(0.1,lwidth(vthin) lp(dash)) ytitle(p value) ///
  60. legend(label(1 "kdensity of estimates") label(2 "p value")) ///
  61. plotregion(style(none)) graphregion(color(white))
  62. /*一些解释:
  63. line 是曲线选项,表示线图
  64. xlabel、ylabel 设置 x轴和y轴标签及刻度
  65. saving() 表示保存图像
  66. #d cr 表示断行,也可以用 ///
  67. */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/368415
推荐阅读
相关标签
  

闽ICP备14008679号