【问题标题】:Find Breakpoint with optimr使用 optimr 查找断点
【发布时间】:2018-03-06 15:06:27
【问题描述】:

我正在尝试将已知函数拟合到数据点,以找到最佳参数设置。为此,我使用了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】:

    分段函数,尤其是具有平坦部分的分段函数,会给优化器带来麻烦。如果函数值在某个步长上没有改变,优化器通常会放弃参数,并且可能搜索不到足够远来达到该步长。

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

    【讨论】:

    • 谢谢!我检查并摆弄optimr(..., controls = list(parscale = c(1, 200,...)) 已经让我得到了更好的结果。但是,这是否意味着我需要手动校准?
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多