Когда я * не * должен использовать функцию R NLM для MLE?

25

Я наткнулся на пару руководств, предлагающих использовать Rs nlm для оценки максимального правдоподобия. Но ни один из них (включая документацию R ) не дает большого теоретического руководства о том, когда использовать или не использовать функцию.

Насколько я могу судить, nlm просто делает градиентный спуск по методике Ньютона. Существуют ли принципы, когда целесообразно использовать этот подход? Какие альтернативы доступны? Кроме того, есть ли ограничения на размер массивов и т. Д., Которые можно передать в nlm?

Abe
источник

Ответы:

39

Есть целый ряд универсальных процедур оптимизации в базе R , что я знаю: optim, nlminb, nlmи constrOptim(который обрабатывает линейные ограничения неравенства и вызовы optimпод капотом). Вот некоторые вещи, которые вы могли бы рассмотреть при выборе того, который использовать.

  • optimможет использовать ряд различных алгоритмов, включая сопряженный градиент, ньютон, квазиньютон, нельдер-мид и имитированный отжиг. Последние два не нуждаются в информации о градиенте и поэтому могут быть полезны, если градиенты недоступны или их невозможно рассчитать (но, вероятно, они будут медленнее и требуют более точной настройки параметров, соответственно). Он также имеет возможность вернуть вычисленный гессиан в решение, которое вам понадобится, если вы хотите стандартные ошибки вместе с самим решением.

  • nlminbиспользует квазиньютоновский алгоритм, который заполняет ту же нишу, что и "L-BFGS-B"метод optim. По моему опыту, это кажется немного более надежным, чем optimв том, что он с большей вероятностью вернет решение в крайних случаях, когда optimне удастся сходиться, хотя это, вероятно, зависит от проблемы. Если вы предоставляете явную градиентную функцию, у него есть приятная возможность числовой проверки его значений в решении. Если эти значения не совпадают с полученными из числовых разностей, nlminbвыдаст предупреждение; это помогает убедиться, что вы не ошиблись при указании градиента (это легко сделать со сложной вероятностью).

  • nlmиспользует только алгоритм Ньютона. Это может быть быстрее, чем другие алгоритмы в том смысле, что для достижения конвергенции требуется меньше итераций, но имеет свои недостатки. Он более чувствителен к форме вероятности, поэтому, если он сильно не квадратичен, он может быть медленнее или вы можете получить сходимость к ложному решению. Алгоритм Ньютона также использует гессиан и вычисления, которые на практике могут быть достаточно медленными, чтобы более чем нейтрализовать любое теоретическое ускорение.

Хонг Оои
источник
17

Когда использовать, а не использовать какой-либо конкретный метод максимизации, в значительной степени зависит от типа данных, которые у вас есть. nlmбудет работать просто отлично, если поверхность вероятности не особенно "шероховатая" и везде дифференцируема. nlminbпредоставляет способ ограничить значения параметров конкретными ограничивающими рамками. optim, который, вероятно, является наиболее используемым оптимизатором, предоставляет несколько различных процедур оптимизации; например, BFGS, L-BFGS-B и имитированный отжиг (с помощью опции SANN), последний из которых может быть полезен, если у вас есть проблемы с оптимизацией. Есть также ряд оптимизаторов, доступных на CRAN. rgenoudНапример, предоставляет генетический алгоритм для оптимизации.DEoptimиспользует другую процедуру генетической оптимизации. Генетические алгоритмы могут медленно сходиться, но обычно гарантированно сходятся (во времени), даже если в вероятности есть разрывы. Я не знаю DEoptim, но rgenoudнастроен snowна параллельную обработку, что несколько помогает.

Так что, вероятно, несколько неудовлетворительный ответ заключается в том, что вы должны использовать nlmлюбой другой оптимизатор, если он работает для ваших данных. Если у вас правдоподобная вероятность, любая из подпрограмм, предоставленных optimили nlmдаст вам тот же результат. Некоторые могут быть быстрее других, что может иметь или не иметь значения, в зависимости от размера набора данных и т. Д. Что касается количества параметров, которые могут обрабатывать эти подпрограммы, я не знаю, хотя, вероятно, их довольно много. Конечно, чем больше у вас параметров, тем больше вероятность того, что у вас возникнут проблемы с конвергенцией.

Джейсон Морган
источник