Оптимируется с ограничением неравенства
-
27-10-2019 - |
Вопрос
Я пытаюсь использовать optim()
в R, чтобы решить для Lambda в следующем уравнении:
Lambda/Sigma^2 - ln (lambda/sigma^2) = 1 + 1/q
при условии ограничения:
Lambda> Sigma^2.
Я не уверен, как кто -то настраивает это на Р.
Я также открыт для альтернативных процедур оптимизации, хотя уравнение кажется выпуклым и, следовательно, optim
должен быть прекрасный выбор.
Благодарю вас!
Решение
Вы пытаетесь решить уравнение. Независимо от того, может ли ограничение, может быть решено только ex post. Вы можете использовать uniroot
следующим образом
f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))
дающий
$root
[1] 3.146198
$f.root
[1] 3.552369e-06
$iter
[1] 5
$estim.prec
[1] 6.103516e-05
Другие советы
Решил, что это скорее ответ, чем комментарий.
Оба optim
а также optimize
Минимизируйте функции, так что вы хотите сделать, это написать функцию ошибки, которая возвращает, скажем, квадратная ошибка для данной лямбды (se(lambda, sigma^2, Q)
, убедитесь, что ваш лямбда является первым аргументом). Затем позвоните optim(f = se, lower = sigma^2, sigma^2, Q)
И он вернет значение лямбда, которое минимизирует вашу функцию ошибки. Если у вас есть несколько точек данных (Q, Sigma^2 пары), сделайте вашу функцию на сумму квадратных ошибок или попробуйте использовать nls()
.