使用具有固定参数的nls

  • 本文关键字:参数 nls
  • 更新时间 :
  • 英文 :


我一直在尝试使用nls函数将实验数据拟合到我的模型中,该模型由3个参数的函数表示,例如a, b和c。但是,我想保持b和c固定,因为我知道它们的真实值,并且只拟合参数a:

nls(formula=pattern~myfunction(a, b, c), start=list(a=estimate_a), control=list(maxiter=50, tol=5e-8, warnOnly=T), algorithm="port", weights=sqrt(pattern), na.action=na.exclude, lower=0, upper=1)

但显然这不起作用…我怎么告诉R b和c是固定的?

修复一个参数(1)在运行nls之前设置,(2)不包含在start中。下面是一个自包含的示例,显示了将a固定为0:

a <- 0
nls(demand ~ a + b * Time, BOD, start = list(b = 1))

快速解决方案:

my_new_function <- function(a) myfunction(a, b = b_true, c = c_true)
nls(formula = pattern ~ my_new_function(a), start = list(a = estimate_a), 
    control = list(maxiter = 50, tol = 5e-8, warnOnly = TRUE), algorithm = "port", 
    weights = sqrt(pattern), na.action = na.exclude, lower = 0, upper = 1)

固定(或屏蔽)参数的问题已经存在很长时间了。昆士兰大学的Ron Duggleby向我介绍了"蒙面"这个词。1987年我在那里休假的时候,我在自己的软件里有非线性优化和非线性最小二乘的掩模。特别是CRAN包" nls"或者发展的"nlsr2";(https://gitlab.com/nashjc/improvenls/-/tree/master/nlsr-rox)可靠地处理固定参数

另一种方法是使用"nls()"加上"端口"算法和设置上下界相等的固定参数。我不确定这是否突破了极限,我只尝试了几个例子。对于这些示例,使用"minpack.lm::nlsLM()"使用相同的等界方法有时似乎会给出不正确的结果。

约翰·纳什

最新更新