Как выбрать начальные значения в функции stats4::mle в R?

Плохо, что я не могу предоставить воспроизводимый код своей задачи, потому что я использую большой вектор. Но вопрос все же достаточно ясен. Что я пытаюсь сделать, так это подогнать бета-распределение с помощью функции mle:

params <- mle(nll, start = list(alpha = 0.1, beta = 10), method = "L-BFGS-B")

Где nll — функция, учитывающая отрицательное логарифмическое правдоподобие. В документации для функции mle аргумент "start" определяется как "Начальные значения для оптимизатора".

Сначала я попробовал несколько значений, и так я получил 0,1 и 10. Но теперь я хочу подогнать части моего вектора по некоторому коэффициенту, и эти значения уже не подходят для всех из них. На некоторых из них я получаю сообщение об ошибке:

 Error in optim(start, f, method = method, hessian = TRUE, ...) : 
 L-BFGS-B needs finite values of 'fn' 
In addition: Warning messages:
1: In lbeta(shape1[okk] + x[okk], shape2[okk] + size[okk] - x[okk]) :
NaNs produced
2: In lbeta(shape1[okk], shape2[okk]) : NaNs produced

Поискав в Интернете, я нашел разумную идею начать со значений, которые подсчитываются методом моментов. Итак, я изменил свои 0,1 и 10 по его формулам, но все равно получаю ту же ошибку.

Знаете ли вы какой-нибудь программный способ вычисления 100% подходящих начальных значений для подбора бета с помощью mle?

Извините за мой плохой английский и заранее большое спасибо за ваши идеи!


person aschmsu    schedule 29.05.2017    source источник
comment
у вас есть значения в ваших данных, которые точно равны 0,0 или ровно 1,0? Это вызовет проблемы независимо от того, какие начальные параметры вы используете ...   -  person Ben Bolker    schedule 30.05.2017
comment
Предлагаю рассмотреть пакет fitdistrplus R: cran.r-project .org/web/packages/fitdistrplus/vignettes/   -  person Marco Sandri    schedule 30.05.2017
comment
@BenBolker Да, их много! Но это работает с моим полным вектором. (Я создаю функцию nll, используя dbetabinom.ab из пакета VGAM.)   -  person aschmsu    schedule 30.05.2017
comment
@MarcoSandri Я пробовал. Существует функция mmedist для вычисления альфы и беты методом моментов, но в методе mle мне все еще нужны начальные значения. И использует ту же функцию optim, так что разницы не вижу. Может быть, вы имели в виду какую-то конкретную функцию?   -  person aschmsu    schedule 30.05.2017
comment
Извините, я не имею в виду конкретных функций...   -  person Marco Sandri    schedule 30.05.2017


Ответы (1)


Я не мог найти способ вычислить 100% гарантированные подходящие начальные значения, но вот как я мог избежать этих ошибок:

  1. Просто измените метод на "BFGS". Он будет показывать предупреждения, но не ошибки.

or

  1. Укажите аргументы lower и upper в файле mle.
person aschmsu    schedule 04.06.2017