Вопрос

Я пытаюсь использовать 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().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top