使用equatiomatic提取混合模型公式时vapply错误排查求助
问题与代码
我正在运行如下混合模型:
assign( paste("M_FACTOR_", h, sep = ""), lmerTest::lmer( LogT ~ 1 + as.factor(Monthly) * gender + (as.factor(Monthly) | ID), data = plot_data, REML = TRUE, control = lmerControl(optimizer = 'optimx', optCtrl = list(method = 'nlminb')) ) ) # apply model (Monthly as factor)
eq_fac <- equatiomatic::extract_eq(get(eval(paste("M_FACTOR_", h, sep = ""))), wrap = TRUE)
运行后出现以下错误:
Error in vapply(names(pred_level), function(x) { :
values must be length 1,
but FUN(X[[1]]) result is length 0
请问该错误是否因我将Monthly转换为因子类型导致?
解答
这个错误确实和Monthly转为因子的操作高度相关,具体细节如下:
- 问题核心:
equatiomatic::extract_eq在解析含因子交互项的混合模型时,旧版本或特定场景下的因子水平提取逻辑存在缺陷。你在公式里直接用as.factor(Monthly)生成临时因子,同时搭配交互项与随机效应,会导致函数在识别预测变量的水平信息时返回空值,触发vapply对返回值长度的校验错误。 - 验证方法:临时将公式中的
as.factor(Monthly)替换为原始数值型的Monthly(假设原变量是数值),重新拟合模型后再运行extract_eq,若错误消失即可确认因子转换是诱因。 - 修复方案:
- 提前在数据框中转换因子:先运行
plot_data$Monthly <- as.factor(plot_data$Monthly),再在模型公式中直接使用Monthly(无需嵌套as.factor()),避免临时因子导致的解析问题。 - 更新
equatiomatic包:该函数的后续版本已修复部分混合模型因子解析的bug,升级到最新版可能直接解决问题。
- 提前在数据框中转换因子:先运行
内容的提问来源于stack exchange,提问作者Cdo
相关产品推荐
相关产品推荐

