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 № 1Você 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()
.