Pregunta

Estoy intentando usar optim() en R para resolver Lambda en la siguiente ecuación:

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

Sujeto a restricción:

Lambda> Sigma^2.

No estoy seguro de cómo se pone esto en R.

También estoy abierto a rutinas de optimización alternativa, aunque la ecuación parece convexa y, por lo tanto, optim Debería ser una buena elección.

¡Gracias!

¿Fue útil?

Solución

Estás tratando de resolver una ecuación. Si se cumple o no la restricción, solo se puede decidir ex post. Puedes usar uniroot como sigue

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

donación

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05

Otros consejos

Decidió que esto es más una respuesta que un comentario.

Ambas cosas optim y optimize Minimizar las funciones, por lo que lo que desea hacer es escribir una función de error que devuelva, por ejemplo, el error al cuadrado para una lambda dada (se(lambda, sigma^2, Q), asegúrese de que su lambda sea el primer argumento). Luego llame optim(f = se, lower = sigma^2, sigma^2, Q) y devolverá el valor de Lambda que minimiza su función de error. Si tiene múltiples puntos de datos (Q, Sigma^2 pares), haga que su función sea una suma de errores al cuadrado o intente usar nls().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top