R:Optim()拟合参数限制

时间:2018-02-06 14:02:20

标签: r optimization curve-fitting non-linear-regression

我希望对来自optim()的输出参数设置限制。对于我的正弦函数,它不必要地聚合了数千个异相阶段(其中'designL'是我的自变量,'ratio'是我的因变量数据,dfm是我的数据帧):

lo_0 = 2e-6
kc_0 = 80000
min.RSS <- function(data, par) {
  with(data, sum( (sin(par[2] *(par[1] + designL))^2 - ratio)^2) )
}
resultt <- optim(par = c(lo_0, kc_0), min.RSS, data = dfm)

我想将lo_0(相移)从0:2e-5限制。我发现了一些关于此的文档,但它没有详细描述如何实现:https://ubuntuforums.org/showthread.php?t=1420061

2 个答案:

答案 0 :(得分:2)

可能

resultt <- optim(par = c(lo_0, kc_0), min.RSS, data = dfm[ind_1,],
     method="L-BFGS-B", lower=c(0,-Inf), upper=c(2e-5,Inf))

我强烈建议您另外使用参数control=list(parscale=c(lo_0,kc_0)); optim()期望参数可以按比例缩放,并且(当使用有限差分近似计算导数时)为1阶。

答案 1 :(得分:0)

编辑:感谢Ben选择的答案(请注册),我已经修改了以下显示的修复程序。注意:我使用有限值作为上限和下限,因为无限参数给我一个错误。

lo_0 = 2e-6
kc_0 = 80000
min.RSS <- function(data, par) {
  with(data, sum( (sin(par[2] *(par[1] + designL))^2 - ratio)^2) )
}
resultt <- optim(par = c(lo_0, kc_0), min.RSS, data = dfm, method="L-BFGS-B", lower=c(0,50000), upper=c(2e-5,100000), control=list(parscale=c(lo_0,kc_0)))