Category

Dicas de R

Google Trends no R: o pacote gtrendsR

By | Dicas de R

Com o avanço da pandemia do coronavírus, muitas consultorias e departamentos de research têm avançado na busca de dados de "alta frequência" para quantificar os seus efeitos sobre a economia. Os dados do google como o Google Trends e de geolocalização têm sido cada vez mais utilizados de forma a quantificar os efeitos da peste sobre o nível de atividade.

Como já tratei várias vezes nesse espaço, os dados do google podem ser inclusive utilizados para forecasting de variáveis econômicas. Um exemplo dessa abordagem é visto na edição 68 do Clube do Código, que busca replicar o paper The predictive power of google search in forecasting US unemployment, publicado no International Journal of Forecasting, para o Brasil.

Nesse paper e no exercícioutilizamos a pesquisa pela palavra "emprego" como uma das variáveis que explicariam o avanço da taxa de desemprego ao longo do tempo.

Na situação atual, contudo, talvez seja interessante pesquisar por outros termos, como, por exemplo, "seguro desemprego". Podemos para isso utilizar o pacote gtrendsR para fazer a pesquisa e os pacotes tidyverse para tratar e visualizar os dados.

Uma dica aqui é que a versão disponível no CRAN não rodou para mim. Tive que instalar a versão disponível no github. Para isso, você pode rodar a linha de comando abaixo.


if (!require("devtools")) install.packages("devtools")
devtools::install_github("PMassicotte/gtrendsR")

Uma vez instalado o pacote, podemos pegar tanto as buscas por "emprego" quanto "seguro desemprego", como no código abaixo.


data_gtrends = gtrends(keyword = c("seguro desemprego", 'emprego'),
geo = "BR", time='all', onlyInterest=TRUE)

De posse dos dados, nós selecionamos e mensalizamos as buscas por "seguro desemprego".


seguro_desemprego = data_gtrends$interest_over_time %>%
filter(keyword == 'seguro desemprego') %>%
mutate(mes = floor_date(date, "month")) %>%
group_by(mes) %>%
summarize(interesse = mean(hits)) %>%
mutate(date = as.Date(mes)) %>%
select(date, interesse)

Por fim, podemos gerar um gráfico com o ggplot2 como abaixo.

Como esperado, há um forte aumento em abril nas pesquisas por "seguro desemprego".

__________________

(*) Aprenda R em nosso Curso de Introdução ao R para Análise de Dados.

Update: Evolução do Covid-19 no Brasil

By | Dicas de R

Nas primeiras semanas de março, acabei me envolvendo bastante com os dados do Covid-19, por questões profissionais. Há muitos posts sobre o assunto publicados nesse espaço, o leitor pode fazer uma busca por eles. À época, porém, o Brasil começava sua guerra contra o vírus, de modo que nossos dados ainda eram bastante iniciais sobre o assunto. As semanas passaram e já aqui, no início de maio, estamos com um quadro preocupante sobre a doença no país, mas creio que melhor do que as previsões inicialmente feitas. Os gráficos a seguir resume o alastramento da epidemia no país, com dados atualizados até 5 de maio.

Do lado esquerdo, temos os casos confirmados de Covid-19 no Brasil, bem como a variação diária desses casos. No lado direito, temos o log dos casos confirmados. A ideia de colocar os dados em log facilita a visualização porque a expansão inicial da doença se mostrou ser exponencial. Um crescimento exponencial transformado em log segue uma reta linear. Isso posto, o gráfico à direita nos mostra que o crescimento da doença parece começar a experimentar um arrefecimento.

É para comemorar? Não muito. Primeiro, porque é preciso lembrar da subnotificação. Isto é, o Brasil, infelizmente, não teve uma política pública consolidada de testes. Nós testamos muito pouco a doença Brasil à fora. Logo, é preciso olhar para os dados oficiais com bastante cautela. Segundo, porque os dados oficiais são uma agregação de um país bastante desigual. Enquanto municípios mais ricos enfrentaram a doença primeiro e agora começarão a ver uma melhora no quadro, municípios mais pobres ainda estão por enfrentar o pior cenário.

Feitas as ressalvas, gostaria de ressaltar que nós ainda estamos distantes de um entendimento completo da doença, bem como do impacto dela sobre o país. A precariedade dos dados e das políticas públicas de saúde adotadas seguem inundando de incerteza o cenário. Cautela no momento é o melhor que devemos ter.

__________________

(*) Os dados foram coletados diretamente do survey da JHU, que se consolidou como a melhor base de dados sobre o assunto no mundo.

(*) Aprenda R em nosso Curso de Introdução ao R para Análise de Dados.


Visualizando dados de Covid-19 com o pacote tidycovid19

By | Dicas de R

O pacote tidycovid19, disponível no github, permite customizar a visualização dos dados de Covid-19 de forma bastante simples. Veja abaixo um exemplo.

library(tidyverse)
library(tidycovid19)
covid19_dta <- download_merged_data(silent = TRUE, cached = TRUE)
plot_covid19_spread(
covid19_dta, type = "deaths", min_cases = 100, min_by_ctry_obs = 0,
edate_cutoff = 69, per_capita = FALSE, log_scale = TRUE,
cumulative = TRUE, change_ave = 7,
highlight = c('BRA', 'ARG', 'CHL', 'CHN', 'COL',
'ECU', 'IND', 'MEX', 'PER', 'PRY', 'TUR', 'URY'),
intervention = c("soc_dist")
)

(*) Aprenda R em nosso Curso de Introdução ao R para Análise de Dados.


Lidando com datas trimestrais no R

By | Dicas de R

Para quem está começando no R, pode ser um pouco chato lidar com datas. Por exemplo, imagine que você queira lidar com dados trimestrais e queira plotar um gráfico com o eixo x em trimestres e não em anos ou em meses, por exemplo. Para ilustrar o problema, considere essa planilha do IPEA que contém dados do PIB efetivo e do PIB potencial construído através do método da função de produção. Nós ensinamos a lidar com esse tipo de dado nos laboratórios do nosso curso de Teoria Macroeconômica.

Nós podemos importar essa planilha para o R através do pacote readxl, que vemos no nosso Curso de Introdução ao R para Análise de Dados. No código abaixo, nós carregamos outros pacotes que utilizaremos para tratar os dados e também para criar o nosso gráfico.


library(readxl)
library(zoo)
library(lubridate)
library(tidyverse)
data = read_excel('CC45_Produto-Potencial_série-completa.xlsx',
range='A2:D109')

Feita a importação dos dados, teremos um tibble com a primeira coluna sendo um vetor de caracteres e não uma data, como queremos. Para que possamos dizer para o R que a primeira coluna é, na verdade, uma data trimestral, precisaremos fazer algumas modificações. Primeiro, vamos usar a função gsub para substituir o 'T' por 'zero'. Depois utilizamos a função sub para acabar com o espaço entre o ano e o "TX". Feito isso, podemos usar a função as.yearqtr do pacote zoo para, finalmente, transformar a nossa data em trimestres. O código a seguir operacionaliza.


data$Trimestre = as.yearqtr(sub(' ', '', gsub('T', '0', data$Trimestre)),
format='%Y%q')

Uma vez feito isso, você poderá reparar que o R transformou a nossa coluna em uma classe que representa dados trimestrais. Assim, estamos prontos para criar um gráfico como abaixo.


colnames(data) = c('date', 'potencial', 'pib', 'hiato')
ggplot(data, aes(x=date, y=hiato*100))+
geom_line()+
geom_hline(yintercept=0, colour='red', linetype='dashed')+
scale_x_yearqtr(breaks = seq(from = min(data$date),
to = max(data$date),
by = 1),
format = "%YQ%q")+
theme(axis.text.x=element_text(angle=45, hjust=1),
plot.title = element_text(size=10, face='bold'))+
labs(x='', y='',
title='Hiato do Produto',
caption='Fonte: IPEA')

Pronto!

____________________

(*) Isso e muito mais você aprende em nosso Curso de Introdução ao R para Análise de Dados.


Transformando preços em log-retornos mensais com o R tidyquant

By | Dicas de R

No post anterior, eu mostrei como é possível coletar os preços de ações com o R através do pacote quantmod, utilizando a base de dados do Yahoo Finance. Essa representação dos dados, contudo, não é a mais conveniente para a gestão de portfólios, como veremos no nosso Novo Curso Mercado Financeiro e Gestão de Portfólios. Para fins de construção de portfólios, é conveniente usarmos os retornos ou log-retornos dos ativos. De fato, uma grande parte dos estudos financeiros envolve retorno, ao invés de preço, de ativos. Isto porque, retorno de ativos pode ser um completo sumário para oportunidades de investimento, bem como séries de retorno são mais fáceis de lidar do que séries de preço porque aquelas possuem propriedades estatísticas mais atrativas.

Há, entretanto, diversas definições de retorno de ativos. Tomando P_t como o preço de um ativo no tempo t, considerando que a princípio o ativo não paga dividendos, ao manter um ativo por um período de t-1 a t, isso resultaria em um retorno bruto simples de

(1)   \begin{align*} 1 + R_t = \frac{P_t}{P_{t-1}} \end{align*}

O retorno líquido ou simples então será de

(2)   \begin{align*} R_t = \frac{P_t}{P_{t-1}} - 1 = \frac{P_t - P_{t-1}}{P_{t-1}} \end{align*}

Já o logaritmo natural do retorno bruto simples de um ativo é chamado de retorno composto continuamente ou simplesmente log-retorno:

(3)   \begin{align*} r_t = \text{ln} (1+R_t) = \text{ln} \frac{P_t}{P_{t-1}} = p_t - p_{t-1} \end{align*}

onde p_t = ln (P_t).  A seguir, pegamos nossas ações coletadas no post anterior e calculamos os log-retornos mensais com o pacote tidyquant.


library(tidyverse)
library(tidyquant)
library(timetk)
library(scales)
library(quantmod)

prices = getSymbols(symbols, src='yahoo',
from='2019-01-01',
to='2020-04-20',
warning=FALSE) %>%
map(~Cl(get(.))) %>%
reduce(merge) %>%
`colnames<-` (symbols) %>%
tk_tbl(preserve_index = TRUE,
rename_index = 'date') %>%
drop_na()

returns = prices %>%
gather(asset, prices, -date) %>%
group_by(asset) %>%
tq_transmute(mutate_fun = periodReturn,
period='monthly',
type='log') %>%
spread(asset, monthly.returns) %>%
select(date, symbols)

A seguir, construímos um gráfico desses retornos.


ggplot(returns, aes(x=date))+
geom_line(aes(y=PETR4.SA, colour='PETR4'))+
geom_line(aes(y=ABEV3.SA, colour='ABEV3'))+
geom_line(aes(y=MGLU3.SA, colour='MGLU3'))+
geom_line(aes(y=VVAR3.SA, colour='VVAR3'))+
scale_colour_manual('',
values=c('PETR4'='blue',
'ABEV3'='red',
'MGLU3'='orange',
'VVAR3'='green'))+
scale_x_date(breaks = date_breaks("1 month"),
labels = date_format("%b/%Y"))+
theme(axis.text.x=element_text(angle=45, hjust=1),
legend.position = 'bottom',
plot.title = element_text(size=10, face='bold'))+
labs(x='', y='',
title='Log-Retornos mensais de ações brasileiras selecionadas',
caption='Fonte: analisemacro.com.br com dados do Yahoo Finance')

Observa-se uma queda forte no mês de março por conta da pandemia do coronavírus, como era esperado.

(*) Isso e muito mais você irá aprender no nosso Novo Curso Mercado Financeiro e Gestão de Portfólios.


Cadastre-se na newsletter
e receba nossas novidades em primeira mão!