Предупреждение «Модель не сходится» в 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)
Syamkumar. р
источник
@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.

REML = FALSEИксYзнак равноИксβ+Zγ+εККИксзнак равно0YКYZКZZ

И последнее замечание: я не уверен, имеет ли смысл использовать seasonв качестве случайного эффекта для начала. В конце концов, есть только так много сезонов, чтобы вы могли относиться к ним как к фиксированным эффектам.

usεr11852 говорит восстановить Monic
источник
Кстати, добро пожаловать в сообщество!
usεr11852 говорит восстановить Monic
1
@ Syamkumar.R: Круто, я рад, что смог помочь. Если вы считаете, что это отвечает на ваш вопрос, вы можете принять ответ.
usεr11852 говорит восстановить Monic
большое Вам спасибо!! 3-й вариант - 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)

Спасибо Бодо Винтеру ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) и @ usεr11852, которые помогли мне решить эту проблему.

Syamkumar. р
источник