如何用rddtools实现预设带宽?基于Card等人医保数据的问题
问题分析与解决方案
首先,你遇到的核心问题是带宽设置未生效,导致两个回归结果完全一致——这是因为你错误地在covar.opt参数里指定了bw=2,而covar.opt是用来配置协变量处理逻辑(比如中心化、标准化)的参数组,根本不负责限制RDD分析的样本带宽范围。
修正代码:正确设置2年带宽(ageyrs 64-66)
你需要明确:2年带宽对应断点(65)前后各1年的样本范围(64≤ageyrs≤66)。有两种可靠的实现方式:
方法1:手动筛选样本后创建RDD对象
先从原始数据中提取符合带宽要求的观测,再构建RDD对象进行回归:
load(file ="C:/Users/perdue/Desktop/Adv.MicroEconometrics/HA 9/medicare.Rdata") # 筛选断点前后1年的样本(64到66岁) medicare_bw2 <- subset(medicare, ageyrs >= 64 & ageyrs <= 66) # 基于筛选后的样本创建RDD对象 rd.medic.1 <- rdd_data(y=er, x=ageyrs, covar=ageyrs, cutpoint=65, data = medicare_bw2) # 带协变量的同斜率回归(使用筛选后的样本) rd.reg.1c <- rdd_reg_lm(rdd_object=rd.medic.1, covariates = "ageyrs", slope = "same") # 全样本回归(用于对比) rd.medic.full <- rdd_data(y=er, x=ageyrs, covar=ageyrs, cutpoint=65, data = medicare) rd.reg.1a <- rdd_reg_lm(rdd_object=rd.medic.full, covariates = "ageyrs", slope = "same") # 输出结果对比 stargazer(rd.reg.1c, rd.reg.1a, type="text")
方法2:直接在回归函数中指定带宽
rddtools的rdd_reg_lm函数支持通过bw参数直接指定断点两侧的带宽(单位与x变量一致),这里bw=1就表示断点前后各1年,总带宽2年:
load(file ="C:/Users/perdue/Desktop/Adv.MicroEconometrics/HA 9/medicare.Rdata") # 基于全样本创建RDD对象 rd.medic.1 <- rdd_data(y=er, x=ageyrs, covar=ageyrs, cutpoint=65, data = medicare) # 指定带宽为1(前后各1年)的回归 rd.reg.1c <- rdd_reg_lm(rdd_object=rd.medic.1, covariates = "ageyrs", slope = "same", bw=1) # 全样本回归(对比用) rd.reg.1a <- rdd_reg_lm(rdd_object=rd.medic.1, covariates = "ageyrs", slope = "same") stargazer(rd.reg.1c, rd.reg.1a, type="text")
补充资料建议
除了CRAN官方文档,你可以参考这些更详细的资源:
- rddtools的GitHub仓库中的vignettes:里面有完整的RDD分析流程示例,包括带宽选择、模型诊断的细节,代码可直接复用
- 学术书籍《Regression Discontinuity Designs: A Guide to Practice》:书中有专门章节讲解rddtools的使用,结合实际案例解释参数逻辑
- 经济学领域的R博客:比如部分应用计量博客会分享RDD实操教程,其中会涉及rddtools带宽设置的常见坑点
你的原始回归结果:
=========================================================== Dependent variable: ---------------------------- y (1) (2) ----------------------------------------------------------- D 9.175*** 9.175*** (3.243) (3.243) x 14.342*** 14.342*** (0.565) (0.565) ageyrs Constant 479.508*** 479.508*** (2.035) (2.035) ----------------------------------------------------------- Observations 120 120 R2 0.965 0.965 Adjusted R2 0.964 0.964 Residual Std. Error (df = 117) 8.746 8.746 F Statistic (df = 2; 117) 1,605.695*** 1,605.695*** =========================================================== Note: *p<0.1; **p<0.05; ***p<0.01
内容的提问来源于stack exchange,提问作者Collective Action
相关产品推荐
相关产品推荐

