เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

กำหนด 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$___
แก้ไขและรันโค้ด