Category

Clube AM

Estimando a volatilidade do câmbio

By | Clube AM

A taxa de câmbio BRL/USD tem sofrido forte deterioração ao longo dos últimos anos. Em grande medida, isso reflete uma piora no cenário doméstico. De forma a verificar se os níveis de volatilidade verificados nesses anos são, de fato, maiores do que aqueles observados na média histórica, vamos estimar um modelo GARCH, como é visto no nosso Curso de Econometria Financeira usando o R. A partir desse modelo, podemos obter a volatilidade da taxa de câmbio.

Uma importante medida em finanças é o risco associado a um ativo e a volatilidade de ativos é talvez a medida de risco mais utilizada. Ainda que a volatilidade seja bem definida, ela não é diretamente observada na prática. Nós observamos os preços dos ativos e seus derivativos. A volatilidade deve ser, então, estimada com base nesses preços observados. Ainda que a volatilidade não seja diretamente observada, ela apresenta algumas características comuns associadas aos retornos dos ativos. Listamos abaixo algumas delas:

  • A volatilidade é alta em certos períodos e baixa em outros, configurando o que a literatura chama de volatility clusters;
  • A volatilidade evolui de maneira contínua, de modo que saltos não são comuns;
  • A volatilidade costuma variar em um intervalo fixo;
  • A volatilidade costuma reagir de forma diferente a um aumento muito grande nos preços e a um decréscimo igualmente muito grande, com o último representando maior impacto.

Essas características implicam que, de modo geral, a volatilidade é uma série estacionária. Ademais, essas características determinam a forma como os modelos serão construídos. De fato, alguns modelos de volatilidade são formatados justamente para corrigir a inabilidade dos atualmente existentes em capturar algumas das características mencionadas acima. Na prática, estima-se a volatilidade de um ativo com base nos seus preços ou derivativos. Tipicamente, três tipos de volatilidade são consideradas:

  • Volatilidade como o desvio-padrão condicional dos retornos diários;
  • Volatilidade implícita, obtida a partir de fórmulas de precificação (como Black-Scholes), com base nos preços do mercado de opções, é possível deduzir a volatilidade do preço da ação. Um exemplo desse tipo de procedimento é o VIX Index;
  • Volatilidade realizada, obtida com base em dados financeiros de alta frequência, como, por exemplo, retornos intraday de 5 minutos.

# Modelagem

Com efeito, para estimar a volatilidade da taxa de câmbio BRL/USD, primeiro, precisamos pegar a série via pacote rbcb no Sistema de Séries Temporais do Banco Central. Feito isso, podemos calcular o log retorno da série, estimar um modelo GARCH(1,1) para os mesmos, extraindo assim a série de volatilidade. O gráfico abaixo ilustra o comportamento da volatilidade ao longo do tempo. A série de câmbio é diária, para o intervalo de 1 de janeiro de 2014 a 5 de outubro de 2018.

A seguir, verificamos o log retorno do câmbio.

E, por fim, obtemos a volatilidade do câmbio.

Para quem deseja se aprofundar nesse tipo de análise de séries temporais financeiras, recomendo o nosso Curso de Econometria Financeira usando o R. Para interessados em econometria de modo geral, veja também nossos Cursos Aplicados de R.

__________________

Membros do Clube AM têm acesso a todos os códigos desse e de vários outros exercícios.

CAGED vs. PNAD Contínua

By | Clube AM

Há um burburinho no mundinho dos economistas com respeito às diferenças entre o CAGED e a PNAD Contínua. Para muita gente dentro do mercado, o CAGED não estaria sinalizando de forma clara, por diversos problemas metodológicos, a ociosidade na economia. Já a PNAD Contínua retrataria melhor o fundo do poço pelo qual passa no país.

Instigado por esse fato, eu resolvi dar uma aula gratuita na próxima terça-feira, às 21h, sobre como analisar as duas pesquisas com o R. Se você tiver interesse, se inscreve lá no nosso Canal do youtube e ativa o lembrete da aula aqui.

A análise de ambas as pesquisas é ensinada, diga-se, no nosso Curso de Análise de Conjuntura usando o R.

A coleta dos dados é feita via o SIDRA/IBGE e via o IPEADATA. Os dados são devidamente tratados de forma a poderem ser comparados, uma vez que o CAGED se refere a um fluxo e a PNAD se refere a um estoque.

Feito isso, chegamos ao gráfico abaixo.

As séries devidamente tratadas mostram uma situação interessante. A PNAD Contínua acabou por sinalizar mais o tombo em 2020 do que o CAGED. Ademais, em exercício anterior feito no âmbito do antigo Clube do Código, os resultados encontrados sugeriam que o CAGED tinha precedência temporal sobre a população ocupada com carteira da PNAD. Essa precedência parece ter mudado, ao incorporar os novos dados do CAGED: há, agora, uma "causalidade" nos dois sentidos. Tanto a população ocupada da PNAD influencia o CAGED, quanto o contrário.

A decomposição de variância entre as séries também mudou bastante. Antes, a variância do CAGED era explicada  basicamente pela própria série (quando incluíamos as duas séries em um modelo VEC), hoje cerca de 44% da variância é explicada pela PNAD Contínua. Já a PNAD, antes 44% da variância era explicada pelo CAGEd e o restante pela própria série. Agora, 75% da variância é explicada pela própria série.

Os resultados encontrados sugerem, diga-se, que houve uma mudança significativa na relação entre as duas séries, de modo que a PNAD Contínua pode ter se tornado um sinalizador melhor do que está ocorrendo com o mercado de trabalho.

Uma possível explicação para isso está, claro, na mudança metodológica feita no CAGED em janeiro de 2020, que passou a ter como fonte dos seus dados o eSocial.

O novo exercício será publicado no Clube AM na próxima semana.

Membros do Clube AM, por suposto, têm acesso a todos os códigos de ambos os exercícios.

____________________________

Março vermelho no país do negacionismo

By | Clube AM

É difícil encontrar adjetivo para caracterizar o momento atual que passa o país. A pandemia do Covid-19 atingiu o seu pior momento até aqui: março registrou quase 67 mil mortes pelo novo coronavírus. Nesse post, registramos a soma mensal de mortes provocada pela irresponsabilidade e pelo descaso, no Brasil e nos estados.

Membros do Clube AM, por suposto, têm acesso a todos os códigos desse exercício.

Os dados são coletados como abaixo.


## Carregar pacotes
library(tidyverse)
library(lubridate)

## Coletar dados
covid_df = readr::read_csv("https://raw.githubusercontent.com/wcota/covid19br/master/cases-brazil-states.csv")

A seguir, podemos construir o gráfico abaixo, destacando o mês de março.

Como se vê, o novo coronavírus foi responsável por quase 67 mil mortes somente em março, atingindo o pior momento até aqui. A situação nos estados, por suposto, pode ser vista a seguir.

Um março triste e desolador para todos nós, infelizmente.

Membros do Clube AM, por suposto, têm acesso a todos os códigos desse exercício.

____________________________

O lockdown é eficaz? Coletando evidências para o Brasil

By | Clube AM, Data Science

Nesse post extra, iremos mostrar outra visualização dos dados de COVID-19 apresentados no Dicas de R de quarta-feira, e também fazer um breve estudo sobre o impacto do isolamento social (lockdown) sobre os casos de gripe que apresentam SRAG, dado que essa doença possui meios de transmissão semelhantes aos do coronavírus. Inicialmente, vamos mostrar como a análise de números de casos feita no post pode ser separada em estados:

dados_covid <- vroom::vroom("https://data.brasil.io/dataset/covid19/caso_full.csv.gz")

library(tidyverse)
library(RcppRoll)
library(ggplot2)
library(ggthemes)
escalas <- function(x) {
if (max(x) > 10000) {
seq(0, 12500, 2500)
} else if (max(x) > 8000) {
seq(0, 10000, 2000)
} else if (max(x) > 6000) {
seq(0, 8000, 1600)
} else if (max(x) > 4000){
seq(0, 5000, 1000)
} else if (max(x) > 3000){
seq(0, 3000, 600)
}
}

por_estado %>%
filter(state %in% ranking[1:9]) %>%
ggplot(aes(x=date, y=value)) + geom_line(size=1.05) +
scale_y_continuous("Número de casos novos", breaks = escalas) +
scale_x_date("", breaks = "3 month", minor_breaks = "1 month", date_labels = "%b %y") +
labs(title=('Evolução da COVID-19: estados com maior número de casos')) +
theme_bw() + facet_wrap(~state, scales = "free_y")

Devemos notar que os dados desagregados possuem algumas observações que parecem ser errôneas, porém decidimos mantê-las aqui. Abaixo, um dos gráficos gerados:

Agora, vamos analisar os dados de números de casos de SRAG causados por gripe comum, conforme disponível no repositório do InfoGripe. Devido ao impacto das medidas de isolamento sobre a economia, e também sobre as fontes de renda de pessoas sob insegurança econômica, o trade-off implícito do distanciamento tem sido muito debatido, surgindo argumentos de parte da população de que o distanciamento nem mesmo seria efetivo. Como não temos dados sobre o COVID-19 sem a existência de lockdown - que seja total, parcial ou mal-aplicado -, não temos dados de controle para testar o efeito do lockdown sobre a trajetória do número de casos da doença.

Por outro lado, existem doenças que, apesar de possuírem taxas de contaminação e mortalidade menores do que o COVID-19, compartilham de seus métodos de transmissão, logo podemos inferir que, em um regime de distanciamento cujo objetivo é diminuir a transmissão do COVID-19, a redução na transmissão de outras doenças que dependem do mesmo tipo de contato evidencia a efetividade do método.

No código abaixo, vamos visualizar o número de casos ano-a-ano de gripe que apresentam SRAG:

library(ggplot2)
library(tidyverse)

infogripe <- read.csv("https://gitlab.procc.fiocruz.br/mave/repo/-/raw/master/Dados/InfoGripe/serie_temporal_com_estimativas_recentes.csv", sep = ';')

gripe_limpo <- infogripe %>% filter(Tipo == "País" & escala == "casos") %>%
select(`Ano.epidemiológico`, `Semana.epidemiológica`, `dado`,
`Casos.semanais.reportados.atÃ..a.última.atualizaÃ.Ã.o`)

srag <- gripe_limpo %>% filter(dado=="sragflu") %>%
rename(casos = Casos.semanais.reportados.atÃ..a.última.atualizaÃ.Ã.o,
ano = Ano.epidemiológico,
semana = Semana.epidemiológica) %>%
mutate(date = ano + semana/52,
date = ifelse(ano == 2014 | ano == 2020, ano+semana/53, date),
casos = as.numeric(gsub(",", ".", casos)))

srag_podado <- srag %>% filter(semana &amp;lt;53) %>%
mutate(semana = ifelse(semana&amp;lt;10, paste(0, semana, sep = ""), semana),
semana = gsub(" ", "", paste(semana, "01")),
date = paste(ano, semana, sep = ""),
date = as.Date(date, "%Y%W%w"))

srag_usual <- srag_podado %>% filter(ano > 2009)

ggplot(srag_usual, aes(x=date, y = casos)) + geom_line() + facet_wrap(~ano, scales = "free") +
scale_x_date(date_labels = "%b") + 
labs(title = "Número de casos de SRAG causada por gripe por ano", ylab="Quantidade",
caption = "Fonte: Análise Macro com dados do INFOGIPE")+
theme(axis.title.x = element_blank())

Como podemos ver, a gripe apresenta alguma sazonalidade, e seus picos tendem a decair lentamente após o início da temporada de transmissão. É interessante notar que, no ano de 2020, há uma queda brusca no número de casos, resultado bem diferente dos anos anteriores. Além disso, o número de casos até agora em 2021 é relativamente baixo, que pode indicar uma continuação no efeito anômalo, mas também pode ser resultado de ainda não ter começado a temporada de gripe em 2021. Vamos então visualizar mais claramente os dados de 2020.

library(ggrepel)

srag_usual %>% filter(ano == 2020) %>%
ggplot(aes(x=date, y=casos))+geom_line() + 
geom_vline(xintercept = as.numeric(as.Date("2020-03-15")), linetype = 4)+
scale_x_date(breaks = "2 months", minor_breaks = "1 week", date_labels = "%b %Y")+
labs(title = "Número de casos de SRAG causada por gripe em 2020", ylab="Quantidade",
caption = "Fonte: Análise Macro com dados do INFOGIPE") +
geom_label_repel(data = filter(srag_usual, date == as.Date("2020-03-15")),
label = "Ínicio do isolamento",
box.padding = 2,
aes(x=as.Date("2020-03-15"), y= 250))+
theme(axis.title.x = element_blank())

 

A data referenciada como início do isolamento é metade de março, época onde a maior parte dos governos estaduais decretou lockdown. Como podemos ver, o número de casos de gripe com SRAG cai bruscamente cerca de 10 dias depois, que é próximo do tempo de incubação de sintomas desse tipo para a gripe. Com isso, a análise exploratória parece indicar evidências de que utilizar o distanciamento como variável binária para controlar os casos de SRAG pode ser válido.

Faremos então a modelagem de um modelo ARDL, que tem como variáveis explicativas o lag do número de casos e a existência (ou não) de distanciamento. Os detalhes estarão disponíveis para os membros do Clube AM. A regressão final é:

Dependent variable:
casos
lag(casos, 1) 1.424***
(0.039)
lag(casos, 2) -0.512***
(0.046)
lag(casos, 5) 0.170***
(0.046)
lag(casos, 6) -0.165***
(0.039)
lag(casos, 52) 0.015
(0.011)
lockdown -10.129**
(4.613)
Constant 5.511***
(1.705)
Observations 527
R2 0.941
Adjusted R2 0.940
Residual Std. Error 30.076 (df = 520)
F Statistic 1,370.252*** (df = 6; 520)
Note: *p<0.1; **p<0.05; ***p<0.01

Os resultados encontrados sugerem que a existência do lockdown é estatisticamente significante, com p-valor de 0.028. O sinal do seu parâmetro é -10, logo temos evidência de que o lockdown diminui a média de casos novos semanais em mais de 10. Apesar do lag sazonal ser estatisticamente insignificante, sua exclusão aumenta o AIC e diminui a log-likelihood, logo ele é mantido aqui.

Em suma, os resultados encontrados nesse exercício sugerem que a existência do distanciamento e de medidas restritivas implica em diminuição da transmissão da gripe, que é contagiada de forma semelhante ao COVID-19. Com isso, inferimos que o lockdown é sim uma boa medida para o controle de doenças do tipo.

__________________

Causalidade ou correlação: EWZ vs. Ibovespa

By | Clube AM

O `EWZ` é um fundo de investimento que replica um índice de ações brasileiras negociadas em Nova York, chamado `iShares MSCI Brazil Capped`, e tenta acompanhar o Ibovespa no Brasil. O `EWZ` é um `Exchange Traded Funds` (ETF) ou simplesmente *fundo de índices*. Por ser o principal ETF brasileiro, o EWZ é utilizado como uma espécie de termômetro da demanda internacional pelas ações brasileiras. Nesse exercício do Clube AM, vamos verificar se existe uma relação estatística entre o `EWZ` e o `Ibovespa`.

Usaremos os seguintes pacotes de R nesse exercício.


library(tidyverse)
library(quantmod)
library(timetk)
library(scales)
library(tidyquant)
library(BatchGetSymbols)
library(ggcorrplot)
library(vars)
library(aod)

Para começar, coletamos os dados diretamente do *yahoo finance*:


symbols = c('EWZ', '^BVSP')
prices = BatchGetSymbols(symbols,
first.date = '2016-01-02',
last.date = '2021-02-22') %>%
reduce(inner_join) %>%
drop_na()

Na sequência, podemos dar uma olhada nas séries...

E verificar se existe correlação entre as mesmas...


prices %>%
dplyr::select(ref.date, ticker, price.close) %>%
spread(ticker, price.close) %>%
dplyr::select(-ref.date) %>%
cor(use='na.or.complete') %>%
ggcorrplot(method='square',
colors = c("#e3120b", "white", '#91b8bd'),
lab=TRUE, lab_size = 7)

A seguir, colocamos um gráfico de correlação como abaixo.

A análise acima parece indicar uma correlação positiva entre as séries, o que era esperado, dada a construção do EWZ. Mas será que essa correlação implica em causalidade? Para testar isso, aplicamos o procedimento de Toda e Yamamoto (1995). De fato, conseguimos rejeitar a hipótese nula de não granger causa quando o sentido é do IBOVESPA para o EWZ, o que indica uma causalidade no sentido de Granger nessa direção. Algo que, por óbvio, era esperado.

____________________

(*) Os códigos completos do exercício estão disponíveis no Clube AM.

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

Assinar Gratuitamente
{"cart_token":"","hash":"","cart_data":""}