Download

download <- FALSE
if (download) {
  library(sidrar)
  ## 2000-2006
  m1 <- seq.Date(from=as.Date("1999-08-01"),to=as.Date("2006-06-01"), by="month")|>substr(start = 1,stop = 7)|>gsub(pattern="-",replacement="")|>paste(collapse=",")
  ipca1 <- get_sidra(api=paste0("/t/655/n1/all/v/all/p/",m1, "/c315/7169,7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202"))%>%janitor::clean_names()
  
  ## 7/2006-12/2011
  m2 <- seq.Date(from=as.Date("2006-07-01"),to=as.Date("2011-12-01"), by="month")|>substr(start = 1,stop = 7)|>gsub(pattern="-",replacement="")|>paste(collapse=",")
  ipca2 <- get_sidra(api=paste0("/t/2938/n1/all/v/63/p/", m2, "/c315/7169,7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202"))%>%janitor::clean_names()
  
  ## 1/2012-12/2019
  m3 <- seq.Date(from=as.Date("2012-01-01"),to=as.Date("2019-12-01"), by="month")|>substr(start = 1,stop = 7)|>gsub(pattern="-",replacement="")|>paste(collapse=",")
  ipca3 <- get_sidra(api=paste0("/t/1419/n1/all/v/63/p/", m3, "/c315/7169,7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202"))%>%janitor::clean_names()

  ## 1/2020-
  m4 <- seq.Date(from=as.Date("2020-01-01"),to=as.Date("2024-06-01"), by="month")|>substr(start = 1,stop = 7)|>gsub(pattern="-",replacement="")|>paste(collapse=",")
  ipca4 <- get_sidra(api=paste0("/t/7060/n1/all/v/63/p/", m4, "/c315/7169,7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202"))%>%janitor::clean_names()

  ipca_all <- bind_rows(ipca1,ipca2,ipca3,ipca4)%>%
  mutate(date=lubridate::ym(mes_codigo))%>%
  group_by(geral_grupo_subgrupo_item_e_subitem)
  readr::write_rds(ipca_all,here::here("data/ipca_all.rds"))
} else {
  ipca_all <- readr::read_rds(here::here("data/ipca_all.rds"))
}

Calcula Índices relativos

## reescalona indice para que o primeiro mes seja = 1
ipca_r <- ipca_all%>%
  group_by(geral_grupo_subgrupo_item_e_subitem)%>%
  arrange(date)%>%
  mutate(indice=cumprod(1 + valor/100))%>%
  ## filtra um mes por ano
  filter(lubridate::month(date)==lubridate::month(max(date)))%>%
  mutate(indice=indice/indice[1])


ipca_i <- ipca_r%>%filter(geral_grupo_subgrupo_item_e_subitem=="Índice geral")
ipca <- ipca_r%>%
  anti_join(ipca_i)%>%
  left_join(ipca_i, by=join_by(nivel_territorial_codigo, nivel_territorial, unidade_de_medida_codigo,
                                 unidade_de_medida, brasil_codigo, brasil, variavel_codigo, variavel, mes_codigo, mes,
                                 date), suffix=c("", "_geral"))%>%
  ungroup%>%
  mutate(indice_rel=100*indice/indice_geral)%>%
  transmute(date,indice_rel, categoria=substr(start = 3, stop = 10000, geral_grupo_subgrupo_item_e_subitem))
## Joining with `by = join_by(nivel_territorial_codigo, nivel_territorial,
## unidade_de_medida_codigo, unidade_de_medida, valor, brasil_codigo, brasil,
## variavel_codigo, variavel, mes_codigo, mes,
## geral_grupo_subgrupo_item_e_subitem_codigo,
## geral_grupo_subgrupo_item_e_subitem, date, indice)`

Gráfico

p <- ggplot(data = ipca, aes(x=date,y=indice_rel, color=categoria)) +
  geom_line() +
  scale_x_date(limits=c(as.Date(NA), as.Date("2035-01-01")))+
  hrbrthemes::theme_ft_rc() +
  labs(x = "Data", y = glue::glue("Índice Relativo (Base: 100 em {format(min(ipca$date), '%m/%Y')}"), color = "Grupo de Produtos e Serviços") +
  ggtitle("Evolução da Inflação dos Grupos de Produtos e Serviços\nem relação ao Indice Geral (IPCA)")+
  labs(x="")

direct.label(p)

Análise

O gráfico acima ilustra a variação dos preços de diferentes grupos de produtos e serviços em relação ao índice geral de preços (IPCA) no Brasil, de 2000 a 2024. Por exemplo, se o índice for de 125, significa que a inflação da categoria foi 25% maior do que a medida pelo índice geral. Correspondentemente, um índice de 50 denota uma inflação na categoria 50% menor do que a do índice geral.

Podemos observar que: