“Stata”或“R”中的回归不连续设计图

机器算法验证 r 回归 数据可视化 状态 回归不连续
2022-03-01 17:15:22

Lee 和 Lemieux (p. 31, 2009) 建议研究人员在进行回归不连续设计分析 (RDD) 时呈现图表。他们建议以下程序:

“...对于一些带宽,以及分别在截止值的左侧和右侧的一些 bin,我们的想法是构造 bin ( , ],对于 + , 其中 "hK0K1bkbk+1k=1,...,K=K0K1bk=c(K0k+1)h.

c=cutoff point or threshold value of assignment variable
h=bandwidth or window width.

...然后比较截止点左侧和右侧的平均结果...”

..在所有情况下,我们还显示了在截止点的每一侧分别估计的四次回归模型的拟合值...(同一篇论文的第 34 页)

我的问题是我们如何编程该程序StataR绘制结果变量与分配变量(带置信区间)的图表以用于尖锐的 RDD。这里这里Stata提到了一个示例示例(将 rd 替换为 rd_obs)和一个示例示例这里但是,我认为这两个都没有实现步骤 1。请注意,两者都有原始数据以及图中的拟合线。R

没有置信度变量的示例图 [Lee and Lemieux,2009]在此处输入图像描述 提前谢谢你。

2个回答

这与做两个 2 次局部多项式有很大不同吗,一个用于低于阈值,一个用于高于阈值,平滑Ki积分?以下是 Stata 的示例:

use votex // the election-spending data that comes with rd

tw 
(scatter lne d, mcolor(gs10) msize(tiny)) 
(lpolyci lne d if d<0, bw(0.05) deg(2) n(100) fcolor(none)) 
(lpolyci lne d if d>=0, bw(0.05) deg(2) n(100) fcolor(none)), xline(0)  legend(off)

或者,您可以将 lpoly 平滑值和标准误差保存为变量,而不是使用twoway. 以下x是垃圾桶,s是平滑的平均值,se是标准误,并且ulll是平滑结果的 95% 置信区间的上限和下限。

lpoly lne d if d<0, bw(0.05) deg(2) n(100) gen(x0 s0) ci se(se0)
lpoly lne d if d>=0, bw(0.05) deg(2) n(100) gen(x1 s1) ci se(se1)

/* Get the 95% CIs */
forvalues v=0/1 {
    gen ul`v' = s`v' + 1.95*se`v' 
    gen ll`v' = s`v' - 1.95*se`v' 
};

tw 
(line ul0 ll0 s0 x0, lcolor(blue blue blue) lpattern(dash dash solid)) 
(line ul1 ll1 s1 x1, lcolor(red red red) lpattern(dash dash solid)), legend(off)  

如您所见,第一个图中的线条与第二个图中的线条相同。

这是一个固定的算法。Calonico、Cattaneo 和 Titiunik最近提出了一种稳健的带宽选择程序。他们为 Stata 和 R实现了他们的理论工作,它还带有一个 plot 命令。这是R中的一个例子:

# install.packages("rdrobust")
library(rdrobust)
set.seed(26950) # from random.org
x<-runif(1000,-1,1)
y<-5+3*x+2*(x>=0)+rnorm(1000)
rdplot(y,x)

这会给你这个图表: 在此处输入图像描述