Я использую 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. Я должен вернуться к статье, чтобы взглянуть, но математика или По крайней мере, его символическое выражение, это немного барьер для меня. Если кто-то не знает об алгоритме или не хочет узнать о нем, я думаю, что мне придется итеративно расширять свое понимание предупреждения, переходя назад и вперед между бумагами, кодом и интернетом, пока я не пойму, что это средства.
src
каталог cran.r-project.org/src/contrib/minqa_1. 2.3.tar.gz ) и точно видеть, что происходит, когда эта ошибка (код ошибки 430 в коде) срабатывает ...Ответы:
Чтобы понять значение
VQUAD
, мы сначала должны понять несколько других переменных. К счастью, есть хорошие комментарии прямо под декларациейSUBROUTINE BOBYQB
. Существенные переменные:GOPT
градиент моделиHQ
Гессиан моделиD
Начиная несколько строк выше 410, вы увидите
DO 410 J=1,N
. Это начинает цикл for (и вложенный цикл for), который оценивает изменения, предсказанные моделью, используя пробный шагD
. Накапливается прогнозируемое изменение вVQUAD
. Первая часть цикла for оценивает члены первого порядка, а вложенная цикл for оценивает члены второго порядка. Вероятно, было бы легче читать, если бы циклы были с отступом, например так:После этого есть еще один цикл for для включения других параметров в модель. Я должен признать, я не полностью понимаю это - мое лучшее предположение - то, что это определенно к тому, как они строят модель.
В конце всего этого
VQUAD
содержится изменение целевой функции, предсказанное моделью. Так что, еслиVQUAD
не отрицательно, это плохо. Теперь этот конкретный решатель может использовать альтернативное пошаговое вычисление (возможно, поиск строки), в котором можноNTRITS
играть. Таким образом, логика на этапе 430 гласит: «Если в последней итерации использовалось альтернативное вычисление шага И модель не предсказывает уменьшение ИIPRINT
> 0, выведите предупреждающее сообщение». Обратите внимание, что решатель будет завершаться независимо от значенияIPRINT
.Говоря о том
IPRINT
, что значение передаетсяBOBYQA
вызывающей функцией. В этом случае ваша подпрограмма R является вызывающей функцией. Естьverbose
параметр дляglmer
- я бы ни копейки в долларах, что передается то же значениеBOBYQA
. Попробуйте установитьverbose
0, и вы, вероятно, не увидите предупреждение. Но это, конечно, не изменит того, что происходит под капотом.источник
?lme4::convergence
: если не считать исчерпывающей / детальной оценки процедуры оптимизации, лучше всего сравнивать результаты от разных оптимизаторов.