/ / optim con restricción de desigualdad - r, optimización, restricciones, solucionador

optim con restricción de desigualdad - r, optimización, restricciones, solucionador

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 № 1

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