Значення попередження про конвергенцію в 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/ 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 .

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
Я думаю, що це питання може бути тематичним для резюме з б / с, але, здається, йдеться про розуміння ідей, а не про допомогу без проблем.
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)
  • скQк(хк+ск)||ск||Δк
  • скхк+1=хк+ск
  • В іншому випадку вдосконаліть модель і спробуйте ще раз

ск

Щоб зрозуміти значення VQUAD, спершу треба зрозуміти кілька інших змінних. На щастя, є хороші коментарі прямо під декларацією від SUBROUTINE BOBYQB. Найважливішими змінними є:

  • GOPT, градієнт моделі
  • HQ, гессіана моделі
  • Dsк

Почавши кілька рядків вище 410, ви побачите DO 410 J=1,N. З цього починається цикл for-циклу (і вкладений для-циклу), який оцінює зміни, передбачені моделлю, використовуючи пробний крок D. Це накопичує передбачувані зміни в VQUAD. Перша частина for-loop оцінює умови першого порядку, а вкладена for-loop оцінює умови другого порядку. Напевно, було б простіше читати, якби петлі були відступними, як ось такий:

    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-loop для включення в модель інших параметрів. Маю визнати, я не повністю розумію цього - я найкраще здогадуюсь, що це стосується того, як вони будують модель.

Зрештою, все це VQUADмає на увазі зміну цільової функції, передбачену моделлю. Тож якщо VQUADце негатив, це погано. Тепер цей конкретний вирішувач може використовувати альтернативне обчислення кроків (ймовірно, пошук рядків), куди NTRITSпотрібно заграти. Отже, логіка в 430 говорить: "Якщо в останній ітерації використовувались альтернативний крок обчислення І модель не передбачає зменшення AND 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.