Existe-t-il un moyen de maximiser / minimiser une fonction personnalisée dans R?

18

J'essaie de minimiser une fonction personnalisée. Il doit accepter cinq paramètres et l'ensemble de données et effectuer toutes sortes de calculs, en produisant un seul nombre en sortie. Je veux trouver une combinaison de cinq paramètres d'entrée qui donne la plus petite sortie de ma fonction.

user333
la source

Réponses:

23

J'ai écrit un article répertoriant quelques tutoriels en utilisantoptim .

Voici une citation de la section pertinente:

  • "La combinaison de la fonction R optimet d'une fonction objectif créée sur mesure, telle qu'une fonction de log-vraisemblance moins fournit un outil puissant pour l'estimation des paramètres des modèles personnalisés.
  • Jeromy Anglim
    la source
    1
    Dernièrement, j'ai joué avec DEoptim comme un bon optimiseur "sans point de départ nécessaire".
    Mike Lawrence
    1
    Une publication récente de John Myles White sur la commande optim dans R peut également être intéressante .
    Andy W
    @Mike a accepté; DEoptim offre une alternative plus robuste (DE = évolution différentielle)
    Abe
    12

    En plus de la réponse de Jeromy Anglim, j'ai d'autres liens.

    A côté de optimlà est une autre fonction dans la base R qui permet ce que vous voulez: nlminb. Vérifiez ?nlminbet ?optimpour des exemples d'utilisation.

    Il y a un tas de packages qui peuvent faire des optimisations. Ce que j'ai trouvé le plus intéressant, ce sont les packages optimx et, tout nouveau, le package neldermead pour différentes versions de l'algorithme simplex.

    En outre, vous voudrez peut-être consulter la vue des tâches CRAN sur l'optimisation pour plus de packages

    Veuillez noter que mes recommandations supposent toutes que vous avez une fonction déterministe (c.-à-d. Pas de bruit aléatoire). Pour les fonctions qui ne sont pas strictement déterministes (ou trop grandes), vous devrez utiliser des algorithmes tels que le recuit simulé ou des algorithmes génétiques. Mais la vue des tâches CRAN devrait avoir ce dont vous avez besoin.

    Henrik
    la source
    1

    Votre fonction est-elle continue et différenciable? Vous pourrez peut-être utiliser optim, soit avec des dérivés fournis par l'utilisateur, soit avec des dérivés approximés numériquement.

    grg s
    la source