Попередження "Модель не вдалося збільшити" в lmer ()


21

За допомогою наступного набору даних я хотів побачити, чи змінюється реакція (ефект) щодо сайтів, сезону, тривалості та їх взаємодії. Деякі інтернет-форуми зі статистикою запропонували мені продовжувати використовувати лінійні моделі змішаних ефектів, але проблема полягає в тому, що оскільки репліки рандомізовані в межах кожної станції, у мене є мало шансів зібрати вибірку з точно того ж місця в наступних сезонах (наприклад, repl-1 з s1 постмонсону не може бути таким, як у мусону). Це не на відміну від клінічних випробувань (при розробці предмета), коли ви вимірюєте один і той же предмет неодноразово протягом сезонів. Однак, розглядаючи сайти та сезон як випадковий чинник, я запустив наступні команди і отримав попереджувальне повідомлення:

Warning messages:
1: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: Model failed to converge: degenerate Hessian with 1 negative eigenvalues

Чи може хтось допомогти мені вирішити питання? Коди наведені нижче:

library(lme4)
read.table(textConnection("duration season  sites   effect
                          4d    mon s1  7305.91
                          4d    mon s2  856.297
                          4d    mon s3  649.93
                          4d    mon s1  10121.62
                          4d    mon s2  5137.85
                          4d    mon s3  3059.89
                          4d    mon s1  5384.3
                          4d    mon s2  5014.66
                          4d    mon s3  3378.15
                          4d    post    s1  6475.53
                          4d    post    s2  2923.15
                          4d    post    s3  554.05
                          4d    post    s1  7590.8
                          4d    post    s2  3888.01
                          4d    post    s3  600.07
                          4d    post    s1  6717.63
                          4d    post    s2  1542.93
                          4d    post    s3  1001.4
                          4d    pre s1  9290.84
                          4d    pre s2  2199.05
                          4d    pre s3  1149.99
                          4d    pre s1  5864.29
                          4d    pre s2  4847.92
                          4d    pre s3  4172.71
                          4d    pre s1  8419.88
                          4d    pre s2  685.18
                          4d    pre s3  4133.15
                          7d    mon s1  11129.86
                          7d    mon s2  1492.36
                          7d    mon s3  1375
                          7d    mon s1  10927.16
                          7d    mon s2  8131.14
                          7d    mon s3  9610.08
                          7d    mon s1  13732.55
                          7d    mon s2  13314.01
                          7d    mon s3  4075.65
                          7d    post    s1  11770.79
                          7d    post    s2  4254.88
                          7d    post    s3  753.2
                          7d    post    s1  11324.95
                          7d    post    s2  5133.76
                          7d    post    s3  2156.2
                          7d    post    s1  12103.76
                          7d    post    s2  3143.72
                          7d    post    s3  2603.23
                          7d    pre s1  13928.88
                          7d    pre s2  3208.28
                          7d    pre s3  8015.04
                          7d    pre s1  11851.47
                          7d    pre s2  6815.31
                          7d    pre s3  8478.77
                          7d    pre s1  13600.48
                          7d    pre s2  1219.46
                          7d    pre s3  6987.5
                          "),header=T)->dat1


m1 = lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
          data=dat1, REML=FALSE)

@Ian_Fin. Дякую за редагування Власне, я не знаю, як включити r-коди, як зазначено вище
Сямкумар.

Відповіді:


47

"Вирішення" проблеми, з якою ви стикаєтесь у сенсі не отримувати попередження про невдалу конвергенцію, є досить простим: ви не використовуєте оптимізатор BOBYQA за замовчуванням, але натомість ви вирішили використовувати процедуру оптимізації Nelder -Mead, використовувану за замовчуванням у попередніх 1.0.xпопередніх версіях. Або ви встановите пакет, optimxщоб ви могли безпосередньо підпрограму L-BFGS-B або nlminb(те саме, що lme4версії до версії 1). Наприклад:

m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(optimizer ="Nelder_Mead")
library(optimx)
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='L-BFGS-B')))
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='nlminb')))

всі працюють нормально (без попереджень). Цікаві питання:

  1. чому ви отримали ці попередження для початку і
  2. чому при використанні у REML = TRUEвас не було попереджень.

Отже, 1. ви отримали ці попередження, оскільки ви визначили durationяк фіксований ефект, так і випадковий нахил для фактору sites, а також season. Модель ефективно вичерпала ступінь свободи для оцінки кореляції між нахилами та визначеними перехопленнями. Якщо ви використовували дещо простішу модель, наприклад:

m1 = lmer(effect~duration+ (1+duration|sites) + (0+duration|season) + (1|season),
          data=dat1, REML = FALSE)

у вас не виникне жодних проблем конвергенції. Ця модель дозволила б ефективно оцінити некорельовані випадкові перехоплення та випадкові нахили для кожного season.

Крім того, 2. коли ви визначили, REML = FALSEви використовували оцінену Максимальну ймовірність замість обмеженої максимальної ймовірності. Оцінки REML намагаються "визначити" вплив фіксованих ефектів перед тим, як перейти до пошуку оптимальної дисперсійної структури з випадковим ефектом (див. Потік " Що таке" обмежена максимальна ймовірність "та коли її слід використовувати? " інформація з цього питання). Обчислювально ця процедура, по суті, виконується шляхом множення обох частин початкового рівняння моделі LME на матрицю таким, що , тобто ви змінюєте як початковий на так і тоХу=Хβ+Zγ+ϵККХ=0уКуZ до . Я сильно підозрюю, що це вплинуло на номер умови матриці проектування і як таке допоможе вам вийти з чисельного важкого місця, яке ви опинилися в першу чергу.КZZ

Заключна примітка полягає в тому, що я не впевнений, чи є сенс використовувати seasonяк випадковий ефект для початку. Адже існує лише так багато сезонів, щоб ви могли так само ставитися до них як до фіксованих ефектів.


До речі, ласкаво просимо до спільноти!
usεr11852 повідомляє Відновити Моніку

1
@ Syamkumar.R: Класно, я радий, що можу допомогти. Якщо ви вважаєте, що це відповідає на ваше запитання, ви можете прийняти відповідь.
usεr11852 повідомляє Відновити Монік

дуже тобі дякую!! Третій варіант - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- фактично вирішена проблема конвергенції в glmer!
Цікаво

0

Питання швидше статистичне, а не технічне. Насправді я використовував модель випадкового ефекту замість одного фіксованого ефекту. Я думаю, що жоден із факторів не повинен розглядатися як випадковий фактор, оскільки нам потрібно щонайменше 5 або 6 рівнів або копій, щоб трактувати чинник як випадковий ефект (див. тут Яка мінімальна рекомендована кількість груп для коефіцієнта випадкових ефектів? ).

Вищевказаний набір даних містить лише триразові зразки / сайт / сезон, що недостатньо для моделі випадкових ефектів. У наборі даних тривалість, 4-денний та 7-денний належать до двох окремих паралельних експериментів, що проводяться за один і той же час. Таким чином, випрямлення даних, встановлених за тривалістю (4-денний та 7-денний) та виконання двосторонньої анової дії на кожну тривалість сезону та сайтів, оскільки факторів буде достатньо для моделювання ефекту (змінної відповіді) тут. Модель повинна бути такою:

lm(day_4_effect~sites*season, data=dat1)

lm(day_7_effect~sites*season, data=dat1)

Завдяки Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) та @ usεr11852, які допомогли мені вирішити проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.