Quand ne dois-je * pas * utiliser la fonction nlm de R pour MLE?

25

J'ai parcouru quelques guides suggérant d'utiliser le nlm de R pour une estimation du maximum de vraisemblance. Mais aucun d'entre eux (y compris la documentation de R ) ne donne beaucoup de conseils théoriques sur le moment d'utiliser ou de ne pas utiliser la fonction.

Autant que je sache, nlm fait juste une descente de gradient le long des lignes de la méthode de Newton. Existe-t-il des principes pour déterminer quand il est raisonnable d'utiliser cette approche? Quelles alternatives sont disponibles? De plus, y a-t-il des limites sur la taille des tableaux, etc., on peut passer à nlm?

Abe
la source

Réponses:

39

Il y a un certain nombre de routines d'optimisation à usage général dans la base R que je suis au courant: optim, nlminb, nlmet constrOptim(qui gère les contraintes d'inégalité linéaires, et les appels optimsous le capot). Voici quelques éléments que vous voudrez peut-être prendre en compte pour choisir celui à utiliser.

  • optimpeut utiliser un certain nombre d'algorithmes différents, notamment le gradient conjugué, Newton, quasi-Newton, Nelder-Mead et le recuit simulé. Les deux derniers n'ont pas besoin d'informations sur les gradients et peuvent donc être utiles si les gradients ne sont pas disponibles ou impossibles à calculer (mais sont probablement plus lents et nécessitent plus de réglages précis, respectivement). Il a également une option pour renvoyer le Hessian calculé à la solution, dont vous auriez besoin si vous voulez des erreurs standard avec la solution elle-même.

  • nlminbutilise un algorithme quasi-Newton qui remplit la même niche que la "L-BFGS-B"méthode optim. D'après mon expérience, il semble un peu plus robuste que optimdans la mesure où il est plus susceptible de renvoyer une solution dans des cas marginaux où optimne parviendra pas à converger, bien que cela soit probablement dépendant du problème. Il a la fonctionnalité intéressante, si vous fournissez une fonction de gradient explicite, de faire une vérification numérique de ses valeurs à la solution. Si ces valeurs ne correspondent pas à celles obtenues à partir de la différenciation numérique, nlminbdonnera un avertissement; cela permet de s'assurer que vous n'avez pas fait d'erreur en spécifiant le gradient (facile à faire avec des probabilités compliquées).

  • nlmutilise uniquement un algorithme de Newton. Cela peut être plus rapide que d'autres algorithmes dans le sens d'avoir besoin de moins d'itérations pour atteindre la convergence, mais a ses propres inconvénients. Elle est plus sensible à la forme de la probabilité, donc si elle est fortement non quadratique, elle peut être plus lente ou vous pouvez obtenir une convergence vers une fausse solution. L'algorithme de Newton utilise également la Hesse et le calcul qui peut être suffisamment lent dans la pratique pour annuler plus que toute accélération théorique.

Hong Ooi
la source
17

Le moment d'utiliser et de ne pas utiliser une méthode de maximisation particulière dépend dans une large mesure du type de données dont vous disposez. nlmfonctionnera très bien si la surface de probabilité n'est pas particulièrement "rugueuse" et est partout différentiable. nlminbfournit un moyen de contraindre les valeurs des paramètres à des cadres de délimitation particuliers. optim, qui est probablement l'optimiseur le plus utilisé, fournit quelques routines d'optimisation différentes; par exemple, BFGS, L-BFGS-B et recuit simulé (via l'option SANN), ce dernier pouvant être utile si vous avez un problème d'optimisation difficile. Il existe également un certain nombre d'optimiseurs disponibles sur CRAN. rgenoud, par exemple, fournit un algorithme génétique pour l'optimisation.DEoptimutilise une routine d'optimisation génétique différente. Les algorithmes génétiques peuvent être lents à converger, mais ils sont généralement garantis de converger (dans le temps) même en cas de discontinuités probables. Je ne sais pas DEoptim, mais rgenoudest configuré pour être utilisé snowpour le traitement parallèle, ce qui aide quelque peu.

Ainsi, une réponse probablement quelque peu insatisfaisante est que vous devez utiliser nlmou tout autre optimiseur s'il fonctionne pour les données dont vous disposez. Si vous avez une probabilité raisonnable, l'une des routines fournies par optimou nlmvous donnera le même résultat. Certains peuvent être plus rapides que d'autres, ce qui peut ou non avoir de l'importance, en fonction de la taille de l'ensemble de données, etc. Bien sûr, plus vous avez de paramètres, plus vous risquez de rencontrer des problèmes de convergence.

Jason Morgan
la source