2013-06-12 56 views
-3

我有,我想找到的最低值[R優化最小值

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) 

任何想法?

回答

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