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

嵌套拟合lmer模型时无法访问cyl变量的问题求助

问题原因与解决方法

错误原因

  1. nest_by数据结构问题:用nest_by(vs)分组后,数据会拆分为每行对应一个vs水平,每行包含vs列和一个嵌套的data列——cyl、disp等变量都在这个data子数据框里。你在do里直接把.传给lmer,.指代的是当前行的完整数据(包含vs和data),并非嵌套的data子框,所以lmer找不到cyl这类变量。
  2. 随机效应(1 | vs)冗余:已经按vs分组建模,每个分组内的vs是单一固定值,随机效应需要多个不同水平来估计变异,这个项本身就不合理,无法被模型识别。

修正后的代码

方法一:用map替代do(tidyverse现代推荐写法)

mtcars %>% 
  mutate(vs = factor(vs), gear = factor(gear), carb = factor(carb), am = factor(am), 
         cyl = factor(cyl)) %>% 
  nest_by(vs) %>% 
  mutate(fit = map(data, ~lmer(mpg ~ cyl + disp + hp + (1 | am), data = .x)))

方法二:修正do的用法(明确指定数据来源)

mtcars %>% 
  mutate(vs = factor(vs), gear = factor(gear), carb = factor(carb), am = factor(am), 
         cyl = factor(cyl)) %>% 
  nest_by(vs) %>% 
  do(fit = lmer(mpg ~ cyl + disp + hp + (1 | am), data = .$data))

关键说明

  • 必须移除(1 | vs):分组后每个模型的vs无变异,保留这个项会导致模型无法估计,甚至触发额外错误。
  • 要让lmer读取嵌套在data列里的变量,需明确指定data参数指向该子数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:52:36