求助:用sjPlot绘制lmer模型的估计值与95%置信区间
绘制线性混合效应模型的估计值与95%置信区间(sjPlot实现)
1. 加载依赖包
先确保安装并加载所需R包:
install.packages(c("lme4", "sjPlot", "ggplot2")) # 首次运行需执行安装 library(lme4) library(sjPlot) library(ggplot2)
2. 虚拟数据集示例
这里用模拟的学生成绩数据集(固定效应:性别、年级;随机效应:学校),与你提供的虚拟数据结构对齐:
set.seed(123) # 保证结果可复现 dummy_data <- data.frame( score = rnorm(200, mean = 70, sd = 10), gender = factor(sample(c("Male", "Female"), 200, replace = TRUE)), grade = factor(sample(c("7", "8", "9"), 200, replace = TRUE)), school = factor(sample(paste0("School_", 1:10), 200, replace = TRUE)) )
3. 拟合线性混合效应模型
lmer_model <- lmer(score ~ gender + grade + (1 | school), data = dummy_data)
4. 绘制符合示例样式的估计值与置信区间
根据常见示例图需求,以下代码可生成标准森林图,并支持自定义调整:
基础版(匹配默认示例图风格)
# 生成估计值+95%置信区间图 plot <- plot_model( lmer_model, type = "est", # 指定绘制估计值与置信区间 ci.lvl = 0.95, # 设置95%置信区间 show.values = TRUE, # 显示具体估计值 value.offset = 0.3, # 数值偏移避免与置信区间重叠 show.intercept = FALSE, # 隐藏截距项(如果示例图不需要) title = "固定效应的估计值与95%置信区间", axis.labels = c("性别(女)", "年级(8)", "年级(9)"), # 替换为你的变量实际标签 vline.color = "gray60", # 参考线颜色 dot.size = 3, # 估计值点的大小 line.size = 1 # 置信区间线段粗细 ) # 调整主题样式,贴合示例图的简洁风格 plot + theme_classic() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title.x = element_text(size = 12, face = "bold"), axis.text = element_text(size = 11), axis.title.y = element_blank() # 隐藏y轴标题(如果示例图没有) ) + labs(x = "估计值 (95% 置信区间)")
进阶版(分组展示变量)
如果示例图需要按变量类别分组展示,可使用group.terms参数:
plot_model( lmer_model, type = "est", ci.lvl = 0.95, group.terms = list(c(1), c(2,3)), # 按性别、年级分组 show.values = TRUE, title = "固定效应分组展示", axis.labels = c("女", "8年级", "9年级"), legend.title = "变量类型", legend.labels = c("性别", "年级"), vline.color = "gray60" ) + theme_bw()
关键参数说明
type = "est":核心参数,指定绘制估计值与置信区间的森林图ci.lvl:设置置信区间水平,此处为0.95show.values:控制是否显示估计值数值show.intercept:控制是否展示截距项axis.labels:自定义y轴的变量标签,匹配你的数据实际含义group.terms:用于对变量进行分组,适合多类别变量的展示
内容的提问来源于stack exchange,提问作者skpak
相关产品推荐
相关产品推荐

