将惩罚函数应用于非线性最小二乘估计收敛与 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))
我想使用包 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))