/ / optim com restrição de desigualdade - r, otimização, restrições, solver

optim com restrição de desigualdade - r, otimização, restrições, solver

Estou tentando usar optim() em R para resolver lambda na seguinte equação:

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

sujeito a restrição:

lambda> sigma ^ 2.

Eu não tenho certeza de como se vai configurar isso em R.

Estou aberto a rotinas de otimização alternativas, embora a equação pareça convexa e, portanto, optim deve ser uma boa escolha.

Obrigado!

Respostas:

2 para resposta № 1

Você está tentando resolver uma equação. Se a restrição é cumprida ou não, só pode ser decidida ex post. Você pode usar uniroot do seguinte modo

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 resposta № 2

Decidiu que isso é mais uma resposta do que um comentário.

Ambos optim e optimize minimizar funções, então o que você quer fazer é escrever uma função de erro que retorna, digamos, o erro quadrado para um dado lambda (se(lambda, sigma^2, Q), verifique se o seu lambda é o primeiro argumento). Em seguida, ligue optim(f = se, lower = sigma^2, sigma^2, Q) e retornará o valor de lambda que minimiza sua função de erro. Se você tiver vários pontos de dados (Q, pares sigma ^ 2), faça sua função uma soma de erros quadrados ou tente usar nls().