如何绘制交互项标准差变动对应的边际效应图?
绘制交互项的标准差变动边际效应图
方法一:使用marginaleffects包转换结果
marginaleffects默认输出单位变动的边际效应,我们可以先提取边际效应数据,再将其乘以自变量的标准差,转换为标准差变动对应的效应后绘图:
library(marginaleffects) library(ggplot2) # 计算自变量hp的标准差 hp_sd <- sd(mtcars$hp, na.rm = TRUE) # 获取hp在不同disp取值下的条件边际效应(单位变动) me_data <- slopes(mod, variables = "hp", condition = "disp") # 将单位变动的边际效应转换为标准差变动的效应(置信区间同步缩放) me_data$estimate <- me_data$estimate * hp_sd me_data$conf.low <- me_data$conf.low * hp_sd me_data$conf.high <- me_data$conf.high * hp_sd # 绘制标准差变动的边际效应图 ggplot(me_data, aes(x = disp, y = estimate)) + geom_line(linewidth = 1) + geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = 0.2) + geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") + geom_rug(aes(x = disp), data = mtcars, sides = "b", color = "gray40") + labs( x = "disp", y = "hp标准差变动对应的mpg边际效应", title = "hp对mpg的边际效应(标准差变动)随disp的变化" ) + theme_grey()
方法二:手动计算并绘图(理解原理)
如果想明确计算逻辑,可以直接基于模型系数和方差协方差矩阵手动推导:
library(ggplot2) # 提取模型系数和方差协方差矩阵 coefs <- coef(mod) vcov_mat <- vcov(mod) # 定义核心参数 b_hp <- coefs["hp"] b_hpdisp <- coefs["hp:disp"] hp_sd <- sd(mtcars$hp, na.rm = TRUE) # 生成disp的连续取值序列 disp_seq <- seq(min(mtcars$disp), max(mtcars$disp), length.out = 100) # 计算标准差变动的边际效应 me_sd <- (b_hp + b_hpdisp * disp_seq) * hp_sd # 计算边际效应的标准误和95%置信区间 var_me <- vcov_mat["hp", "hp"] + disp_seq^2 * vcov_mat["hp:disp", "hp:disp"] + 2 * disp_seq * vcov_mat["hp", "hp:disp"] se_me <- sqrt(var_me) ci_low <- me_sd - 1.96 * se_me ci_high <- me_sd + 1.96 * se_me # 组装绘图数据 plot_data <- data.frame( disp = disp_seq, estimate = me_sd, conf.low = ci_low, conf.high = ci_high ) # 绘图 ggplot(plot_data, aes(x = disp, y = estimate)) + geom_line(linewidth = 1) + geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = 0.2) + geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") + geom_rug(aes(x = disp), data = mtcars, sides = "b", color = "gray40") + labs( x = "disp", y = "hp标准差变动对应的mpg边际效应", title = "hp对mpg的边际效应(标准差变动)随disp的变化" ) + theme_grey()
关键说明
- 标准差变动的边际效应本质是单位变动边际效应 × 自变量的标准差,这种转换可以消除变量尺度差异的影响,让结果更具实质性解释力。
- 置信区间需要同步乘以标准差,因为置信区间是边际效应的线性变换,缩放逻辑与估计值完全一致。
内容的提问来源于stack exchange,提问作者Victor Shin
相关产品推荐
相关产品推荐

