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

R中对多数据子集批量执行线性混合模型并合并预测结果的实现方法

R通用代码实现方案

以下代码可完全复现你描述的全流程操作,无需手动逐个生成子集和拟合模型,可直接输出最终合并的预测结果集。

前置准备(复现数据集构造逻辑)

# 加载依赖包
library(lme4)
# 加载sleepstudy数据集并新增Days2字段
data(sleepstudy)
sleepstudy$Days2 <- rep(10:18, rep(20,9))

方法1:基础for循环实现(逻辑清晰,适合新手理解)

# 获取Days2的唯一升序值
tt <- sort(unique(sleepstudy$Days2))
# 初始化空列表存储每轮的预测结果
pred_list <- list()

# 遍历每个阈值完成全流程操作
for (i in seq_along(tt)) {
  # 生成对应子集
  sub_dat <- sleepstudy[sleepstudy$Days2 >= tt[i], ]
  # 拟合带随机截距的线性混合模型
  fit <- lmer(Reaction ~ Days + (1 | Subject), data = sub_dat)
  # 构造预测用的新数据集
  new_dat <- data.frame(Days = tt[i], Subject = unique(sub_dat$Subject))
  # 执行预测并存入结果列表
  new_dat$Predicted_Response <- predict(fit, newdata = new_dat)
  pred_list[[i]] <- new_dat
}

# 合并所有轮次的预测结果得到最终数据集
FinalOutput <- do.call(rbind, pred_list)

方法2:lapply简洁实现(符合R向量编程习惯,代码更精简)

tt <- sort(unique(sleepstudy$Days2))
FinalOutput <- do.call(rbind, lapply(seq_along(tt), function(i) {
  sub_dat <- sleepstudy[sleepstudy$Days2 >= tt[i], ]
  fit <- lmer(Reaction ~ Days + (1 | Subject), data = sub_dat)
  new_dat <- data.frame(Days = tt[i], Subject = unique(sub_dat$Subject))
  new_dat$Predicted_Response <- predict(fit, newdata = new_dat)
  return(new_dat)
}))

两种方法输出的FinalOutput结构和数值完全和你手动生成的结果一致,包含Days、Subject、Predicted_Response三个字段。如果需要保留中间的模型、子集对象,只需在循环内额外增加对应存储逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:03