如何解决运行 lmer() 混合模型时出现未知错误
我目前正在尝试使用 lme4 函数运行重复测量方差分析。我的数据如下(显示前 6 个值,n=40):
核心 | 基材 | 处理 | O2 |
---|---|---|---|
1 | M&S | C | -0.40 |
1 | S | C | -0.60 |
2 | M&S | C | -0.41 |
2 | S | C | -0.61 |
3 | M&S | D | -0.25 |
3 | S | D | -0.45 |
我想看看处理对 O2 是否有影响,以及这是否因底物而异。我每个核心有 2 次测量,它们发生在不同的时间点,所以我想控制重复测量。为此,我使用了以下代码:
mixed.lmer1 <- lmer(O2 ~ Treatment*Substrate+(1|Core),data = data)
summary(mixed.lmer1)
然后我用下面的代码来测试是否有sig。 Core对模型的影响:
mixed.lmer2 <- lm(O2 ~ Treatment*Substrate,data = data)
summary(mixed.lmer2)
anova(mixed.lmer2,mixed.lmer1)
但是,当我运行第一个模型时,我收到以下警告:
Warning message:
In optwrap(optimizer,devfun,getStart(start,rho$pp),lower = rho$lower,:
convergence code -4 from nloptwrap
我只是想知道以前是否有人遇到过这种情况?我似乎无法在网上找到任何东西。我认为这是因为我过度拟合了数据,因为每个核心只有 2 个测量值。有没有办法解决这个问题?
谢谢!
解决方法
tl;dr 这是一条“因舍入而停止”的消息,可能是因为您的响应变量只有两位数的精度吗? >
NLopt reference 表示 -4 表示
由于舍入错误限制了进度而暂停。 (在这种情况下,优化通常仍会返回有用的结果。)
然而,期望你挖掘那么远是不合理的(lme4
→ nloptr
(R 包/包装器)→ NLopt
(C 库))。您可能可以通过打印 fitted_model@optinfo$message
找到等效信息。
从 nlopt
(C/C++ 优化库)到 nloptr
(R 包装器)到 lme4
(进一步包装 nloptr::nlopt()
以使其成为更兼容其他 R 优化函数),消息丢失了。
在 GitHub 上的 nlopt
源代码中挖掘还发现 this list of status codes:负值表示潜在的收敛问题。
typedef enum {
NLOPT_FAILURE = -1,/* generic failure code */
NLOPT_INVALID_ARGS = -2,NLOPT_OUT_OF_MEMORY = -3,NLOPT_ROUNDOFF_LIMITED = -4,NLOPT_FORCED_STOP = -5,NLOPT_SUCCESS = 1,/* generic success code */
NLOPT_STOPVAL_REACHED = 2,NLOPT_FTOL_REACHED = 3,NLOPT_XTOL_REACHED = 4,NLOPT_MAXEVAL_REACHED = 5,NLOPT_MAXTIME_REACHED = 6,NLOPT_NUM_RESULTS /* not a result,just the number of them */
} nlopt_result;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。