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

R语言中线性混合模型的预测:基于lme4包sleepstudy数据集预测未观测天数的反应值

解决lme4混合模型的新时间点预测问题

没问题,这就带你一步步实现对18名受试者在Day=12和Day=14的Reaction值预测,最终得到你想要的三列数据集:

步骤1:生成待预测的新数据集

首先我们需要创建一个包含所有受试者(18名)和目标天数(12、14)的组合数据框,用expand.grid()函数就能轻松实现:

# 提取sleepstudy里的所有受试者(去重)
subjects <- unique(sleepstudy$Subject)
# 定义需要预测的天数
new_days <- c(12, 14)
# 创建包含所有预测组合的数据集
new_data <- expand.grid(Days = new_days, Subject = subjects)

这一步会生成36行(18个受试者×2个天数)的数据框,刚好覆盖我们需要预测的所有场景。

步骤2:用拟合好的模型生成预测值

我们已经有了含随机截距的模型fit1,直接调用predict()函数就能生成受试者特异性的预测值,注意要指定newdata参数为我们刚创建的数据集:

# 生成预测值,默认会纳入每个受试者的随机截距(条件预测)
new_data$Predicted_Response <- predict(fit1, newdata = new_data)

这里要说明:predict(lmer模型)默认是条件预测,也就是会结合每个受试者的随机截距计算个性化预测值,这正是我们需要的;如果想要只看固定效应的平均预测(不考虑个体差异),可以加re.form = ~0参数,但这里我们不需要这个选项。

步骤3:查看最终结果

现在new_data就是符合要求的三列数据集了,直接打印就能看到格式:

print(new_data)

输出会和你预期的完全一致:

Days Subject Predicted_Response
12 308 [对应预测值]
12 309 [对应预测值]
...
14 371 [对应预测值]
14 372 [对应预测值]

完整代码汇总

把所有步骤整合起来,完整可运行的代码如下:

library("lme4")
# 加载数据集
data(sleepstudy)
# 拟合含随机截距的线性混合模型
fit1 <- lmer(Reaction ~ Days + (1 | Subject), data = sleepstudy)

# 生成待预测的新数据集
subjects <- unique(sleepstudy$Subject)
new_days <- c(12, 14)
new_data <- expand.grid(Days = new_days, Subject = subjects)

# 生成预测值并添加到数据框
new_data$Predicted_Response <- predict(fit1, newdata = new_data)

# 预览结果
head(new_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:04:05