Abstract
This is an undergraduate exercise to deflate the GDP and compute Geometric Growth Rate.This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
License: CC BY-SA 4.0
Sugestão de citação:
FIGUEIREDO, Adriano Marcos Rodrigues. Econometria: Deflacao e TGC com R-Code. Campo Grande-MS,Brasil: RStudio/Rpubs, 2021. Disponível em http://rpubs.com/amrofi/deflate_GDP.
Exemplo rápido de como fazer o PIB real e obter a taxa de crescimento TGC. Vou baixar a série do PIB do Centro-Oeste com o BETS. Os dados do IBGE-SIDRA são da Tabela 5938 - Produto interno bruto a preços correntes, impostos, líquidos de subsídios, sobre produtos a preços correntes e valor adicionado bruto a preços correntes total e por atividade econômica, e respectivas participações - Referência 2010.
São idênticos à série do BCB-SGST 23986 - Produto Interno Bruto corrente a preços de mercado (Ref. 2010) - Centro-Oeste. A referência 2010 quer dizer conforme o SCN atualizado em 2010. Está com valores correntes, nominais da época, ou a preços de mercado
library(BETS)
PIBN <- BETSget(23986, data.frame = TRUE)
# pedi em data.frame porque quero fazer regressao por lm e depois por ts
print(PIBN)
date value
1 2002-01-01 128162640836
2 2003-01-01 152557676744
3 2004-01-01 174941298901
4 2005-01-01 187580106760
5 2006-01-01 203404866571
6 2007-01-01 232926912103
7 2008-01-01 278138889231
8 2009-01-01 309400654698
9 2010-01-01 354815822844
10 2011-01-01 400152793985
11 2012-01-01 444538053531
12 2013-01-01 485623020493
13 2014-01-01 542632029966
14 2015-01-01 579746186416
15 2016-01-01 633072229064
16 2017-01-01 659912881933
17 2018-01-01 694910923205
Observe que ao fazer isso ocorre uma imprecisão. O indice da data consta sempre o primeiro dia do ano, enquanto esse valor de PIB se refere ao ano completo, portanto fim de ano. Alterarei para constar 2002-12-01, 2003-12-01 etc, de modo a ficar compatível com o IPCA que será usado para deflacionar mais a frente. Do mesmo modo, deve-se entender que embora apareça sempre dia primeiro, se refere ao mês inteiro! Uma opção é chamar do BETS em objeto ts e converter em tibble, mas o indice temporal ficará apenas os quatro digitos do ano, sem o mês.
# nao executado
PIBN.ts <- BETSget(23986, data.frame = FALSE)
PIBN.ts
library(tidyverse)
library(timetk)
data_tbl <- tk_tbl(PIBN.ts)
vmt <- PIBN[1:17, 2]
t <- seq(from = 2002, to = 2018) # anos 2002 a 2018
logv <- log(vmt)
eq = lm(logv ~ t)
summary(eq)
Call:
lm(formula = logv ~ t)
Residuals:
Min 1Q Median 3Q Max
-0.13381 -0.02823 0.01190 0.05267 0.07702
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.925e+02 6.286e+00 -30.62 6.14e-15 ***
t 1.090e-01 3.127e-03 34.84 9.08e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.06317 on 15 degrees of freedom
Multiple R-squared: 0.9878, Adjusted R-squared: 0.987
F-statistic: 1214 on 1 and 15 DF, p-value: 9.077e-16
# pego o segundo parâmetro - o primeiro é o intercepto
beta <- summary(eq)$coefficients[2]
# Calculo da TGC
(TGC = I((exp(beta) - 1) * 100))
[1] 11.51259
O p-value = 9.08e-16 do coeficiente de t foi significativo. A TGC do PIB nominal foi 11.51% a.a.
Primeiro vou carregar os pacotes necessários.
# pacotes e deflacao -----
library(sidrar)
library(readxl)
library(tidyverse)
library(ggplot2)
library(magrittr)
library(lubridate)
Neste exercício fiz com o IPCA. Alguns leitores podem criticar de que deveria ser o deflator implícito do PIB. Deixarei a discussão de qual o melhor índice para deflacionar itens das contas nacionais para vocês!
Vou baixar o IPCA do IBGE-SIDRA pelo pacote sidrar
. O código da api deve ser obtido no site do IBGE. A variável 2266, IPCA - Número-índice (base: dezembro de 1993 = 100), Série encadeada, ou seja, dezembro de 1993 vale 100 e as demais estão relativizadas para ela. Se fizer a divisão entre o valor nominal pela série encadeada (divisão1), você estará deflacionando para a base (neste caso, colocando em valores deflacionados de dezembro de 1993). Para obter em valores do período desejado, você precisa multiplicar pelo valor correspondente ao mês para onde quer. Exemplo: para alterar para valores de dezembro de 2018, vou multiplicar o resultado da divisão1 pelo valor da linha de dez/2018 do objeto ipca do chunk abaixo. (ipca[ipca[, "Mês (Código)"] == "201812","Valor"]
que retornará o valor 5100.61)
ipca = get_sidra(api = "/t/1737/n1/all/v/2266/p/all/d/v2266%2013")
# criar coluna date no formato para series temporais
ipca %<>%
mutate(date = parse_date_time(`Mês (Código)`, "ym"))
ipcadez2018 <- ipca[ipca[, "Mês (Código)"] == "201812", "Valor"]
ipcadez2018
FALSE [1] 5100.61
Baixei o IPCA e vou juntar com o dataset de PIB nominal selecionando apenas as colunas de interesse.
Antes de juntar, vou arrumar a série de data para constar sempre dezembro do ano.
## by month
mesano <- seq(as.Date("2002-12-1"), as.Date("2018-12-1"), by = "years")
mesano
[1] "2002-12-01" "2003-12-01" "2004-12-01" "2005-12-01" "2006-12-01"
[6] "2007-12-01" "2008-12-01" "2009-12-01" "2010-12-01" "2011-12-01"
[11] "2012-12-01" "2013-12-01" "2014-12-01" "2015-12-01" "2016-12-01"
[16] "2017-12-01" "2018-12-01"
Neste caso, no chunk abaixo, juntarei conforme a coluna date, ou seja, o programa procura nos dois datasets (ipca e PIBN) e coloca lado a lado respeitando a data.
Preciso certificar de que a coluna date em PIBN é a coluna mesano criada no último chunk.
PIBN$date <- mesano
PIBN
Ao mesmo tempo usei o na.omit()
para omitir as linhas com valores ausentes. Assim, ficarei apenas com as linhas completas para ipca e PIBN. Como o PIBN é uma observação por ano, terei as mesmas 17 observações de ipca.
O comando mutate faz a deflação pela fórmula, obtendo o PIB Real (PIBR) no ano t em valores de dez/2018.
\[ PIBR_t=\frac{PIBN_t}{IPCA_t} *IPCA_{dez2018} \]
#
ajuste <- left_join(ipca, PIBN, by = "date") %>%
select(date, Valor, value) %>%
na.omit()
# trouxe para 2018 - linha 17
# ajuste$PIBR<-I((ajuste$value/ajuste$Valor)*ipcadez2018)
ajuste <- ajuste %>%
mutate(PIBR = (value/Valor) * ipcadez2018)
# alterarei os nomes das colunas para ficar mais amigável
colnames(ajuste) <- c("date", "IPCA", "PIBN", "PIBR")
# ajuste
ajuste$date <- t
table.tbl <- tibble::as_tibble(ajuste)
table.tbl
library(gt)
library(glue)
library(gtsummary)
gttable <- gt::gt(table.tbl)
tabela <- gttable %>%
tab_header(title = "Valores de PIB do Centro-Oeste do Brasil, nominais (PIBN) e reais (PIBR)",
subtitle = "(em R$ deflacionados pelo IPCA para Dez/2018)") %>%
tab_source_note(source_note = "Fonte: Elaborado com dados brutos do SIDRA-IBGE.")
# mostrar tabela
tabela
Valores de PIB do Centro-Oeste do Brasil, nominais (PIBN) e reais (PIBR) | |||
---|---|---|---|
(em R$ deflacionados pelo IPCA para Dez/2018) | |||
date | IPCA | PIBN | PIBR |
2002 | 2039.78 | 128162640836 | 320479486747 |
2003 | 2229.49 | 152557676744 | 349020274402 |
2004 | 2398.92 | 174941298901 | 371962107360 |
2005 | 2535.40 | 187580106760 | 377365689178 |
2006 | 2615.05 | 203404866571 | 396737690095 |
2007 | 2731.62 | 232926912103 | 434932141785 |
2008 | 2892.86 | 278138889231 | 490406725455 |
2009 | 3017.59 | 309400654698 | 522977632268 |
2010 | 3195.89 | 354815822844 | 566282673732 |
2011 | 3403.73 | 400152793985 | 599643139300 |
2012 | 3602.46 | 444538053531 | 629407471901 |
2013 | 3815.39 | 485623020493 | 649205883162 |
2014 | 4059.86 | 542632029966 | 681736404301 |
2015 | 4493.17 | 579746186416 | 658123150447 |
2016 | 4775.70 | 633072229064 | 676142668570 |
2017 | 4916.46 | 659912881933 | 684630454579 |
2018 | 5100.61 | 694910923205 | 694910923205 |
Fonte: Elaborado com dados brutos do SIDRA-IBGE. |
library(ggplot2)
library(tidyverse)
ajuste %>%
select(date, PIBN, PIBR) %>%
pivot_longer(-date, names_to = "Variáveis", values_to = "Valor") %>%
ggplot(aes(x = date, y = Valor, color = Variáveis)) + geom_line() + labs(title = "PIB do Centro-Oeste do Brasil, nominais e reais",
x = "Data", color = "") + theme_light()
vmt <- table.tbl$PIBR
t <- seq(from = 2002, to = 2018) # anos 2002 a 2018
logv <- log(vmt)
eq = lm(logv ~ t)
summary(eq)
Call:
lm(formula = logv ~ t)
Residuals:
Min 1Q Median 3Q Max
-0.12338 -0.05599 -0.01831 0.06608 0.09423
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -77.850057 7.163799 -10.87 1.66e-08 ***
t 0.052151 0.003564 14.63 2.75e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.07199 on 15 degrees of freedom
Multiple R-squared: 0.9345, Adjusted R-squared: 0.9302
F-statistic: 214.1 on 1 and 15 DF, p-value: 2.754e-10
# pego o segundo parâmetro - o primeiro é o intercepto
beta <- summary(eq)$coefficients[2]
# Calculo da TGC
(TGC = I((exp(beta) - 1) * 100))
[1] 5.353469
Portanto, o coeficiente de t foi significativo (p-value=2.75E-10) e a TGC calculada foi de 5.35% a.a. entre 2002 e 2018.