R: Optim() 拟合参数限制

R: Optim() fitting parameter limits

我想限制 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

可能

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 阶。

我已在修复程序中进行编辑以在下方显示。注意:我对上限和下限使用了有限值,因为无限参数给我一个错误。

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)))