Визначте користувацьку функцію моментів
У багатьох задачах оптимізації з обмеженнями менеджер портфеля або аналітик може захотіти оцінювати моменти за певною методикою та/або додатково розширити ідею set.portfolio.moments(). Користувацька функція моментів може мати довільно названі аргументи. Однак аргументи з іменами R для дохідностей активів і portfolio для об'єкта портфеля буде автоматично розпізнано та оброблено ефективно. Тому наполегливо радимо використовувати R для об'єкта дохідностей і portfolio для об'єкта портфеля.
Користувацька функція моментів має повертати іменований список, у якому елементи відповідають моментам:
$mu: перший момент (вектор очікуваних дохідностей)$sigma: другий момент (матриця дисперсій-коваріацій)$m3: третій момент (матриця коскосості)$m4: четвертий момент (матриця коекцесу)
У цій вправі ви напишете користувацьку функцію моментів, щоб оцінити матрицю дисперсій-коваріацій за допомогою робастного методу. Ми використаємо функцію cov.rob() з пакета MASS. Сигнатура функції має містити аргументи з іменами 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$___