Define una función de momentos personalizada
En muchos casos, para problemas de optimización con restricciones, el gestor o analista de carteras puede querer estimar momentos con una técnica específica y/o ampliar la idea de set.portfolio.moments(). Una función de momentos personalizada definida por el usuario puede tener argumentos con cualquier nombre. No obstante, los argumentos llamados R para los rendimientos de los activos y portfolio para el objeto de cartera se detectarán automáticamente y se gestionarán de forma eficiente. Por ello, se recomienda encarecidamente usar R para el objeto de rendimientos y portfolio para el objeto de cartera.
La función de momentos personalizada debe devolver una lista con nombres donde los elementos representen los momentos:
$mu: primer momento (vector de rendimientos esperados)$sigma: segundo momento (matriz de varianzas-covarianzas)$m3: tercer momento (matriz de cosimetría)$m4: cuarto momento (matriz de cocurtosis)
En este ejercicio, escribirás una función de momentos personalizada para estimar la matriz de varianzas-covarianzas usando un método robusto. Usaremos la función cov.rob() del paquete MASS. La firma de la función debe tener argumentos llamados R para los rendimientos de los activos y portfolio para el objeto de especificación. La función debe devolver una lista con nombres. Como solo estás estimando el segundo momento, solo necesitas devolver una lista con un elemento correctamente nombrado. Puedes aplicar estas reglas para escribir funciones de momentos personalizadas para otros modelos como modelos factoriales, modelos GARCH o cualquier otra clase de modelos que, en teoría, deban ser una mejor estimación que la estimación muestral.
Este ejercicio forma parte del curso
Análisis de carteras intermedio en R
Instrucciones del ejercicio
- Define una función llamada
moments_robustque estime la matriz de varianzas-covarianzas de los rendimientos de los activos usando el método"mcd". - Estima los momentos de cartera que acabas de definir. Asígnalos a una variable llamada
moments. Esto es una comprobación para asegurarte de que tu función de momentos personalizada funciona como esperas. - Calcula la matriz de varianzas-covarianzas directamente usando
cov.rob()y comprueba si es igual amoments$sigma
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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$___