กำหนด custom moment function
ในหลายกรณีของปัญหา constrained optimization ผู้จัดการพอร์ตหรือนักวิเคราะห์อาจต้องการประมาณค่า moment ด้วยวิธีเฉพาะ และ/หรือต้องการขยายแนวคิดของ set.portfolio.moments() ออกไป โดย custom moment function ที่ผู้ใช้กำหนดเองสามารถรับ argument ที่มีชื่อใดก็ได้ อย่างไรก็ตาม argument ที่ชื่อ R สำหรับ asset returns และ portfolio สำหรับ portfolio object จะถูกตรวจจับโดยอัตโนมัติและจัดการอย่างมีประสิทธิภาพ ด้วยเหตุนี้จึงแนะนำอย่างยิ่งให้ใช้ R สำหรับ asset returns object และ portfolio สำหรับ portfolio object
custom moment function ควรคืนค่าเป็น named list ที่แต่ละ element แทน moment แต่ละประเภท ดังนี้
$mu: moment ที่หนึ่ง (เวกเตอร์ expected returns)$sigma: moment ที่สอง (variance-covariance matrix)$m3: moment ที่สาม (coskewness matrix)$m4: moment ที่สี่ (cokurtosis matrix)
ในแบบฝึกหัดนี้ จะเขียน custom moment function เพื่อประมาณค่า variance-covariance matrix โดยใช้วิธี robust โดยจะใช้ฟังก์ชัน cov.rob() จากแพ็กเกจ MASS signature ของฟังก์ชันควรมี argument ชื่อ R สำหรับ asset returns และ portfolio สำหรับ specification object และฟังก์ชันควรคืนค่าเป็น named list เนื่องจากประมาณค่าเฉพาะ moment ที่สอง จึงต้องคืนค่า list ที่มีเพียง element เดียวพร้อมชื่อที่เหมาะสม สามารถนำหลักการเหล่านี้ไปเขียน custom moment function สำหรับโมเดลอื่น เช่น factor models, GARCH models หรือโมเดลประเภทอื่นที่ในทางทฤษฎีควรให้ค่าประมาณที่ดีกว่า sample estimate
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์พอร์ตโฟลิโอระดับกลางใน R
คำแนะนำการฝึกหัด
- กำหนดฟังก์ชันชื่อ
moments_robustเพื่อประมาณค่า variance-covariance matrix ของ asset returns โดยใช้เมธอด"mcd" - ประมาณค่า portfolio moments ด้วยฟังก์ชันที่กำหนดไว้ แล้วกำหนดผลลัพธ์ให้กับตัวแปรชื่อ
momentsขั้นตอนนี้เป็นการตรวจสอบว่า custom moment function ทำงานได้ถูกต้องตามที่คาดไว้ - คำนวณ variance-covariance matrix โดยตรงด้วย
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$___