Introdução à Penn World Table em R
1 Introdução
Este trabalho tem como objetivo introduzir a Penn World Table para alunos de graduação dos cursos de ciências econômicas. Esse material consiste em aplicações simples sobre tópicos em macroeconomia e crescimento econômico. Como exemplos: visualizações de variáveis importantes como o PIB per capita, capital físico por trabalhador, taxa de poupança e comparações entre países por meio de tabelas com estatísticas interessantes para a análise macroeconômica. Também trazemos uma seção sobre estimações da produtividade, tecnologia e eficiência relativas, entre outras coisas. Desta forma, este material também serve como complemento à cursos de macroeconomia e crescimento econômico. O livro-texto que fundamenta as aplicações é o Weil (2013).
1.1 A Penn World Table
A Penn World Table (PWT) é um conjunto de dados nacionais desenvolvidos e mantidos por acadêmicos da Universidade da Califórnia, de Davis e do Gröningen Growth Development Centre da Universidade de Gröningen. A finalidade da Tabela é fornecer dados para a mensuração do PIB real entre os países ao longo do tempo.
1.1.1 Acessando a PWT
Para baixar a PWT, acesse: https://www.rug.nl/ggdc/productivity/pwt/. No site temos a opção de baixar a versão 10.01 da PWT nos formatos Excel e Stata, ou acessá-la online.
Iremos utilizar a versão em excel que pode ser baixa diretamente clicando aqui.
1.1.2 Entendendo a PWT
Nesta seção, vamos entender os principais elementos da PWT. Para uma análise mais detalhada, sugere-se uma consulta a Feenstra et al. (2015).
A variável central da Tabela é o PIB real. Como você já deve ter estudado em cursos anteriores, o PIB real é medido como PIB nominal avaliado a preços constantes. Para o caso de comparação entre países, importa que os preços sejam constantes em cada país de análise.
A PWT traz o PIB real em duas diferentes óticas: o PIB real pela ótica do dispêndio e o PIB real pela ótica da produção. O primeiro é calculado como o PIB nominal deflacionado pelo nível de preço relativo à absorção doméstica. O segundo é calculado como o PIB nominal deflacionado por um nível de preços que reflete a qualidade dos bens transacionados entre os países.
Na tabela abaixo, estão resumidas as variáveis utilizadas neste material. A tabela foi baseada nas tabelas de Feenstra et al. (2015). O PIB real sob a ótica do dispêndio e do produto são muito úteis para a comparação do padrão de vida e capacidade produtiva entre países no tempo e no espaço. O estoque de capitais \(RN^{NA}\) e a formação bruta de capital físico como proporção do PIB serão muito úteis no modelo de Solow para mensurar produtividade e eficiência. A medida \(HC\) de capital humano pode ser utilizada como medida do estoque de capital humano. Por fim, as variáveis \(EMP\) e \(POP\) serão muito importantes para cálculo das variáveis em termos per capita e por trabalhador.
| Sigla | Variável | Unidade | Útil para comparar |
|---|---|---|---|
| \(RGDP^e\) | PIB real sob a ótica do produto usando preços para bens finais que são constantes entre os países e ao longo do tempo | Milhões de US$ (2017) | Padrão de vida entre países e anos |
| \(RGDP^o\) | PIB real sob a ótica do produto usando preços para bens finais exportados e importados que são constantes entre os países e ao longo do tempo | Milhões de US$ (2017) | Capacidade produtiva entre países e entre anos |
| \(RN^{NA}\) | Estoque de capital sob preços constantes, baseado em investimento e preços de estrutura e equipamento | Milhões de US$ (2017) | Crescimento do estoque de capital no tempo e entre os países |
| \(CSH\_i\) | Parcela da formação bruta de capital físico sob preços em paridade de poder de compra correntes | Porcentagem % | Pode ser usado para representar a taxa de poupança de um país |
| \(HC\) | Índice de capital humano baseado nos anos médios de escolaridade calculadas em Barro and Lee (2012) | Número puro | Medir estoque de capital humano |
| \(EMP\) | Nível de emprego | Milhões de pessoas | Medir força de trabalho |
| \(POP\) | Tamanho da população | Milhões de pessoas | Mensuração da população |
1.2 A linguagem de programação R
A análise dos dados e suas aplicações serão feitas na linguagem de programação R. R é uma linguagem versátil amplamente utilizada para análise estatística dentre outras coisas e possui uma grande comunidade de colaboradores mundo a fora. Para instalação do R e de sua IDE mais famosa RStudio, esta página pode ser consultada. Há numerosos materiais introdutórios ao R na internet, esta página é uma opção em português.
O material utilizará o pacote tidyverse para análise de dados. Tidyverse é na verdade uma reunião de importantes pacotes para ciência de dados. Pode ser entendido como um dialeto do R. Este material oferece noções básicas das principais ferramentais da ciência de dados como visualização, importação de dados (wrangle), transformação, programação e modelagem. Para se aprofundar em ciência de dados em R, recomendo fortemente este excelente material.
Como o objetivo é introduzir a Penn World Table, não é objetivo deste material fazer uma introdução abrangente à linguagem de programação R. Se você não possui algum conhecimento prévio na linguagem, recomendo fortemente que estude um material específico para esse fim. Contudo, todos os códigos utilizados neste trabalho serão explicados, de forma que seja perfeitamente compreensível para pessoas sem experiência com programação.
2 Estatísticas descritivas
A Penn World Table possui informações ricas sobre diferentes aspectos do desenvolvimento dos países. Neste capítulo, vamos aprender a manipular e visualizar algumas informações interessantes. Parte da motivação são gráficos do Weil (2013), o livro-texto referência deste material. O objetivo das estatísticas não é a reprodução exata dos gráficos e tabelas do livro-texto, até porque estamos utilizando dados mais recentes.
2.1 Rankings
Rankings são uma excelente forma de visualização de dados, pois nos permite visualizar quais observações são mais importantes relativas à determinadas características.
A tabela 1.1 do Weil (2013) traz um ranking dos países de acordo com três medidas distintas: os mais populosos, as maiores economias e os países de alto nível de renda per capita.
Vamos reproduzir essa tabela utilizando o ano mais recente da base (2019) como referência. O primeiro passo é identificar o país mais populoso. Para determinar o pais mais populoso precisamos de estimativas populacionais. Essa variável tem o nome de pop na PWT e está expressa em milhões de habitantes. Queremos identificar os 10 mais populosos em 2019, então vamos ao código:
library(tidyverse)
library(readxl)
theme_set(theme_bw())
pwt <- read_xlsx('Data/pwt1001.xlsx', sheet = 3)
pop_ranking <- pwt %>%
filter(year == 2019) %>%
select(country, pop) %>%
arrange(desc(pop))
pop_ranking$pop <- round(pop_ranking$pop, digits = 1)
pop_ranking## # A tibble: 183 × 2
## country pop
## <chr> <dbl>
## 1 China 1434.
## 2 India 1366.
## 3 United States 329.
## 4 Indonesia 271.
## 5 Pakistan 217.
## 6 Brazil 211
## 7 Nigeria 201
## 8 Bangladesh 163
## 9 Russian Federation 146.
## 10 Mexico 128.
## # ℹ 173 more rows
Como você vê acima há duas caixas, a de cima, estarão expressos os
códigos e na de baixo estarão os resultados do código. Esse padrão será
igual em todos os códigos adiante. Então vou me referir a partir de
agora à caixa de código ou à caixa de
resultado.
Caixa de código
Nas primeiras linhas, carregamos os pacotes utilizados. Pacotes no R
são um compêndio de funções com um determinado objetivo. O pacote
tidyverse reune várias ferramentas para
análise de dados, sendo considerado um dialeto dentro do R. O pacote
readxl será utilizado para ler arquivos no
formato excel. theme_set(theme_bw())
estabelece como tema padrão para os gráficos o tema branco.
Na sequência, os dados da PWT são lidos pela função
read_xlsx e atribuídos ao objeto
pwt. O primeiro campo é o caminho dos
dados e o segundo qual a aba da planilha que deve ser lida, no caso a
terceira. (Em R para criarmos um objeto, o atribuímos à um nome de
escolha utilizando o operador <- ou o
operador =).
Então seguimos para o primeiro objetivo: calcular os países mais
populosos. Para isso, criamos um objeto
pop_ranking com toda a pwt. E, nas linhas
seguintes, vamos fazendo alterações nesse objeto usando o operador
pipe %>% (ou
|>). As operações são
filtrar a pwt para o ano de 2019 utiilzando a função
filter;selecionar apenas as informações de países e de população utilizando a função
selecte;rearranjar os dados na ordem decrescente utilizando as funções
arrangee opçãodesc.
As funções filter, select e arrange são funções básicas da manipulação de dados do pacote dplyr que compõe o tidyverse.
Nas últimas linhas arredondamos a população para 1 dígito e “printamos” o resultado.
Caixa de resultado
Vemos que o país mais populoso é a China com uma população de 1433.8 milhões de habitantes, seguido por India e United States.
Note que essa é uma saída padrão do R. Ela está informando que os dados tem formato tibble e com 183 linhas por 2 colunas. As colunas são “country” e “pop”. Logo abaixo tem <chr> e <dbl>, indicando o formato das observações da tabela. Ela diz que “country” é um carater/texto (character) e “pop” é um númerico de ponto flutuante (double). No final da caixa, é informado que há 173 linhas a mais que estão omitidas por espaço.
A próxima medida do ranking é sobre o tamanho da economia, isto é, os países com os maiores PIB totais. Para medir PIB utilizaremos a medida de PIB pela ótica do produto rgdpo. Os passos para obter o ranking são análogos ao anterior. O único passo adicional foi dividir por 1 milhão e arredondar para dois dígitos:
rgdpo_ranking <- pwt %>%
filter(year == 2019) %>%
select(country, rgdpo) %>%
arrange(desc(rgdpo))
rgdpo_ranking$rgdpo <- round(rgdpo_ranking$rgdpo/1e+06, digits = 2)
rgdpo_ranking## # A tibble: 183 × 2
## country rgdpo
## <chr> <dbl>
## 1 United States 20.6
## 2 China 20.3
## 3 India 9.17
## 4 Japan 5.04
## 5 Germany 4.28
## 6 Russian Federation 4.16
## 7 Indonesia 3.14
## 8 Brazil 3.08
## 9 United Kingdom 2.99
## 10 France 2.95
## # ℹ 173 more rows
A última variável do ranking é o PIB per capita. Neste caso, precisamos dividir o PIB total pelo número de habitantes do país. Então teremos um passo adicional ao anterior, que é criar essa variável.
rgdpo_pc_ranking <- pwt %>%
filter(year == 2019) %>%
mutate(
rgdpo_pc = rgdpo/pop
) %>%
select(country, rgdpo_pc) %>%
arrange(desc(rgdpo_pc))
rgdpo_pc_ranking$rgdpo_pc <- round(rgdpo_pc_ranking$rgdpo_pc/1000, 2)
rgdpo_pc_ranking## # A tibble: 183 × 2
## country rgdpo_pc
## <chr> <dbl>
## 1 Qatar 114.
## 2 Ireland 103.
## 3 China, Macao SAR 93.5
## 4 Luxembourg 90.5
## 5 Singapore 82.3
## 6 Switzerland 75.3
## 7 Norway 73.7
## 8 Brunei Darussalam 73.2
## 9 United Arab Emirates 66.1
## 10 United States 62.6
## # ℹ 173 more rows
Caixa de código
A função mutate é importante função
utilizada para criar ou alterar variáveis dentro de um banco de dados. A
variável PIB per capita rgdpo_pc é criada
como a razão entre “rgdpo” e “pop”. Novamente foi feita uma normalização
nos valores, dividindo por 1000 e arredondando para duas casas
decimais.
Podemos deixar as informações em uma mesma tabela, semelhante à tabela do Weil.
ranking <- cbind(pop_ranking, rgdpo_ranking, rgdpo_pc_ranking)
names(ranking) <- c('Country', 'Population', 'Country', 'Real GDP', 'Country', 'Real per capita GDP')
knitr::kable(cbind(ranking[1:11,]))| Country | Population | Country | Real GDP | Country | Real per capita GDP |
|---|---|---|---|---|---|
| China | 1433.8 | United States | 20.60 | Qatar | 114.10 |
| India | 1366.4 | China | 20.26 | Ireland | 102.62 |
| United States | 329.1 | India | 9.17 | China, Macao SAR | 93.49 |
| Indonesia | 270.6 | Japan | 5.04 | Luxembourg | 90.48 |
| Pakistan | 216.6 | Germany | 4.28 | Singapore | 82.34 |
| Brazil | 211.0 | Russian Federation | 4.16 | Switzerland | 75.30 |
| Nigeria | 201.0 | Indonesia | 3.14 | Norway | 73.67 |
| Bangladesh | 163.0 | Brazil | 3.08 | Brunei Darussalam | 73.25 |
| Russian Federation | 145.9 | United Kingdom | 2.99 | United Arab Emirates | 66.11 |
| Mexico | 127.6 | France | 2.95 | United States | 62.59 |
| Japan | 126.9 | Italy | 2.47 | Kuwait | 62.05 |
2.2 Séries históricas
A PWT possui dados desde 1950 para boa parte dos países. Isto nos permite observar a evolução histórica de variáveis importantes como o PIB, a população e o emprego. Nesta seção vamos gerar gráficos de algumas dessas séries históricas utilizando a Tabela.
2.2.1 PIB per capita
Inicialmente, precisamos calcular o PIB per capita visto que esta não é uma variável pronta na Tabela. Mas já fizemos isso na seção anterior dividindo o PIB pela população. Para gerar a série histórica, podemos então filtrar os dados para o país desejado e gerar um gráfico de linha:
pwt %>%
filter(country == 'Brazil') %>%
ggplot(aes(y = rgdpo/pop, x = year))+
geom_line() +
labs(
title = 'PIB per capita do Brasil',
x = 'Ano',
y = 'PIBpc'
)
Caixa de código
Em filter, filtramos os dados para o Brasil. As linhas
seguintes são responsáveis por gerar o gráfico e terão uma estrutura
parecida em todos os gráficos que geraremos daqui em diante.
A função ggplot é a função geradora de
gráficos do pacote ggplot2. Ela indica o início do
gráfico e recebe como argumento o aes.
Neste são indicadas as variáveis que estarão nos elementos do gráfico
como os eixos, no caso. Em seguida é preciso adicionar uma camada
indicando o que fazer com esses elementos de aes. A função
geom_line cria um gráfico de linha com os
elementos. Por fim, em labs, estão sendo
adicionados ou alterados alguns elementos textuais (labels),
como o título e nome dos eixos. Note que cada camada adicionada ao
gráfico utiliza o operador +.
Caixa de resultado
Vemos na caixa de resultado o gráfico do PIB per capita do Brasil de 1950 à 2019 como desejado. Vemos que há uma clara tendência de crescimento com ciclos econômicos mais ou menos intensos.
Quando estudamos séries históricas e, em especial o PIB, é interessante pensarmos na escala do gráfico. No gráfico acima, dizemos que o gráfico está em nível ou em escala linear. Ele representa o nível da variável em cada período do tempo.
Uma outra escala é a ratio scale em que a variável é expressa em logarítmo natural. O gráfico representa o logarítmo do nível da variável em cada período do tempo. Essa representação tem a vantagem de que a taxa de crescimento entre dois períodos é facilmente aproximada pela diferença entre os valores de cada período. Além disso, a inclinação do gráfico é aproximadamente a taxa de crescimento naquele período.
Para alterarmos a escala para a ratio scale, podemos simplesmente “tirar o log” do eixo y acima:
pwt %>%
filter(country == 'Brazil') %>%
ggplot(aes(y = log(rgdpo/pop), x = year))+
geom_line() +
labs(
title = 'PIB per capita do Brasil em ratio scale',
x = 'Ano',
y = 'log(PIBpc)'
)
Caixa de resultado
Em comparação ao gráfico anterior, vemos que este é mais suave – os picos e vales são menos acentuados. Como ilustração do cálculo da taxa de crescimento, vamos pegar dois períodos visualmente fáceis de enxergar no gráfico. Considere o ano de 1970 com valor aproximado de 8.25 e o ano de 1990, com valor aproximado de 8.75. A taxa de crescimento entre esses dois anos é simplesmente 8.75-8.25 = 0.5, isto é, de 50%. Essa comparação pode ser feita para quaisquer dois pontos no gráfico.
Para encerrar com o PIB per capita, vamos utilizar os mesmos gráficos e adicionar um elemento comparativo. Considerando que o Brasil pertence ao BRICS, pode ser interessante observar essa mesma evolução para todos os países participantes. (Naturalmente, o mesmo poderia ser feito para qualquer bloco econômico ou conjunto de países de interesse).
brics <- c('Brazil', 'Russian Federation', 'India', 'China', 'South Africa')
pwt %>%
filter(country %in% brics) %>%
ggplot(aes(y = log(rgdpo/pop), x = year, color = country))+
geom_line() +
labs(
title = 'PIB per capita do Brasil',
x = 'Ano',
y = 'PIBpc',
color = 'País'
)## Warning: Removed 42 rows containing missing values (`geom_line()`).
Caixa de código
Note que para gerarmos o gráfico, modificamos duas coisas.
Primeiramente, modificamos filter para filtrar os dados
para os países dos BRICS, definidos na primeira linha. No R, utilizamos
o operador %in% para indicar pertencimento
de conjuntos.
A segunda modificação foi adicionar um outro elemento em
aes, o color. Este elemento
indica que as cores do gráfico serão definidas por country,
no caso, os países participantes dos BRICS.
Caixa de resultado
Note que é gerado um warning alertando que 42 linhas foram removidas. Trata-se dos dados da Rússia que começam a estar disponíveis apenas em 1990, com o fim da URSS.
Modificando o eixo y do gráfico, podemos gerar qualquer série histórica da PWT.
2.3 Dispersão e correlação
Uma importante estatística no estudo das relações econômicas é a correlação. A correlação é uma medida linear do quão relacionada duas variáveis estão entre si. Uma forma de visualizar a correlação é por meio de um gráfico de dispersão.
2.3.1 Capital por trabalhador e produto por trabalhador
No modelo de Solow, conforme estudado no capítulo 3 do Weil, é usual supor uma função de produção da seguinte forma \[Y = F(K,L)\] em que \(Y\) é a produção, \(K\) é o estoque de capital físico e \(L\) a força de trabalho.
Sob a hipótese de retornos constantes de escala, podemos escrever a função de produção em termos por trabalhador: \[\begin{eqnarray} \frac{Y}{L} &=& F\left(\frac{K}{L},\frac{L}{L}\right) \\ &=& F\left(\frac{K}{L}, 1\right) \\ &=& f\left(\frac{K}{L}\right) \end{eqnarray}\]
E, sob as hipóteses de produtividades marginais positivas em \(K\) e \(L\), temos que \(y = f(k)\) é crescente em \(k\). Em que as letras minúsculas representam as variáveis em termos por trabalhador. Em outras palavras, espera-se uma relação positiva entre o produto por trabalhador e o capital por trabalhador.
Vamos checar se esse é o caso, criando um gráfico de dispersão em que o produto por trabalhador \(y\) esteja no eixo horizontal e o estoque de capital por trabalhador \(k\) esteja no eixo vertical.
Para calcular as variáveis em termos por trabalhador iremos dividir as variáveis de capital e produto por emp, a força de trabalho. A variável que mede o produto é a já conhecida rgdpo e a variável que mede o estoque de capital é a rnna.
pwt %>%
filter(year == 2005) %>%
mutate(
y = rgdpo/emp,
k = rnna/emp
) %>%
ggplot(aes(y = k, x = y)) +
geom_point() +
geom_smooth(method = 'lm') +
labs(
title = 'Relação entre capital por trabalhador e produto por trabalhador',
y = 'k',
x = 'y'
)## `geom_smooth()` using formula = 'y ~ x'
Caixa de código
Os elementos novos no gráfico acima são as funções
geom_point e
geom_smooth. A primeira adiciona uma
camada ao gráfico com os pontos das variáveis definidas nos eixos. A
segunda adiciona uma camada com uma reta cuja inclinação é a correlação
entre as variáveis.
Caixa de resultado
Vemos que a relação é, como hipotetizada, positiva. Países com maior nível de capital por trabalhador são em geral os países com o maior nível de produto per capita.
2.3.2 Produto real e produto predito
Considerando o modelo de Solow sem crescimento populacional e sem crescimento tecnológico, o produto por trabalhador de estado estacionário (steady-state) no país \(i\) pode ser calculado como (Weil capítulo 3): \[y_i^{ss} = A^{1/(1-\alpha)}\left(\frac{\gamma_i}{\delta}\right)^{\alpha/(1-\alpha)}\] em que \(A\) é o nível da tecnologia, \(\alpha\) é o share do capital, \(\gamma\) é a proporção da renda que é poupada e \(\delta\) o nível de depreciação.
Supondo que \(A\), \(\alpha\) e \(\delta\) são iguais para todos os países, podemos escrever a mesma relação para um país \(j\): \[y_j^{ss} = A^{1/(1-\alpha)}\left(\frac{\gamma_j}{\delta}\right)^{\alpha/(1-\alpha)}\]
Note que a única variável que diferencia o produto em \(i\) e em \(j\) é a taxa de poupança \(\gamma\).
Divindo uma equação pela outra, podemos comparar o produto de steady-state entre os dois países da seguinte forma: \[\frac{y_i^{ss}}{y_j^{ss}} = \left(\frac{\gamma_i}{\gamma_j}\right)^{\alpha/(1-\alpha)}\]
Deste modo, podemos calcular a razão entre o produto por trabalhador de dois países previsto pelo modelo de Solow e comparar com a razão real entre o produto por trabalhador desses dois países segundos os dados da PWT, testando assim se o modelo tem um bom poder de explicação dos dados.
Para fins de comparação, vamos fixar os Estados Unidos como país \(j\). Desta forma todos os demais serão relativos aos EUA.
O código abaixo calcula as razões preditas e reais e gerar o gráfico de dispersão. As primeiras linhas faz operações que já sabemos: filtra os dados para o ano mais recente da base e cria a variável produto por trabalhador.
Caixa de código
As três linhas seguintes, cria os elementos fixos do cálculo que são
a taxa de poupança americana medida pela variável
csh_i da PWT e o PIB por trabalhador dos
EUA. Conforme o capítulo 3 do Weil, consideraremos o share do capital
como 1/3.
Por fim geramos o gráfico de dispersão da mesma forma que geramos
anteriormente. Apenas é feito um passo adicional que é de fato calcular
as razões predita e real em mutate.
# Preparando os dados
pwt2019 <- pwt %>%
filter(year == 2019) %>%
mutate(
y = rgdpo/emp
)
# Identificando os elementos fixos
csh_eua <- pwt2019$csh_i[which(pwt2019$country=='United States')]
y_eua <- pwt2019$y[which(pwt2019$country=='United States')]
alpha <- 1/3
# Gerando o gráfico
pwt2019 %>%
mutate(
y_ratio_predic = (csh_i/csh_eua)^(alpha/(1-alpha)),
y_ratio_real = y/y_eua
) %>%
ggplot(aes(y = y_ratio_real, x = y_ratio_predic)) +
geom_point() +
labs(
title = 'PIB por trabalhador real x Predito',
x = 'PIB por trabalhador relativo aos EUA predito',
y = 'PIB por trabalhador relativo aos EUA real'
)
Caixa de resultado
Como vemos pela figura, a previsão pelo modelo de Solow não é boa. Para ser uma boa previsão, era esperada uma relação próxima de uma reta de 45º graus partindo da origem. Pois nesta situação o previsto e o real estariam aproximadamente iguais. O que claramente não é o caso.
Foge do escopo deste trabalho explicar o motivo da previsão falhar. Contudo, algumas pista podem ser
as hipóteses de \(A\), \(\alpha\) e/ou \(\delta\) iguais para todos os países serem pouco realistas.
a hipótese de ausência de crescimento populacional e tecnológico ser ruim.
entre outras coisas
2.4 Distribuição
Muitas vezes queremos avaliar como uma variável se distribui. Isto é, qual o padrão que as observações dessa variável possui. Uma importante ferramenta para isso são os percentis. Os percentis dividem as observações em partes iguais, e nos permitem dizer qual o valor de corte de cada parte. Por exemplo, se utilizarmos os quartis, estamos dividindo em quatro percentis, em teremos os valores de corte de 25%, 50% e 75% da distribuição.
2.4.1 Taxa de poupança
No modelo de Solow, a taxa de poupança é muito importante para determinar o nível de investimento, e consequentemente, o nível do capital e do produto no estado estacionário. Vamos confirmar se os países com maiores rendas per capita são os de maiores taxa de poupanças.
# Calculamos os decis
decis <- quantile(pwt2019$y, na.rm=T, probs = seq(0, 1, by = 0.1))
poup_table <- pwt2019 %>%
mutate(
y_decil = case_when(
y <= decis[2] ~ 1,
y > decis[2] & y <= decis[3] ~ 2,
y > decis[3] & y <= decis[4] ~ 3,
y > decis[4] & y <= decis[5] ~ 4,
y > decis[5] & y <= decis[6] ~ 5,
y > decis[6] & y <= decis[7] ~ 6,
y > decis[7] & y <= decis[8] ~ 7,
y > decis[8] & y <= decis[9] ~ 8,
y > decis[9] & y <= decis[10] ~ 9,
y > decis[10] ~ 10
)
) %>%
group_by(y_decil)%>%
summarise(
gamma = mean(csh_i)
)
poup_table %>%
ggplot(aes(x = y_decil, y = gamma)) +
geom_bar(stat = 'identity') +
labs(
title = 'Taxa de poupança por decis de renda per capita',
y = 'taxa de poupança',
x = 'decis da renda per capita'
)## Warning: Removed 1 rows containing missing values (`position_stack()`).
Caixa de código
Na primeira linha do código acima, utilizamos a função
quantile pra criar um vetor de decis para
a renda por trabalhador y. Em seguida,
criamos uma nova variável y_decil para
indicar em qual decil da renda por trabalhador o país se enquadra, indo,
portanto, de 1 a 10. Na sequência, agrupamos os dados por essa variável
criada, utilizando a importante função
group_by. Então utilizamos summarise para
“resumir” os dados fazendo a média da taxa de poupança dos países
csh_i. Note que isso funciona porque os dados estão
agrupados, por isso a média calculada só inclui países dentro de cada
grupo.
O último bloco gera o gráfico de barras com a função
geom_bar. A única observação adicional é o
argumento stat='identity'. Isso é
necessário porque por padrão o ggplot faz gráficos de barras com
frequências e não pontos. Um detalhe menos importante por agora.
Caixa de resultado
Notamos que, na média, países com maior renda por trabalhador possuem maiores taxas de poupança. Contudo, isso não é uma regra, visto que há oscilações e que outros fatores além da taxa de poupança explicam renda por trabalhador.
3 Estimações
3.1 Contabilidade do desenvolvimento
Contabilidade do desenvolvimento consiste em explicar diferenças no nível de renda dos países decompondo-as em uma parte explicada por diferenças na produtividade e uma parte explicada por diferenças nos fatores de produção.
Supondo funções Cobb-Douglas, conforme Weil (2013) capítulo 7, podemos encontrar a produtividade relativa entre dois países pela fórmula: \[\frac{A_1}{A_2} = \frac{\left(\frac{y_1}{y_2}\right)}{\left(\frac{k^\alpha_1h^{1-\alpha}_1}{k^\alpha_2h^{1-\alpha}_2}\right)}\] em que \(A_i\) é a produtividade do pais \(i\), \(y_i\) é o produto por trabalhador do país \(i\), \(k_i\) é o capital físico por trabalhador do país \(i\), \(h_i\) é o capital humano por trabalhador do país \(i\) e \(\alpha\) é o share do capital físico.
Mantendo um país fixo no denominador, podemos calcular diferenças na produtividade dos demais relativos à ele. Considerando o papel de liderança econômica dos EUA no cenário internacional, vamos calcular a produtividade relativa à ele.
pwt2019 <- pwt %>%
filter(year == 2019) %>%
mutate(
y = rgdpo/emp,
k = rnna/emp
)
y_eua <- pwt2019$y[which(pwt2019$country=='United States')]
k_eua <- pwt2019$k[which(pwt2019$country=='United States')]
h_eua <- pwt2019$hc[which(pwt2019$country=='United States')]
alpha <- 1/3
prod_ranking <- pwt2019 %>%
mutate(
y_rel = y/y_eua,
k_rel = k/k_eua,
h_rel = hc/h_eua,
A_rel = y_rel/(k_rel^alpha*h_rel^(1-alpha))
) %>%
select(country, y_rel:A_rel) %>%
arrange(desc(A_rel))
names(prod_ranking) <- c('País', 'Produto por trabalhador', 'Capital por trabalhador', 'Capital humano por trabalhador', 'Produtividade')
knitr::kable(prod_ranking[1:11, ], caption = 'Contabilidade do desenvolvimento')| País | Produto por trabalhador | Capital por trabalhador | Capital humano por trabalhador | Produtividade |
|---|---|---|---|---|
| Ireland | 1.7036874 | 1.8249223 | 0.8496204 | 1.5541461 |
| China, Macao SAR | 1.1866752 | 1.2283895 | 0.7901169 | 1.2964594 |
| Kuwait | 0.8457483 | 0.8832801 | 0.6061024 | 1.2307721 |
| Saudi Arabia | 0.9931199 | 1.1062101 | 0.7238157 | 1.1911610 |
| Qatar | 1.1918042 | 1.7608234 | 0.8693410 | 1.0835265 |
| Brunei Darussalam | 1.0970435 | 1.9518876 | 0.7463199 | 1.0668963 |
| Bahrain | 0.7966213 | 1.2606068 | 0.5946396 | 1.0428523 |
| United States | 1.0000000 | 1.0000000 | 1.0000000 | 1.0000000 |
| Norway | 1.0672624 | 1.3131564 | 0.9769297 | 0.9898974 |
| Switzerland | 0.9922209 | 1.2868623 | 0.9875543 | 0.9198641 |
| Luxembourg | 0.9295149 | 1.1882127 | 0.9654077 | 0.8984305 |
Caixa de código
No código, alteramos o objeto pwt2019
calculando também o capital por trabalhador. Nas linhas seguintes,
fizemos um passo já feito antes que é fixar os valores para os EUA. A
variável nova é o capital humano utilizando o índice
hc da PWT. Novamente fixamos \(\alpha\) em 1/3. Os passos na sequência são
também já conhecidos. Criamos algumas variáveis, selecionamos as de
interesse e arranjamos os dados em ordem decrescente na produtividade
relativa calculada. As últimas linhas modificam os nomes das colunas na
tabela e geram a figura para as 11 primeiras linhas.
Caixa de resultado
Vemos na tabela gerada que alguns países se destacam com produtividade superiores aos EUA, entre eles Irlanda, China e países do oriente médio.
3.2 Contabilidade do crescimento
Contabilidade do Crescimento consiste em derivar a taxa de crescimento da produtividade usando as taxas de crescimento do produto, do capital físico e do capital humano.
Partindo de funções de produção Cobb-Douglas em termos por trabalhador temos:
\[y = Ak^\alpha h^{1-\alpha}\]
Aplicando o logarítmo em ambos os lados da equação, obtemos:
\[\log(y) = \log(A) + \alpha\log(k) + (1-\alpha)\log(h)\]
Diferenciando no tempo, obtemos a expressão que relaciona as taxas de crescimento das variáveis:
\[\hat y = \hat A + \alpha\hat k + (1-\alpha)\hat h\]
Assim, para encontrarmos a taxa de crescimento da produtividade utilizaremos:
\[\hat A = \hat y - \alpha\hat k - (1-\alpha)\hat h\]
Nosso primeiro exercício é encontrar a taxa de crescimento médio anual da produtividade do Brasil e outros países utilizando o período máximo disponível na PWT (1950 à 2019).
Para calcular a taxa de crescimento médio anual, podemos utilizar a seguinte expressão:
\[\hat x = \left(\frac{x_{t+j}}{x_t}\right)^{1/j}-1\]
# Escolha países de interesse
paises <- c('Brazil', 'United States', 'United Kingdom', 'India', 'South Korea')
# Defina o período
periodo <- c(1950, 2019)
pwt_A <- pwt %>%
filter(year %in% periodo, country %in% paises) %>%
group_by(country) %>%
mutate(
y = rgdpo/emp,
k = rnna/emp
) %>%
summarise(
y_hat = (last(y)/first(y))^(1/(periodo[2]-periodo[1]))-1,
k_hat = (last(k)/first(k))^(1/(periodo[2]-periodo[1]))-1,
h_hat = (last(hc)/first(hc))^(1/(periodo[2]-periodo[1]))-1,
A_hat = y_hat - alpha*k_hat - (1-alpha)*h_hat,
)
knitr::kable(pwt_A, digits = 3, caption = 'Contabilidade do crescimento')| country | y_hat | k_hat | h_hat | A_hat |
|---|---|---|---|---|
| Brazil | 0.027 | 0.023 | 0.013 | 0.011 |
| India | 0.031 | 0.043 | 0.010 | 0.010 |
| United Kingdom | 0.020 | 0.027 | 0.006 | 0.007 |
| United States | 0.017 | 0.014 | 0.005 | 0.009 |
Caixa de código
Todos os elementos aí presente já apareceram anteriormente. Apenas as
funções first e
last são novas. Basicamente elas retornam
a primeira e a última posição de um vetor respectivamente.
Caixa de resultado
Vemos que considerando todo o período de 1950 à 2019 a produtividade no Brasil cresceu 1.1% ao ano em média. Os outros países da tabela cresceram um pouco menos. Você pode alterar os países e o período para brincar com o código. Alguns períodos interessantes para o Brasil podem ser o período JK “cinquenta anos em cinco” (1956-1961), o “milagre econômico” (1969-1973) e a “década perdida” (1980-1990).
Um outro exercício interessante a ser feito é calcular o crescimento da produtividade ano a ano, observando assim a evolução desta ao invés de uma média:
pwt_prod <- pwt %>%
group_by(country) %>%
mutate(
y = rgdpo/emp,
k = rnna/emp,
y_hat = log(lead(y))-log(y),
k_hat = log(lead(k))-log(k),
h_hat = log(lead(hc))-log(hc),
A_hat = y_hat - alpha*k_hat - (1-alpha)*h_hat,
) %>%
ungroup()
pwt_prod %>%
filter(country == 'Brazil') %>%
ggplot(aes(y = 100*A_hat, x = year)) +
geom_line() +
labs(
title = 'Crescimento da produtividade',
x = 'Ano',
y = 'Taxa (em %)'
)## Warning: Removed 1 row containing missing values (`geom_line()`).
Caixa de código
Novamente todos os passos utilizados já aparecerem antes. As únicas
exceções são a função lead, que
basicamente retorna a próxima observação de um vetor; e a função
ungroup, utilizada para remover o efeito
de group_by. Note que neste caso estou utilizando a
diferença em log para aproximar a taxa de crescimento, como já
vimos anteriormente.
3.3 Eficiência relativa
Neste exercício, avaliaremos a eficiência do Brasil relativa à dos Estados Unidos, semelhante ao que Weil (2013) faz para a Índia no capítulo 10, seção 1. Naquela seção, Weil (2013) supõe que no período 1975-2009 todo crescimento da produtividade dos EUA foi explicado por crescimento tecnológico. A partir disso, é possível calcular o crescimento anual da tecnologia simplesmente calculando o crescimento anual da produtividade conforme o exercício 7 para os EUA no período 1950-2019.
Deste modo podemos utilizar, para calcular a tecnologia relativa entre Brasil e EUA, a fórmula (10.2) de Weil (2013):
\[\frac{T_{2019, Brasil}}{T_{2019, EUA}} = (1+g)^{-G} \hspace{5cm} (3.3.1)\]
em que \(G\) é o gap tecnológico entre os países e \(g\) é o crescimento da tecnologia (que é o crescimento da produtividade).
E finalmente, podemos usar, para calcular a eficiência relativa, a expressão (10.3): \[\frac{A_{Brasil}}{A_{EUA}} = \frac{T_{Brasil}}{T_{EUA}}\times\frac{E_{Brasil}}{E_{EUA}}\hspace{5cm} (3.3.2)\]
Visto que somos capazes de calcular a produtividade relativa (contabilidade do desenvolvimento) e a tecnologia relativa (contabilidade do crescimento e formula 10.2), podemos calcular a eficiência relativa, \(E_{Brasil}/E_{EUA}\).
Como não sabemos exatamente qual é o gap tecnológico, faremos diferentes cenários conforme Weil (2013) constrói em sua tabela 10.1.
Os passo são
- Calcular a taxa de crescimento média da produtividade dos EUA \(g\).
- O segundo passo é fazer a contabilidade do desenvolvimento e pegar a produtividade do Brasil relativa à dos EUA.
- Utilizar as expressões (3.3.1) e (3.3.2) para calcular a eficiência relativa.
Na tabela da seção anterior já calculamos a taxa de crescimento da produtivida dos EUA sendo igual à 0.009.
Quanto ao item 2., podemos aproveitar o objeto
prod_ranking já calculado na seção 3.1.
Assim, temos
Calcular a taxa de crescimento média da produtividade dos EUA \(g\).
O segundo passo é fazer a contabilidade do desenvolvimento e pegar a produtividade do Brasil relativa à dos EUA.
Utilizar as expressões (3.3.1) e (3.3.2) para calcular a eficiência relativa.
Resta calcular o tópico 3:
# Obtendo a informação de produtividade relativa do objeto prod_ranking para o Brasil
A_rel <- prod_ranking$Produtividade[prod_ranking$País=='Brazil']
# Obtendo a taxa de crescimento média dos EUA:
g <- pwt_A$A_hat[pwt_A$country=='United States']
# Calculando a eficiência relativa
G <- 10
tec_rel <- (1+g)^(-G) # usando a expressão (3.3.1)
ef_rel <- A_rel/tec_rel # usando a expressão (3.3.2)
# "Pritando" na tela
print(paste0('Para um gap de 10 anos: tecnologia relativa: ', tec_rel,' e eficiência relativa:', ef_rel))## [1] "Para um gap de 10 anos: tecnologia relativa: 0.912372989632643 e eficiência relativa:0.463588863943947"
Caixa de código
As duas primeiras expressões do código utilizam uma sintaxe ainda não
vista. O operador \$ é utilizado no R para
selecionar uma coluna de um data.frame (ou uma entrada de uma lista em
geral). Ao colocar uma expressão entre colchetes, estamos selecionando
apenas a(s) observação(ões) da coluna (ou de um vetor em geral) que
satisfazem àquela expressão. Então A_rel
recebe o valor da coluna Produtividade de
prod_rankingtal que a coluna
País seja igual à Brazil.
Algo similar ocorre com o objeto g.
Em seguida os objetos tec_rel e
ef_rel são construídos utilizando cálculos
simples com os objetos g e G já definidos.
Por fim, a função print e
paste0 são utilizadas para “printar” um
texto combinando com objetos definidos.
Agora podemos utilizar diferentes gaps tecnológicos, e construir uma tabela:
gaps <- c(10, 15, 20, 30, 40, 50, 75, 100, 125)
tec_rel <- map_dbl(gaps, function(x) (1+g)^(-x))
ef_rel <- map_dbl(tec_rel, function(x) A_rel/x)
ef_rel_tab <- data.frame(gaps, tec_rel, ef_rel)
names(ef_rel_tab) <- c('G', 'Tecnologia relativa', 'Eficiência relativa')
knitr::kable(ef_rel_tab, digits = 3)| G | Tecnologia relativa | Eficiência relativa |
|---|---|---|
| 10 | 0.912 | 0.464 |
| 15 | 0.871 | 0.485 |
| 20 | 0.832 | 0.508 |
| 30 | 0.759 | 0.557 |
| 40 | 0.693 | 0.610 |
| 50 | 0.632 | 0.669 |
| 75 | 0.503 | 0.841 |
| 100 | 0.400 | 1.058 |
| 125 | 0.318 | 1.331 |
Caixa de código
Em gaps criamos um vetor numérico do R,
utilizando a função combine c.
Como agora temos um vetor de gaps ao invés de um único
gap, precisamos de um vetor com a tecnologia relativa e
eficiência relativa, um para cada gap. Uma forma de fazer isso,
é utilizando as funções map_ do pacote
purrr componente do tidyverse. A variação
map_dbl mapeia um vetor de numérico
(doubles) aplicando a cada elemento uma função e retorna um
vetor numérico com o resultado da operação. Assim, por exemplo,
tec_rel recebe um vetor em que cada
entrada desse vetor é uma entrada do vetor gaps aplicada a
função (1+g)^(-x).
Por fim, criamos um data.frame, uma
tabela, cujas colunas serão o gaps, tec_rel e
ef_rel. A linha seguinte modifica os nomes das colunas. E a
última linha gera uma tabela bonita para o formato HTML utilizado aqui
arredondando os números para a terceira casa decimal.
Caixa de resultado
Assim como no caso da Índia estudado no livro, a menos que o
gap tecnológico seja muito grande, a maior parte da diferença
na produtividade entre Brasil e Estados Unidos é resultado de diferenças
na eficiência. Note porém que, para os dados que utilizamos, a
eficiência brasileira está um pouco melhor que a indiana, pois se o gap
for de 10 anos, o Brasil tem 46% da eficiência estadunidense. Essa marca
só é alcançada pela Índia se o gap for em torno de 50 anos!