定義自訂的動差函式
在許多具有限制條件的最佳化問題中,投資組合經理或分析師可能會希望用特定技術來估計動差,或進一步擴充 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$___