使用optimr查找断点

问题描述 投票:0回答:1

我正在尝试将已知函数拟合到数据点,找到最佳参数设置。为此我正在使用optimr包。

这是一个可重复的例子:

packages = c("optimr", "ggplot2", "tidyverse")
lapply(packages, library, character.only=T)

testfun <- function(par, x){
 case_when(
  x < par[1] ~ par[2]*x,
  x >= par[1] ~ par[3] + par[4]*x^2)
}

optfun <- function(par, x, y){
 sum((testfun(par, x) - y)^2)
}

optout <- optimr(par = c(20000,0,0,0), optfun, x = ggplot2::midwest$popdensity, y = ggplot2::midwest$poptotal, method = "L-BFGS-B")

ggplot(ggplot2::midwest, aes(x = popdensity, y = poptotal)) + 
 geom_point() +
 stat_function(fun = testfun, args = list(par = optout$par))

我可以安装一个简单的功能,设置将找到最合适的参数。但是当我引入分段函数时,par[1]不会改变并且只是保持初始值。

任何帮助深表感谢!

r optimization non-linear-regression
1个回答
1
投票

分段功能,尤其是带有扁平部件的分段功能,将给优化者带来麻烦。如果函数值没有针对某个步长进行更改,优化器通常会放弃参数,并且可能无法搜索足够远的步骤。

查找可能会扩大搜索空间的optimr的其他参数。

© www.soinside.com 2019 - 2024. All rights reserved.