Aula_Mercado_Financeiro_Risco

Author

Prof. Dinilson Pedroza Jr.

Quarto

Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see https://quarto.org.

Modelando o Mercado Financeiro com risco

A sua principal função é a intermediação de recursos financeiros: de quem tem poupança para quem quer investir.

É um setor com inúmeros agentes, pessoas, bancos, corretoras de investimento, corretoras de seguros, empresas de uma maneira geral.

Qual a dimensão do setor na economia Brasileira?

Na página das Contas Nacionais do IBGE, podemos encontrar a seguinte tabela:

Tabela 13.1 - Participação no valor adicionado bruto a preços básicos, segundo os grupos de atividades - 2000-2023

Nessa Tabela vemos que o setor Atividades financeiras, de seguros e serviços relacionados respondia por 7,5% do valor adicionado bruto a preços de mercado em nossa economia.

Acontece que esse setor é muito volúvel a coisas como humores, sentimentos como pessimismo ou otimismo, notícias políticas e interesses não confessos. Enfim, é um setor muito dependente das expectativas dos agentes econômicos. E é disso que vamos tratar aqui, relacionando o lado financeiro do modelo IS/LM à Crise de 2008.Para isso vamos apresentar dois conceitos: taxa real de juros e prêmio de risco.

Taxa real de juros

O mercado financeiro trabalha com taxas nominais de juros. Isso quer dizer que se tomarmos $100,00 emprestado a uma taxa de 10%, vamos pagar, no próximo ano, $110,00.

Isso independentemente de como a inflação vai se comportar no período. Geralmente, não fazemos contratos nos bancos com cláusulas de inflação. Por isso dizemos que a transação se dá em termos nominais apenas.

Vamos dar uma olhada com estão essas taxas nominais. Para isso vamos usar as taxas médias de juros praticadas no Brasil e informadas pelo Banco Central. Caminho:

Banco Central

Estatísticas

Séries Temporais (SGS) - Sistema Gerenciador de Séries Temporais

Estatísticas de Crédito

Taxas de juros

Taxas de juros - % a. m.

Taxa de juros

Taxa média de juros - Total

Consultar Séries

Taxa média mensal de juros das operações de crédito - Total (código 25433)

Visualizar gráfico

Salvar gráfico: clicar com o lado direito do mouse.

Esse arquivo é geralmente salvo em PNG (Portable Network Graphic)

Ou, no R. Para tanto vamos usar o pacote de raspagem rbcb, desenvolvido por Wilson Freitas.

library(rbcb) # Aqui carregamos o pacote.

juros_total_df <- get_series(c(juros_mensal_total = 25433),# Usamos a função get_series.
  start_date = "2010-01-01") # Iniciamos a raspagem de dados a partir de 2010.

head(juros_total_df) # Monstrando as primeiras linhas da tabela (data frame).
# A tibble: 6 × 2
  date       juros_mensal_total
  <date>                  <dbl>
1 2011-03-01               2.04
2 2011-04-01               2.07
3 2011-05-01               2.07
4 2011-06-01               2.05
5 2011-07-01               2.07
6 2011-08-01               2.03

Explicando o código: Estamos usando a função get_series() do pacote rbcb. O primeiro argumento especifica a séries a ser pegada e já lhe da um nome, “juros_total”.

Vamos fazer o gráfico.

plot(juros_total_df$date, juros_total_df$juros_mensal_total,
     type = "l",           # linha
     col = "blue",
     lwd = 2,
     xlab = "Ano",
     ylab = "Taxa de juros (%)",
     main = "Taxa média de juros mensal – Brasil")

Explicando o código: note o uso do operador “$” para selecionar uma coluna do data frame juros_br.

Mas esses são juros nominais. No nosso dia a dia, o que nos interessa realmente são os juros reais, aqueles relacionados a ganhos em termos reais. Por reais, entendam quantidades e não apenas valores em dinheiro. Por exemplo, se eu tenho dinheiro hoje para comprar um carro popular, posso desejar aplicar o dinheiro visando, com os juros em termos reais, adquirir um carro melhor no próximo ano.

Vamos trabalhar com esse exemplo para entender melhor o conceito de juros reais.

Exemplo juros reais

Imagine que você tem hoje R$ 90 mil para adquirir um carro (pelado). Contudo, você pondera: se eu aplicar o dinheiro correspondente a um carro popular hoje, com os juros ganhos vou poder comprar um carro com mais opcionais amanhã. Você almeja um ganho real:

Você “aplica” um carro:

1 carro

E espera ganhar amanhã mais que um carro (popular):

\((1 + r_t)\) carro

Em que \(r_t\) são ganhos ou juros reais. No caso, os opcionais.

No mercado financeiro, não são oferecidos juros reais. Então, você faz a aplicação na esperança de que os juros nominais (\(i_t\)) sejam suficientes para, a) cobrir um eventual aumento no preço do automóvel e b) permitir um ganho a mais no valor exatamente dos opcionais que você deseja.

Ou seja, a aplicação financeira que te interessa é uma que nos leva à seguinte equação:

\[ (1 + r_t) = (1 + i_t)\frac{p_t}{p_{t+1}^e} \]

Os índices preços aparecem na equação acima justamente para dar conta de uma eventual variação de preço do carro.

Com números. Sejam os seguintes valores:

\[ p_t = 90000 \] \[ p_{t+1}^e = 100000 \] \[ r_t = 10\% \]

Então a taxa de juros nominal de uma aplicação financeira que satisfaz os valores acima é:

\[ i_t = 22,22\% \]

A essa taxa nominal, e considerando a variação de preços esperada, você acredita que conseguirá comprar o carro com os opcionais desejados.

Vamos simplificar a equação (p. 121 do Blanchard):

Definindo inflação:

\[ \pi_{t+1}^e = \frac{p_{t+1}^e - p_t}{p_t} \]

Ou:

\[ \pi_{t+1}^e = \frac{p_{t+1}^e}{p_t} - 1 \]

E:

\[ \frac{p_{t+1}^e}{p_t} = 1 + \pi_{t+1}^e \]

Ou ainda:

\[ \frac{p_t}{p_{t+1}^e} = \frac{1}{1+ \pi_{t+1}^e} \]

Substituindo essa equação na relação acima entre taxas reais e taxas nominais, ficamos com:

\[ (1+r_t) = (1+i_t)*\frac{1}{1+\pi_{t+1}^e} \]

E:

\[ (1+r_t) = \frac{(1+i_t)}{(1 + \pi_{t+1}^e)} \]

Simplificando

Essa última expressão pode ser simplificada ainda mais. Se as taxas são pequenas a equação fica:

\[ r_t \approx i_t - \pi_{t-1}^e \]

Se não, vejamos:

O lado direito da equação acima pode ser escrita como:

\[ \frac{(1+r_t)}{1+\pi_{t+1}^e} \approx 1 + i_t - \pi_{t+1}^e \]

Isso porque:

\[ (1+i_t - \pi_{t+1}^e)*(1+ \pi_{t+1}^e) = 1+\pi_{t+1}^e +i_t + i_t \pi_{t+1}^e - \pi_{t+1}^e - (\pi_{t+1}^e)^2 \]

Supondo as taxas pequenas, então uma multiplicada por outra ou elevada ao quadrado são valores desprezíveis:

\[ 1+\pi_{t+1}^e +i_t + i_t \pi_{t+1}^e - \pi_{t+1}^e - (\pi_{t+1}^e)^2 \approx 1+i_t \]

Ou seja,

\[ (1+i_t - \pi_{t+1}^e)*(1+ \pi_{t+1}^e) \approx (1 + i_t) \]

Dividindo a equação acima por \((1+\pi_{t+1})\), mostramos que:

\[ \frac{(1+r_t)}{1+\pi_{t+1}^e} \approx1 + i_t - \pi_{t+1}^e \]

Logo, mostramos que:

\[ r_t = i_t - \pi_{t+1}^e \]

Essa relação entre a taxa nominal e a taxa real de juros foi inicialmente proposta pelo economista norte-americano, Irving Fisher (1867-1947) Evidencia como os juros nominais são afetados pela inflação.


Dados sobre a taxa real de juros

Vamos deduzir a taxa real de juros a partir dos dados do Banco Central no R.

Primeiro, vamos pegar as duas variáveis, taxa nominal de juros (que vamos chamar de “tx_juros_mensal”) e inflação (que vamos chamar de “ipca”).

tx_juros_mensal <- get_series(25433, start_date = "2000-01-01") # série com os juros nominal mensal.



ipca  <- get_series(433, start_date = "2000-01-01") # série com a inflação.

Explicando o código: Estamos usando a função get_series() do pacote rbcb. Como argumentos passamos o código da série e sua data de início.

Agora vamos usar o fantástico pacote para ciência de dados dplyr, desenvolvido por Hadley Alexander Wickham (1979) para renomear as colunas, já que vieram com os códigos como nomes.

library(dplyr)
tx_juros_mensal <- tx_juros_mensal %>%
  rename(tx_juros_mensal = `25433`)

ipca <- ipca %>%
  rename(ipca = `433`)

Explicando o código: atentem para o uso do operador pipe (%>%). Tal operador pega nossa base de dados e a transforma conforme nossa conveniência. Como que a canaliza para um resultado de nosso interesse (pipe em português pode ser traduzido como duto). Usamos a função rename() para renomear nossas colunas.

Vamos juntar as duas colunas, taxa de juros e inflação em um data frame. Vamos fazer a junção usando o a função left_join() do pacote dplyr.

tx_real_brasil_df <- left_join(tx_juros_mensal, ipca, by = "date")

Explicando o código: vejam a importância dessa função left_join(). Organiza uma tabela que está sendo criada (tx_real_brasil_df) tendo por base a tabela tx_juros_mensal. Ela é quem fica do lado esquerdo da tabela e acrescentamos outra, no caso, a ipca. Notem também que o elemento de concatenação é exatamente a coluna com os meses (date).

Vamos acrescentar ao data frame tx_real_brasil_df uma coluna com a taxa real de juros (taxa nominal - inflação). Vamos usar mais uma função do dplyr, a mutate().

tx_real_brasil_df <- tx_real_brasil_df %>%
  mutate(
    taxa_real_mensal = tx_juros_mensal - ipca
  )

Explicando o código: a função mutate() acrescenta mais uma coluna ao data frame. A coluna a ser criada é exatamente a subtração entre as colunas tx_juros_mensal e “ipca”.

Agora vamos fazer um gráfico só com a taxa real de juros, usando o pacote ggplot2. Esse pacote foi também desenvolvido por Hadley Wickham e é uma rica suíte para gráficos.

library(ggplot2)
ggplot(tx_real_brasil_df, aes(x = date, y = taxa_real_mensal)) +
  geom_line(linewidth = 1, color="darkgreen") +
  geom_hline(yintercept = 0, linetype = "dashed", color="red") +
  labs(
    title = "Taxa Real de Juros no Brasil",
    subtitle = "Taxa nominal menos inflação (IPCA)",
    x = "Ano",
    y = "%"
  ) +
  theme_minimal()

Vamos fazer agora um gráfico mais rico em informações. Seria o correspondente à Figura 6.2, da página 123 do Blanchard. No próximo gráfico, vamos usar os pacotes dplyr e tidyr.

# Bibliotecas que usaremos.
library(dplyr) # Vamos usar a função pipe (%>%).
library(tidyr) # Vamos usar a função pivot_longer().


tx_real_brasil_df %>% # A partir do data frame mais completo.
  pivot_longer( # Reestruturando o data frame para facilitar a operação do ggplot.
    cols = c(tx_juros_mensal, ipca, taxa_real_mensal),
    names_to = "serie",
    values_to = "valor") %>%
    
    
ggplot(aes(date, valor, color = serie)) +
  geom_line() +
  labs(
    title = "Juros, inflação e taxa real no Brasil",
    x = "Ano",
    y = "%"
  ) +
  theme_minimal()

Explicando o código: começamos reestruturando o data frame original com a função pivot_longer(). Essa função transforma o formato dos dados, convertendo várias colunas em duas novas colunas: uma que identifica a série (por exemplo, juros ou inflação) e outra com os valores.

Diferentemente de uma simples transposição, o pivot_longer() reorganiza os dados no chamado formato “longo” (long format), no qual cada observação passa a ocupar uma linha. O termo “longer” indica justamente que a tabela se torna mais “comprida” (mais linhas), enquanto o número de colunas diminui.

Essa estrutura é útil para o ggplot2, pois permite mapear facilmente diferentes séries em uma mesma estética (como cor ou tipo de linha), facilitando a construção de gráficos comparativos.

Prêmio de risco

Normalmente, os juros se diferenciam pelo risco relacionado ao não pagamento. Comprar títulos de instituições financeiras já bem estabelecidas no mercado é uma opção menos arriscada do que adquiri-los de instituições mais novas e tidas como mais ousadas Ora, o que estimula as pessoas a comprarem títulos mais arriscados é uma maior remuneração.

Essa diferença entre os juros pagos por uma instituição segura e o juros pago por instituições “mais arriscadas” é o chamado prêmio de risco (x). Sim, porque, se vamos comprar títulos mais arriscados queremos uma compensação, algo a mais.

Vamos procurar modelar esse prêmio de risco (x) levando em conta a probabilidade (p) de não pagamento (ou default).

Qual o retorno esperado (rt) de um título que não oferece riscos?

\[ rt = (1+i) \]

Agora qual o retorno esperado (rt) de um título que envolve riscos?

\[ rt = (1-p)[1+i+x] + p[0] \]

Se o retorno esperado (rt) é o mesmo, nas duas operações, então ficamos com:

\[ (1+i) = (1-p)[1+i+x] + p[0] \]

Vamos procurar isolar x na expressão acima:

\[ 1 + i + x = \frac{1 + i}{1-p} \]

Ou:

\[ x = \frac{1+i}{1-p} - (1 + i) \]

Pondo o \((1 + i)\) em evidência:

\[ x = (1 + i)*\left(\frac{1}{1-p} - 1 \right) \]

Notem que:

\[ \left(\frac{1}{1-p} - 1 \right) = \left(\frac{1 -1 +p}{1-p}\right) = \left(\frac{p}{1-p}\right) \]

Finalmente, podemos escrever o prêmio de risco com função de p e de i:

\[ x = \frac{(1+i)p}{1-p} \]

O prêmio de risco cresce mais do que proporcionalmente a aumentos em p.

Prêmio de risco no R

Vamos raspar dados do Banco Central para termos uma ideia do prêmio de risco no Brasil.

library(rbcb)
library(dplyr)

# Baixar séries
selic <- get_series(4390, start_date = "2011-03-01", end_date = "2026-01-01")
juros <- get_series(25433, start_date = "2011-03-01", end_date = "2026-01-01") 

Explicando o código: as datas foram ajustadas para que as duas séries tivessem o mesmo tamanho.

Mais uma vez, vamos renomear as colunas dos dados baixados.

tx_selic <- selic %>%
  rename(tx_selic = `4390`)

tx_mercado <- juros %>%
  rename(tx_mercado = `25433`)

Explicando o código: estamos, ao mesmo tempo, recriando os dois data frames, com novos nomes e renomeando suas colunas.

Vamos agora juntar dos dois arquivo em apenas um (premio_risco_df).

premio_risco_df <- left_join(tx_mercado, tx_selic, by = "date")

Explicando o código: como fizemos antes, estamos montando o data frame juntado pela esquerda. Começamos com as datas e os valores da taxa de juros de mercado. Anexamos a esse conjunto, usando as datas (date) como referência, os dados da Selic.

Vamos criar nossa estimativa de prêmio de risco, como a diferença entre a taxa Selic e a taxa média de mercado.

premio_risco_df <- premio_risco_df %>%
  mutate(
    valor_premio_risco = tx_mercado - tx_selic
  )

Explicando o código: estamos incluindo uma nova coluna no data frame.

library(ggplot2)
ggplot(premio_risco_df, aes(x = date, y = valor_premio_risco)) +
  geom_line(linewidth = 1, color="orange") +
  geom_hline(yintercept = 0, linetype = "dashed", color="red") +
  labs(
    title = "Prêmo de Risco no Brasil",
    subtitle = "Taxa nominal de juros menos SELIC",
    x = "Ano",
    y = "%"
  ) +
  theme_minimal()

Explicando o código: acrescentamos uma linha tracejada em vermelho para mostrar valores iguais a zero.

O prêmio de risco é muitas vezes chamado de “spread bancário”.