运行 lmer() 混合模型时出现未知错误

时间:2021-07-28 15:26:39

标签: r lme4 anova

我目前正在尝试使用 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 个测量值。有没有办法解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

tl;dr 这是一条“因舍入而停止”的消息,可能是因为您的响应变量只有两位数的精度吗? >

NLopt reference 表示 -4 表示

<块引用>

由于舍入错误限制了进度而暂停。 (在这种情况下,优化通常仍会返回有用的结果。)

然而,期望你挖掘那么远是不合理的(lme4nloptr(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;
相关问题