-3

I have a function that I would like to find the minimal value

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)
}

I would like to minimize "monthly.mean.return". The correct answer is 0.01 but I am getting big numbers...

I am trying:

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

Any ideas?

4

1 回答 1

5

措辞很重要。您不是要最小化monthly.mean.return,而是要fn相对于最小化monthly.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 回答