【问题标题】:How do I use a function with parameters in optim in R如何在 R 中使用带有 optim 参数的函数
【发布时间】:2014-08-28 16:43:17
【问题描述】:

我正在尝试在 R 中使用 optim 函数 - 我对此没有任何问题:

funk=function(param){
  x=c(1,2,3,4,5)
  z=c(3,4,2,2,1)
  y=c(30,40,22,33,40)
  a=rep(param[1],5)
  b=param[2]
  d=param[3]
  fit=sum((y-(a+b*x+z*d))^2)
  return(fit)
}

optim(par=c(1,1,1),fn=funk)
#

但只要我不想将我的数据 (x,y,z) 硬编码到函数中,我就会遇到问题。当函数输入不仅仅是要优化的参数时,如何在 optim 中优化函数?理想情况下,我会传递 xx、zz、yy 的值,然后进行优化,然后移动到 xx、zz、yy 的不同值,然后再优化这种情况。

xx=c(1,2,3,4,5)
zz=c(3,4,2,2,1)
yy=c(30,40,22,33,40)

funk=function(param,x,y,z){
  a=rep(param[1],5)
  b=param[2]
  d=param[3]
  fit=sum((y-(a+b*x+z*d))^2)
  return(fit)
}

optim(par=c(1,1,1),fn=funk(param=c(0,0,0),x=xx,y=yy,z=zz))

(函数(par)中的错误:找不到函数“fn”

【问题讨论】:

    标签: r mathematical-optimization


    【解决方案1】:

    在optim 中,... 用于将参数传递给fn:

    xx=c(1,2,3,4,5)
    zz=c(3,4,2,2,1)
    yy=c(30,40,22,33,40)
    
    funk=function(param,x,y,z){
      a=rep(param[1],5)
      b=param[2]
      d=param[3]
      fit=sum((y-(a+b*x+z*d))^2)
      return(fit)
    }
    
    optim(par=c(1,1,1), fn=funk, x=xx, y=yy, z=zz) 
    $par
    [1] -1.863076  5.722988  7.372296
    
    $value
    [1] 124.075
    
    $counts
    function gradient 
         180       NA 
    
    $convergence
    [1] 0
    
    $message
    NULL
    

    【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2019-07-03
    • 2018-01-22
    • 2013-12-21
    • 2011-04-15
    • 2019-05-07
    相关资源
    最近更新 更多