Calculando o Capital Asset Pricing Model no R

 

O Capital Asset Pricing Model (CAPM) é um modelo, criado por Willian Sharpe, que busca estimar o retorno de um ativo baseado no retorno do mercado e na relação linear entre o ativo e o retorno do mercado. Essa relação linear é o conhecida como coeficiente beta. No post de hoje, vamos aprender a criar o CAPM Beta através do R. Os códigos de calculo fazem parte do nosso curso R para Mercado Financeiro

Para calcular o CAPM, devemos primeiro estimar o o coeficiente beta, que provem basicamente da regressão do retorno de um determinado ativo sobre o retorno do mercado. Ele captura a relação linear entre o ativo e o mercado. Para nossos propósitos, ele é uma boa forma de explorar um fluxo reprodutível para modelagem de retornos de portfólios sobre o retorno do mercado.

Para a construção do CAPM, utilizamos a seguinte equação.

     $$\mathbb{E}(r_{ativo})=r_f+\beta_{ativo}[\mathbb{E}(r_{mercado})-r_f]$$

Onde  $\beta$ é  $\frac{Cov(R_{ativo}, R_{mercado})}{\sigma^2_{mercado}}$.

Com a equação acima, derivamos os seguintes pontos:

- O portfólio de mercado é eficiente
- O prêmio de risco de um ativo arriscado é proporcional ao seu $\beta$

É importante notar que o portfólio de mercado que gera o CAPM é muitas vezes não-observável, logo a aplicabilidade empírica do modelo pode ser limitada.

Para realizar o calcula do CAPM, utilizaremos os seguintes pacotes.


library(tidyverse)
library(tidyquant)
library(timetk)
library(broom)

 

Como de praxe, devemos primeiro ter nossos dados em mãos. Utilizaremos os preços de 4 ações brasileiras, bem como os dados do Ibovespa, e calculamos seus retornos mensais para criarmos nosso modelo.


# Define os ativos que irão ser coletados ------

tickers <- c("PETR4.SA", "ITUB4.SA", "ABEV3.SA", "JBSS3.SA")

# Define a data de início da coleta

start <- as.Date("2013-12-01")

# Realiza a coleta dos preços diários

prices <- getSymbols(tickers,
auto.assign = TRUE,
warnings = FALSE,
from = start,
src = "yahoo") %>%
map(~Ad(get(.))) %>%
reduce(merge) %>%
`colnames<-`(tickers)

# Transfroma os preços diários em mensais

prices_monthly <- to.monthly(prices,
indexAt = "lastof",
OHLC = FALSE)

# Calcula os retornos mensais

asset_returns <- Return.calculate(prices_monthly,
method = "log") %>%
na.omit()

# Coleta o portfólio de mercado (Ibovespa) ----

ibov <-
getSymbols('^BVSP',
from = start,
auto.assign = TRUE,
warnings = FALSE,
src = 'yahoo',)

# Transforma os dados em mensais e em retornos

ibov_returns <-
BVSP$BVSP.Adjusted %>%
`colnames<-`('BVSP') %>%
to.monthly(indexAt = 'lastof', OHLC = FALSE) %>%
Return.calculate(method = "log") %>%
na.omit()

Após o calculo dos retornos, podemos calcular o coeficiente Beta com a função CAPM.beta do pacote {PerformanceAnalytics}. A função utilziar três argumentos, sendo eles os retornos dos ativos, o retorno do portfólio de mercado e o retorno do ativo livre de risco. Nesse exercício, utilizaremos um retorno livre de risco igual a zero.


# Calcula o Beta dos ativos

CAPM.beta(Ra = asset_returns, Rb = ibov_returns, Rf = 0)

Por fim, podemos calcular um portfólio com base nos ativos que temos em mãos e podemos também calcular o CAPM para essa carteira.

# Calcula o retorno do portfolio

portfolio_return <- Return.portfolio(asset_returns)

# Transforma em tibble

portfolio_return_tbl <- portfolio_return %>%
tk_tbl(preserve_index = TRUE,
rename_index = "date")

# Transforma o retorno do ibovespa em tibble

ibov_returns_tbl <- ibov_returns %>%
tk_tbl(preserve_index = TRUE,
rename_index = "date") %>%
rename(ibov_return = BVSP)

# Plota o gráfico de dispersão

portfolio_return_tbl %>%
left_join(ibov_returns_tbl, by = "date") %>%
ggplot(aes(x = ibov_returns, y = portfolio.returns))+
geom_point(color = "#282f6b")+
geom_smooth(method = "lm",
se = FALSE,
color = "red",
size = .5)+
labs(title = "Retornos do portfólio x Retornos da Ibovespa",
x = "",
y = "",
caption = "Elaborado por analisemacro.com.br com dados do Yahoo Finance")+
theme_minimal()


Comparamos os retornos do nosso modelo, criado a partir do CAPM, com os retornos reais.


# Cria o modelo com os valores "fittados"

portfolio_model <-
portfolio_return_tbl %>%
lm(portfolio.returns ~ ibov_returns_tbl$ibov_return, data = .) %>%
augment() %>%
mutate(date = portfolio_return_tbl$date)

# Compara o modelo com o retornos reais

portfolio_model %>%
ggplot(aes(x = date))+
geom_line(aes(y = .fitted,
color = "Retornos"))+
geom_line(aes(y = portfolio.returns,
color = "Retornos CAPM"))+
labs(title = "Comparação - Retornos calculado pelo CAPM x Retornos reais",
x = "",
y = "",
caption = "Elaborado por analisemacro.com.br com dados do Yahoo Finance")+
theme_minimal()+
theme(legend.title = element_blank())

________________________

(*) Para entender mais sobre Mercado Financeiro, seleção de carteira e a Teoria de Markowitz, confira nosso curso de R para o Mercado Financeiro.
________________________

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Analisando o sentimento da política monetária com IA usando Python

Análise de sentimentos é uma técnica de Processamento de Linguagem Natural (PLN) que serve para revelar o sentimento contido em um texto. Neste exercício, aplicamos esta técnica para analisar as atas das reuniões do COPOM, revelando o que os diretores de política monetária discutem nas entrelinhas. Utilizando um modelo de Inteligência Artificial através do Python, produzimos ao final um índice de 0 a 100 para sintetizar a análise histórica.

Como a IA pode auxiliar na otimização de Portfólio de Investimentos?

A construção de portfólio ótimo refere-se ao processo de alocar eficientemente capital entre um conjunto predefinido de ativos ou títulos. O campo da construção de portfólio tem sido extensivamente estudado por acadêmicos e profissionais desde a década de 1950, quando Markowitz introduziu sua inovadora abordagem de média-variância para a construção de portfólio. Diante disso, podemos melhorar o processo de alocação de peso de um investimento em um portfólio através do Aprendizado não supervisionado com a aplicação do Hierarchical Risk Parity (HRP). Neste exercício, realizamos uma introdução ao método e mostramos os resultados de um exemplo criado através do Python.

Prevendo múltiplas séries usando IA no Python

Como podemos realizar previsões para várias séries temporais simultaneamente? Para abordar essa questão, empregamos a biblioteca MLForecastdo Python. Esta biblioteca disponibiliza uma variedade de modelos e funcionalidades para realizar previsões em séries temporais utilizando técnicas de aprendizado de máquina. Demonstramos sua aplicação ao prever as curvas de energia horária em quatro regiões distintas do Brasil.

Esse exercício é uma continuação do exercício “Usando IA para prever o consumo de energia no Brasil com Python”.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.