Question

Je cherche à utiliser optim() dans R pour résoudre pour lambda dans l'équation suivante:

lambda / sigma ^ 2 - ln (lambda / sigma ^ 2) = 1 + 1 / Q

soumis à la contrainte:

lambda> sigma ^ 2.

Je ne sais pas comment on va sur la configuration de ce dans R.

Je suis ouvert à des routines d'optimisation alternatives et bien que l'équation semble convexe et donc optim devrait être un choix bien.

Merci!

Était-ce utile?

La solution

Vous essayez de résoudre une équation. Si oui ou non la contrainte est satisfaite, ne peut être décidée ex post. Vous pouvez utiliser uniroot comme suit

f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))

donnant

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05

Autres conseils

Nous avons décidé ce qui est plus une réponse qu'un commentaire.

Les deux optim et optimize minimiser les fonctions, donc ce que vous voulez faire est d'écrire une fonction d'erreur que le rendement, par exemple, l'erreur quadratique pour une lambda donnée (se(lambda, sigma^2, Q), assurez-vous que votre lambda est le premier argument). Ensuite, appelez optim(f = se, lower = sigma^2, sigma^2, Q) et il retournera la valeur de lambda qui minimise votre fonction d'erreur. Si vous avez plusieurs points de données (Q, sigma ^ 2 paires) puis faites votre fonction une somme d'erreurs au carré ou essayez d'utiliser nls().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top