【发布时间】:2022-01-12 08:43:45
【问题描述】:
我正在尝试使用 R 的 optim() 函数来优化函数的参数。这是功能:Function, because mathjax does not work 下面的代码sn-p是我对其Log-Likelihood函数的实现,即here
likelihood_levy <- function(params, x){
mu <- params[1]
sigma <- params[2]
n <- length(x)
ans <- ((1.5 * n) * log(sigma)) +
sum(log(1 / (x - mu))) -
(n * log(sqrt(2*pi) * sigma)) -
(0.5 * sigma * sum(1 / (x - mu)))
}
return(ans)
}
optim(c(-10, 2), likelihood_levy, x = sample1, method="L-BFGS-B",
lower = c(min(sample1) - 0.001, 0))
如何在函数定义中添加参数边界?例如,第一个参数必须小于 x,第二个参数不能小于 0。
注意:如果我使用 optim() 函数的“L-BFGS-B”方法,我会收到一条错误消息,提示“L-BFGS-B 需要 'fn' 的有限值” 这个问题的任何解决方案都会很棒!
谢谢!
【问题讨论】:
-
Optim 只接受绝对边界,不接受相对边界,比如 x 必须小于 y,在这种情况下你需要一个不同的求解器。
-
无论如何,错误似乎是您的函数在某处计算为无穷大或缺失值,从而破坏了优化。
标签: r function optimization parameters log-likelihood