我正在尝试optim()
在 R 中使用以下等式求解 lambda:
λ/sigma^2 - ln(λ/sigma^2) = 1 + 1/Q
受约束:
λ > sigma^2。
我不确定如何在 R 中进行设置。
我也对替代优化程序持开放态度,尽管该等式似乎是凸的,因此optim
应该是一个不错的选择。
谢谢!
我正在尝试optim()
在 R 中使用以下等式求解 lambda:
λ/sigma^2 - ln(λ/sigma^2) = 1 + 1/Q
受约束:
λ > sigma^2。
我不确定如何在 R 中进行设置。
我也对替代优化程序持开放态度,尽管该等式似乎是凸的,因此optim
应该是一个不错的选择。
谢谢!
您正在尝试求解方程。是否满足约束,只能事后决定。您可以使用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
化函数,所以你要做的是编写一个错误函数,它返回给定 lambda 的平方误差(se(lambda, sigma^2, Q)
确保你的 lambda 是第一个参数)。然后调用optim(f = se, lower = sigma^2, sigma^2, Q)
,它将返回最小化错误函数的 lambda 值。如果您有多个数据点(Q,sigma^2 对),则将您的函数设为误差平方和或尝试使用nls()
.