将惩罚函数应用于非线性最小二乘估计收敛与 R 包 minpack.lm

Apply penalty function to non-linear least square estimation convergence with bounds in R - package minpack.lm

我想使用包 minpack.lm 中的函数 nlsLM 执行非线性最小二乘估计。

我想对估计施加上限和下限,以强制算法在特定支持范围内找到解决方案。

大致如下:

library(minpack.lm)
mydata <- data.frame(x=c(0,5,9,13,17,20),y = c(0,11,20,29,38,45))
myfit <- nlsLM(formula(y ~ a*x), data = mydata, start=list(a = 2.5), lower = c(a = 0), upper = c(a = 5))
summary(myfit)

我的问题是:

是否可以对 nlsLM 应用惩罚函数,以避免算法 returns 成为角解?例如在我的示例中,a 不等于 0 或 5。

注意事项: 我专门在寻找包 minpack.lm.

的解决方案

要实现这个 barrier function 接近无穷大,因为 a 从右边接近 0 或从左边接近 5:

log(a)^2 + log(5-a)^2 

作为惩罚,我们形成 objective 函数

(y[1] - a*x[1])^2 + ... + (y[n] - a*x[n])^2 + (0 - log(a))^2 + (0 - log(5-a))^2

像这样

n <- nrow(mydata)
mydata0 <- rbind(mydata, 0 * mydata[1:2, ])
nlsLM(y ~ c(a * x[1:n], log(a), log(5 - a)), mydata0, start = list(a = 1))