我试图在R中使用optim()
来解决lambda,如下式所示:
lambda / sigma ^ 2 - ln(lambda / sigma ^ 2)= 1 + 1 / Q
受约束:
lambda>西格马^ 2
我不确定如何在R中设置它。
我对替代优化程序也持开放态度,尽管方程似乎是凸的,因此optim
应该是一个很好的选择。
谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
决定这是一个答案而非评论。
optim
和optimize
都会使函数最小化,所以你要做的就是编写一个错误函数,返回给定的lambda(se(lambda, sigma^2, Q)
的平方误差,确保你的lambda是第一个参数)。然后调用optim(f = se, lower = sigma^2, sigma^2, Q)
,它将返回最小化错误函数的lambda值。如果您有多个数据点(Q,sigma ^ 2对),则将您的函数设为平方误差的总和,或尝试使用nls()
。