【发布时间】:2013-12-21 13:29:14
【问题描述】:
我正在使用 R optim 函数进行最大似然估计。
我使用的命令是
optim(3, func, lower=1.0001, method="L-BFGS-B")$par
如果参数为1,函数func具有无限值。
因此,我将较低的值设置为 1.0001。
但有时会发生错误。
Error in optim(3, func, lower = 1.0001, method = "L-BFGS-B", sx = sx, :
L-BFGS-B needs finite values of 'fn'
接下来发生的事情很难理解。
如果我再次运行相同的命令,那么它给出的结果 1.0001 是下限。
似乎optim 函数“了解到” 1 不是正确答案。
optim 函数如何在我第一次运行时给出答案 1.0001?
附: 我刚刚发现这个问题只发生在独立的 R-console 中。如果我在 R Studio 中运行相同的代码,则不会发生。很奇怪。
【问题讨论】:
-
如果你给出一个可重现的例子会容易得多。在 RStudio 中得到不同的结果很奇怪,但并非不可能。您应该记住的一件事是,默认情况下
optim使用 0.001 的步长来计算局部梯度的有限差分近似值; 不应该(原则上)导致这个问题,但它可能。如果您使用control=list(ndeps=5e-4)确保有限差分步长小于您的lower值和硬边界之间的距离,会发生什么情况。 -
您还可以检测您的
func函数来打印(或cat())它实际调用的值,以准确记录optim()正在评估的内容。 -
sessionInfo()的 PS 结果也很有用。
标签: r optimization