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

如何在geom_smooth中使用lmer绘制混合效应模型?

问题

我构建了一个简单的混合效应模型,包含一个因变量、一个协变量和一个随机截距,示例代码如下:

# 读取本地的simpsonsParadox.csv数据
df1 <- fread("simpsonsParadox.csv")

# 混合效应模型
m_intercept <- lmer(grades ~ iq + (1 | class), data = df1)
summary(m_intercept)

请问如何使用ggplot的geom_smooth函数绘制该模型?希望实现类似如下示例的绘图效果:

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_smooth(method = lm, se = FALSE)

解决方案

要绘制带随机截距的混合效应模型拟合线,geom_smooth默认不直接支持lmer方法,以下是两种实用的实现方式:

方法1:用ggpredict生成拟合值(推荐)

ggpredict包能直接从混合效应模型提取拟合数据,搭配ggplot绘图更便捷:

# 加载所需包
library(ggplot2)
library(lme4)
library(data.table)
library(ggeffects)

# 读取本地数据并拟合模型
df1 <- fread("simpsonsParadox.csv")
m_intercept <- lmer(grades ~ iq + (1 | class), data = df1)

# 生成拟合数据
# 总体拟合线(仅展示固定效应,忽略随机截距)
fit_overall <- ggpredict(m_intercept, terms = "iq")
# 分组拟合线(展示每个class的随机截距拟合线)
fit_grouped <- ggpredict(m_intercept, terms = c("iq", "class"))

# 绘制总体拟合线
ggplot(df1, aes(x = iq, y = grades)) +
  geom_point(alpha = 0.5) +
  geom_line(data = fit_overall, aes(y = predicted), color = "blue", linewidth = 1) +
  labs(x = "IQ", y = "Grades")

# 绘制分组拟合线
ggplot(df1, aes(x = iq, y = grades, color = class)) +
  geom_point(alpha = 0.5) +
  geom_line(data = fit_grouped, aes(y = predicted), linewidth = 1) +
  labs(x = "IQ", y = "Grades")

方法2:手动生成拟合值

如果不想额外加载包,可通过predict函数手动生成拟合值后绘图:

library(ggplot2)
library(lme4)
library(data.table)

# 读取本地数据并拟合模型
df1 <- fread("simpsonsParadox.csv")
m_intercept <- lmer(grades ~ iq + (1 | class), data = df1)

# 生成预测值
# 总体预测(仅固定效应)
df1$pred_overall <- predict(m_intercept, re.form = NA)
# 分组预测(包含随机截距)
df1$pred_grouped <- predict(m_intercept)

# 绘制总体拟合线
ggplot(df1, aes(x = iq, y = grades)) +
  geom_point(alpha = 0.5) +
  geom_smooth(aes(y = pred_overall), method = "lm", se = FALSE, color = "blue") +
  labs(x = "IQ", y = "Grades")

# 绘制分组拟合线
ggplot(df1, aes(x = iq, y = grades, color = class)) +
  geom_point(alpha = 0.5) +
  geom_line(aes(y = pred_grouped)) +
  labs(x = "IQ", y = "Grades")

补充:直接用geom_smooth指定lmer方法

若想直接在geom_smooth中调用lmer,需加载lme4包并指定对应公式,这种方式默认会生成分组置信区间,灵活性稍弱:

ggplot(df1, aes(x = iq, y = grades, color = class)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = lmer, formula = y ~ x + (1 | class), se = FALSE)

内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:27:11