Функция MLE: ошибка в optim(start, f, method = method, hessian = TRUE, ): неконечное значение конечной разности [1]

Я пытаюсь получить MLE.

loglike <- function(theta) {
  ll <- 14 * log(1 - theta) + 12216 * log(theta)
  ll
}

neg.loglike <- function(theta) -loglike(theta)

mle(neg.loglike, start = list(theta = 0.5))

я получаю сообщение об ошибке

Error in optim(start, f, method = method, hessian = TRUE, ...) : 
  non-finite finite-difference value [1]
In addition: There were 37 warnings (use warnings() to see them)

Обычно я использую приведенный выше код, но нашел другую функцию:

mle2(neg.loglike, start = list(theta = 0.5))

И это сработало. Почему другой не работает?


r mle
person catzen    schedule 22.10.2020    source источник


Ответы (1)


Функция mle по умолчанию использует метод минимизации BFGS, который требует вычисления якобиана (а иногда и гессиана) логарифмической функции правдоподобия. Если вы не зададите аналитические функции для якобиана и гессиана, могут возникнуть числовые проблемы. Это именно та ошибка, которую вы получаете.

Функция mle2 по умолчанию использует метод минимизации Нелдера-Мида, который не зависит от вычисления производных функции логарифмического правдоподобия.

Если вы добавите method=Nelder-Mead к вашему вызову mle, я подозреваю, что вы получите тот же результат, что и при вызове mle2.

См. https://www.rdocumentation.org/packages/bbmle/versions/1.0.23.1/topics/mle2 и https://www.rdocumentation.org/packages/stats4/versions/3.6.2/topics/mle для получения подробной информации.

person flow_me_over    schedule 30.12.2020