Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
⛳ Stata 系列推文:
作者:林育莉 (中山大学)
邮箱:linyuliyx@163.com
编者按:本文摘译自下文,特此致谢!
Source:Cattaneo M D, Titiunik R, Vazquez-Bare G. Analysis of regression-discontinuity designs with multiple cutoffs or multiple scores[J]. The Stata Journal, 2020, 20(4): 866-891. -PDF-
目录
在经济学、政治学、公共学等学科中,学者通常会遇到具有多断点或多分配变量的断点回归问题。在本文中,我们将介绍 Stata 的 rdmulti
命令,它由 rdmc
、rdmcplot
、rdms
三个命令组成,并可用于分析具有多断点和多分配变量问题。同时,本文也将使用模拟数据来展示 rdmulti
命令涵盖的所有三个情形设定:非累积多断点、累积多断点和多分配变量。
在这种情况下,模型中有且只有一个分配变量
与标准单断点 RD 方法不同,
在规则条件下,即包括了条件期望的平滑性,具体的断点处理效应为:
更为规范地定义为:
混合 RD 估计 (Pooled RD estimate) 是通过对分配变量去断点化实现,
其中,
所有这些参数都可以很容易通过使用局部多项式方法来估计,并可以在适当的情况下对断点进行调整。即除了汇集数据外,RD 方法还可以单独应用于每个截止值。因此,rdmulti
使用 Calonico 等 (2017) 的 rdrobust
命令,以实现基于局部多项式方法的带宽选择、估计和推理。
混合参数
当用户没有指定时,rdmc
命令在估计混合效应时可使用 rdrobust
选择的带宽来估计权重。
在具有累积多断点模型中,个体对分配变量的不同范围接受不同的处理 (或不同的处理程度)。在这种设定下,如果
将这些处理的值记为
与非累积多断点的情况不同,人口是不分区的,每个观察值可以用来估计两个不同的 (但在分配变量维度上是连续的) 处理效果。例如,接受处理
一旦数据被分配到每个被分析的断点,局部多项式方法也可以应用于累积多断点情况下的断点。
在多核心 RD 方法中,其处理时基于多个分配变量和一些确定处理 “部位” 或 “区域” 的函数来分配的。我们重点讨论了两个分配变量
这种类型的赋值定义了处理区域边界上的连续处理效应,用
且在规则条件下,
其中
由于估计整个处理效应曲线在实践中可能是不可行的,因此通常定义一组感兴趣的边界点来估计 RD 处理效果。例如,在前面的例子中,边界确定处理分配的三个断点可以是
rdmulti
命令包的三个命令 rdmc
、rdmcplot
、rdms
,安装命令如下:
net install st0620, from(http://www.stata-journal.com/software/sj20-4)
rdmc
命令具有如下特征:
robust
偏差校正推理过程;rdmc
命令的语法结构为:
rdmc depvar runvar [if] [in], cvar(cutoff_var) [fuzzy(string)
derivvar(string) pooled_opt(string) verbose pvar(string)
qvar(string) hvar(string) hrightvar(string) bvar(string)
brightvar(string) rhovar(string) covsvar(string)
covsdropvar(string) kernelvar(string) weightsvar(string)
bwselectvar(string) scaleparvar(string) scaleregulvar(string)
masspointsvar(string) bwcheckvar(string) bwrestrictvar(string)
stdvarsvar(string) vcevar(string) level(#) plot graph_opt(string)]
depvar
: 被解释变量;runvar
:分配变量。rdmcplot
是 rdmc
的配套命令,也可进行多断点回归,提供 RD 图形。rdmcplot
命令的语法结构为:
rdmcplot depvar runvar [if] [in], cvar(cutoff_var) [nbinsvar(string)
nbinsrightvar(string) binselectvar(string) scalevar(string)
scalerightvar(string) supportvar(string)
supportrightvar(string) pvar(string) hvar(string)
hrightvar(string) kernelvar(string) weightsvar(string)
covsvar(string) covsevalvar(string) covsdropvar(string)
binsoptvar(string) lineoptvar(string) xlineoptvar(string)
ci(cilevel) nobins nopoly noxline nodraw genvars]
rdms
命令具有如下特征:
其语法结构为:
rdms depvar runvar1 [runvar2 treatvar] [if] [in], cvar(cutoff_var1
[cutoff_var2]) [range(range1 [range2]) xnorm(string) fuzzy(string)
derivvar(string) pooled_opt(string) pvar(string) qvar(string)
hvar(string) hrightvar(string) bvar(string) brightvar(string)
rhovar(string) covsvar(string) covsdropvar(string)
kernelvar(string) weightsvar(string) bwselectvar(string)
scaleparvar(string) scaleregulvar(string) masspointsvar(string)
bwcheckvar(string) bwrestrictvar(string) stdvarsvar(string)
vcevar(string) level(#) plot graph_opt(string)]
depvar
:被解释变量;runvar1
:累积断点设定中的分配变量或称分配变量);runvar2
:若指定,则是二元分配变量设定中的第二分配变量;treatvar
:若指定,则是二元分配变量设定中的处理指标。
我们使用模拟数据集 simdata_multic.dta 来说明 rdmc
命令。在数据集中,
*数据下载地址
*https://raw.githubusercontent.com/rdpackages/rdmulti/master/stata/simdata_multic.dta
*https://gitee.com/arlionn/data/blob/master/data01/rdmulti/simdata_multic.dta
use simdata_multic.dta, clear
sum
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
c | 2,000 49.5 16.50413 33 66
x | 2,000 50.79875 28.95934 .0184725 99.97507
t | 2,000 .516 .4998689 0 1
y | 2,000 1728.135 545.0856 540.0849 3015.232
rdmc
的基本语法如下所示:
. rdmc y x ,cvar(c)
Cutoff-specific RD estimation with robust bias-corrected inference
-----------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh Weight
---------+-------------------------------------------------------------------
33| 484.831 0.00 421.18 552.53 14.66 14.66 289 0.540
66| 297.981 0.00 220.35 362.27 11.95 11.95 246 0.460
---------+-------------------------------------------------------------------
Weighted| 398.915 0.00 348.74 445.14 . . 535 .
Pooled| 436.400 0.00 179.34 676.63 13.68 13.68 550 .
可以看出,上述结果包括每个断点的特定断点估计,以及相应的 robust 偏差校正 p 值、每个断点的 95% robust 置信区间和样本大小、以及两个 “全局” 估计。第一个是使用第 2 节中描述的估计权重的特定断点估计的加权平均值。这些估计权重显示在最后一列。第二个是通过规范分配变量获得的混合估计。虽然这两个估计量收敛到相同的总体参数,但它们在有限样本中可能有所不同,如上所示。在这个例子中,这两个断点上在统计学上是显著的。
上述显示中的所有结果都是使用 rdrobust
计算的。使用者可以为 rdrobust
指定 option
,使用 opt()
计算混合估计。例如,下面的语法指定了 20 的带宽和混合估计的局部二次多项式。默认情况下,rdmc
在估计效果时省略了 rdrobust
的输出。混合效应估计的输出可以使用选项详细显示,我们在下面使用它来显示如何将 option
传递给 rdrobust
。
. rdmc y x, cvar(c) pooled_opt(h(20) p(2)) verbose
Sharp RD estimates using local polynomial regression.
Cutoff c = 0 | Left of c Right of c Number of obs = 2000
-------------------+---------------------- BW type = Manual
Number of obs | 968 1032 Kernel = Triangular
Eff. Number of obs | 409 416 VCE method = NN
Order est. (p) | 2 2
Order bias (q) | 3 3
BW est. (h) | 20.000 20.000
BW bias (b) | 20.000 20.000
rho (h/b) | 1.000 1.000
Outcome: y. Running variable: __000002.
---------------------------------------------------------------------------
Method | Coef. Std. Err. z P>|z| [95% Conf. Interval]
--------------+------------------------------------------------------------
Conventional | 437.04 129.8 3.3671 0.001 182.643 691.441
Robust | - - 3.0118 0.003 185.618 877.381
---------------------------------------------------------------------------
Cutoff-specific RD estimation with robust bias-corrected inference
-----------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh Weight
---------+-------------------------------------------------------------------
33| 484.831 0.00 421.18 552.53 14.66 14.66 289 0.540
66| 297.981 0.00 220.35 362.27 11.95 11.95 246 0.460
---------+-------------------------------------------------------------------
Weighted| 398.915 0.00 348.74 445.14 . . 535 .
Pooled| 437.042 0.00 185.62 877.38 20.00 20.00 825 .
用户还可以修改每个特定截断值中的估计选项。下面的语法显示了如何通过在第一个截止值中设置 11 的带宽和在第二个截止值中设置 10 来手动更改特定截止值的估计选项。
. generate double h = 11 in 1
. replace h = 10 in 2
. rdmc y x, cvar(c) hvar(h)
Cutoff-specific RD estimation with robust bias-corrected inference
-----------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh Weight
---------+-------------------------------------------------------------------
33| 495.429 0.00 368.13 563.21 11.00 11.00 207 0.498
66| 303.769 0.00 220.40 403.32 10.00 10.00 209 0.502
---------+-------------------------------------------------------------------
Weighted| 399.138 0.00 321.56 455.23 . . 416 .
Pooled| 436.400 0.00 179.34 676.63 13.68 13.68 550 .
所有特定断点的选项都以类似的方式传递。定义一个新的长度变量,令它等于截断值,该变量指示其值中每个截止值的选项。以下语法指示在每个截止点不同的带宽选择方法。
. generate bwselect = "msetwo" in 1
. replace bwselect = "certwo" in 2
. rdmc y x, cvar(c) bwselectvar(bwselect)
Cutoff-specific RD estimation with robust bias-corrected inference
-----------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh Weight
---------+-------------------------------------------------------------------
33| 481.135 0.00 418.03 545.23 15.03 16.91 318 0.572
66| 298.835 0.00 227.70 367.26 14.85 7.95 238 0.428
---------+-------------------------------------------------------------------
Weighted| 403.100 0.00 355.73 449.87 . . 556 .
Pooled| 436.400 0.00 179.34 676.63 13.68 13.68 550 .
rdmc
命令在矩阵 lincom
或 test
进行估计后检验。例如,要检验两个断点处的效果是否相同,可输入以下命令:
. rdmc y x, cvar(c)
. matlist e(b)
. lincom c1-c2
结果如下:
. rdmc y x, cvar(c)
Cutoff-specific RD estimation with robust bias-corrected inference
--------------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh Weight
------------+-------------------------------------------------------------------
33| 484.831 0.00 421.18 552.53 14.66 14.66 289 0.540
66| 297.981 0.00 220.35 362.27 11.95 11.95 246 0.460
------------+-------------------------------------------------------------------
Weighted| 398.915 0.00 348.74 445.14 . . 535 .
Pooled| 436.400 0.00 179.34 676.63 13.68 13.68 550 .
--------------------------------------------------------------------------------
. matlist e(b)
| c1 c2 weighted pooled
-------------+--------------------------------------------
y1 | 486.8578 291.3082 396.9415 427.9832
. lincom c1-c2
( 1) c1 - c2 = 0
------------------------------------------------------------------------------
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
(1) | 195.550 49.331 3.96 0.000 98.863 292.236
------------------------------------------------------------------------------
rdmcplot
命令联合绘制每个断点的估计回归函数。
rdmcplot y x, cvar(c)
rdmcplot
包括了 rdplot
的所有选项。例如,绘图可以限制在使用选项 hvar()
的带宽,并使用通过选项 pvar()
指定顺序的多项式。此选项允许用户在每个断点绘制线性拟合和估计处理效应。
generate p = 1 in 1/2
rdmcplot y x, cvar(c) hvar(h) pvar(p)
选项 genvars
生成手工复制绘图所需的变量。这允许用户自定义绘图。下面的代码说明了如何使用此选项复制图 2。
rdmcplot y x, cvar(c) genvars
twoway (scatter rdmcplot_mean_y_1 rdmcplot_mean_x_1, mcolor(navy)) ///
(line rdmcplot_hat_y_1 rdmcplot_mean_x_1 if t==1, sort lcolor(navy)) ///
(line rdmcplot_hat_y_1 rdmcplot_mean_x_1 if t==0, sort lcolor(navy)) ///
(scatter rdmcplot_mean_y_2 rdmcplot_mean_x_2, mcolor(maroon)) ///
(line rdmcplot_hat_y_2 rdmcplot_mean_x_2 if t==1, sort lcolor(maroon)) ///
(line rdmcplot_hat_y_2 rdmcplot_mean_x_2 if t==0, sort lcolor(maroon)), ///
xline(33, lcolor(navy) lpattern(dash)) ///
xline(66, lcolor(maroon) lpattern(dash)) ///
legend(off)
利用模拟数据集 simdata_cumul.dta 来说明 rdms
命令进行累积截断。在此数据集中,分配变量范围为从 0 到 100,且分配变量低于 33 的单位接受处理级别
*数据下载地址
*https://raw.githubusercontent.com/rdpackages/rdmulti/master/stata/simdata_cumul.dta
*https://gitee.com/arlionn/data/blob/master/data01/rdmulti/simdata_cumul.dta
use simdata_cumul, clear
sum
tabulate c
结果如下:
. sum
Variable | Obs Mean Std. Dev. Min Max
---------+-----------------------------------------------------
x | 1,000 50.46639 28.69369 .0413166 99.8783
y | 1,000 1508.638 488.2752 658.4198 2480.568
c | 2 49.5 23.33452 33 66
. tabulate c
c | Freq. Percent Cum.
-------+-----------------------------------
33 | 1 50.00 50.00
66 | 1 50.00 100.00
-------+-----------------------------------
Total | 2 100.00
累积截断的语法类似于 rdmc
。用户指定的结果变量、分配变量和断点如下:
. rdms y x, cvar(c)
Cutoff-specific RD estimation with robust bias-corrected inference
------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh
-------+----------------------------------------------------------------
33| 395.492 0.000 363.76 423.86 15.11 15.11 286
66| 342.872 0.000 315.95 373.96 12.22 12.22 265
------------------------------------------------------------------------
每个特定断点效应的带宽、多项式顺序和核心等选项可以通过创建变量来指定。
. generate double h = 11 in 1
. replace h = 8 in 2
. generate kernel = "uniform" in 1
. replace kernel = "triangular" in 2
. rdms y x, cvar(c) hvar(h) kernelvar(kernel)
Cutoff-specific RD estimation with robust bias-corrected inference
------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh
-------+----------------------------------------------------------
33| 394.470 0.000 351.65 438.72 11.00 11.00 215
66| 342.505 0.000 301.56 375.95 8.00 8.00 166
------------------------------------------------------------------
如果没有进一步的信息,rdms
命令可以使用断点 33 以上的任何观察值来估计第一个处理级别
. generate double range_l = 0 in 1
. generate double range_r = 65.5 in 1
. replace range_l = 33.5 in 2
. replace range_r = 100 in 2
. rdms y x, cvar(c) range(range_l range_r)
Cutoff-specific RD estimation with robust bias-corrected inference
------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh
-------+----------------------------------------------------------
33| 394.698 0.000 356.12 430.45 10.96 10.96 214
66| 342.180 0.000 312.20 372.04 11.18 11.18 246
混合估计可以通过 rdmc
获得。为此,我们需要为断点值分配样本中的每个单位。一种可能性是将每个单位分配到最近的断点值。生成一个名为断点的变量,对于低于 49.5 的单位 (33 和 66 之间的中点),断点等于 33,对于高于 49.5 的单位,断点等于 66。
. generate double cutoff = c[1]*(x<=49.5) + c[2]*(x>49.5)
. rdmc y x, cvar(cutoff)
Cutoff-specific RD estimation with robust bias-corrected inference
---------------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh Weight
--------+------------------------------------------------------------------
33| 389.528 0.00 332.94 443.69 6.26 6.26 119 0.531
66| 341.015 0.00 300.39 377.33 5.04 5.04 105 0.469
--------+------------------------------------------------------------------
Weighted| 366.788 0.00 330.63 399.64 . . 224 .
Pooled| 363.968 0.00 180.11 551.78 8.14 8.14 333 .
最后,使用断点变量通过命令 rdmcplot
绘制回归函数。
generate binsopt = "mcolor(navy)" in 1/2
generate xlineopt = "lcolor(navy) lpattern(dash)" in 1/2
rdmcplot y x, cvar(cutoff) binsoptvar(binsopt) xlineopt(xlineopt) nopoly
利用模拟数据集 simdata_multis.dta 来说明使用 rdms
对两个分配变量的 RD 设计进行分析。在这个数据集中,有两个分配变量,分别为
*数据下载地址
*https://raw.githubusercontent.com/rdpackages/rdmulti/master/stata/simdata_multis.dta
*https://gitee.com/arlionn/data/blob/master/data01/rdmulti/simdata_multis.dta
. use simdata_multis, clear
. summarize
Variable | Obs Mean Std. Dev. Min Max
----------+-----------------------------------------------------
x1 | 1,000 50.22881 28.87868 .6323666 99.94879
x2 | 1,000 50.63572 29.1905 .0775479 99.78458
t | 1,000 .223 .4164666 0 1
y | 1,000 728.5048 205.5627 329.4558 1372.777
c1 | 3 41.66667 14.43376 25 50
----------+-----------------------------------------------------
c2 | 3 41.66667 14.43376 25 50
. list c1 c2 in 1/3
+---------+
| c1 c2 |
|---------|
1. | 25 50 |
2. | 50 50 |
3. | 50 25 |
+---------+
下面的代码提供了这个设置的简单可视化。
generate xaux = 50 in 1/50
generate yaux = _n in 1/50
#d;
twoway (scatter x2 x1 if t==0, msize(small) mfcolor(white) msymbol(X))
(scatter x2 x1 if t==1, msize(small) mfcolor(white) msymbol(T))
(function y = 50, range(0 50) lcolor(black) lwidth(medthick))
(line yaux xaux, lcolor(black) lwidth(medthick))
(scatteri 50 25, msize(large) mcolor(black))
(scatteri 50 50, msize(large) mcolor(black))
(scatteri 25 50, msize(large) mcolor(black)),
text(25 25 "Treated", size(vlarge))
text(60 60 "Control", size(vlarge))
legend(off);
#d cr
输出图形如下:
. rdms y x1 x2 t, cvar(c1 c2)
Cutoff-specific RD estimation with robust bias-corrected inference
-------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh
--------+----------------------------------------------------------
(25,50)| 243.842 0.111 -50.93 491.18 11.12 11.12 42
(50,50)| 578.691 0.000 410.83 764.88 13.83 13.83 47
(50,25)| 722.444 0.000 451.49 1060.15 10.83 10.83 38
估计每个特定断点估计的信息可以通过前文获取。例如,要指定特定断点的带宽。
. generate double h = 15 in 1
. replace h = 13 in 2
. replace h = 17 in 3
. rdms y x1 x2 t, cvar(c1 c2) hvar(h)
Cutoff-specific RD estimation with robust bias-corrected inference
-------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh
--------+----------------------------------------------------------
(25,50)| 336.121 0.233 -119.35 491.36 15.00 15.00 87
(50,50)| 583.047 0.000 501.94 1101.24 13.00 13.00 42
(50,25)| 620.692 0.000 464.92 1159.99 17.00 17.00 86
最后,xnorm()
选项允许用户指定规范化的分配变量来计算混合估计。在这种情况下,我们将标准化分配变量定义为与处理分配所定义的边界最接近的垂直距离,正值表示处理单位,负值表示控制单位。
. generate double aux1 = abs(50 - x1)
. generate double aux2 = abs(50 - x2)
. egen xnorm = rowmin(aux1 aux2)
. replace xnorm = xnorm*(2*t-1)
. rdms y x1 x2 t, cvar(c1 c2) xnorm(xnorm)
Cutoff-specific RD estimation with robust bias-corrected inference
-------------------------------------------------------------------
Cutoff| Coef. P>|z| [95% Conf. Int.] hl hr Nh
--------+----------------------------------------------------------
(25,50)| 243.842 0.111 -50.93 491.18 11.12 11.12 42
(50,50)| 578.691 0.000 410.83 764.88 13.83 13.83 47
(50,25)| 722.444 0.000 451.49 1060.15 10.83 10.83 38
--------+----------------------------------------------------------
Pooled| 447.017 0.000 389.33 496.85 12.73 12.73 433
Note:产生如下推文列表的命令为:
lianxh rdd
安装最新版lianxh
命令:
ssc install lianxh, replace
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh