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