Как получить сообщения об ошибках сходимости или максимальный градиент в lme4

Как я могу получить максимальные значения градиента после создания моделей случайных эффектов с помощью lme4? По умолчанию это отображается, если оно больше 0,002, но я хочу сделать оригинальную функцию, как показано ниже, для которой требуется возвращаемое значение максимального градиента, независимо от того, превышает ли значение 0,002 или нет.

  1. Делаем оригинальную модель
MM<- lmer(Y ~ 1 + X + (1 |cluster_ID ), data=data)
summary(MM)
  1. Если указанная выше исходная модель имеет максимальный градиент более 0,002, выполните описанный ниже процесс.
MM_par <- getME(MM, c("theta", "fixef"))
RS_MM <- update(MM, start=MM_par, control=lmerControl(optCtrl = list(maxeval=1e4)))
summary(RS_MM)

person Kaori    schedule 08.09.2020    source источник


Ответы (2)


Пример:

library(lme4)
fm1 <- lmer(Reaction~Days+(Days|Subject), sleepstudy)

Извлеките слот @optinfo и посмотрите, что там:

names(fm1@optinfo)

Проверьте элемент $derivs:

fm1@optinfo$derivs

Вот градиент:

max(abs(fm1@optinfo$derivs$gradient))

Но нам нужен масштабированный градиент (спасибо @RobertLong за напоминание)

dd <- fm1@optinfo$derivs
sc_grad <- with(dd, solve(Hessian, gradient))
max(abs(sc_grad))

заметки

  • извлечение слотов напрямую через @ не гарантирует 100% перспективность (хотя lme4 довольно стабилен)
  • увеличение максимального количества оценок фактически не изменит максимальный градиент. Вместо этого вы можете рассмотреть возможность ужесточения/уменьшения допуска сходимости (см. ?lme4::convergence)
person Ben Bolker    schedule 08.09.2020
comment
упс, ответ @RobertLong правильный - мой дает градиент, а не масштабированный градиент. - person Ben Bolker; 09.09.2020

Вы можете получить ошибку сходимости с помощью:

myModel@optinfo$conv$lme4

И вы можете получить максимальный градиент с помощью:

myModel@optinfo$derivs %>% with(. , solve(Hessian, gradient))  %>% abs() %>% max()
person Robert Long    schedule 08.09.2020