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

R语言使用mutate添加lmer模型拟合值时长度不匹配报错如何解决

报错诱因与解决方法

初始报错(pred_dist必须为15或1,不是17192)

诱因

你的数据集myData处于dplyr分组状态,从报错信息可看出你预先按sgroup和group字段对数据做了分组。分组状态下执行mutate()时,运算逻辑是按组独立执行,你当前操作的第一组只有15行,但fitted(model0)返回的是全数据集所有行的拟合结果(共17192个值),长度和分组单组的行数不匹配,因此报错。

解决方法

在执行mutate()前先对数据集取消分组即可:

myData %>% 
  ungroup() %>%
  mutate(pred_dist = fitted(model0)) 

后续模型报错(拟合值16794行,原数据17192行)

诱因

你后续构建的model1引入了新的自变量predictor,lmer建模时会默认自动剔除所有自变量、因变量、分组变量中存在缺失值的行,你的数据中predictor列存在398个缺失值,因此建模实际只用了16794行有效数据,fitted(model1)仅返回这16794行的拟合结果,和原数据集17192行的长度不匹配,赋值失败。

解决方法

两种方案可选:

  1. 建模前手动剔除缺失值,保证建模数据和后续赋值的数据集行数完全一致:
# 提取建模用到的所有字段无缺失的干净数据集
clean_data <- myData %>%
  drop_na(outcome, predictor, group)

# 用干净数据集建模
model1 <- lmer(outcome ~ predictor + (1|group), data=clean_data, REML=FALSE)

# 直接赋值拟合值,长度完全匹配
clean_data <- clean_data %>%
  ungroup() %>%
  mutate(pred_dist = fitted(model1))
  1. 不删除原数据行,用predict()函数指定缺失值保留规则,缺失行的拟合值返回NA,长度和原数据匹配:
myData <- myData %>%
  ungroup() %>%
  mutate(pred_dist = predict(model1, newdata = myData, na.action = na.pass))

内容的提问来源于stack exchange,提问作者Pål Bjartan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:07