Optim mit Ungleichheitsbeschränkungen
-
27-10-2019 - |
Frage
Ich versuche zu verwenden optim()
In R für Lambda in der folgenden Gleichung zu lösen:
lambda/sigma^2 - ln (lambda/sigma^2) = 1 + 1/q
Einschränkungen unterliegen:
Lambda> Sigma^2.
Ich bin mir nicht sicher, wie man dies in R. aufstellt
Ich bin auch offen für alternative Optimierungsroutinen, obwohl die Gleichung konvex und daher erscheint optim
sollte eine gute Wahl sein.
Vielen Dank!
Lösung
Sie versuchen, eine Gleichung zu lösen. Unabhängig davon, ob die Einschränkung erfüllt ist oder nicht, kann nur ex post festgelegt werden. Sie können verwenden uniroot
folgendermaßen
f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))
geben
$root
[1] 3.146198
$f.root
[1] 3.552369e-06
$iter
[1] 5
$estim.prec
[1] 6.103516e-05
Andere Tipps
Entschieden, dass dies eher eine Antwort als ein Kommentar ist.
Beide optim
und optimize
Minimieren Sie die Funktionen. Sie möchten also eine Fehlerfunktion schreiben, die beispielsweise den quadratischen Fehler für eine bestimmte Lambda zurückgibt (se(lambda, sigma^2, Q)
, Stellen Sie sicher, dass Ihr Lambda das erste Argument ist). Dann ruf an optim(f = se, lower = sigma^2, sigma^2, Q)
und es wird den Wert von Lambda zurückgeben, der Ihre Fehlerfunktion minimiert. Wenn Sie mehrere Datenpunkte haben (q, sigma^2 Paare), machen Sie Ihre Funktion zu einer Summe quadratischer Fehler oder versuchen Sie es mit der Verwendung nls()
.