Conteúdo do Módulo
1 - Introdução
2 - Modelo média-variância na otimização de carteiras de investimento
3 - Caso geral de otimização envolvendo 2 investimentos
4 - Caso geral de otimização envolvendo m investimentos
5 - Modelo média-variância: exemplos numéricos
6 - Referências adicionais sobre o assunto
Este módulo mostra uma aplicação das propriedades da esperança e da variância na solução um problema clássico em finanças e economia: otimização de carteiras ou portfólios de investimento.
O modelo média-variância foi concebido durante a década de 1950 por Harry Markowitz e aprimorado por discípulos como William Sharpe durante a década de 1960.
Esse modelo, e suas variantes, representam o principal paradigma existente no entendimento e otimização de carteiras de investimento ou porfólios de investimento, de grande impacto na prática da administração financeira e na economia de finanças.
Faremos a seguir uma introdução às definições e premissas do modelo de uma forma relativamente intuitiva, tentando evitar uma formalisação excessiva.
Carteira de investimentos: conjunto de investimentos realizados por um determinado investidor ou empresa (ex. 1000 ações da petrobras + 200 kg de ouro + 2 apartamentos de aluguel)
Retorno da carteira de investimento: variação percentual do valor dos ativos na carteira de investimento num dado horizonte de tempo (ex: uma carteira que valia $ 100 no período 0 e 110 no período 1 teve um retorno de 10% nesse período)
Magnitude do retorno: é caracterizado pela esperança matemática do retorno na carteira de investimentos, que representa a percepção/entendimento do investidor para o período futuro.
Risco do retorno: é caracterizado pela variância do retorno na carteira de investimentos, que representa a percepção/entendimento do investidor para o período futuro.
Preferências: os investidores têm suas preferências com relação a investimentos fundamentadas na magnitude do retorno e no risco do retorno, caracterizados por suas percepções quanto à esperança matemática e variância téorica de seus retornos.
Se \(R_1\) e \(R_2\) são v.a.s que representam o retorno de 2 diferentes carteiras de investimento, representadas por \(I_1\) e \(I_2\):
a notação \(I_1 \simeq I_2\) indica que a carteira \(I_1\) é equivalente à carteira \(I_2\).
Operacionalização das preferências: Se \(R_1\) e \(R_2\) são v.a.s que representam o retorno de 2 diferentes carteiras de investimento alternativas, representadas por \(I_1\) e \(I_2\) temos:
\(I_1\succeq I_2\) se \(E(R_1)\ge E(R_2)\) e \(V(R_1)\le V(R_2)\)
Considere que \(I_1\) e \(I_2\) são carteiras de investimento com retornos definidos pelas v.a.s \(R_1\) e \(R_2\), em que
Se \(\mu_1=10\), \(\mu_2=12\), \(\sigma_1^2=4\) e \(\sigma_2^2=2\) temos
Se \(\mu_1=10\), \(\mu_2=12\), \(\sigma_1^2=4\) e \(\sigma_2^2=4\) temos
Se \(\mu_1=10\), \(\mu_2=10\), \(\sigma_1^2=1\) e \(\sigma_2^2=2\) temos
Se \(\mu_1=10\), \(\mu_2=12\), \(\sigma_1^2=4\) e \(\sigma_2^2=2\) temos
Suponha que temos dois investimentos \(I_1\) e \(I_2\) e podemos alocar frações \(\theta\) e \(1-\theta\) do nosso capital \(k\) em cada um dos 2 investimentos, com \(\theta\in [0,1]\).
Os retornos de cada um dos investimentos são representados por \(R_1\) e \(R_2\), com \(E(R_i)=\mu_i\) e \(V(R_i)=\sigma_i^2\) para \(i=1,\,2\), e \(\rho\) é o coeficiente de correlação entre esses retornos.
Se \(R\) representa o retorno numa alocação de capital com \(\theta\) em \(I_1\) e \(1-\theta\) em \(I_2\) temos
\(k\,(1+R)= \theta k\,(1+R_1)+ (1-\theta)\,(1+R_2)\)
\(R=\theta R_1+(1-\theta)\,R_2\) ou \(R(\theta)=\theta R_1+(1-\theta)\,R_2\)
Nessa última expressão, estamos deixando claro que \(R\), o retorno global, é uma função do valor definido para \(\theta\), que pode ser definido pelo investidor (é uma variável de decisão).
Nessa expressão fica também claro que se \(\theta=1\) o investidor colocará todo o seu capital no investimento \(I_1\) e se \(\theta=0\) colocará todo ele no investimento \(I_2\).
Um primeiro exame descuidado dessa situação pode levar a conclusão de que os 2 investimentos são idênticos e que tanto faz escolhermos \(\theta=0\), \(\theta=1\) ou qualquer outro valor. Cuidado: esse não é um entendimento correto.
Calculando \(E[R(\theta)]\) e \(V[R(\theta)]\):
\(E[R(\theta)]=E[\theta R_1+(1-\theta)\,R_2]\)
\(E[R(\theta)]=\theta\,E[R_1]+(1-\theta)\,E[R_2]\)
mas nesse caso simples temos \(\mu_1=\mu_2=\mu\), portanto
qualquer que seja o valor de \(\theta\) temos \(E[R(\theta)]=\mu\).
Para a variância temos:
\(V[R(\theta)]=V[\theta R_1+(1-\theta)\,R_2]\)
\(V[R(\theta)]=\theta^2\,V[R_1]+(1-\theta)^2\, V[R_2]\) (pela propriedade da variância e pela independência)
Como as variâncias são iguais temos que \(V[R_1]=V[R_2]=\sigma^2\) e
Se entendemos a variância como risco, faz sentido encontrarmos o valor de \(\theta^*\) que minimiza esse risco que será definido por
Para tanto podemos usar as condições de primeira ordem dadas por:
Dividindo os 2 lados da última expressão por \(2 \sigma^2\) chegamos a
Nota: como \(\displaystyle \frac{d^2\,V[R(\theta)] }{d\, \theta^2}\;\;= 4\sigma^2 >0\) sabemos que de fato temos um mínimo global (a função é estritamente convexa).
Deveríamos, nesse caso, alocar metade do nosso capital \(k\) em cada um dos investimentos \(I_1\) e \(I_2\) obtendo a a variância mínima dada por:
\(V[R(\theta^*)]=[(1/2)^2 + (1/2)^2]\, \sigma^2=1/2\, \sigma^2\)
Ou seja, na condição ideal em que \(\theta^*=1/2\) teríamos:
A variância ou o desvio padrão do retorno de um investimento ex-ante (antes de se saber exatamente qual será esse retorno, no momento do investimento) é a única e melhor forma de se medir o risco associado a esse investimento. Falso ou Verdadeiro?
Um investidor tem dois investimentos, \(I_1\) e \(I_2\), com retornos caracterizados pelas v.a.s \(R_1\) e \(R_2\), independentes, com \(E(R_1)=E(R_2)=\mu\) (mesma magnitude de retorno), e \(V(R_1)=\sigma^2\) e \(V(R_2)=c\,\sigma^2\) onde \(c\) é um número entre 2 e 10 (a variância de \(R_2\) é maior que a de \(R_1\)). (a) Calcule a alocação ótima de capital \(\theta\) e \(1-\theta\) em \(I_1\) e \(I_2\), segundo o modelo média-variância. O resultado será uma função de \(c\). (b) Obtenha a variância do retorno nessa carteira de investimentos ótima, e observe que essa variância será menor que \(\sigma^2\).
Um investidor tem dois investimentos, \(I_1\) e \(I_2\), com retornos caracterizados pelas v.a.s \(R_1\) e \(R_2\), com \(E(R_1)=E(R_2)=\mu\) (mesma magnitude de retorno), \(V(R_1)=V(R_2)=\sigma^2\) (mesma variância) e coeficiente de correlação \(\rho\). (a) Calcule a alocação ótima de capital \(\theta\) e \(1-\theta\) em \(I_1\) e \(I_2\), segundo o modelo média-variância. (b) Obtenha a variância do retorno na carteira de investimentos ótima em função de \(\rho\). (c ) Faça um gráfico para visualizar esse efeito. (d) Qual é a pior e a melhor situação em termos de \(\rho\)?
No tópico anterior, examinamos o comportamento de 2 investimentos com retornos independentes, de mesma esperança e mesma variância. Neste tópico examinaremos o caso geral.
\(R_1\) e \(R_2\): retornos incertos associados a \(I_1\) e \(I_2\)
\(E(R_i)=\mu_i\) e \(V(R_i)=\sigma_i^2\), \(i=1,\, 2\)
coeficiente de correlação entre \(R_1\) e \(R_2\): \(\rho\)
\(\theta\) e \(1-\theta\): proporção do capital \(k\) em \(I_1\) e \(I_2\)
E finalmente temos o retorno global \(R\) definido por
Usando as propriedades da esperança matemática e da variância temos
\(E[R(\theta)]=E[\theta R_1+(1-\theta)\,R_2]\)
\(E[R(\theta)]=\theta E[R_1]+(1-\theta)\,E[R_2]\)
\(E[R(\theta)]=\theta \mu_1+(1-\theta)\,\mu_2\)
e para a variância:
\(V[R(\theta)]=V[\theta R_1+(1-\theta)\,R_2]\)
\(V[R(\theta)]=\theta^2 \sigma_1^2+(1-\theta)^2 \sigma_2^2 + 2 \theta (1-\theta) \rho \sigma_1 \sigma_2\)
Para visualizar melhor a natureza do efeito de \(\theta\) sobre \(E[R(\theta)]\) e \(V[R(\theta)]\) vamos examinar graficamente uma situação específica, em que \(\mu_1=10\), \(\mu_2=12\), \(\sigma_1=1\), \(\sigma_2=2\) e \(\rho=-0{,}4\)
m1<-10 ## esperança de R1
m2<-12 ## esperança de R2
s1<-1 ## desvio-padrão de R1
s2<-2 ## desvio-padrão de R2
r<- -0.5 ## coeficiente de correlação
theta <-seq(0,1,0.05) ## vários valores para theta a proporção do capital em I1
E<-theta*m1+(1-theta)*m2
V<-theta^2*s1^2+(1-theta)^2*s2^2+2*theta*(1-theta)*r*s1*s2
plot(V,E,type="l",xlab="V(R) - risco ", ylab="E(R) - retorno ",xlim=c(0,4))
title(main="Fronteira Eficiente (2 investimentos)")
O gráfico mostra a evolução da \(E(R(\theta))\) e \(V(R(\theta))\). O valor de \(\theta\) varia de 0 a 1, iniciando no topo superior direito da curva, com \(\theta=0\) e terminando com \(\theta=1\). Todo o segmento em preto corresponde à chamada fronteira eficiente, ou seja, pontos que dominam ou são superiores a outros pontos do gráfico. Para qualquer ponto no segmento ineficiente (em vermelho) podemos encontrar um valor de \(\theta\) que leva a um investimento de maior magnitude do retorno com o mesmo risco, que será certamente melhor dentro da estrutura de preferências estabelecida.
O próximo gráfico mostra, dentro das mesmas premissas anteriores, o efeito de se alterar o valor de \(\rho\) no formato da curva. A situação ideal é a que \(\rho\) atinge o valor minimo possível (-1), mas isso dependeria da natureza dos investimentos, pois o valor de \(\rho\) não está sob o controle do investidor, somente \(\theta\) está.
for(r in c(-0.9,-0.5,0,0.5,0.9)){
V<-theta^2*s1^2+(1-theta)^2*s2^2+2*theta*(1-theta)*r*s1*s2
lines(V,E,type="l")
text(V[13]-0.1,10.7,as.character(r),col="red",pos=4)
}
text(-0.3,10.7,expression(rho),col="red",cex=1.4)
Na situação anterior, envolvendo somente 2 investimentos, foi fácil derivar a fronteira eficiente dado que \(E[R(\theta)]\) e \(V[R(\theta)]\) eram definidos por apenas 1 parâmetro, \(\theta\), que definia as proporções de capital empregado nos investimento \(I_1\) e \(I_2\).
Consideraremos agora o caso de \(m\) investimentos, algo que exigirá um pouco mais de esforço para a análise e derivação da fronteira eficiente, assim como identificação das carteiras de investimento que caracterizam essa fronteira. A caracterização desta situação mais geral exigirá a notação matricial.
Considere uma situação com \(m\) investimentos \(I_1, I_2, \ldots, I_m\) com
\(\def\X{{\mathbf X}} \def\x{{\mathbf x}} \def\vecR{{\vec{R}}} \def\vectheta{{\vec{\theta}}} \def\vecmu{{\vec{\mu}}} \def\bfa{{\boldsymbol{a}}} \def\bfS{{\boldsymbol{\Sigma}}} \def\bfV{{\mathbf{V}}} \def\var{{\rm Var}} \def\cov{{\rm Cov}} \def\CV{{\rm cv}} \def\E{{\rm E}} \def\B{{\rm b}} \vecR=\left(\begin{array}{c} R_1\\ R_2\\ \vdots\\ R_m\\ \end{array} \right)\) \(\vecmu=\left(\begin{array}{c} \mu_1\\ \mu_2\\ \vdots\\ \mu_m\\ \end{array} \right)\) \(\vectheta=\left(\begin{array}{c} \theta_1\\ \theta_2\\ \vdots\\ \theta_m\\ \end{array} \right)\) e \(\bfV=\left(\begin{array}{cccc} \sigma_{11}&\sigma_{12}&\ldots&\sigma_{1m}\\ \sigma_{21}&\sigma_{22}&\ldots&\sigma_{2m}\\ \vdots&\vdots&\ddots&\vdots\\ \sigma_{m1}&\sigma_{m2}&\ldots&\sigma_{mm}\\ \end{array}\right)\)
\(\vecR\) é um vetor com as v.a.s que indicam os retornos dos \(m\) investimentos, \(\vecmu\) é um vetor com as esperanças dos retornos, ou \(E[\vecR]\), \(\vectheta\) é um vetor com as proporções do capital \(k\) em cada investimento e \(\bfV\) representa a matriz de covariância, com \(\sigma_{ij}=\mbox{cov}(R_i,R_j)\).
Uma dada carteira de investimentos será definida pelo investidor por \(\vectheta\), as proporções de seu capital alocado em cada um dos \(m\) investimentos. O retorno (incerto) dessa carteira será dado por:
\(R(\vectheta)=\theta_1\, R_1+\theta_2\,R_2+\ldots+\theta_m\, R_m\)
ou na notação matricial: \(R(\vectheta)=\vectheta\,^{\small T}\,\vecR\) com \(\sum_{i=1}^m \theta_i =1\) e \(\theta_i\ge 0\) (dessas restrições pode-se concluir que \(\theta_i\in [0,1]\))
Nota: essa restrição nos \(\theta_i\) é usual, mas existem outra possibilidades que incluem, por exemplo, a possibilidade de “venda a descoberto do ativo”. Essas possibilidades não serão abordadas aqui.
A esperança e variância teórica dessa carteira serão caracterizados por:
\(E[R(\vectheta)]=\vectheta\,^{\small T}\,\vecmu\)
\(V[R(\vectheta)]=\vectheta\,^{\small T}\,\bfV\,\vectheta\)
Para encontrarmos a carteira de mínima variância que nos dê uma magnitude de retorno \(\mu_0\), ou seja, \(E[R(\vectheta)]=\mu_0\) devemos solucionar o problema de otimização (minimização):
A notação \(\vectheta\,^*(\mu_0)\) deixa clara a dependência no valor de \(\mu_0\) definido.
Ou, substituindo as expressões algébricas para \(E[R(\vectheta)]\) e \(V[R(\vectheta)]\):
Esse é um problema de otimização que é resolvido por uma técnica denominada programação quadrática com restrições, disponível no R e em outros programas que tenham recursos de otimização de um modo geral. A abordagem que utilizaremos, no próximo tópico, será inicialmente pelo uso do package quadprog do R, para resolver o problema de otimização na programação quadrática. Também indicaremos, no tópico seguinte, como utilizar o package fPortfolio do R, que tem recursos específicos para análise de carteiras de investimento.
Num problema típico de programação quadrática envolvendo o modelo média-variância, considerando \(m\) possíveis investimentos, como os explorados nesse tópico, quantas são as restrições impostas para os valores de \(\theta_i\), consideradas no problema de minimização de variância? Quantas dessas restrições são definidas por desigualdades? Quantas dessas restrições são definidas por igualdades?
Obtenha a expressão algébrica em \(\theta_1\) e \(\theta_2\) definida por \(\vectheta\,^T \bfV\,\vectheta\), onde temos \(\bfV=\left(\begin{array}{rr} 4&-1\\ -1&1\\ \end{array}\right)\) e \(\vectheta=\left(\begin{array}{c} \theta_1\\ \theta_2\\ \end{array}\right)\).
Considere o data frame abaixo que contém informações das taxas reais de retorno anuais de ações (a), medido pelo índice SP500, notas do tesouro americano (n), bonds (b) e ouro (g). As taxas já estão líquidas do efeito da inflação e correspondem ao período 1928 a 2010. O ano não consta no data frame. A primeira coluna mostra o número da linha da observação.
rm(list=ls())
dinvest<-read.csv2("http://ihbs.com.br/html/dinvest.csv")
anos<-1928:2010
dinvest[anos>=1995,1:4] ## observações de 1995 até 2010
## a n b g
## 68 0.3466159 0.0298159 0.2094159 -0.02278332
## 69 0.2049752 0.0169752 -0.0189248 -0.02288879
## 70 0.3015760 0.0334760 0.0823760 -0.17246085
## 71 0.2672810 0.0311810 0.1330810 -0.13728613
## 72 0.1820544 0.0182544 -0.1093456 -0.07903135
## 73 -0.1241681 0.0237319 0.1327319 -0.03386810
## 74 -0.1340172 0.0211828 0.0401828 -0.04450474
## 75 -0.2434691 -0.0071691 0.1274309 0.11022175
## 76 0.2648051 -0.0084949 -0.0149949 0.13856605
## 77 0.0748444 -0.0202556 0.0123444 0.08644769
## 78 0.0141434 -0.0040566 -0.0054566 0.05000519
## 79 0.1306935 0.0213935 -0.0058065 0.28280334
## 80 0.0139873 0.0055873 0.0612873 0.10173884
## 81 -0.3667141 0.0149859 0.2000859 0.21994112
## 82 0.2319867 -0.0258133 -0.1384133 0.08328861
## 83 0.1336428 -0.0136572 0.0696428 0.21330145
Suponha que o investidor deseja utilizar em sua análise somente esse período mais recente, e acredita que a média dos retornos e a matriz de covariância observada de 1995 a 2010, são boas estimativas para as esperanças ou magnitudes dos retornos e a matriz de covariância dessas classes de ativos, que será observada no próximo período. Certamente modelos mais elaborados poderiam ser utilizados para melhor estimativa desses premissas, mas isso é um assunto mais avançado. Para facilitar a análise, além da definição da matriz de covariância (V) é apresentada também a matriz de correlação dos retornos.
dinvest<-dinvest[anos>=1995,1:4] ## selecionando observações de 1995 até 2010
m<-apply(dinvest,2,mean) ## encontrando a média das colunas (variáveis do data frame)
m
## a n b g
## 0.081139825 0.008571075 0.048477325 0.048343173
V<-cov(dinvest) ## matriz de covariância (variâncias na diagonal)
V
## a n b g
## a 0.0429575054 0.0004094567 -0.0070543979 -0.0097120644
## n 0.0004094567 0.0003704263 0.0008674222 -0.0013340206
## b -0.0070543979 0.0008674222 0.0097850534 -0.0004842956
## g -0.0097120644 -0.0013340206 -0.0004842956 0.0169382740
cor(V) ## matriz de correlação
## a n b g
## a 1.0000000 0.3150477 -0.7586738 -0.7447639
## n 0.3150477 1.0000000 0.3141085 -0.8583740
## b -0.7586738 0.3141085 1.0000000 0.2157190
## g -0.7447639 -0.8583740 0.2157190 1.0000000
Os dados mostram que as ações (pelo SP500) tiveram um retorno médio maior (em torno de 8,1%) e que há um bom potencial para ganhos de redução de risco pela combinação desses investimentos, em função de correlações negativas entre essas classes de ativos. Por exemplo a correlação entre os retornos do ouro e ações foi próxima de -0,74.
Vamos comparar 2 carteiras de investimento
A primeira, \(\vectheta_1\) divide o capital em 4 partes iguais nos investimentos. A segunda, \(\vectheta_2\) coloca 40% em ações e 20% em cada uma das outras classes de ativos. Os ativos estão
Encontrando \(E[R(\vectheta_1)]\) e \(V[R(\vectheta_2)]\):
theta1=c(0.25,0.25,0.25,0.25)
E<-t(theta1)%*%m ## encontrando E[R(theta1)]
Var<-t(theta1)%*%V%*%theta1 ## V[R(theta1)]
DP<-sqrt(t(theta1)%*%V%*%theta1)
cat("E(R)=",E,"V(R)=",Var,"DP(R)=",DP)
## E(R)= 0.04663285 V(R)= 0.002214716 DP(R)= 0.04706077
Encontrando \(E[R(\vectheta_2)]\), \(V[R(\vectheta_2)]\) e o desvio padrão associado
theta2=c(0.4,0.2,0.2,0.2)
E<-t(theta2)%*%m ## encontrando E[R(theta2)]
Var<-t(theta2)%*%V%*%theta2 ## V[R(theta2)]
DP<-sqrt(t(theta2)%*%V%*%theta2) ## desvio padrão
cat("E(R)=",E,"V(R)=",Var,"DP(R)=",DP)
## E(R)= 0.05353424 V(R)= 0.005263759 DP(R)= 0.07255176
A carteira definida por \(\vectheta_2\) tem a magnitude do retorno esperado maior (5,353% em lugar de 4,7% na carteira \(\vectheta_2\)) a custa de um risco maior (desvio padrão em torno de 7,3% em lugar de 4,3% na carteira \(\vectheta_2\).
A resposta a essa pergunta vem pela solução do seguinte problema de otimização:
Nesse caso \(\vecmu\) e \(\bfV\) serão definidos pelo vetor de médias e pela matriz de covariâncias estimadas a partir do conjunto de dados. A solução será dada com apoio do package quadprog que implementa funções para solução de problemas de programação quadrática (instale o package quadprog primeiro e veja as instruções sobre uso do quadprog):
require(quadprog)
## Warning: package 'quadprog' was built under R version 3.1.3
dvec<-c(0,0,0,0)
Amat<-matrix(c(1,1,1,1,m,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),4,6)
bvec<-c(1,0.05353,0,0,0,0)
Dmat<-V
thetamin<-solve.QP(Dmat,dvec,Amat,meq=2,bvec=bvec)$solution
thetamin ## solução (note que os valores somam 1)
## [1] 0.23162031 0.06199216 0.41754704 0.28884049
Os resultados desse portfólio “otimizado” seriam:
E<-t(thetamin)%*%m ## encontrando E[R(thetamin)]
Var<-t(thetamin)%*%V%*%thetamin ## V[R(thetamin)]
DP<-sqrt(t(thetamin)%*%V%*%thetamin) ## desvio padrão
cat("E(R)=",E,"V(R)=",Var,"DP(R)=",DP)
## E(R)= 0.05353 V(R)= 0.002653206 DP(R)= 0.05150928
Observe que essa carteira otimizada tem o mesmo retorno médio de 5,5353% da carteira de investimento anterior (\(\vectheta_2\)), mas com um desvio padrão de 5,151% (em lugar de 7,2% na situação da carteira (\(\vectheta_2\)). Sendo claramente uma melhor carteira pelos critérios considerados.
Para estimar a localização da fronteira eficiente, e sua composição, numa situação como a que acabou de ser examinada, poderiamos definir uma sequência de valores para a magnitude do retorno e obter, para cada caso, a solução de mínima variância solucionando o problema de otimização definido anteriormente. A seguir, esses valores poderiam ser plotados em um gráfico.
Abaixo está uma possível implementação desses procedimentos com os dados do problema do tópico anterior. Para melhorar a escala, em lugar de apresentar a variância no eixo x, é apresentado o desvio padrão, num gráfico também usual para apresentar a fronteira eficiente.
minm<-0.0086 ## mínimo valor de E(R)
maxm<-0.0811 ## máximo valor de E(R)
mvec<-seq(minm,maxm,0.0001)
Evec<-0
Vvec<-0
require(quadprog)
for(i in 1:length(mvec)){
dvec<-c(0,0,0,0)
Amat<-matrix(c(1,1,1,1,m,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),4,6)
bvec<-c(1,mvec[i],0,0,0,0)
Dmat<-V
thetamin<-solve.QP(Dmat,dvec,Amat,meq=2,bvec=bvec)$solution
thetamin ## solução (note que os valores somam 1)
Evec[i]<-t(thetamin)%*%m ## encontrando E[R(thetamin)]
Vvec[i]<-t(thetamin)%*%V%*%thetamin ## V[R(thetamin)]
}
plot(sqrt(Vvec),Evec,type="l",xlab="DP(R) - risco", ylab="E(R) - retorno",
xlim=c(0,0.22),ylim=c(0,0.09))
title(main="fronteira eficiente")
sqrt(diag(V))
## a n b g
## 0.20726192 0.01924646 0.09891943 0.13014712
m
## a n b g
## 0.081139825 0.008571075 0.048477325 0.048343173
points(sqrt(diag(V)),m,pch=c("a","n","b","g"),col="red")
Todas as carteiras possíveis estarão na região à direita da curva. O pontos à esquerda ou acima da curva, seriam desejáveis, mas não podem ser alcançados pela combinação dos investimentos considerados na análise. As letras indicam a posição de uma carteira de investimentos que contem somente cada um dos ativos considerados (a letra é o identificador do ativo). Uma carteira que contenha somente ouro (g), resultará numa magnitude de retorno de cerca de 4,83% e desvio padrão 0,1301.
É possível observar que há, na fronteira eficiente, uma carteira possível com magnitude do retorno próxima de 7%, mas envolvendo muito menos risco que na situação em que todo o capital está em ações (a). Qual seria essa carteira? Vamos resolver o problema de minimização da variância, como fizemos no tópico anterior, fixando a magnitude do retorno em 0,07:
require(quadprog)
dvec<-c(0,0,0,0)
Amat<-matrix(c(1,1,1,1,m,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),4,6)
bvec<-c(1,0.07,0,0,0,0)
Dmat<-V
thetamin<-solve.QP(Dmat,dvec,Amat,meq=2,bvec=bvec)$solution
thetamin ## solução (note que os valores somam 1)
## [1] 0.6597023 0.0000000 0.1550400 0.1852576
E<-t(thetamin)%*%m ## encontrando E[R(thetamin)]
Var<-t(thetamin)%*%V%*%thetamin ## V[R(thetamin)]
DP<-sqrt(t(thetamin)%*%V%*%thetamin) ## desvio padrão
cat("E(R)=",E,"V(R)=",Var,"DP(R)=",DP)
## E(R)= 0.07 V(R)= 0.01566716 DP(R)= 0.1251685
Essa carteira otimizada envolveria aproximadamente 66% de ações (a), 0% de notas do tesouro (n), 15,5% de bonds (b) e 18,5% de ouro.
O R dispõe de vários packages interessantes para análise de carteiras de investimento.
Um dos principais é o fPortfolio. Esse package foi desenvolvido dentro de um projeto/organização chamada (Rmetrics)[https://www.rmetrics.org/], cujo foco principal é o desenvolvimento de ferramentas do R para computações em finanças.
Inicialmente, instale o package fPortfolio no seu computador. A instalação desse package instalará muitos outros packages que são por ele utilizados nas computações nescessárias.
O conjunto de dados (incluido no package) utilizado na exemplificação do uso desse package envolve a variação diária dos retornos de 4 ativos.
require(fPortfolio)
## Carregue os dados (retornos de ativos) e selecione 4 ativos BKE, GG, GYMB, KRON
Data = SMALLCAP.RET ## conjunto de dados que vem no package fPortfolio
Data = Data[, c("BKE", "GG","GYMB", "KRON")]
head(Data) ## mostra as primeiras linhas do arquivo
## GMT
## BKE GG GYMB KRON
## 1997-01-31 0.11500000 -0.11764706 0.005464481 0.03125000
## 1997-02-28 -0.09417041 0.06666667 0.070652172 -0.17424242
## 1997-03-31 0.05940594 0.03125000 0.091370560 -0.35779816
## 1997-04-30 0.10280374 -0.12121213 0.030232558 0.22857143
## 1997-05-30 0.44067797 0.03448276 -0.097065464 0.20930232
## 1997-06-30 0.08235294 -0.05000000 -0.039999999 0.05769231
## Calculos para obtenção da fronteira eficiente
Frontier = portfolioFrontier(Data)
## Plotagem da fronteira eficiente no gráfico
frontierPlot(Frontier, pch = 19, xlim = c(0, 0.25), ylim = c(0, 0.035))
grid()
abline(h = 0, col = "grey")
abline(v = 0, col = "grey")
minvariancePoints(Frontier, pch = 19, col = "red")
equalWeightsPoints(Frontier, pch = 15, col = "grey")
singleAssetPoints(Frontier, pch = 19, cex = 1.5, col = topo.colors(6))
## Achando a carteira de variância mínima com magnitude de retorno 0.03
Spec = portfolioSpec()
setTargetReturn(Spec) = 0.03
Constraints = "LongOnly"
efficientPortfolio(Data, Spec, Constraints)
##
## Title:
## MV Efficient Portfolio
## Estimator: covEstimator
## Solver: solveRquadprog
## Optimize: minRisk
## Constraints: LongOnly
##
## Portfolio Weights:
## BKE GG GYMB KRON
## 0.2559 0.2628 0.0000 0.4813
##
## Covariance Risk Budgets:
## BKE GG GYMB KRON
## 0.2173 0.1358 0.0000 0.6468
##
## Target Returns and Risks:
## mean Cov CVaR VaR
## 0.0300 0.1010 0.1490 0.1325
##
## Description:
## Fri Mar 20 20:26:44 2015 by user: Adriano
Esse package é extremamente poderoso mas certamente exige algum esforço para conhecimento de todos os seus recursos.
A seguir mostramos a utilização do package fPortfolio em exemplo trabalhado diretamente por métodos de otimização (data frame dinvest). Mostraremos como usar o package na estimativa da fronteira eficiente e obtenção de carteiras que tenham características específicas e algumas opções do sistema.
Os dados do data frame dinvest devem ser transformados para o formato de séries temporais (exigência do package) com ajuda do comando as.timeSeries (package timeSeries, que deve ser instalado), da forma operacionalizada no código a seguir. Note que as médias e matriz de covariância estão sendo computadas internamente pelos comandos (há formas de alterar essas informações):
require(fPortfolio)
require(timeSeries)
anos <- 1928:2010
dinvest <- read.csv2("http://ihbs.com.br/html/dinvest.csv")
dinvest <- dinvest[anos >= 1995, 1:4]
## conversão no tipo de dados "timeSeries"
Data<-as.timeSeries(dinvest)
## calculos para obtenção da fronteira eficiente
Frontier = portfolioFrontier(Data)
## Plotagem da fronteira eficiente no gráfico
frontierPlot(Frontier, col = c("orange", "orange"), pch = 19)
## adicinando informações ao gráfico
## pontos associados a possíveis carteiras
monteCarloPoints(Frontier, mcSteps = 5000, cex = 0.25, pch = 19)
## mostrando o local da carteira que com proporções iguais em cada ativo
equalWeightsPoints(Frontier, pch = 15, col = "red")
## mostrando os pontos relativos a cada ativo individualmente
singleAssetPoints(Frontier, pch = 19, cex = 1.5, col = topo.colors(6))
## fronteiras calculadas com ativos 2 a 2
twoAssetsLines(Frontier, lwd = 2, col = "orange")
Suponha que deseja achar a carteira de mínima variância, com 7% de magnitude de retorno, como fizemos anteriormente no tópico anterior (veja que o resultado é o mesmo)
## definição da magnitude do retorno E(R) a ser fixada
Spec <- portfolioSpec()
setTargetReturn(Spec) = 0.07
## definição do tipo de restrição a ser considerado
Constraints = "LongOnly" ## sem venda a descoberto (impede valores negativos)
## para extrair as proporções dos ativos na carteira
thetamin <- getWeights(efficientPortfolio(Data, Spec, Constraints))
## calculando os os valores de m e V do data frame
m<-apply(dinvest,2,mean)
V<-cov(dinvest)
## verificando os resultados
E <- t(thetamin) %*% m ## encontrando E[R(thetamin)]
Var <- t(thetamin) %*% V %*% thetamin ## V[R(thetamin)]
DP <- sqrt(t(thetamin) %*% V %*% thetamin) ## desvio padrão
cat("E(R)=", E, "V(R)=", Var, "DP(R)=", DP)
## E(R)= 0.07 V(R)= 0.01566716 DP(R)= 0.1251685
Usando o mesmo conjunto de dados do tutorial (dinvest), no período 1995 a 2010, obtenha \(E(R)\) (magnitude do retorno) e \(V(R)\) (risco do retorno) de uma carteira definida por \(\vectheta=\left(\begin{array}{c} 0{,}30\\ 0{,}10\\ 0{,}30\\ 0{,}30\\ \end{array} \right)\). Essa carteira \(\vectheta\) será melhor que as carteiras definidas por \(\theta_1\) e \(\theta_2\) especificadas no tutorial? Explique.
Use o data frame dinvest com os retornos anuais desde 1970 até 2010. Calcule a média dos retornos e a matriz de covariância. Com essas informações encontre o vetor \(\vectheta\,^*\) que define a carteira de mínima variância com \(E(R)=0{,}05\). Obtenha a fronteira eficiente. (a) Resolva utilizando o package quadprog; (b) resolva utilizando o package fPortfolio. Nas questões do questionário poderão ser solicitados outros períodos do data frame dinvest (deixe seu código pronto para responder questões envolvendo problemas como esses).
O material apresentado nesse módulo cobriu algumas idéias importantes a respeito do modelo média-variância. Os desdobramentos dessas idéias são volumosos e de grande interesse em economia e finanças. Esses desdobramentos incluem o equilíbrio em mercados financeiros, o CAPM (Capital Asset Pricing Model), o APT (Arbitrage Pricing Theory), métodos econométricos avançados para melhor estimativa das informações utilizadas nos modelos, e muitos outros assuntos.
As referências abaixo são algumas sugestões, de muitas possíveis, podem ajudar no aprofundamento nesses assuntos:
Bradfield, J. Introduction to the Economics of Financial Markets. Oxford University Press, 2007.
LeRoy, S; Werner, J.; Ross, S. Financial Economics. Cambridge University Press, 2000.
Markowitz, H.; Todd, P. ; Sharpe, W. Mean-Variance Analysis in Portfolio Choice and Capital Markets. Wiley, 2000
Mills, T; Markellor, R. The Econometric Modelling of Financial Time Series. Cambridge University Press, 2008.
Pfaff, B. Financial Risk Modelling and Portfolio Optimization with R. Wiley, 2013