web-dev-qa-db-ja.com

Rのoptimでパラメーター付きの関数を使用する方法

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)を関数にハードコーディングしたくないとすぐに、問題が発生します。関数入力が最適化されるパラメーターだけではない場合、最適化で関数を最適化するにはどうすればよいですか?理想的には、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"が見つかりませんでした

12
user311020193

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
22
user3710546