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

如何为含缺失值的数据集添加lmer模型的拟合值?

解决lmer拟合值与原数据行数不匹配的问题

核心原因

lmer拟合模型时会自动删除包含缺失值的观测(列表删除法),导致fitted(mlm1)的行数比原数据少,直接赋值就会触发行数不匹配的报错。

具体解决方案

方法1:用predict直接匹配原数据(推荐)

直接调用predict()并指定原数据为newdata,函数会自动对原数据中因缺失值被排除的行返回NA,完美匹配原数据行数:

data_similar_school$fitted <- predict(mlm1, newdata = data_similar_school)

方法2:利用模型的na.action属性还原

模型的na.action记录了被删除的行索引,可以通过它将拟合值还原到原数据维度:

# 获取拟合值,反向填充缺失位置为NA
fitted_full <- naresid(mlm1, fitted(mlm1))
# 赋值到原数据
data_similar_school$fitted <- fitted_full

或者手动处理:

fitted_vals <- fitted(mlm1)
# 创建和原数据同长度的向量,初始为NA
fitted_full <- rep(NA, nrow(data_similar_school))
# 将拟合值填充到模型保留的行位置
fitted_full[-mlm1@na.action] <- fitted_vals
data_similar_school$fitted <- fitted_full

方法3:手动添加ID进行匹配

如果上述方法失效,可以给原数据添加唯一行ID,再通过ID关联拟合值:

# 给原数据添加唯一行ID
data_similar_school$row_id <- seq_len(nrow(data_similar_school))
# 提取模型使用的数据集,添加拟合值和对应ID
model_df <- model.frame(mlm1)
model_df$fitted <- fitted(mlm1)
model_df$row_id <- data_similar_school$row_id[-mlm1@na.action]
# 左连接回原数据
data_similar_school <- merge(data_similar_school, model_df[, c("row_id", "fitted")], 
                             by = "row_id", all.x = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:05:13