MCMCglmm报错“固定预测变量存在缺失值”,已删缺失仍报错如何解决
MCMCglmm "missing values in the fixed predictors" 报错排查方案
- 首先验证缺失值处理逻辑是否生效
- 确认你已将na.omit的处理结果赋值给模型调用的数据集:仅执行
na.omit(dat1)不会修改原数据,必须写dat1 <- na.omit(dat1)才能让后续模型调用处理后的数据集。 - 单独检测固定效应变量的缺失值存量,运行代码:
若输出有非0值,说明对应变量仍存在未处理的NA。sapply(dat1[, c("a", "b", "c", "d", "e", "f")], function(x) sum(is.na(x)))
- 确认你已将na.omit的处理结果赋值给模型调用的数据集:仅执行
- 排查无法被na.omit识别的隐式缺失值
- 检查变量中是否存在自定义编码的缺失值,比如空格、
-999、空字符串等,这类值不会被na.omit识别,运行summary(dat1[, c("a", "b", "c", "d", "e", "f")])查看各变量分布即可排查。 - 确认固定效应变量类型符合预期:如果某预测变量被误识别为字符型且存在空值,也会被模型判定为无效值,运行
str(dat1[, c("a", "b", "c", "d", "e", "f")])可验证变量类型。
- 检查变量中是否存在自定义编码的缺失值,比如空格、
- 处理因子变量的空水平问题
如果固定效应中包含因子类型变量,删除缺失值后可能出现无观测的空水平,也会触发该报错,运行以下代码删除未使用的因子水平:dat1 <- droplevels(dat1) - 交叉验证问题来源
调用基础lm函数运行固定效应部分验证:
如果lm也报缺失值错误,说明问题出在数据集处理环节,和MCMCglmm包无关;如果lm运行正常,可更新MCMCglmm到最新版本后重试,旧版本存在已知的缺失值识别bug。mod_test <- lm(y ~ a + b + c + d + e + f, data = dat1)
内容的提问来源于stack exchange,提问作者Alex L
相关产品推荐
相关产品推荐

