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

如何用ggplot可视化lmer模型输出,实现单条件对应一条拟合线?

解决lmer模型拟合线按Condition分组的ggplot可视化问题

问题出在你直接使用predict(model)得到的是包含个体随机效应(Participant)的预测值,所以每个参与者会生成一条独立的拟合线。要实现每个Condition对应一条群体水平的拟合线,需要生成排除随机效应的边际预测值,具体步骤如下:

方法一:基础predict函数实现

  1. 生成覆盖所有固定效应组合的预测数据集
    模型包含Roundnr、Condition、block三个固定效应,需要生成这三个变量所有可能组合的数据集,确保每个block下的每个Condition都有对应的Roundnr取值:

    # 生成新的预测数据集
    new_data <- expand.grid(
      Roundnr = unique(data_aggregate$Roundnr),
      Condition = unique(data_aggregate$Condition),
      block = unique(data_aggregate$block)
    )
    # 匹配模型中Condition的因子水平(保持relevel的参考组设置)
    new_data$Condition <- relevel(as.factor(new_data$Condition), ref = 'C3')
    
  2. 生成边际预测值
    使用re.form = ~0参数,让predict函数忽略随机效应,输出群体水平的拟合值:

    new_data$predicted_Fluency <- predict(model, newdata = new_data, re.form = ~0)
    
  3. 修改ggplot代码绘图
    单独用预测数据集绘制拟合线,同时指定分组为interaction(Condition, block),保证每个block内的每个Condition对应一条线:

    ggplot(data_aggregate, aes(Roundnr, Fluency, col = Condition)) +
      facet_grid(~block, scales = "free", space = "free_x") +
      geom_point(alpha = 0.3) +  # 先画原始数据点,避免被线条遮挡
      geom_line(
        data = new_data,
        aes(y = predicted_Fluency, lty = Condition),
        linewidth = 0.8,
        group = interaction(Condition, block)
      ) +
      geom_hline(yintercept = 0, linetype = "dashed")
    

方法二:用emmeans包简化操作

如果模型涉及多因素交互,emmeans包可以更便捷地计算边际预测值,无需手动生成数据集:

library(emmeans)

# 按Roundnr、Condition、block计算群体水平的边际均值
emm <- emmeans(model, ~ Roundnr * Condition * block)
# 转换为数据框格式
emm_df <- as.data.frame(emm)

# 绘图
ggplot(data_aggregate, aes(Roundnr, Fluency, col = Condition)) +
  facet_grid(~block, scales = "free", space = "free_x") +
  geom_point(alpha = 0.3) +
  geom_line(
    data = emm_df,
    aes(y = emmean, lty = Condition),
    linewidth = 0.8,
    group = interaction(Condition, block)
  ) +
  geom_hline(yintercept = 0, linetype = "dashed")

关键说明

  • re.form = ~0:强制predict函数不包含随机效应,得到的是所有参与者的平均拟合水平,而非个体拟合线。
  • group = interaction(Condition, block):因为拟合线是分block和Condition的,这个设置能避免不同block或Condition的线条被错误连接。

内容的提问来源于stack exchange,提问作者Emma van Zoelen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:33:13