Как использовать функцию с параметрами в 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"
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