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!

War es hilfreich?

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().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top