開始使用免費開始

定義自訂的動差函式

在許多具有限制條件的最佳化問題中,投資組合經理或分析師可能會希望用特定技術來估計動差,或進一步擴充 set.portfolio.moments() 的概念。使用者自行定義的動差函式可以有任意命名的引數。然而,若引數名稱為資產報酬的 R 與投資組合物件的 portfolio,系統會自動偵測並以有效率的方式處理。因此強烈建議將資產報酬物件命名為 R,投資組合物件命名為 portfolio

自訂動差函式應回傳一個具名清單(named list),其各元素代表不同階數的動差:

  • $mu:第一動差(期望報酬向量)
  • $sigma:第二動差(變異數—共變異數矩陣)
  • $m3:第三動差(共同偏度矩陣)
  • $m4:第四動差(共同峰度矩陣)

在這個練習中,你將撰寫一個自訂的動差函式,使用穩健方法來估計變異數—共變異數矩陣。我們會使用 MASS 套件中的 cov.rob() 函式。此函式的界面(signature)應包含以 R 作為資產報酬、portfolio 作為規格物件的引數。函式應回傳具名清單。由於你只估計第二動差,你只需要回傳一個包含單一、且命名正確的元素的清單。你也可以依照這些原則,為其他模型撰寫自訂動差函式,例如因子模型、GARCH 模型,或任何在理論上應該比樣本估計更佳的模型類別。

本練習屬於課程

R 中級投資組合分析

檢視課程

練習說明

  • 定義名為 moments_robust 的函式,使用 "mcd" 方法來估計資產報酬的變異數—共變異數矩陣。
  • 估計你剛定義的投資組合動差,並指定給名為 moments 的變數。此步驟用來檢查你的自訂動差函式是否如預期運作。
  • 直接使用 cov.rob() 計算變異數—共變異數矩陣,並檢查其是否等於 moments$sigma

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Define custom moment function
moments_robust <- function(R, portfolio){
  out <- list()
  out$___ <- cov.rob(R, method = ___)$cov
  out
}

# Estimate the portfolio moments using the function you just defined 
moments <- moments_robust(R = ___, portfolio = ___)

# Check the moment estimate
cov.rob(___, method = ___)$cov == moments$___
編輯並執行程式碼