如何在观测值上叠加绘制线性混合模型的预测值
实现步骤
你可以通过predict()计算模型预测值后,用ggplot2叠加绘制,完整操作如下:
1. 计算两类预测值
# 个体水平预测值:纳入随机截距,匹配每个ID的观测偏移(predict默认参数level=1) mydata$pred_individual <- predict(model1) # 总体边际预测值:仅使用固定效应,反映年龄对结局的总体平均效应 mydata$pred_marginal <- predict(model1, level = 0)
2. 绘制叠加图
版本一:同时展示个体拟合线与总体趋势
ggplot(mydata, aes(x = age, y = continuous_outcome)) + # 原始观测散点 geom_point(aes(color = ID), alpha = 0.6, size = 2) + # 每个ID的个体拟合线 geom_line(aes(y = pred_individual, color = ID), linewidth = 0.8) + # 总体平均拟合线(红色虚线) geom_line(aes(y = pred_marginal), color = "red", linewidth = 1.2, linetype = "dashed") + labs( x = "年龄", y = "连续结局指标", title = "观测值与混合模型预测值对比" ) + theme_bw() + theme(legend.position = "none") # ID数量过多时可隐藏图例避免杂乱
版本二:仅展示总体平均趋势
ggplot(mydata, aes(x = age, y = continuous_outcome)) + geom_point(alpha = 0.6, size = 2) + geom_line(aes(y = pred_marginal), color = "red", linewidth = 1.2) + labs(x = "年龄", y = "连续结局指标") + theme_bw()
额外适配:带2个结点样条的模型
如果你要使用提到的2个结点样条模型,只需修改模型定义部分即可,预测、绘图逻辑完全一致:
library(splines) # 构建带2个结点的限制性立方样条模型 model_spline <- lme( data = mydata, fixed = continuous_outcome ~ ns(age, knots = quantile(age, c(1/3, 2/3))), random = ~1|ID ) # 计算样条模型的边际预测值 mydata$pred_spline <- predict(model_spline, level = 0)
内容的提问来源于stack exchange,提问作者tcvdb1992
相关产品推荐
相关产品推荐

