如何在R中使用带有参数的optim函数

21

我正试着使用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))

在 (function (par) 中出现错误:无法找到函数“fn”

1个回答

29
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

优化项是否也是如此? - road_to_quantdom
2
请阅读帮助文件?optimx。它明确写道...对于optimx,进一步的参数将被传递给fn和gr;否则,进一步的参数不会被使用。 - user3710546
如果您有时间,能否请看一下这个问题?https://stackoverflow.com/questions/68280857/r-x-probs-outside-0-1 谢谢! - stats_noob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接