You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用modelplot绘制多数据集LMM与GLM系数对比分面森林图

解决方法

核心思路是拆分数据集和模型类型两个维度,先统一提取所有模型的系数数据再自定义绘图,比直接传入大模型列表给modelplot的运行速度快很多,完整实现代码如下:

library(tidyverse)
library(lme4)
library(modelsummary)

# ========== 你已有的数据和模型拟合代码 ==========
data_list <- list()
for (i in 1:30){
  data_list[[i]] <- tibble::as_tibble(mtcars)
}

compute_model_lmm <- function(data){
  lmer("mpg ~ hp + disp + drat + (1|cyl)", data = data)
}
compute_model_glm <- function(data){
  glm("mpg ~ hp + disp + drat + cyl", data = data)
}

result_list_lmm <- lapply(data_list, compute_model_lmm)
result_list_glm <- lapply(data_list, compute_model_glm)

# ========== 新增的绘图适配代码 ==========
# 1. 给两类模型添加标识名称,格式为「数据集ID_模型类型」
names(result_list_lmm) <- paste0("数据集", 1:30, "_线性混合模型")
names(result_list_glm) <- paste0("数据集", 1:30, "_广义线性模型")

# 2. 合并所有模型为一个列表
all_models <- c(result_list_lmm, result_list_glm)

# 3. 提取所有模型的系数+置信区间数据(不直接绘图,性能更高)
plot_data <- modelplot(all_models, output = "dataframe")

# 4. 拆分模型名称,得到独立的数据集列和模型类型列
plot_data <- plot_data %>%
  separate(model, into = c("dataset", "model_type"), sep = "_(?=[^_]+$)")

# 5. 自定义绘图实现需求
ggplot(plot_data, aes(
    x = estimate, 
    y = term, 
    color = model_type,
    xmin = conf.low, 
    xmax = conf.high
  )) +
  geom_pointrange(position = position_dodge(width = 0.5)) + # 同变量的两个模型系数错开避免重叠
  facet_wrap(~dataset) + # 按数据集分面
  labs(x = "系数估计值", y = "变量名", color = "模型类型") +
  theme_bw()

如果希望保留modelplot的默认样式,也可以直接在modelplot返回的ggplot对象基础上修改分面逻辑,但自定义绘图的灵活度更高,也更容易调整样式适配你的需求。

内容的提问来源于stack exchange,提问作者Giulio Centorame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:06