使用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
相关产品推荐
相关产品推荐

