Gibt es eine Möglichkeit, eine benutzerdefinierte Funktion in R zu maximieren / zu minimieren?

18

Ich versuche, eine benutzerdefinierte Funktion zu minimieren. Es sollte fünf Parameter und den Datensatz akzeptieren und alle möglichen Berechnungen durchführen, um eine einzige Zahl als Ausgabe zu erhalten. Ich möchte eine Kombination von fünf Eingabeparametern finden, die die kleinste Ausgabe meiner Funktion ergibt.

user333
quelle

Antworten:

23

Ich habe einen Beitrag geschrieben, in dem einige Tutorials mit aufgeführt sindoptim .

Hier ist ein Zitat des entsprechenden Abschnitts:

  • Die Kombination der R-Funktion optimund einer benutzerdefinierten Zielfunktion, wie beispielsweise einer Minus-Log-Likelihood-Funktion, bietet ein leistungsstarkes Werkzeug für die Parameterschätzung benutzerdefinierter Modelle.
  • Jeromy Anglim
    quelle
    1
    In letzter Zeit habe ich mit DEoptim als nettem Optimierer "keine Startpunkte notwendig" gespielt.
    Mike Lawrence
    1
    Ein kürzlich veröffentlichter Beitrag von John Myles White zum Befehl optim in R könnte ebenfalls von Interesse sein .
    Andy W
    @ Mike stimmte zu; DEoptim gibt robustere Alternative (DE = Differential Evolution)
    Abe
    12

    Zusätzlich zu Jeromy Anglims Antwort habe ich noch einige Links.

    Neben optimgibt es eine weitere Funktion in der Basis R , die für erlaubt , was Sie wollen: nlminb. Überprüfen Sie ?nlminbund ?optimfür Beispiele der Verwendung.

    Es gibt eine Reihe von Paketen, die optimiert werden können. Was ich am interessantesten fand, waren die Pakete optimx und ganz neu das neldermead- Paket für verschiedene Versionen des Simplex-Algorithmus.

    Darüber hinaus möchten Sie möglicherweise einen Blick auf die CRAN-Task-Ansicht zur Optimierung werfen, um weitere Pakete zu erhalten

    Bitte beachten Sie, dass alle meine Empfehlungen davon ausgehen, dass Sie eine deterministische Funktion haben (dh kein zufälliges Rauschen). Für Funktionen, die nicht streng deterministisch (oder zu groß) sind, müssten Sie Algorithmen wie simuliertes Annealing oder genetische Algorithmen verwenden. Die CRAN-Task-Ansicht sollte jedoch das bieten, was Sie benötigen.

    Henrik
    quelle
    1

    Ist Ihre Funktion stetig und differenzierbar? Möglicherweise können Sie optim mit benutzerdefinierten oder numerisch approximierten Derivaten verwenden.

    grg s
    quelle