2015-11-22 24 views
0

我想從Excel的「求解器」加載項中複製R中的結果。我不知道優化的內部工作原理(數學),因此我對大多數後期結果以及我收到的錯誤消息感到困惑。我試過使用optimx軟件包,但顯然這並不能控制優化中的約束條件,所以現在我試用了nloptr軟件包。優化使用包「nloptr」

基本上,我試圖做的是複製最佳投資組合計算(財務)。下面是我的代碼的示例:

ret.cov <- cov(as.matrix(ret.p[,1:30])) 
wts <- rep(1/portfolioSize, times = portfolioSize) 
sharpe <- function(wts) { 
    mean.p <- sum(colMeans(ret.p[,1:30])*wts) 
    var.p <- t(wts) %*% (ret.cov %*% (wts)) 
    sd.p <- sqrt(var.p) 
    SR <- (mean.p - Rf)/sd.p 
    return(as.numeric(SR)) 
} 
fun.eq <- function(wts) { 
    sum(wts) == 1 
} 

optim.p <- nloptr(x0 = wts, eval_f = sharpe, lb = 0, ub = 1, eval_g_eq = fun.eq) 

sharpe(as.numeric(optim.p$solution)) 
  1. 計算的30股以及它們的返回協方差矩陣
  2. 初始化那些股票的權重,以優化(相等地加權來啓動)
  3. 設置了一個函數來計算投資組合的夏普比率
  4. 嘗試(???)指定nloptr的相等函數,該函數聲明wts矢量的和必須等於1.
  5. 嘗試最大化功能(儘管我認爲它是默認情況下最小化,而我不知道如何改變,以最大限度地改變)。
  6. 檢查所產生的,最大化夏普比率

夏普計算功能工作正常,當我嘗試它nloptr功能之外。這些問題是各種各樣的,從需要指定正確的算法使用,到不接受我提供的相等函數的函數。

所以,我的問題是:

  1. 你如何改變nloptr最大化,而不是減少?
  2. 如何寫一個相等函數來指定輸入向量的總和(權重)必須等於1?
  3. 什麼是在這裏指定使用opts = list()的正確算法? Excel使用稱爲「GRG非線性」的東西。

提前致謝!

回答

0

希望它仍然相關... 你不提供數據,所以我不能運行它,但我會盡力幫助。

1)爲了最大限度地減少只是eval_g_eq需要在的H(X)= 0格式,這意味着需要對fun.eq改變sum(wts) == 1sum(wts) - 1的-sharpe
2)。
3)有很多體面的選擇。我使用NLOPT_LN_COBYLA

+0

感謝您的回覆!實際上,我已經轉向另一個相同類型的(可重現的)問題,如果您也可以看一下它,那麼我將不勝感激!在這裏找到:http://stackoverflow.com/questions/34796173/no-change-to-initial-values-using-nloptr-in-r –