glmer中收敛警告的含义


16

我正在使用R中包中的glmer函数lme4,并且正在使用bobyqa优化器(即我的默认设置)。我收到警告,我很好奇这意味着什么。

Warning message:
In optwrap(optimizer, devfun, start, rho$lower, control = control,  :
  convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q

我搜索“信任区域步骤无法减少q”。在minqa程序包中找到了一些信息,上面写着 “请咨询Powell进行解释”。我做到了(如果需要,您也可以!请参见下面的参考资料和指向它们的链接),但是我不明白。实际上,我没有找到关于减少q的任何信息。

MJD Powell(2007)“ NEWUOA在无导数的无约束最小化方面的发展”,剑桥大学,应用数学和理论物理系,数值分析组,报告NA2007 / 05,http: //www.damtp.cam.ac.uk/ user / na / NA_papers / NA2007_05.pdf

MJD Powell(2009),“没有导数的有界约束优化的BOBYQA算法”,报告号DAMTP 2009 / NA06,英国剑桥大学数学科学中心。http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf

附言:我知道我可以更改优化器,并且我将查看是否可以得到没有警告或错误的输出。根据Ben Bolker评论/答案,我还将检查渐变和粗麻布。我使用的是glmerdredgeMuMIn,我不知道,如果本的答案没有一些额外的工作,修修补补,但我会在上面工作,一旦我的电脑上完成它在做什么,反正我离题了。

更新资料

按照下面Bolker博士的评论,我开始浏览FORTRAN代码(这是有兴趣查找但不下载它的任何人的代码)。“ 430”出现在代码的bobyqb.f部分中。只需搜索“ 430”或“减少Q”以找到相关代码。

这是我第一次接触FORTRAN代码,但是我认为代码说明如果满足以下条件,则产生警告:NTRITS> 0,VQUAD> = 0,IPRINT>0。“整数NTRITS设置为数字“信任区域”自上次“替代”迭代以来发生的迭代。” VQUAD出现了几次,但我还不清楚它的重要性,因为它的值似乎取决于各种其他变量,有时它们的值取决于其他变量。摘自bobyqa.f:“ IPRINT的值应为设置为0、1、2或3来控制打印量。特别是,如果IPRINT = 0,则不输出,而如果IPRINT = 1,则仅在返回时输出。”

因此,看来任务是弄清楚VQUAD> = 0 的重要性,也许是了解/何时IPRINT变为>0。我将不得不回到纸上来看看,但数学或至少它的象征性表达,对我来说有点障碍。除非有人知道该算法或有学习它的愿望,否则我认为我将不得不通过在论文,代码和互联网之间来回迭代来迭代地提高对警告的理解,直到我理解它为止。手段。


3
我认为这个问题可能是简历B / c的话题,它似乎是在理解想法,而不是帮助R / R本身。
gung-恢复莫妮卡

在这种情况下,除了逐篇阅读论文和FORTRAN代码(包含在cran.r-project.org/src/contrib/minqa_1src目录中)之外,我不确定是否有很多建议。 2.3.tar.gz),并确切地看到此错误(代码中的错误代码430)被触发时发生了什么……
Ben Bolker 2014年

1
我快速浏览了一下论文,我认为警告表明优化器找不到找到要最小化函数F的二次近似值Q减小的方向。也就是说,优化器处于最有可能不是最佳的位置,但是它不知道该采取什么方法来改善目标。因此,它被卡住了。
Sven

1
您浏览了两篇论文中的哪篇,大约在哪里找到此信息?(我也略读了一下,但无法轻松实现纸质代码之间的对应关系……)
Ben Bolker

我读了BOBYQA论文。我花了大约5分钟的时间浏览了上半部分,以大致了解它们的运行状况和Q值。不能真正指向特定页面。
2016年

Answers:


13

FXXķķ

  • Δķ
  • 建立的模型FXX=XķX
  • sķķXķ+sķ||sķ||Δķ
  • sķXķ+1个=Xķ+sķ
  • 否则,请优化模型,然后重试

sķ

要了解的值VQUAD,我们首先必须了解其他一些变量。幸运的是,在的声明正下方有很多不错的评论SUBROUTINE BOBYQB。主要变量是:

  • GOPT,模型的梯度
  • HQ,模型的黑森州
  • Dsķ

从410上方的几行开始,您会看到DO 410 J=1,N。这将开始一个for循环(和嵌套的for循环),该循环使用试验步骤评估模型预测的变化D。它累积了的预测变化VQUAD。for循环的第一部分评估一阶项,而嵌套的for循环评估第二阶项。如果循环是缩进的,则可能更容易阅读,如下所示:

    DO 410 J=1,N
        VQUAD=VQUAD+D(J)*GOPT(J)
        DO 410 I=1,J
            IH=IH+1
            TEMP=D(I)*D(J)
            IF (I .EQ. J) TEMP=HALF*TEMP
410         VQUAD=VQUAD+HQ(IH)*TEMP

此后还有另一个for循环,可将其他参数合并到模型中。我不得不承认,我对此并不完全理解-我的最佳猜测是,这对于他们如何构建模型尤为重要。

最后,VQUAD保留模型预测的目标函数的变化。因此,如果VQUAD是非负数,那就不好了。现在,这个特定的求解器可以使用替代步骤计算(可能是行搜索),它NTRITS可以发挥作用。因此,在430处的逻辑说:“如果最后一次迭代使用了替代步骤计算,并且模型未预测到减少且AND IPRINT> 0,则打印警告消息。” 请注意,无论的值如何,求解器都将终止IPRINT

说到IPRINT,该值将传递给BOBYQA由调用函数。在这种情况下,您的R例程是调用函数。有一个verbose参数glmer-我将把美元传递给相同的值BOBYQA。尝试将其设置verbose为0,您可能不会看到警告。但这当然不会改变幕后的状况。


1
这非常有帮助;我认为我不会做得更好,要获得赏金……
Ben Bolker

@BenBolker。所以应该我来关注这里发生了什么,或者是这真的只是一个令人讨厌的代码?(换句话说,此警告是否表示我的结果无效?)
森林生态学家,

1
这种情况下的一般建议是:在?lme4::convergence没有详尽/详细评估优化过程的情况下,最好的办法是比较不同优化器的结果。
本·博克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.