使用R语言mlma包运行MLM时遇缺失值错误的排查求助
关于mlma包运行多水平模型报错的排查方案
问题背景
我有一个无NA值的大数据集,结构示例如下:
structure(list(Impuls = structure(c(1, 1, 1, 1, 1, 1), format.spss = "F1.0", display_width = 11L), Eat_expect = structure(c(2, 3, 2, 2, 3, 4), format.spss = "F1.0", display_width = 11L), BINGE = structure(c(0, 0, 0, 1, 0, 1), format.spss = "F8.2", display_width = 10L)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
尝试用mlma包运行多水平模型,最初代码:
library(mlma) mlma_impulse <- mlma(y=meal_impulse_only$BINGE, x=meal_impulse_only$parameter$Impuls, m=meal_impulse_only$parameter$Eat_expect)
报错:Error in if (a[i] > 1) { : missing value where TRUE/FALSE needed
修正代码后仍报相同错误:
mlma_impulse <- mlma(y = meal_impulse_only$BINGE, x = meal_impulse_only$Impuls, m = meal_impulse_only$Eat_expect)
不确定错误指向,求排查方向,是否和变量水平指定有关?
排查方向
转换变量为基础数值类型:你的变量保留了SPSS导入的特殊属性(
format.spss),mlma可能对这类变量处理异常。先将所有变量转为普通数值型:meal_impulse_only$Impuls <- as.numeric(meal_impulse_only$Impuls) meal_impulse_only$Eat_expect <- as.numeric(meal_impulse_only$Eat_expect) meal_impulse_only$BINGE <- as.numeric(meal_impulse_only$BINGE)转换后重新运行模型。
核查变量取值与模型适配性:
- 报错中的
if (a[i] > 1)判断,大概率和变量取值有关。如果Impuls是分组变量(多水平模型的组ID),需确认其编码是否从1开始且为整数,部分多水平模型工具不支持0或非整数的分组ID。 - 因变量
BINGE是0/1二分类变量,mlma默认是否支持此类因变量?需确认是否需要额外参数指定模型类型(如逻辑回归类多水平模型)。
- 报错中的
用示例数据测试:直接用你提供的6行示例数据运行mlma代码,如果仍报错,说明是变量格式或参数设置问题;如果示例数据能正常运行,说明原大数据集存在隐藏异常值(虽无NA,但可能有超出预期的取值)。
调整参数传入格式:mlma的
x和m参数可能要求传入数据框而非单个向量,尝试用数据框形式传入:mlma_impulse <- mlma(y = meal_impulse_only$BINGE, x = meal_impulse_only[, "Impuls", drop=FALSE], m = meal_impulse_only[, "Eat_expect", drop=FALSE])调试定位问题:用
debug(mlma)进入函数调试模式,逐行运行代码,找到触发if (a[i] > 1)的位置,查看a对应的变量,即可精准定位问题源头。
内容的提问来源于stack exchange,提问作者AcidCatfish
相关产品推荐
相关产品推荐

