НачатьНачать бесплатно

Определение пользовательской функции моментов

Во многих задачах оптимизации с ограничениями портфельный менеджер или аналитик может захотеть оценить моменты с помощью конкретного метода и/или расширить возможности 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$___
Редактировать и запускать код