2

我正在尝试optim()在 R 中使用以下等式求解 lambda:

λ/sigma^2 - ln(λ/sigma^2) = 1 + 1/Q

受约束:

λ > sigma^2。

我不确定如何在 R 中进行设置。

我也对替代优化程序持开放态度,尽管该等式似乎是凸的,因此optim应该是一个不错的选择。

谢谢!

4

2 回答 2

3

您正在尝试求解方程。是否满足约束,只能事后决定。您可以使用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
于 2011-09-07T09:12:46.210 回答
1

决定这更像是一个答案而不是评论。

optim和最小optimize化函数,所以你要做的是编写一个错误函数,它返回给定 lambda 的平方误差(se(lambda, sigma^2, Q)确保你的 lambda 是第一个参数)。然后调用optim(f = se, lower = sigma^2, sigma^2, Q),它将返回最小化错误函数的 lambda 值。如果您有多个数据点(Q,sigma^2 对),则将您的函数设为误差平方和或尝试使用nls().

于 2011-09-07T07:36:31.983 回答