Defina uma função de momentos personalizada
Em muitos casos de problemas de otimização com restrições, o gestor ou analista de portfólio pode querer estimar momentos usando uma técnica específica e/ou expandir a ideia de set.portfolio.moments(). Uma função de momentos personalizada definida pelo usuário pode ter argumentos com quaisquer nomes. No entanto, argumentos nomeados R para os retornos dos ativos e portfolio para o objeto de portfólio serão detectados automaticamente e tratados de forma eficiente. Por isso, é fortemente recomendado usar R para o objeto de retornos dos ativos e portfolio para o objeto de portfólio.
A função de momentos personalizada deve retornar uma lista nomeada em que os elementos representam os momentos:
$mu: primeiro momento (vetor de retornos esperados)$sigma: segundo momento (matriz de variância-covariância)$m3: terceiro momento (matriz de cosse assimetria)$m4: quarto momento (matriz de cokurtose)
Neste exercício, você vai escrever uma função de momentos personalizada para estimar a matriz de variância-covariância usando um método robusto. Usaremos a função cov.rob() do pacote MASS. A assinatura da função deve ter argumentos nomeados R para os retornos dos ativos e portfolio para o objeto de especificação. A função deve retornar uma lista nomeada. Como você está estimando apenas o segundo momento, precisa retornar apenas uma lista com um elemento nomeado de forma adequada. Você pode aplicar essas regras para escrever funções de momentos personalizadas para outros modelos, como modelos fatoriais, modelos GARCH ou qualquer outra classe de modelos que teoricamente forneça uma estimativa melhor do que a estimativa amostral.
Este exercício faz parte do curso
Análise Intermediária de Portfólio em R
Instruções do exercício
- Defina uma função chamada
moments_robustque estime a matriz de variância-covariância dos retornos dos ativos usando o método"mcd". - Estime os momentos do portfólio que você acabou de definir. Atribua o resultado a uma variável chamada
moments. Você está fazendo isso como uma verificação para garantir que sua função de momentos personalizada está funcionando como esperado. - Calcule a matriz de variância-covariância diretamente usando
cov.rob()e verifique se ela é igual amoments$sigma
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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$___