求助:如何在R中绘制多回归规格系数与置信区间图
R语言绘制断点回归多模型系数置信区间图
核心思路
这类展示多回归模型系数及置信区间的图属于系数森林图范畴,针对断点回归(RD)的多规格模型,核心是先整理好各模型的系数、置信区间及分组特征,再用ggplot2实现可视化。
步骤1:整理数据
首先需要把每个回归规格的结果整理成结构化数据框,包含以下字段:
- 模型分组特征:比如控制变量(有/无)、多项式阶数(1阶/2阶)、带宽方法(最优带宽/固定带宽)
- 系数值(estimate)
- 置信区间下限(ci_low)
- 置信区间上限(ci_high)
示例模拟数据:
# 模拟RD多规格模型结果数据 library(tidyverse) model_data <- tibble( model_group = rep(c("无控制变量", "有控制变量"), each = 4), poly_type = rep(c("1阶多项式", "1阶多项式", "2阶多项式", "2阶多项式"), 2), bandwidth = rep(c("最优带宽", "固定带宽"), 4), estimate = c(0.12, 0.15, 0.09, 0.11, 0.10, 0.13, 0.08, 0.09), ci_low = c(0.03, 0.06, 0.01, 0.02, 0.01, 0.04, -0.01, 0.00), ci_high = c(0.21, 0.24, 0.17, 0.20, 0.19, 0.22, 0.17, 0.18) ) # 生成唯一的模型标签,用于y轴展示分组信息 model_data <- model_data %>% mutate(model_label = str_c(model_group, "\n", poly_type, "\n", bandwidth))
步骤2:用ggplot2绘制图表
library(ggplot2) ggplot(model_data, aes(x = estimate, y = fct_rev(model_label))) + # 添加系数参考线(x=0) geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") + # 绘制系数点及置信区间 geom_pointrange(aes(xmin = ci_low, xmax = ci_high), size = 0.8, color = "#2c3e50") + # 按控制变量分组添加分隔线 geom_hline(aes(yintercept = as.numeric(fct_rev(model_label)) + 0.5), data = model_data %>% filter(model_group == "无控制变量") %>% slice(4), linetype = "solid", color = "gray80") + # 设置坐标轴与标题 labs(x = "回归系数(95%置信区间)", y = "回归模型规格", title = "断点回归多规格模型系数对比") + # 美化图表主题 theme_minimal() + theme( panel.grid.major.y = element_blank(), plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12) )
适配真实RD结果
如果是用rdrobust或rdlocrand等RD专用包得到的结果,可直接提取模型输出的系数和置信区间填充数据框:
library(rdrobust) # 假设已运行某RD模型 rd_model <- rdrobust(y = your_y, x = your_running_var, c = cutoff_value, p = 1, h = optimal_bandwidth) # 提取核心结果 estimate <- rd_model$coef[1] ci_low <- rd_model$ci[1,1] ci_high <- rd_model$ci[1,2]
将所有模型的上述结果整理到model_data数据框中,即可生成与目标图表结构一致的可视化结果。
内容的提问来源于stack exchange,提问作者Andres Rengifo
相关产品推荐
相关产品推荐

