Category

Dicas de R

Loops no R e a contribuição dos grupos do IPCA para a inflação cheia

By | Dicas de R

A inflação foi o tema recorrente no Blog essa semana. Para fechar a discussão sobre isso, imagine que você estivesse interessado em ver a contribuição dos 9 grupos do IPCA para a inflação cheia ao longo do tempo. De modo a construir um gráfico como esse, podemos usar o R, de modo a baixar com o pacote sidrar as variações e os pesos desses nove grupos do IPCA diretamente do site do SIDRA/IBGE, conforme o código abaixo - saiba mais em nosso Curso de Análise de Conjuntura usando o R.

## Carregar pacotes
library(sidrar)
## Baixar e tratar os dados
tab1 = get_sidra(api='/t/2938/n1/all/v/63,66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202,v66%204')
tab2 = get_sidra(api='/t/1419/n1/all/v/63,66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202,v66%204')

Uma vez que tenhamos baixado os dados, é preciso organizá-los, transformando-os em uma matriz legível. Para isso, nós podemos utilizar um loop de modo a não ter de pegar um a um os dados de variação e peso para cada mês. Isso é feito com o código a seguir.


series = c(7170, 7445, 7486, 7558, 7625, 7660,
7712, 7766, 7786)

names = c('Alimentos', 'Habitação', 'Art de Resid',
'Vestuário', 'Transporte', 'Saúde e cuid pessoais',
'Despesas Pessoas', 'Educação', 'Comunicação')

var1 = matrix(NA, ncol=length(series), 
nrow=nrow(tab1)/length(series)/2)

peso1 = matrix(NA, ncol=length(series), 
nrow=nrow(tab1)/length(series)/2)

var2 = matrix(NA, ncol=length(series), 
nrow=nrow(tab2)/length(series)/2)

peso2 = matrix(NA, ncol=length(series), 
nrow=nrow(tab2)/length(series)/2)

for(i in 1:length(series)){
  
  var1[,i] <- tab1$Valor[tab1$`Variável (Código)`==63&
                           tab1$`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]
  
  var2[,i] <- tab2$Valor[tab2$`Variável (Código)`==63&
                           tab2$`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]
  
  peso1[,i] <- tab1$Valor[tab1$`Variável (Código)`==66&
                            tab1$`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]
  
  peso2[,i] <- tab2$Valor[tab2$`Variável (Código)`==66&
                            tab2$`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]
}
variacao = ts(rbind(var1, var2), start=c(2006,07), freq=12)
peso = ts(rbind(peso1, peso2), start=c(2006,07), freq=12)

colnames(variacao) = names
colnames(peso) = names

Pronto! Agora, temos uma matriz que contém a variação dos nove grupos, desde julho de 2006; e outra que contém os pesos desses grupos para o mesmo período. Agora, nós podemos construir um gráfico que ilustre a contribuição desses grupos em cada um dos meses, bem como adicionamos a esse gráfico a inflação mensal cheia. O código a seguir implementa.


contribuicao = variacao*peso/100
colnames(contribuicao) = names

time = as.Date(time(contribuicao))

data_bar = xts(contribuicao, order.by = time)
data_bar = data.frame(time=index(data_bar),
melt(as.data.frame(data_bar)))
colnames(data_bar) = c('time', 'tipo', 'value')

ipca = ts(round(rowSums(variacao*peso/100),2),
start=c(2006,07), freq=12)

data_ipca = xts(ipca, order.by = time)
data_ipca = data.frame(time=index(data_bar),
melt(as.data.frame(data_ipca)))

img <- readPNG('logo.png')
g <- rasterGrob(img, interpolate=TRUE)

ggplot(data_bar, aes(x=time, y=value))+
geom_col(aes(fill=tipo))+
geom_line(data=data_ipca, aes(x=data_bar$time, y=value),
colour='black', size=.8)+
theme(legend.position = 'bottom',
legend.key.size = unit(0.3, "cm"),
legend.title = element_blank())+
scale_x_date(breaks = date_breaks("1 year"),
labels = date_format("%Y"))+
labs(x='', y='p.p.',
title='Contribuição dos grupos para a inflação medida pelo IPCA',
caption='Fonte: analisemacro.com.br')+
annotation_custom(g,
xmin=as.Date('2006-06-01'),
xmax=as.Date('2010-01-01'),
ymin=0.7, ymax=1.6)

E o gráfico...

Temos então um gráfico com a contribuição de cada um dos 9 grupos do IPCA construído de forma automática. Da próxima vez, é só rodar o script com o último dado disponível.

________________________

Informalidade domina geração de vagas na PNAD Contínua

By | Dicas de R

Nos últimos posts nesse espaço, tenho escrito sobre o mercado de trabalho. Como notei, a geração de vagas na PNAD Contínua tem sido majoritariamente nas categorias sem carteira e por conta própria. As contratações com carteira assinada, por seu turno, têm recuado nos últimos meses. É possível, a propósito, mostrar isso graficamente através de um gráfico de barras empilhado, decompondo a variação interanual da população ocupada pelas suas diferentes categorias. Abaixo, um exemplo usando o pacote ggplot2 do R.

Como é possível ver, as barras verde e vermelha, que representam conta própria e sem carteira, respectivamente, são justamente as que têm dominado a geração de vagas, na variação interanual. Em outras palavras, as vagas que estão sendo geradas são majoritariamente informais.

_________________

O código completo que gerou o gráfico estará disponível amanhã no Clube do Código na seção Comentário de Conjuntura.

Dessazonalizando os dados de focos de queimadas no Brasil

By | Dicas de R

Em post anterior nesse espaço, comecei a investigar o comportamento da série mensal de focos de queimadas no Brasil. A primeira característica marcante da série é sua sazonalidade, que mostrei com a função ggmonthplot do pacote forecast. Agora, vamos retirar essa sazonalidade da série, de modo a investigar outros comportamentos interessantes.

Antes de mais nada, um gráfico da nossa série:


ggplot(data, aes(obs, Focos/1000))+
geom_line(size=.8)+
scale_x_date(breaks = date_breaks("1 year"),
labels = date_format("%Y"))+
theme(axis.text.x=element_text(angle=45, hjust=1))+
labs(x='', y='Mil',
title='Focos de Queimadas no Brasil',
caption='Fonte: http://queimadas.dgi.inpe.br/queimadas/portal')

E o gráfico...

Usando o pacote seasonal, podemos agora dessazonalizar os nossos dados com o código abaixo.


queimadas_sa = final(seas(queimadas))

E abaixo um gráfico da nossa série dessazonalizada.

A linha vermelha é uma média móvel de 24 meses que mostra uma tendência de queda na maior parte da amostra.

_________________

Um script completo estará disponível no Clube do Código quando terminarmos essa série de posts sobre focos de queimadas no Brasil.

Sazonalidade dos focos de queimadas no Brasil

By | Dicas de R

O professor da FURG, Cristiano Oliveira, gentilmente, me enviou os dados do exercício que ele fez envolvendo focos de queimadas no Brasil. Hoje, infelizmente, tenho algumas entregas para fazer e não vou ter tempo de olhar bem os dados. Ao longo da semana, pretendo construir algo mais elaborado com eles. Por enquanto, fiquem com o gráfico sazonal dos focos de queimadas...


library(readxl)
data = read_excel('focos.xlsx')

queimadas = ts(data$Focos, start=c(2003,01), freq=12)

ggmonthplot(queimadas/1000)+
geom_line(colour='red')+
labs(x='', y='Mil',
title='Sazonalidade dos Focos de Queimadas ativos no Brasil',
caption='Fonte: http://queimadas.dgi.inpe.br/queimadas/portal')

 

Para quem quiser reproduzir o gráfico, o arquivo focos.xlsx está aqui.

_________________________________

OBS: O Shikida também brincou com os dados aqui.

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