Отрицательные значения диагонали в матрице гессиана в функции optim

Я пытаюсь оценить параметры моей функции логарифма правдоподобия, используя optim в R. Процесс оптимизации сходится, и оценки параметров интуитивно понятны и соответствуют ожиданиям. Проблема возникает, когда я хочу вычислить стандартные ошибки для оцененных коэффициентов, используя sqrt(diag(solve(- optim$hessian))), что приводит к NaNs для многих коэффициентов, что связано с наличием отрицательных значений на диагонали матрицы Гесси. Я предполагаю, что эта проблема довольно распространена, поскольку она задавалась в некоторых других сообщениях SO, таких как здесь или здесь.

Что меня удивило, так это то, что, несмотря на частоту возникновения проблемы, почти не было предложено конкретного объяснения или решения, чтобы справиться с такими ситуациями. Итак, я был бы очень признателен, если бы кто-нибудь мог прояснить, почему матрица Гесса не является положительно определенной (я минимизирую отрицательную логарифмическую вероятность), особенно с учетом того, что оптимизация сошлась. Кроме того, как я могу продолжить и вычислить стандартные ошибки? Попытка использования других начальных значений не кажется надежным решением и ранее была признана неэффективной. В некоторых случаях, например здесь и здесь, используя функцию hessian из numDeriv пакет рекомендуется для численного вычисления матрицы гессиана при оптимальных значениях. В моем случае это приводит к следующей ошибке, которую я не могу исправить:

  Error in Daprox[, k] <- (f1 - f2)/(2 * h[i]) :
  incorrect number of subscripts on matrix

Почти аналогичная ошибка возникает при использовании функции hessian из пакета pracma. Я не публикую функцию логарифма правдоподобия, поскольку она довольно длинная и написана произвольно, но правильно. Так что, полагаю, это не поможет ответить на мой вопрос.


person MoRA    schedule 18.03.2020    source источник
comment
Ему не нужен точный гессиан, поэтому он просто вычисляет приближение, которое может сделать быстрее.   -  person G. Grothendieck    schedule 19.03.2020
comment
@ G.Grothendieck, спасибо за ваш комментарий, но не могли бы вы объяснить немного подробнее? Как вы предлагаете действовать в таком случае?   -  person MoRA    schedule 19.03.2020
comment
Пакеты numDeriv и pracma имеют полезные функции.   -  person G. Grothendieck    schedule 19.03.2020
comment
@ G.Grothendieck, Да, я пробовал оба, но, как я объяснил, они выдают ошибку в отношении индексов матрицы.   -  person MoRA    schedule 19.03.2020
comment
Проблемы с гессианом также могут возникнуть, когда у вас недостаточно данных по количеству параметров. Также возможно, что в вашем коде есть ошибка.   -  person G. Grothendieck    schedule 19.03.2020