如何用marginaleffects在同图绘制自变量增减1个标准差的边际效应
合并边际效应图并优化标签(基于marginaleffects包)
问题说明
需要在同一张图中展示自变量hp增加1个标准差和减少1个标准差时的边际效应,已通过marginaleffects包实现分图绘制,现需合并图形并优化标签可读性。
示例模型与基础计算
首先构建线性模型并计算hp的标准差:
library(marginaleffects) library(ggplot2) # 构建模型 mod <- lm(mpg ~ hp * disp + factor(am), data = mtcars) # 计算hp的标准差 sd(mtcars$hp) # 输出结果:[1] 68.56287
原分图实现代码
之前已分别绘制两种情况的边际效应图:
# HP增加1个标准差的边际效应图 plot1 <- plot_comparisons(mod, variables = list(hp = 68.56287), condition = "disp") plot1 # HP减少1个标准差的边际效应图 plot2 <- plot_comparisons(mod, variables = list(hp = -68.56287), condition = "disp") plot2
合并图形并优化标签的解决方案
通过获取绘图数据框,合并后用ggplot重新绘制,同时优化标签:
# 获取绘图数据(不直接绘图) plot1_data <- plot_comparisons(mod, variables = list(hp = 68.56287), condition = "disp", draw = FALSE) plot2_data <- plot_comparisons(mod, variables = list(hp = -68.56287), condition = "disp", draw = FALSE) # 添加有实际意义的分组标签 plot1_data$hp_change <- "HP增加1个标准差" plot2_data$hp_change <- "HP减少1个标准差" # 合并数据 combined_data <- rbind(plot1_data, plot2_data) # 绘制优化后的合并图 ggplot(combined_data, aes(x = disp, y = estimate, color = hp_change, fill = hp_change)) + geom_line(linewidth = 1) + # 置信区间丝带,取消颜色映射避免与线条冲突 geom_ribbon(aes(ymin = conf.low, ymax = conf.high, color = NULL), alpha = 0.2) + # 自定义标签 labs( x = "排量(disp)", y = "边际效应估计值", color = "HP的变化", fill = "HP的变化", title = "HP增减1个标准差时的边际效应随排量的变化", subtitle = "基于mtcars数据集的线性回归模型" ) + theme_minimal()
标签优化要点
- 用有实际含义的文本替代原有的数字分组标识,让图例直观易懂
- 通过
labs()函数统一自定义坐标轴、图例、标题的文本内容 - 使用
theme_minimal()简化图表风格,聚焦核心信息
内容的提问来源于stack exchange,提问作者Victor Shin
相关产品推荐
相关产品推荐

