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

lme4使用样本量与完整案例数据集存在差异的原因及排查方法

针对lme4分层模型缺失值问题的解决方法

问题1:lme4为何会使用4个非完整案例?

你统计的“模型变量完整案例数337”和lme4实际用的341不一致,核心原因是你计算完整案例时的变量范围和lme4实际用到的变量范围不匹配:

  • lme4默认用na.omit处理缺失值,只会剔除**模型公式中涉及的所有变量(固定效应、随机效应、权重/偏移项等)**存在缺失的行,完全不会理会数据集里没用到的其他变量。
  • 你计算完整案例时可能误把模型没用到的变量也算进去了,导致统计的完整案例数比lme4实际保留的少。
  • 另外排查下:有没有在模型中使用offset()、weights()这类你没纳入完整案例统计的变量?这些变量的缺失也会被lme4纳入剔除逻辑,但如果你的统计没包含它们,就会出现数字差。

问题2:如何找出lme4实际使用的观测值ID?

给你几个简单直接的方法:

  • 方法1:从模型对象提取被保留行号
    假设你的模型叫model,原数据集叫dat,执行以下代码:
    # 获取被保留的行号
    kept_rows <- setdiff(1:nrow(dat), model$na.action)
    # 提取对应的ID
    kept_ids <- dat$ID[kept_rows]
    
  • 方法2:直接提取模型使用的数据集
    用model.frame()获取lme4实际用来拟合的数据集,直接从中取ID:
    model_dat <- model.frame(model)
    kept_ids <- model_dat$ID
    
  • 方法3:利用拟合值的索引
    拟合值fitted(model)的长度就是341,它的行名对应原数据集的行号,转成数字后提取ID:
    kept_rows <- as.numeric(rownames(fitted(model)))
    kept_ids <- dat$ID[kept_rows]
    

额外验证步骤

如果还是对不上,先确认模型用到的所有变量,再重新计算完整案例数:

# 列出模型中涉及的所有变量
all_model_vars <- all.vars(formula(model))
# 用这些变量计算真实的完整案例数
true_complete_cases <- sum(complete.cases(dat[all_model_vars]))

这个数字应该和lme4输出的341一致,能帮你定位之前统计完整案例时的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:43:13