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

使用purrr::map批量执行lmer回归并整理结果的R语言问题

解决方案

1. 报错修正

报错根源是你的代码遍历了数据集所有列名(包括Subject、TimePointNum2这类非目标因变量),生成了诸如Subject ~ TimePoint + (1|Subject)的无效公式——Subject是分类变量,无法作为混合效应模型的数值响应变量。

修正核心:仅提取目标因变量列名(MUFA、SFA、Weight、BodyFat)来生成模型公式。

2. 用purrr::map批量执行回归

通过筛选目标因变量列,结合map循环完成公式生成、模型拟合的批量操作,完整tidyverse风格代码如下:

library(tidyverse)
library(lme4)
library(broom.mixed) # 注意:lme4混合模型需用broom.mixed的tidy函数

# 1. 明确目标因变量列表
dv_cols <- c("MUFA", "SFA", "Weight", "BodyFat")

# 2. 批量拟合模型并初步整理结果
model_list <- dv_cols %>%
  # 为每个因变量生成对应的lmer公式
  map(~ formula(paste(.x, "~ TimePointNum2 + (1|Subject)"))) %>%
  # 批量拟合混合效应模型
  map(lmer, data = m2)

3. 生成符合要求的结果表

使用broom.mixed::tidy()整理模型结果,并合并为统一的汇总表:

final_summary <- model_list %>%
  # 批量整理模型结果,保留固定效应,添加模型标识
  map_dfr(broom.mixed::tidy, effects = "fixed", .id = "model") %>%
  # 将模型索引替换为实际因变量名(即模型名称)
  mutate(model = dv_cols[as.integer(model)]) %>%
  # 筛选并调整所需列
  select(
    model, term, estimate, std.error, df, statistic, p.value
  ) %>%
  rename(
    模型名称 = model,
    系数项 = term,
    系数估计值 = estimate,
    标准误 = std.error,
    自由度 = df,
    t值 = statistic,
    p值 = p.value
  )

关键注意事项

  • 混合效应模型必须用broom.mixed包的tidy()函数处理,基础broom包不支持lmer模型的结果整理;
  • 确认TimePointNum2为数值型变量,若为分类变量需在公式中转换为factor(TimePointNum2)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:47:29