Capital Asset Pricing Model (CAPM) no R - TC

TC School / Quant & Investimentos

Capital Asset Pricing Model (CAPM) no R

15/09/2021 às 9:00

TC School

Hoje vamos dar continuidade aos nossos estudos em introdução à programação com R. Nossa série já possui diversos textos sobre o assunto, vale a pena conferir na categoria “Quant & Investimentos” e acompanhar a série completa.

Curso de Introdução ao R

Chegamos a mais um texto da nossa série de Introdução ao R. Confira os textos anteriores:

No texto de hoje, vamos aprender como utilizar o pacote PerformanceAnalytics para aplicar o Capital Asset Pricing Model — CAPM com o R. Também vamos calcular o beta através de uma regressão linear na segunda parte do texto. 

O modelo de precificação de ativos é um método que analisa a relação entre o fator de risco sistemático e o retorno esperado de um determinado ativo. Para facilitar sua leitura, separei o artigo nos seguintes tópicos:

  • Modelo CAPM
  • Calculando o CAPM com o R
  • Conclusão

capm com o r

Modelo CAPM com o R

O modelo CAPM (Capital Asset Pricing Model) é um modelo usado para determinar o retorno esperado teórico de um ativo, ou melhor, a taxa de retorno esperada que é apropriada para um dado nível de risco de determinado ativo. 

A equação que calcula o retorno esperado de um ativo através do modelo CAPM está exposta na equação 1 a seguir:

capm no r

Em que:

  • E [Ri] é o retorno esperado do ativo i;
  • βi é o beta do ativo i;
  • Rf é o retorno da taxa livre de risco;
  • E [Rm] é o retorno esperado do mercado;
  • E [Rm] – Rf é o Prêmio de Risco de Mercado.

Nosso objetivo ao final do modelo é obter o retorno esperado do ativo i, mas para isso, precisaremos da taxa livre de risco, do beta e do retorno esperado do mercado.

A taxa livre de risco é calculada a partir de um investimento com o menor grau de risco no mercado de renda fixa. No exemplo a seguir utilizaremos a taxa Selic.

Vamos calcular cada uma das variáveis por métodos diferentes.

Calculando o CAPM com o R

Antes de iniciar o modelo de regressão, apresentado na equação 2, precisamos instalar alguns pacotes e carregar algumas bibliotecas no R.

Para estimar o modelo de regressão, vamos importar as seguintes bibliotecas:

  • tidyquant
  • tidyverse
  • PerformanceAnalytics
  • dplyr

Preparação

Assim como no texto passado, vamos usar a biblioteca tidyquant, com a adição do pacote PerformanceAnalytics, fundamental para o cálculo do CAPM com o R.

Tidyquant

O tidyquant integra uma série de pacotes fundamentais para trabalharmos com dados financeiros: zoo, xts, quantmod, TTR, ggplot2 e PerformanceAnalytics.

PerformanceAnalytics

O pacote PerformanceAnalytics integra uma série de funções econométricas focadas em análise de risco. Com o pacote, podemos calcular o CAPM através de apenas uma função.

Dplyr

O pacote dplyr integra uma série de funções econométricas focadas em análise de risco. Com o pacote, podemos calcular o CAPM através de apenas uma função.

Instalando os pacotes necessários e importando as bibliotecas

Novamente, vamos usar a função install.packages() para instalar pacotes e a função library() para carregá-los:

> install.packages(“tidyquant”)

> install.packages(“PerformanceAnalytics”)

> library(tidyquant)

> library(“PerformanceAnalytics”)

Baixando os dados 

Antes de baixar as ações, vamos criar um vetor contendo o ticker de cada uma delas. Como iremos utilizar os dados do Yahoo Finance, todos os tickers devem ser seguidos de S.A:

acoes_v <- c(“MGLU3.SA”, “WEGE3.SA”, “POSI3.SA”, “WIZS3.SA”) 

Para baixar os dados das ações e obter os retornos dos ativos, novamente vamos utilizar a função tq_get(), presente no pacote tidyquant. Os dados ficarão armazenados na variável “acoes_df”.

acoes_df <- tq_get(acoes_v,

                   from = “2012-08-05”,

                   to = Sys.Date(),

                   get = “stock.prices”) %>%

  group_by(symbol)

Baixei os dados desde 05/08/2021, pois assumi a taxa livre de risco como sendo o CDI (5.25%).

Como vimos na fórmula, precisaremos do retorno esperado do ativo i, do retorno do mercado e do retorno da taxa livre de risco. Como estamos com um vetor com 4 ações diferentes, a saída final do CAPM nos dará o resultado para cada um deles. Vamos então chamar a variável que armazenará o retorno das ações de Ri.

Ri <- acoes_df %>%

  tq_transmute(select     = adjusted, 

               mutate_fun = periodReturn, 

               period     = “daily”, 

               col_rename = “Ri”)

Note que como usaremos um período curto, de pouco mais de um mês, preferi coletar os retornos diários (“daily”).

Agora vamos armazenar os retornos do benchmark de mercado na variável Rm. É importante que os dados estejam no mesmo intervalo temporal, começando e terminando no mesmo dia:

Rm <- “^BVSP” %>%

  tq_get(get  = “stock.prices”,

         from = “2021-08-05”,

         to = Sys.Date()) %>%

               tq_transmute(select     = adjusted, 

                            mutate_fun = periodReturn, 

                            period     = “daily”, 

                            col_rename = “Rm”)

Manipulando e organizando os dados 

Como você pode observar, baixamos e organizamos os dados nos seguintes data frames:

capm programaçãoquant trading

Vamos remover a primeira linha do data frame Ri, pois devemos ter o mesmo intervalo em ambos dos data frames.

> Ri <- Ri[-1,]

Outra função útil é a na.omit(), com ela podemos varrer os conjuntos de dados nulos que aparecem em nosso data frame.

Ri <- na.omit(Ri)
Rm <- na.omit(Rm)

Vamos juntar os dois conjuntos de dados em um só data frame, para isso, usaremos uma função do pacote dplyr, a “left_join()”. Note que apenas uma coluna é igual nos dois data frames, vamos então juntar os dois data frames pela coluna “date”:

RiRm <- left_join(Ri, Rm, by = c(“date” = “date”))

Veja como ficou o nosso data frame:

data frame tc

Obtendo a tabela do CAPM com o R pela função tq_performance

Vamos então obter a tabela do CAPM através da função tq_performance. No primeiro argumento colocaremos nosso data frame RiRm. No segundo o retorno dos ativos, no terceiro o retorno de mercado, e no quarto o retorno da taxa livre de risco. Note que todos são retornos diários.

tq_performance(RiRm, Ri, Rm, Rf = 0.0525/252, performance_fun = table.CAPM)

capm programa r

Feito! Obtivemos a tabela do CAPM que contém informações individuais dos nossos ativos.

A primeira vista, recebemos o alfa, o beta e a correlação de tais ativos em relação ao seu benchmark (e sua taxa livre de risco). Lembrando que ainda não estamos falando de retornos de um portfólio e sim analisando cada um dos ativos individualmente.

Calculando o Beta de outra forma

Outra forma de obter o beta, seja de uma ação ou de um portfólio, é dividir a covariância do retorno dos ativos e do retorno do mercado pela variância do retorno do mercado:

equação programa r

Para facilitar o cálculo, vamos analisar só o beta das ações da Weg no período:

acao <- tq_get(“WEGE3.SA”,

                   from = “2021-08-05”,

                   to = Sys.Date(),

                   get = “stock.prices”) %>%

  group_by(symbol)

Vamos novamente criar um novo data frame:

Ri <- acao %>%

  tq_transmute(select     = adjusted, 

               mutate_fun = periodReturn, 

               period     = “daily”, 

               col_rename = “Ri”)

Juntar os dois:

RiRm <- left_join(Ri, Rm, by = c(“date” = “date”))

Ajustar os dados removendo a primeira linha:

RiRm <- RiRm[-1,]

dicas tc

Ficamos com este data frame, vamos agora calcular o beta da Weg. As funções cov() e var() calculam a covariância e a variância respectivamente:

Beta_Weg <- cov(RiRm$Ri,RiRm$Rm)/var(RiRm$Rm)

> Beta_Weg

[1] 0.8088327

Note que o valor do beta pela tabela do CAPM está abreviado, por isso não são exatamente iguais.

dicas investimento

Dito isso, temos um beta no valor de 0,808833, evidenciando que as ações da WEGE3 foram menos voláteis que o benchmark no período observado. 

Sendo assim, temos a equação 2 do modelo CAPM com o R para o ativo WEGE3, como se vê a seguir:

aprender a investir tc

Fixando os valores da taxa livre de risco e do valor esperado do retorno do mercado, podemos calcular o retorno esperado para o ativo WEGE3. Esse valor esperado representa o custo de capital exigido como taxa de desconto.

Conclusão

É importante ressaltar que utilizamos um conjunto de dados pequeno, e que os valores tanto do beta quanto do alfa podem estar distantes dos reais para os ativos aqui mencionados. O objetivo do texto foi mostrar de forma simples como podemos calcular o CAPM com o R.

No próximo artigo, vamos ver como construir um portfólio e calcular seus principais índices.

Lucca Carlini
Lucca Carlini
Estudante de Economia na UFPE

TC School

A sua escola como investidor.

Disclaimer: Este material é produzido e distribuído somente com os propósitos de informar e educar, e representa o estado do mercado na data da publicação, sendo que as informações estão sujeitas a mudanças sem aviso prévio. Este material não constitui declaração de fato ou recomendação de investimento ou para comprar, reter ou vender quaisquer títulos ou valores mobiliários. O usuário não deve utilizar as informações disponibilizadas como substitutas de suas habilidades, julgamento e experiência ao tomar decisões de investimento ou negócio. Essas informações não devem ser interpretadas como análise ou recomendação de investimentos e não há garantia de que o conteúdo apresentado será uma estratégia efetiva para os seus investimentos e, tampouco, que as informações poderão ser aplicadas em quaisquer condições de mercados. Investidores não devem substituir esses materiais por serviços de aconselhamento, acompanhamento ou recomendação de profissionais certificados e habilitados para tal função. Antes de investir, por favor considere cuidadosamente a sua tolerância ou a sua habilidade para riscos. A administradora não conduz auditoria nem assume qualquer responsabilidade de diligência (due diligence) ou de verificação independente de qualquer informação disponibilizada neste espaço. Administradora: TradersNews Informação & Educação Ltda. Todos os direitos reservados.

TradersClub

O app essencial para investidores do mercado financeiro brasileiro.

Uma comunidade com milhares de investidores, ferramentas e serviços que vão ajudar você a investir melhor!

TradersClub