Как использовать функцию с параметрами в optim в R

Я пытаюсь использовать функцию optim в R - у меня с этим нет проблем:

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"


person user311020193    schedule 08.07.2014    source источник


Ответы (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
person Community    schedule 08.07.2014
comment
Это то же самое для optimx? - person road_to_quantdom; 03.03.2015
comment
Прочтите файл справки ?optimx. Четко написано ... For optimx further arguments to be passed to fn and gr; otherwise, further arguments are not used. - person ; 03.03.2015
comment
Не могли бы вы взглянуть на этот вопрос, если у вас будет время? stackoverflow.com/questions/68280857/rx-probs-outside -0-1 спасибо! - person stats555; 08.07.2021