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

如何将LME模型预测值生成的回归线添加到ggplot对象中

问题根因

你得到每个ID的独立回归线有两个核心原因:

  1. lme对象默认调用predict()时返回的是包含ID随机截距的条件预测值,每个ID的预测值都叠加了自身的随机效应偏移,本身就是个体水平的结果
  2. 全局美学映射中指定了colour=factor(ID),geom_line会默认按ID分组绘制,即使加group=1,如果预测值本身是个体层面的,也无法得到整体的群体趋势线

解决方案

首先需要计算仅包含固定效应的群体水平预测值,调用predict时指定level = 0即可实现,之后再绘制回归线。提供两种实现方案:

方案1:基于现有数据集快速修复

# 新增群体水平预测值列
mydata$model1_pop_pred <- predict(Model1, level = 0)
mydata$model2_pop_pred <- predict(Model2, level = 0)

# 绘图
ggplot(mydata, aes(x = age, y = continuous_outcome)) +
  geom_point(aes(colour=factor(ID)), shape = 16, size=1.8) +
  # 绘制Model1线性整体回归线,蓝色
  geom_line(aes(y = model1_pop_pred, group = 1), color = "blue", linewidth = 1.2) +
  # 绘制Model2多项式整体回归线,红色
  geom_line(aes(y = model2_pop_pred, group = 1), color = "red", linewidth = 1.2) +
  theme(legend.position = "none")

方案2:生成均匀年龄序列得到更平滑的回归线

原始数据的年龄值不是均匀连续的,直接连线可能出现折角,可先生成覆盖年龄范围的均匀序列计算预测值,得到更顺滑的曲线:

# 生成100个覆盖年龄范围的均匀点
new_age <- data.frame(age = seq(min(mydata$age), max(mydata$age), length.out = 100))
# 计算两个模型的群体水平预测值
new_age$model1_pred <- predict(Model1, newdata = new_age, level = 0)
new_age$model2_pred <- predict(Model2, newdata = new_age, level = 0)

# 绘图
ggplot() +
  geom_point(data = mydata, aes(x = age, y = continuous_outcome, colour=factor(ID)), shape = 16, size=1.8) +
  geom_line(data = new_age, aes(x = age, y = model1_pred), color = "blue", linewidth = 1.2) +
  geom_line(data = new_age, aes(x = age, y = model2_pred), color = "red", linewidth = 1.2) +
  theme(legend.position = "none")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:36:04