Modelo 3 Fatores de Fama French

Os modelos multifatores de precificação de ativos, muito conhecidos na finanças, utilizam fatores de risco para calcular o retorno de um ativo. Modelos mais simples tais como o Modelo de Mercado, ou mesmo o mais conhecido no mundo das finanças, o Capital Asset Pricing Model, utilizam o conhecido Beta, fator de risco do mercado, para precificação. No post de hoje, iremos estender o CAPM e fazer um exercício de um modelo também conceituado, que utiliza mais de um fator para a precificação, o modelo Fama French de 3 fatores.

Como uma extensão do CAPM, o modelo Fama French relaciona o excesso de retorno (diferença do retorno do ativo com o retorno livre de risco) em relação ao prêmio pelo risco do mercado, além também de dois outro fatores: HML (High minus Low), sendo a diferença entre os retornos das firmas que tenham um alto book-to-market e baixo book-to-market; e SMB (Small minus Big Factor), sendo a diferença entre empresas grandes e pequenas.

     $$r_i - r_f = \alpha_i + \beta_iM(r_m - r_f) + \beta_iHML \ r_HML + \beta_iSMB \ r_SMB + e_i$$

A sensitividade de cada fator é medido pelos $\beta$ da equação, sendo possível mensurar os riscos que uma carteira de ativos sofrem, bem como traçar estratégias com as informações da influência de cada fator de risco.

Agora, vamos realizar um exemplo dentro do R. O site https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html facilita o trabalho realizando cálculos dos fatores de risco para diversos países. Como exemplo, utilizaremos ações e os fatores do EUA para demonstrar o cálculo do modelo Fama French. Para o Brasil, o NEFIN-USP realiza os cálculos para os fatores.

# Carrega os pacotes
library(tidyverse)
library(quantmod)
library(permutations)
library(lubridate)
library(tidyquant)
library(broom)
# Importa os dados baixados

factors <- read_csv("F-F_Research_Data_Factors.csv", skip=3) %>%
rename(date = ...1) %>%
mutate_at(vars(-date), as.numeric) %>%
mutate(date = ymd(parse_date_time(date, '%Y%m')),
date = rollback(date + months(1))) %>%
drop_na()
# Coleta os preços

symbols <- c("SPY","EFA", "IJS", "EEM","AGG")

prices <- tq_get(symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2019-01-01")

# Transforma em retornos

asset_returns <- prices %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
indexAt = "lastof",
type = "log")
# Calcula o retorno do portfólio

portfolio_return <- asset_returns %>%
tq_portfolio(assets_col = symbol,
returns_col = monthly.returns,
col_rename = "returns",
rebalance_on = "quarters")
# Junta os data frame

ff_portfolio <- portfolio_return %>%
left_join(factors, by = "date") %>%
mutate(mkt_rf = `Mkt-RF`/100,
smb = SMB/100,
hml = HML/100,
rf = RF/100,
r_excess = round(returns - rf, 4)) %>%
select(- rf)
# Cria o modelo

ff_model <- ff_portfolio %>%
lm(r_excess ~ mkt_rf + smb + hml, data = .) %>%
augment() %>%
mutate(date = ff_portfolio$date,
returns = ff_portfolio$returns)


# Plota

ff_model %>%
ggplot(aes(x = date))+
geom_line(aes(y = .fitted,
color = "Retornos"))+
geom_line(aes(y = returns,
color = "Retornos FF"))+
labs(title = "Comparação - Retornos calculado pelo Modelo de 3 Fatores Fama French 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 finanças e modelagem, 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

Como selecionar variáveis para modelos de previsão no Python?

Em oposição à crença popular, grande parte dos modelos de machine learning não produzem previsões magicamente. É papel do cientista de dados executar uma boa engenharia de variáveis para não cair no clássico problema de “garbage in, garbage out” (GIGO) em aprendizado de máquina. Neste sentido, aprender a fazer uma boa seleção de variáveis é fundamental e neste artigo exploramos algumas possibilidades práticas usando o Python.

Resultado IPCA-15 - Novembro/2024

A Análise Macro apresenta os resultados do IPCA-15 de Novembro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Resultado PNADc Trimestral - 3° Trimestre/2024

A Análise Macro apresenta os resultados da PNADc Trimestral do 3º trimestre de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

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.