如何绘制MICE多插补数据下逻辑回归模型(glm)的交互项图?
绘制多插补后逻辑回归的交互效应图
没问题!针对你用mice做过多插补、且已经得到显著iv*sex交互项的逻辑回归模型,我给你分享两种实用的绘图方法,都能完美适配多插补的结果~
方法1:用effects包快速生成(推荐,适配多插补)
这个方法最省心,effects包会自动处理多插补模型的合并结果,直接输出带置信区间的交互图:
- 先把多插补的模型汇总(
with返回的是mira对象,需要用pool()合并)
pooled_model <- pool(model) # 可以先确认交互项的显著性,和你之前的结果一致 summary(pooled_model)
- 提取
iv*sex的交互效应,指定type="response"因为是逻辑回归,输出的是概率值
library(effects) interact_effect <- Effect(focal.predictors = c("iv", "sex"), mod = pooled_model, type = "response")
- 直接绘制交互图,自带置信区间
plot(interact_effect, lines=list(multiline=TRUE), # 按sex分组画不同线条 xlab="自变量(iv)", ylab="因变量(dv)的预测概率", main="iv与sex对dv的交互效应图")
这个图会清晰展示不同sex分组下,iv变化时dv概率的趋势,置信区间也是基于多插补的合并结果计算的,非常严谨。
方法2:用ggplot2自定义绘图(更灵活)
如果想要更个性化的样式(比如调整颜色、主题、标注),可以手动生成预测数据后用ggplot2绘制:
- 创建包含
iv和sex所有组合的预测数据集,控制变量取均值(或你需要的参考值)
library(ggplot2) # 生成预测数据:iv取从最小值到最大值的100个点,sex取所有水平 new_data <- expand.grid( iv = seq(min(complete(imp)$iv), max(complete(imp)$iv), length.out = 100), sex = unique(complete(imp)$sex), # 控制变量取均值,保证其他变量一致 control = mean(complete(imp)$control, na.rm = TRUE) )
- 从多插补模型中获取预测概率和置信区间
# 获取预测概率 new_data$pred_prob <- pool.predict(pooled_model, newdata = new_data, type = "response") # 计算95%置信区间 pred_ci <- predict(pooled_model, newdata = new_data, type = "response", se.fit = TRUE) new_data$lower <- pred_ci$fit - 1.96 * pred_ci$se.fit new_data$upper <- pred_ci$fit + 1.96 * pred_ci$se.fit
- 用
ggplot2绘制个性化交互图
ggplot(new_data, aes(x = iv, y = pred_prob, color = factor(sex))) + geom_line(linewidth = 1) + # 添加置信区间的阴影 geom_ribbon(aes(ymin = lower, ymax = upper, fill = factor(sex)), alpha = 0.2, color = NA) + # 设置标签和主题 labs(x = "自变量(iv)", y = "因变量(dv)的预测概率", color = "调节变量(sex)", fill = "调节变量(sex)", title = "iv与sex对dv的交互效应(多插补结果)") + theme_minimal()
小提示
- 如果
sex是连续变量,可以把它分成几个分位数(比如低、中、高三组)来绘制分组趋势,或者用effects包的plot函数自动生成斜率图。 - 确保你已经安装了需要的包:
install.packages(c("effects", "ggplot2", "mice"))
内容的提问来源于stack exchange,提问作者HM Chan
相关产品推荐
相关产品推荐

