R中rdbwselect函数无预期输出问题求助
R中rdbwselect函数输出异常问题排查与解决
问题描述
我在R和Stata中使用rdrobust包做断点回归分析,打算全程用R完成,但碰到了rdbwselect函数的异常:
- 这个函数默认用均方误差方法(
bwselect=mserd)计算带宽,按包文档说明,加all=TRUE参数应该返回所有可用带宽选择方法的结果 - 但不管是用默认设置还是指定
all=TRUE,R里rdbwselect的输出完全一样,根本没显示预期的多方法带宽结果 - 照着《The R Journal》里
rdrobust文章(第49页)的脚本复现,也得不到论文里的输出 - 同一函数在Stata 16里却能正常运行
可能原因
- 包版本问题:R版
rdrobust和Stata版的更新进度不一样,你装的R版可能不是最新的,all=TRUE参数的实现有bug - R版本兼容性:太老的R版本可能不支持
rdrobust里all=TRUE的新特性,参数逻辑没被正确触发 - 输出显示逻辑:R版
rdbwselect的默认打印函数可能没把所有返回结果展示出来,其实计算已经完成了,只是控制台没显示
解决方法
更新rdrobust包
直接重新安装最新版:install.packages("rdrobust")装完再测试
rdbwselect函数,看是否正常输出多方法带宽结果手动提取所有结果
rdbwselect的返回值是一个列表,就算控制台没打印,也能手动提取所有方法的带宽:# 运行函数并保存结果 bw_out <- rdbwselect(y = your_y_var, x = your_x_var, data = your_data, all = TRUE) # 查看所有返回内容的结构 str(bw_out) # 直接提取所有带宽选择方法的结果 bw_out$bws更新R版本
确保你的R版本在4.0及以上,旧版R可能存在兼容性问题,建议升级到最新稳定版
验证rdbwselect的计算过程
手动公式对比
选一种带宽方法(比如默认的mserd),按照断点回归带宽计算的官方公式手动计算,再和rdbwselect返回的结果对比调试函数源码
在R里直接运行rdbwselect查看函数源码,或者用debug(rdbwselect)进入调试模式,一步步跟踪计算流程,看每一步的中间结果是否符合预期Stata交叉验证
用同一数据集在Stata里运行rdbwselect,把结果导出后,和R中提取的bw_out$bws做对比,验证两边计算的一致性
内容的提问来源于stack exchange,提问作者Marly Tati
相关产品推荐
相关产品推荐

