Значение предупреждения о сходимости в glmer


16

Я использую glmerфункцию из lme4пакета в R, и я использую 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 , где говорилось: «Проконсультируйтесь с Пауэллом для объяснения». Я сделал (вы можете, если хотите! См. Ссылки и ссылки на них ниже), но я не понимаю. На самом деле, я не смог найти ничего о снижении q.

MJD Powell (2007) «Разработки NEWUOA для неограниченной минимизации без производных», Кембриджский университет, факультет прикладной математики и теоретической физики, группа численного анализа, отчет NA2007 / 05, http://www.damtp.cam.ac.uk/ пользователь / 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 .

Ps Я знаю, что могу изменить оптимизатор, и я буду видеть, могу ли я получить вывод без предупреждений или ошибок. Я также проверю градиент и гессиан, если смогу, согласно комментарию / ответу Бена Болкера . Я использую glmerв dredgeот MuMInи я не уверен , что если ответ Бен будет работать без какого - либо дополнительного мастерить, но я буду работать над этим , как только моим компьютером отделка , что он делает, во всяком случае, я отвлекся.

Обновить

В соответствии с комментарием д-ра Болкера, приведенным ниже, я начал просматривать код 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
Я думаю, что этот вопрос может быть тематическим для CV b / c, он, кажется, касается понимания идей, а не помощи w / R как таковой.
gung - Восстановить Монику

Я не уверен, что мне есть что предложить в этом случае, кроме как побитно разбираться со статьями и кодом FORTRAN (который включен в srcкаталог cran.r-project.org/src/contrib/minqa_1. 2.3.tar.gz ) и точно видеть, что происходит, когда эта ошибка (код ошибки 430 в коде) срабатывает ...
Бен Болкер,

1
Быстро просматривая бумагу, я думаю, что предупреждение указывает на то, что оптимизатор не может найти направление, в котором уменьшается квадратичное приближение Q к функции, которую вы хотите минимизировать, F. То есть оптимизатор находится в точке, которая, скорее всего, не оптимальна, но он не знает, каким путем можно достичь цели. Следовательно, он застрял.
Свен

1
какую из двух газет вы просмотрели, и где примерно вы нашли эту информацию? (Я тоже просмотрел, но не смог так легко сделать переписку между бумагой и кодом ...)
Бен Болкер,

Я прочитал газету BOBYQA. Я прошел первую половину примерно за 5 минут, чтобы получить общее представление о том, что они собираются и что такое Q. Не могу указать на конкретную страницу.
Свен

Ответы:


13

f(x)xkk

  • Δk
  • f(x)x=xkQ(x)
  • skQk(xk+sk)||sk||Δk
  • skxk+1=xk+sk
  • В противном случае уточните модель и попробуйте снова

sk

Чтобы понять значение VQUAD, мы сначала должны понять несколько других переменных. К счастью, есть хорошие комментарии прямо под декларацией SUBROUTINE BOBYQB. Существенные переменные:

  • GOPTградиент модели
  • HQГессиан модели
  • Dsk

Начиная несколько строк выше 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 гласит: «Если в последней итерации использовалось альтернативное вычисление шага И модель не предсказывает уменьшение И IPRINT> 0, выведите предупреждающее сообщение». Обратите внимание, что решатель будет завершаться независимо от значения IPRINT.

Говоря о том IPRINT, что значение передается BOBYQAвызывающей функцией. В этом случае ваша подпрограмма R является вызывающей функцией. Есть verboseпараметр для glmer- я бы ни копейки в долларах, что передается то же значение BOBYQA. Попробуйте установить verbose0, и вы, вероятно, не увидите предупреждение. Но это, конечно, не изменит того, что происходит под капотом.


1
это очень полезно; Я не думаю, что у меня все
получится,

@BenBolker. Так стоит ли мне беспокоиться о том, что здесь происходит, или это действительно просто неприятность в коде? (Другими словами, означает ли это предупреждение, что мои результаты недействительны ??)
лесовод

1
общий совет в этом случае заключается в следующем ?lme4::convergence: если не считать исчерпывающей / детальной оценки процедуры оптимизации, лучше всего сравнивать результаты от разных оптимизаторов.
Бен Болкер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.