Category

Dicas de R

Introdução à Séries Temporais

By | Dicas de R

Uma série temporal é, basicamente, uma sequência de observações tomada ao longo de um período de tempo. Em termos um pouco mais formais, como posto em Bueno (2011), dizemos que uma série temporal \left \{y_{1}, y_{2}, ..., y_{T} \right \} é uma possível realização de um processo estocástico, sendo este uma sequência de variáveis aleatórias. Diversos conjuntos de dados se apresentam como uma série temporal, como a taxa de desemprego, os juros básicos de uma economia, o PIB, a taxa de inflação, etc, o que torna esse campo da econometria extremamente importante. Para além da economia, há também aplicações do que chamamos de econometria de séries temporais na engenharia, nos negócios, nas ciências naturais, nas ciências sociais, etc.

Como posto em Enders (2009), "(...) the task facing the modern time-series econometrician is to develop reasonably simple models capable of forecasting, interpreting and testing hypotheses concerning economic data".

A econometria de séries temporais estará, nesse contexto, preocupada em explicar o passado de uma determinada variável, construir relações entre variáveis distintas e gerar previsões para alguns períodos à frente. Para isso, devemos construir modelos, simplificações da realidade que buscam ressaltar algumas características importantes das séries em que estamos interessados.

# Séries Temporais e Processos Estocásticos

Sendo um pouco mais formal, podemos verificar como os conceitos de série temporal e processo estocástico se relacionam. Usando Pfaff (2008),

Um processo estocástico é uma sequência ordenada de variáveis aleatórias, podendo ser definido formalmente como

(1)   \begin{equation*}\left \{y(s,t), s \in S, t \in \Im \right \}\end{equation*}

onde, para cada t \in \Im, y(., t) é uma variável aleatória no espaço amostral S, e a realização desse processo estocástico é dada por y(s, .) para cada s \in S com respeito a um ponto no tempo t \in \Im. Consequentemente, \textbf{a série temporal que observamos é uma realização particular de um processo estocástico desconhecido}. Ela pode ser representada como segue

(2)   \begin{equation*} \left \{ y \right \}_{t=1}^{T} = \left \{ y_{1}, y_{2}, ..., y_{t}, ..., y_{T-1}, y_{T} \right \} \end{equation*}

Nesses termos, esse processo estocástico desconhecido é o que chamamos de processo gerador dos dados que formam uma série temporal. Cada y_{t} em \left \{ y \right \}_{t=1}^{T} é, desse modo, apenas um valor possível de uma variável aleatória. Uma variável aleatória, por seu turno, é aquela que assume valores numéricos e tem um resultado que é determinado por um experimento. Para maiores detalhes sobre fundamentos estatísticos, ver, por exemplo, os apêndices de Wooldridge (2013). O desafio do econometrista será, portanto, tendo acesso apenas à série temporal, buscar compreender esse processo estocástico desconhecido. Quanto melhor for essa compreensão, melhor será a modelagem e, com efeito, a previsão de observações futuras.

# Decomposição de uma série temporal

De modo a compreender o processo gerador de dados de uma determinada série temporal, pode ser interessante decompô-la em alguns componentes. Como em Cowpertwait et al. (2009)

(3)   \begin{equation*} y_{t} = TD_{t} + sz_{t} + \varepsilon_{t} \end{equation*}

Onde, no tempo t, y_{t} é uma série temporal, TD_{t} é uma tendência, sz_{t} é um efeito sazonal e \varepsilon_{t} é um termo de erro. No \mathbf{R}, podemos fazer essa decomposição com a função decompose, como abaixo.


### Importar e decompor dados da Inflação
inflacao = Quandl('BCB/433', order='asc', type='ts',
start_date='2007-01-01')
inflacao %>%
decompose %>%
autoplot

Escolhemos acima a série de inflação medida pelo Índice de Preços ao Consumidor Amplo (IPCA). Observe o leitor que é possível verificar os dados observados, um componente de tendência, a parte sazonal e um termo de erro. Como veremos ao longo do nosso curso de Séries Temporais usando o R, identificar corretamente esses componentes é um passo importante para compreender o processo gerador de dados de uma série.

# Sazonalidade

Como vimos acima, a inflação apresenta um componente sazonal bastante nítido.


ggmonthplot(inflacao)

Isto é, em um ano calendário, uma série pode apresentar um comportamento que se repete.

# Estacionariedade

Uma característica extremamente importante de uma série temporal, que percorrerá praticamente todo o nosso curso de Séries Temporais usando o R, é o de estacionariedade. Como vimos acima, uma série temporal nada mais é do que a realização particular de um processo estocástico. Essa realização, contudo, pode ser estacionária ou não. Observe, por exemplo, a série abaixo.


n <- 150
eps <- rnorm(n)
trend <- seq_len(n)
x2 <- rep(0, n)
for (i in seq.int(2, n)){
x2[i] <- trend[i] + x2[i-1] + eps[i]
}

autoplot(ts(x2))

Ao olhar a série acima, chama atenção a tendência da mesma. Significa dizer que se estivéssemos interessados em modelar a série, teríamos de levar essa tendência crescente em consideração. Isso é, de fato, um problema. Para entendermos melhor essa questão, vamos definir o que seja uma série estacionária.

Com base em Enders (2009), podemos assumir que um processo estocástico, tendo uma média e variância finitas, será covariância estacionário se para todos t e t-k,

(4)   \begin{eqnarray*} E(y_{t}) = E(t-k) = \mu \\ E\left [(y_{t} - \mu)^2 \right ] = E\left [(y_{t-k} - \mu)^2 \right ] = \sigma_{y}^2 \\ E\left [(y_{t} - \mu)(y_{t-k} - \mu) \right ] = E\left [(y_{t-j} - \mu)(y_{t-j-k} - \mu) \right ] = \gamma_{k} \end{eqnarray*}

onde \mu, \sigma_{y}^2 e \gamma_{k} são todas constantes. Em termos simples, desse modo, uma série temporal é convariância estacionária se sua média e todas as autocovariâncias não são afetadas por mudanças na origem do tempo. Em outras palavras, como explica Wooldridge (2013), 'a estacionariedade da covariância enfatiza somente os primeiros dois momentos de um processo estocástico: a média e a variância do processo são constantes no decorrer do tempo e a covariância entre y_{t} e y_{t+h} depende somente da distância entre os dois termos, h, e não da localização do período de tempo inicial, t.'

A estacionariedade é extremamente importante para a modelagem de uma série temporal. Isso porque, suponha que estejamos regredindo \left \{ y \right \}_{t=1}^{T} contra \left \{ x \right \}_{t=1}^{T}. Se estivermos lidando com séries não estacionárias, isso implica que os coeficientes que encontrarmos não serão representativos da relação entre elas. Estaremos, assim, encontrando uma relação espúria. Logo, antes de construir um modelo econométrico, precisaremos nos certificar se as séries em questão são, de fato, estacionárias ou, claro, lidar com esse fato através de algum outro procedimento, como veremos mais à frente nesse curso.

# Tipos de modelos de séries temporais

Há, basicamente, duas formas de se entender uma série temporal, do ponto de vista econométrico. Modelos de série temporal podem ser:

Modelos Univariados - as características da série de interesse são explicadas exclusivamente a partir do comportamento da própria série;

Modelos Multivariados - as características da série de interesse são explicadas não apenas em função da própria série, mas também por outras séries. Os modelos multivariados podem ser escalares, quando há apenas uma única equação, ou vetoriais, quando há múltiplas equações.

Quando se utilizará uma ou outra forma de modelagem vai depender muito das características da nossa série de interesse, como veremos ao longo do nosso curso.

___________________

(*) Isso e muito mais você aprende em nosso curso de Séries Temporais usando o R



Criando mapas com o R

By | Dicas de R

Hoje em dia é bastante fácil construir mapas brasileiros com o R através dos pacotes ggplot2 e o geobr. Para ilustrar, vou dar um exemplo aqui de um mapa temático que fornece o IDH dos municípios do Rio de Janeiro. O script começa com alguns pacotes sendo carregados.


library(geobr)
library(ggplot2)
library(sf)
library(dplyr)
library(rio)
library(readr)

A seguir, importo o arquivo idh.csv que contém o IDH dos 92 municípios do Rio de Janeiro e carrego as informações de longitude e latitude desses municípios. Também mesclo ambos os arquivos tendo por base os 92 municípios do Estado.


idh = read_csv2('idh.csv', locale=locale(encoding='Latin1'))
mun_rj <- read_municipality(code_muni=33, year=2017)
all_mun_rj = left_join(mun_rj, idh, by='name_muni')

O dataset está pronto para ser colocado em um gráfico. Abaixo, um exemplo.


no_axis <- theme(axis.title=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank())

ggplot() +
geom_sf(data=all_mun_rj, aes(fill=idh), color= NA, size=.15)+
labs(title="IDH dos Municipíos do RJ",
caption='Fonte: analisemacro.com.br', size=8)+
scale_fill_distiller(palette = "Greens", limits=c(0.60,0.85),
name="IDH")+
theme_minimal()+
no_axis

E o mapa...

Gostou? Nosso Curso de Introdução ao R para Análise de Dados está com inscrições abertas!

______________


(*) O arquivo idh.csv está disponível aqui.

 

Detecção de outliers com o R

By | Dicas de R

Outliers são valores atípicos e distantes das demais observações de um determinado conjunto de dados. A depender do tipo de análise que você esteja fazendo, eles podem distorcer os resultados, levando a conclusões nem sempre verdadeiras. Por isso, é sempre importante fazer uma análise exploratória dos dados, se certificando de que o seu conjunto de dados não está contaminado com esse tipo de problema.

De modo a ilustrar como detectar e descartar outliers no R, vou mostrar aqui a parte introdutória da Edição 73 do Clube do Código, em que faço um exercício relacionando a inflação observada com as expectativas de inflação. Os dados estão disponíveis no Banco Central. Para começar, eu carrego alguns pacotes como abaixo.


## Pacotes
library(rbcb)
library(tidyverse)
library(scales)
library(ggrepel)
library(png)
library(grid)
library(gridExtra)
library(sidrar)
library(readxl)
library(xts)
library(grDevices)
library(ggalt)

Com o pacote rbcb, eu importo os dados de inflação e de expectativa de inflação, já fazendo um tratamento dessa última. O objetivo é ter um tibble com dados mensais de ambas as variáveis.


## Importar expectativas de inflação
expinf = get_twelve_months_inflation_expectations('IPCA',
start_date = '2001-11-01')

expectativa = expinf$mean[expinf$smoothed=='N' & expinf$base==0]
dates = expinf$date[expinf$smoothed=='N' & expinf$base==0]

expinf12 = xts(expectativa, order.by = dates)
expinf12 = apply.monthly(expinf12, FUN=mean)
expinf12 = expinf12[-length(expinf12)]

## Importar inflação
inflacao = get_series(13522, start_date='2001-11-01')

## Juntar dados
data = tibble(date=inflacao$date,
expfocus=as.numeric(expinf12),
inflacao=inflacao$`13522`)
colnames(data) = c('date', 'expfocus', 'inflacao')

Com os dados disponíveis, nós podemos gerar um gráfico de correlação já chamando atenção para os outliers presentes no conjunto de dados. O código abaixo implementa.


select.outliers = data[data$inflacao > min(boxplot.stats(data$inflacao)$out) |
data$expfocus > min(boxplot.stats(data$expfocus)$out),]

ggplot(data, aes(x=inflacao, y=expfocus))+
geom_point(stat='identity')+
geom_encircle(aes(x=inflacao, y=expfocus),
data=select.outliers,
color="red",
size=2,
expand=0.08)+
annotate('text', x=14, y=10,
label='Outliers',
colour='darkblue', size=4.5)+
labs(x='Inflação Observada', y='Expectativa de Inflação',
title='Inflação vs. Expectativa de Inflação no Brasil',
caption='Fonte: analisemacro.com.br com dados do BCB.')

Observe que estou usando a função boxplot.stats do pacote grDevices para construir o intervalo onde vou circular os possíveis outliers do conjunto de dados. Com essa função, nós conseguimos definir um outlier como sendo os valores que estão fora do intervalo composto por [(Q1 - 1,5*IQR), (Q3 + 1,5*IQR)] - para quem é iniciante em estatística, talvez seja necessário conhecer nosso Curso de Introdução à Estatística usando o R. A seguir colocamos o gráfico.

Uma vez identificadas as observações consideradas outliers, nós podemos nos livrar dela com o código abaixo.


outliers = c(boxplot.stats(data$inflacao)$out,
boxplot.stats(data$expfocus)$out)

data_outliers = data[-c(which(data$inflacao %in% outliers),
which(data$expfocus %in% outliers)),]

Produzimos agora um gráfico de correlação sem os pontos considerados outliers como abaixo.

Bem melhor, não?

__________________________

(*) Isso e muito mais você aprende em nossos Cursos Aplicados de R.

Começando a programar com o R

By | Dicas de R

Há algumas semanas, publiquei nesse espaço sobre por que você deveria pensar seriamente em começar a programar. Passadas as festas de final de ano, volto ao tema dando um direcionamento para quem ficou interessado. Vou mostrar como começar a programar com o R.

Antes de tudo, é preciso que você tenha os programas necessários. Serão três programas: \mathbf{R}, \mathbf{RStudio} e \mathbf{MikTex}. Não se preocupe, posto que são todos programas gratuitos e com download seguro. Desse modo, para que não tenhamos problemas, siga a sequência abaixo:

O \mathbf{RStudio} é uma IDE amigável que nos permite emular todos os códigos do \mathbf{R}, visualizar gráficos, ver o histórico de nossas operações, importar dados, criar scripts, etc. Com o \mathbf{RStudio}, poderemos otimizar o nosso trabalho de análise de dados, de maneira que a ter mais facilidade para interagir com a linguagem.

A figura acima resume as quatro principais partes de uma tela do \mathbf{RStudio}. Na parte superior esquerda é onde ficará o nosso editor de scripts. Um script é uma sequência de comandos com um determinado objetivo. Por exemplo, você pode estar interessado em construir um modelo univariado para fins de previsão do índice BOVESPA. Para isso, terá de primeiro importar os dados do Ibovespa, bem como fazer uma análise descritiva inicial dos dados. Depois, com base nessa análise inicial, você terá de decidir entre alguns modelos univariados distintos. De posse da sua decisão, você enfim construirá um modelo de previsão para o índice BOVESPA. Essa sequência de linhas de comando pode ficar armazenada em um script, com extensão .R, podendo ser acessada posteriormente por você mesmo ou compartilhada com outros colegas de trabalho. Para abrir um novo script, vá em File, New File e clique em R Script.

Na parte inferior esquerda, está o console do R, onde você poderá executar comandos rápidos, que não queira registrar no seu script, bem como será mostrados os outputs dos comandos que você executou no seu script.

Já na parte superior direita, está o Environment, onde ficam mostrados os objetos que você cria ao longo da sua seção no RStudio. Por fim, na parte inferior direita, ficarão os gráficos que você solicitar, bem como pacotes que você instalou, alguma ajuda sobre as funções e os arquivos disponíveis no seu diretório de trabalho.

Agora que você já instalou os programas e já conhece um pouco do ambiente do \mathbf{RStudio}, podemos começar a brincar um pouco. Para isso, antes de mais nada é preciso definir o seu diretório de trabalho ou a pasta onde ficará salvo o seu script. Uma vez definido, você poderá importar arquivos, colocar figuras no seu documento \LaTeX, etc. Logo, dois comandos são importantes para isso. O primeiro é o getwd, para você ver o seu atual working directory. O segundo é o setwd, para você setar o seu diretório de trabalho.


setwd('C:/Users/Vítor Wilher/Dropbox/VW Economista')

Uma vez setado o seu diretório de trabalho, você poderá importar dados contidos naquela pasta. Assim, é um ponto importante realizar isso antes de qualquer coisa. Caso já tenha um script de R, por suposto, uma vez abrindo-o, o RStudio setará automaticamente o diretório onde o mesmo esteja.

Na maior parte do tempo, você estará basicamente manipulando objetos dentro do \mathbf{R}. Seja lidando com objetos criados por terceiros, seja criando seus próprios objetos. As principais estruturas de dados dentro do \mathbf{R} envolvem vetores, matrizes, listas e data frames. Abaixo colocamos um exemplo da estrutura mais simples do \mathbf{R}: um vetor que exprime a sequência de 1 a 10.


vetor <- c(1:10)

Milhares de pacotes a sua disposição

O \mathbf{R} é uma linguagem aberta, onde qualquer pessoa em qualquer parte do mundo pode dar a sua contribuição. Em geral, elas fazem isso através de pacotes, que são coleções de funções que fazem algum coisa dentro do \mathbf{R}. Veremos muitos desses pacotes ao longo do nosso curso. A instalação de pacotes é feita primariamente pelo CRAN, através da seguinte função:


install.packages('tidyverse')

Uma vez instalado, os seus pacotes ficam armazenados na pasta library da versão correspondente do seu \mathbf{R}. Uma outra forma muito comum de instalar pacotes é através do GitHub, uma plataforma bem bacana utilizada por desenvolvedores para compartilhar códigos. Ali ficam armazenados pacotes em desenvolvimento, que ainda não estão disponíveis no CRAN. Para instalar um pacote via GitHub, você deve ter instalado primeiro o pacote devtools. O código abaixo exemplifica com a instalação do pacote brasileiro rbcb.


library(devtools)
install_github('wilsonfreitas/rbcb')

Na próxima semana, escrevo sobre as principais estruturas de dados no \mathbf{R}. Até lá!

________________________

Por que aprender a programar?

By | Dicas de R

Eu comecei a utilizar o \mathbf{R} há cerca de 6 anos, influenciado por amigos. Mas minha introdução ao mundo da programação foi bem anterior, como comento brevemente na sequência desse post. Especificamente em relação à estatística, minha introdução ao mundo dos programas estatísticos foi através do Eviews, ainda nos tempos da graduação em economia, como provavelmente muitos dos que me leem agora. Ainda que seja possível programar no Eviews e em outros pacotes estatísticos fechados (que precisam de licença), as vantagens do \mathbf{R} são inúmeras, como comentarei mais à frente. Por ora, talvez seja necessário tecer algumas palavras sobre por que afinal é preciso aprender uma linguagem de programação.

Eu poderia simplesmente falar que o mundo está mudando, que cada vez mais empregos e empresas têm exigido conhecimentos de programação. E isso de fato é verdade, o que por si só gera uma necessidade de saber programação. São cada vez mais frequentes os anúncios de vagas de emprego/estágio onde o recrutador coloca como conhecimento diferencial saber alguma linguagem de programação como \mathbf{R}, voltada para análise de dados. Com o avanço das bases de dados, em pouco tempo isso deixará de ser diferencial e passará a ser mandatório, como falar inglês ou saber Excel Avançado.

Mas, aqui entre nós, acho que é meio chato aprender algo por necessidade, não é mesmo? Mesmo que seja uma necessidade real do mercado. Por isso, vou contar um pouco sobre a minha motivação principal para começar a aprender \mathbf{R}.

Minha estória com programação, na verdade, começou há muito tempo atrás, quando entrei para o meu primeiro estágio. Que não foi em economia. Comecei a trabalhar com 16 anos, em um estágio em uma operadora de telecomunicações. Havia feito Escola Técnica na área. No estágio, fui designado para trabalhar com centrais telefônicas de grande porte, cuja interface era feita através de um terminal [remoto ou local] onde o operador escrevia linhas de comando que emulam uma espécie de programação funcional. Seja para listar status do software/hardware da central, seja para criar/modificar objetos do software.

A linguagem da central telefônica era bastante ampla em termos de código, de modo que para fazer grandes modificações na base de dados, era possível escrever programas que automatizavam a tarefa para o operador. Um exemplo prático disso foi a adoção do oitavo dígito nos telefones fixos. Imagina ter que mudar um a um os milhares de telefones existentes nas bases de dados de todas as centrais telefônicas da operadora em questão? 

Impraticável, não é mesmo?

Pois é. Justamente por essa capacidade de automatizar as coisas que a programação acabou me encantando e desde então nunca mais parei de estudar o assunto.

Aplicar isso à economia seria um pulo...

Eu estava um pouco cansado de apertar botões e fazer tarefas repetitivas em pacotes estatísticos como o Eviews, então parecia natural aprender uma forma de automatizar as coisas, como eu fiz durante 7 anos na indústria de telecomunicações - tempo maravilhoso, diga-se. Essa, afinal, era uma baita motivação para mim: aplicar a mesma ideia dos meus anos de telecom à economia. Provavelmente, você também passe por isso no seu trabalho, não é mesmo? Talvez não propriamente com o Eviews, mas com o Excel.

Motivação esclarecida, mas por que o \mathbf{R}, você pode perguntar.

Essa é de fato uma boa pergunta. Por que não aprender a programar no próprio Eviews ou mesmo no Excel? Entre as inúmeras vantagens do \mathbf{R}, posso destacar:

  • A existência de uma comunidade grande e bastante entusiasmada, que compartilha conhecimento todo o tempo. Para grande parte dos problemas, basta jogar a sua dúvida no google e vai aparecer algo sobre o assunto;
  • O \mathbf{R} é gratuito, open source, de modo que você não precisa comprar licenças de software para instalá-lo;
  • A linguagem está consolidada para análise de dados, com inúmeras bibliotecas (pacotes) disponíveis em estatística, econometria, machine learning, importação, visualização e tratamento de dados;
  • Dispõe de ferramentas poderosas para comunicação dos resultados da sua pesquisa, seja em forma de um website, dashboard ou em formato de relatório pdf;
  • Com o \mathbf{R}, você consegue automatizar tarefas cansativas de coleta, tratamento, análise e apresentação de resultados através de scripts que podem ser armazenados/compartilhados com demais colaboradores, gerando maior transparência e reprodutibilidade do trabalho de análise de dados.

Ao aprender \mathbf{R}, você conseguirá integrar as etapas de coleta, tratamento, análise e apresentação de dados em um único ambiente. Não fará mais sentido ter de abrir o Excel, algum pacote estatístico, depois o power point ou o word, depois um compilador de pdf para gerar seu relatório. Todas essas etapas serão feitas em um único ambiente. Na verdade, em um único arquivo. E essa talvez seja a grande motivação para você entrar de cabeça nesse mundo.

Ao longo das próximas semanas, publicarei nessa seção Dicas de \mathbf{R} exemplos de como o \mathbf{R} pode ajudar nas tarefas de coleta, tratamento, análise e apresentação de dados, seja qual for o dado ou a área de atuação. Até lá!

________________________

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