-3

最小値を見つけたい関数があります

start.capital =  2000000
target.capital = 49594660
monthly.inflation = 0.002
monthly.deposits = 50000
n.obs = 240

fn<-function(monthly.mean.return,
         start.capital,
         monthly.inflation,
         monthly.deposits,
         n.obs,
         target.capital){

  #monthly.mean.return = annual.mean.return / 12
  #monthly.inflation = annual.inflation / 12

  req = matrix(start.capital, n.obs+1, 1)
  for (a in 1:n.obs) {
    req[a + 1, ] = req[a, ] * (1 + monthly.mean.return - monthly.inflation) + monthly.deposits
  }
  ending.value=req[nrow(req),]
  value<-target.capital - ending.value
  return(value)
}

「monthly.mean.return」を最小限に抑えたい。正解は 0.01 ですが、数値が大きくなっています...

やっています:

optimize(f=fn,
     monthly.mean.return,
     start.capital,
     monthly.inflation,
     monthly.deposits,
     n.obs,
     target.capital,
     lower=0)

何か案は?

4

1 に答える 1

5

言葉遣いは重要です。を最小化しようとしているのではなく、 に関してmonthly.mean.return最小化しようとしています。fnmonthly.mean.return

まず第一に、あなたの目的は に到達することでありtarget.capital、あなたのfn関数はtarget.capital - ending.value絶対エラーを返すべきではありませんabs(target.capital - ending.value)。( が の出力値をできるだけ小さくoptimizeしようとしている理由がわかると思います。)fn

optimize次に、明らかに関数を適切に呼び出していません。これらの事前に指定された引数を渡すために必要な手順は次のとおりです。

optimize(f=fn, 
         start.capital = start.capital,
         monthly.inflation = monthly.inflation,
         monthly.deposits = monthly.deposits,
         n.obs = n.obs,
         target.capital = target.capital,
         lower = 0,
         upper = 1)

$minimum
[1] 0.01001939

$objective
[1] 170750.9
于 2013-06-12T23:48:25.260 に答える