如何解决当将lme4 :: lmer与purrr :: map或for循环一起使用时,如何避免/解决“降级的VtV不是正定”错误?
我有一个函数可以通过特定的lme4 :: lmer()模型语法来运行变量,例如:
run_my_model <- function(i)
{
f <- formula(paste("y_variable ~",i,"+","*interaction_variable + ","*another_interaction_variable + (1|date) + (1|location)"))
result <- tidy_lmer(lmer(f,data=my_dataset))
print(result)
}
当我在数据集中的一个特定变量上运行它时,它运行良好:
run_my_model("one_of_my_variables")
返回:
term estimate std.error df statistic p.value
1 (Intercept) 1.977634e-04 0.001376695 24.21203 0.14365088 0.8869651
2 one_of_my_variables -2.805953e-03 0.001810723 69367.30600 -1.54963171 0.1212345
3 interaction_variableTRUE -8.648828e-04 0.001038360 20.06112 -0.83293141 0.4146903
4 another_interaction_variableTRUE 7.352286e-05 0.001539428 20.02418 0.04775987 0.9623808
5 one_of_my_variables:interaction_variableTRUE -1.383274e-04 0.010860708 67714.86149 -0.01273650 0.9898381
6 sd_(Intercept).location 2.358986e-02 NA NA NA NA
7 sd_(Intercept).date 2.098956e-03 NA NA NA NA
8 sd_Observation.Residual 4.812015e-02 NA NA NA NA
group
1 fixed
2 fixed
3 fixed
4 fixed
5 fixed
6 location
7 date
8 Residual
但是当我尝试将其与map()结合使用时,它可用于数据集中的所有变量:
test <- map(names(my_dataset),run_my_model)
返回
Error in eval_f(x,...) : Downdated VtV is not positive definite
如果我使用for循环,它也会返回相同的错误。
models <- list()
for (i in names(my_dataset))
{
f <- formula(paste("y_variable ~","*another_interaction_variable + (1|date) + (1|location)"))
models[[i]] <- lmer(f,data=my_dataset)
}
我知道此模型语法可用于某些变量(如上所示),因此很明显,正是某些特定的变量会产生此错误。我尝试查看回溯,但是它没有提供任何有关错误首次出现的兴趣点。我也尝试过将lmer()调用嵌套在try()内,但是仍然会发生错误。
我如何才能使map()语句或循环针对不生成此错误消息的变量成功运行,而只返回NA或与生成错误的变量相似的变量,而不必只写出语法重复每个变量?
解决方法
您可以尝试两件事。
首先,您可以在评估功能之前打印名称。最后输出的变量将是带有错误的变量。
test <- map(names(my_dataset),~{
print(.x)
run_my_model(.x)
})
或者,您可以使用tryCatch
直接返回错误:
test <- map(names(my_dataset),~{
tryCatch(run_my_model(.x),error=function(e) return(e))
})
您最终将获得一个包含模型或模型引发的错误的列表。
如果这没有帮助,建议您在问题中添加reproducible example。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。