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 restricciones:
lambda> sigma ^ 2.
No estoy seguro de cómo se va a configurar esto en R.
También estoy abierto a rutinas alternativas de optimización, aunque la ecuación parece convexa y por lo tanto optim
Debería ser una buena elección.
¡Gracias!
Respuestas
2 para la respuesta № 1Estás tratando de resolver una ecuación. Si se cumple o no la restricción, solo puede decidirse 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))
dando
$root
[1] 3.146198
$f.root
[1] 3.552369e-06
$iter
[1] 5
$estim.prec
[1] 6.103516e-05
1 para la respuesta № 2
Decidió que esto es más una respuesta que un comentario.
Ambos optim
y optimize
minimizar funciones, por lo que lo que desea hacer es escribir una función de error que devuelva, por ejemplo, el error cuadrado para un lambda dado (se(lambda, sigma^2, Q)
, asegúrese de que su lambda es 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 varios puntos de datos (Q, sigma ^ 2 pares), haga de su función una suma de errores cuadrados o intente usar nls()
.