O fim do GECE

Vitor Wilher me pegou de surpresa com o anúncio do fim do GECE (mas nem tudo está perdido). Antes que eu pudesse lamentar, ele deu a boa nova (veja o parênteses anterior) e fiquei menos triste. Afinal, acho que um dos grandes méritos de grupos como o Nepom e o GECE é o de aprofundar conceitos estudados na graduação, filtrando por crenças mal fundamentadas ou preconceitos.

Desde que conheci o Vitor, vi também que ele começou um esforço sensacional de começar a trabalhar com o R e, quem começou isto do nada, como eu, sabe como só a dedicação e o empenho podem levar a algum lugar.

Acho que, agora, a torcida é para que mais grupos no Brasil sigam por esta trajetória.

Anúncios

Por que eu uso o “R”?

Muitos alunos ainda não conheceram o “R” (ou sua versão mais charmosa, o “RStudio”). Assim, de quando em vez, aparece-me um ou outro perdido me fazendo aquelas perguntas de quem não tem internet (ou pacote de acesso em uma 3G vagabunda mesmo, como a que eu tenho). Coisas do tipo: “o que é o R”? Ou: “por que você usa o R”?

Para a primeira pergunta, eu dou uma mãozinha (ou duas). Para a segunda, leia isto. Pronto, agora você nunca mais será o mesmo. Ah sim, uma notícia antiga sobre o R no Google está aqui.

Qual é a propensão marginal a consumir no Brasil? (Momento R do Dia)

Pergunta difícil. Vamos mudar para: “qual é a estimação da propensão marginal a consumir no Brasil que se obtém com dados do IBGE, supondo que a função consumo seja a keynesiana acrescida da hipótese de que impactos da renda sobre o consumo são defasados no tempo”?

Ficou um pouco comprido, mas mais honesto e menos pretencioso, não? Além de nos possibilitar estimar a propensão marginal de curto prazo e dela extrair a de longo prazo. Ahhhh!!! Agora sim, né?

Vamos usar, então dados mensurados no tempo (séries de tempo ou, no original, time series). Tome-se o período de 1950-2012. Vamos, na verdade, replicar o exemplo 17.7 da última edição do livro de Gujarati & Porter para dados brasileiros. Basicamente é isto.

Coleta de Dados

Primeiramente, usei o IPEADATA para buscar dados correntes (ou seja, nominais) do PIB e do consumo final das famílias. Em seguida, obtive o deflator implícito do PIB e mudei sua base para 2012. Obtive os valores do PIB e do consumo a preços de 2012 e, claro, obtive a população residente do país e calculei os valores per capita.

Obviamente você poderá me dizer que eu deveria usar a renda e não o PIB. Outra crítica poderia ser para a medida de população. Enfim, é apenas um exercício e se você quiser me enviar os links para os dados, eu agradeço. De qualquer forma, após importar os dados para o R, assumi que existem infinitos efeitos de defasagem da renda sobre o consumo, o que significa que decidi estima uma forma funcional específica que está explicada de maneira muito didática na seção 17.4 do Gujarati.

Só para matar a curiosidade, veja os gráficos das duas séries.

pibbr consbr

Bonito, né?

Veja bem, trata-se da função keynesiana mesmo, mas com defasagens. Digo isto porque meus alunos também aprendem outra função consumo que é a derivada da hipótese da renda permanente, cuja especificação é muito parecida, mas não idêntica à do exercício que estamos descrevendo aqui. Bem, o leitor que já passou pelas páginas do livro sabe que, neste caso, a função consumo que se obtém com alguma álgebra é:

Ct = a + bYt + cCt-1 + et

Assim, estimei esta função e obtive:

Coefficients:
Estimate       Std. Error             t value                  Pr(>|t|)
(Intercept)      0.0005092      0.0001490             3.418                   0.00115 **
pib[, 1]              0.2188254        0.0501393              4.364                   5.21e-05 ***
cons[, 2]           0.6154625       0.0877814               7.011                  2.59e-09 ***

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0003554 on 59 degrees of freedom
Multiple R-squared: 0.9871,            Adjusted R-squared: 0.9867
F-statistic: 2259 on 2 and 59           DF, p-value: < 2.2e-16

Em outras palavras, a equação estimada é:

Ct = 0.0005092 + 0.2188254Yt + 0.6154625Ct-1 + resíduos

Simples, não? Agora vamos falar do estado estacionário. No longo prazo, como sabemos, as variáveis estarão em seu estado estacionário e, obviamente, a média dos erros é zero. Usando a nossa estimação, isto significa que:

C = 0.0005092 + 0.2188254Y+ 0.6154625C

Obviamente:

C = [0.0005092 + 0.2188254Y] /[1 – 0.6154625 ]

C = 0.0013 + 0.5691Y

O que significa isto?

Significa que a propensão marginal a curto prazo (PMgCP) é, aproximadamente, 0.2188 e a de longo prazo é, aproximadamente, 0.5691. Ok, você pode me dizer que esperava uma PMgLP mais alta, próxima  da unidade. Mas vamos ver mais algumas coisas neste exemplo antes de discutir este ponto.

Repare na defasagem mediana: – log(2)/log(0.6154625) = 1.428. Ela nos diz que 50% da mudança de uma unidade da renda leva cerca de 1.4 anos para fazer efeito no consumo. Claro, podemos calcular também a defasagem média, dada por: 0.6154625/(1-0.6154625) = 1.6005, ou seja, a defasagem média do efeito é de 1.6 anos.

Limitações?

Pois é. A PMgLP ficou um pouco acima da metade do que esperaríamos. Afinal, a teoria nos diz que a PMgLP deveria ser unitária. Ceteris paribus, podemos discutir um pouco isto.

No campo teórico, obviamente, você pode me dizer que este modelo é ruim porque não leva em conta as expectativas dos consumidores. Poderíamos rever isto simplesmente estimando a uma função consumo que incorporasse este aspecto importante. Não é difícil e a literatura nos dá duas famosas alternativas: o modelo de Friedman da renda permanente e o modelo de Hall (também chamado, muitas vezes, de modelo de renda permanente, mas com a ressalva que a hipótese sobre a formação de expectativas dos agentes é distinta da adotada por Friedman).

Empiricamente há ainda a chamada falácia ecológica que diz respeito ao fato de usarmos dados agregados – ainda que per capita – para falar de indivíduos. Em outras palavras, a base de dados deveria ser oriunda de algum estudo com microdados. Ok, esta é uma crítica importante, mas implicaria em partirmos para outro exemplo.

Ainda empiricamente, e de forma relacionada ao debate teórico, há a questão das propriedades que dados no tempo possuem (sazonalidade, tendência e se ambas são deterministas ou estocásticas). Esta é outra crítica importante e que não será tratada aqui porque, afinal, minha idéia foi só ajudar o leitor a aproveitar seu tempo de forma divertida.

Claro, não falamos de detalhes econométricos deste exercício, mas você já deve estar cansado de tanta emoção, não?

Dica do dia!

Agora vamos ao almoço quase gratuito de hoje: a rotina de R utilizada. Você, obviamente, precisa ter sua planilha salva em formato .csv antes de qualquer coisa. Eis uma imagem da minha.

Fullscreen capture 8142014 104155 AM

Para o código em R:

# importar os dados
dados<-read.table("C:/Users/cdshi_000/Documents/Meus Documentos/Meus Documentos/cursos/Econometria ii/funcao_consumo_anual.csv",header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)

# informar ao R que são séries de tempo, começando em 1947, frequência anual

series <- ts(dados, start=c(1947), freq=1)

# checar cabeçalho para ver se não houve algum erro. 

head(series)

# vamos trabalhar com uma janela da amostra.

blog<-window(series, start=c(1950), end =c(2012))

# ler colunas 8 e 7 

consumo<-blog[,8]
pib<-blog[,7]

# grafico para, novamente, ver se não houve problema na leitura dos dados

plot(consumo, main="Consumo per capita em R$ de 2012")
plot(pib, main="PIB per capita em R$ de 2012")

# construindo a defasagem do consumo e do PIB (posso querer usá-lo depois (PIB)).
consumolag=lag(consumo,-1)
piblag= lag(pib, -1)

# criando a matriz com consumo e a defasagem do mesmo. Idem para pib

cons=ts.intersect(consumo, consumolag)
pib =ts.intersect(pib, piblag)

# resumo da regressao do exemplo 17.7 de Gujarati & Porter, com dados brasileiros

summary(lm(cons[,1]~pib[,1] + cons[,2]))

Repare que meu código é didaticamente explicado (o que não significa que você não tenha que fazer algum esforço, né?). Quantos resultados interessantes, não? Eu os levaria ao professor de Econometria I (no caso de nossa faculdade, o Marcio Salvato) ou a outros caras muito bons de Econometria (como o Ari, Reginaldo, Jonathan, Guilherme, para falar só de algumas referências ótimas que temos na faculdade).

Legal, não?

Correlação: o que você (realmente) quer ver? – Momento R do Dia

Digamos que você tem umas cinco mil observações e fez um trabalho para seu professor (o prof. Jonathan adora sufocar alunos com bases de dados deste tipo). Aí você pega duas variáveis e faz a correlação entre elas. Digamos que você ainda é inocente e jovem e só sabe usar uma planilha como a da Microsoft. Então, você obtém um gráfico de dispersão como o que se segue.

Fullscreen capture 6302014 40607 PM

Ok, deu para ver que existe uma relação negativa entre as variáveis. Mas será que não estamos sendo enganados por nosso amadorismo em Estatística? Digamos que existam cem pares que correspondam aos valores (0.3, 4.2). O gráfico acima não será capaz de nos mostrar esta forte incidência do dito par. Agora, que tal este outro gráfico, obtido por meio do programa gratuito R (especificamente, por meio de um de seus pacotes, o hexbin).

Fullscreen capture 6302014 40853 PM

A história ficou um pouco diferente, não? Repare que, na legenda vertical à direita, temos a contagem correspondente às cores dos pequenos hexágonos no gráfico. Em outras palavras, há pares ordenados que se repetem 37 vezes! Claro, conforme o tamanho do hexágono, podemos agrupar um ou pares ordenados (isto pode ser alterado nas configurações do gráfico, claro).

Repare que agora podemos visualizar duas nuvens de pontos mais frequentes ao longo da linha de regressão linear. Uma mais em cima (na direção noroeste) e outro mais embaixo (na direção sudeste). Por que isto acontece? Não sei. Mas uma coisa é certa: você não conseguiria descobrir este padrão usando o gráfico simples lá da planilha.

É verdade que uma correlação não é muita coisa, mas mesmo ela nos ensina algo. Tudo depende de se você está bem equipado para enxergar os dados.

20140628_093931-1

Murdoch recebe uma mãozinha do Senhor Fantástico e passa a usar o R.

A nova era da Econometria: grandes bases de dados

Hal Varian, professor emérito da U.C. Berkeley e atual economista-chefe da Google, tem um novo artigo (acesso liberado…mas não sei até quando…aqui) sobre este fascinante tema. O artigo recebeu um comentário crítico de outro craque de Econometria, o Rob Hyndman. Obviamente, eu acho que vale a pena ler ambos.

Também é legal notar que Varian usa o R em boa parte (senão em todo ele) do artigo. Ou seja, Varian e Hyndman são referências de, digamos, 2/3 do que eu penso/falo/ensino/aprendo no dia-a-dia e, portanto, é um prazer divulgar estes textos aqui.

Off-topic: Mudando rapidamente de assunto, veja que exercício interessante este do Vitor Wilher.

Estrutura a termo da taxa de juros – em R

O pessoal do Revolution Analytics tem um post didático sobre como construir uma curva destas usando o R. Outro dia o Guilherme falou disso aqui e como sempre há um leitor ou outro interessado no tema, eis minha sugestão: construa a sua usando como inspiração o texto acima, publique em algum site como estes de armazenamento de imagem, por exemplo, e envie-nos o link!

Diálogos com o GECE – mercado de trabalho: quebra estrutural?

Prefácio Importante

Caso você não tenha estudado séries de tempo em seu curso (de graduação), este texto vai lhe parecer bastante esotérico e minha pretensão, no caso, não é ser didático. Para ser didático, neste caso, melhor seria escrever um livro ou um artigo. O objetivo aqui é dialogar com o Vitor Wilher, do GECE, sobre um trabalho mais técnico que ele fez.

Agora, se você já fez um curso de graduação em séries de tempo, o texto abaixo deveria lhe parecer simples. Para os que já passaram por isto no mestrado ou no doutorado, bem, o texto abaixo será infernalmente incompleto e simples, para não dizer cheio de problemas.

Como meu objetivo não é agradar gregos e troianos, siga por sua conta e risco.

Tá preocupado com suas chances de emprego?

Recentemente, o Vitor Wilher publicou um texto em seu blog sobre uma suposta quebra estrutural no mercado de trabalho brasileiro. Bem, eu não entendi bem o que ele havia feito, mas, como sempre, pedi os dados para dar uma olhada superficial. Aproveitando um engarrafamento, ele me enviou os dados pelo smartphone. Eis o cabeçalho da planilha.

vitor1

A partir desta planilha, resolvi fazer um breve exercício para ver o que encontraria. Vamos apenas reler alguns trechos do trabalho do Vitor:

Só passei por aqui hoje para deixar um exercício interessante que tenho feito nas últimas semanas. Haveria uma quebra estrutural no jeito de entender o mercado de trabalho brasileiro? Em outras palavras, se antes de 2009 era verdade que menor crescimento (menor geração de vagas) estava correlacionado com o aumento do desemprego, hoje não necessariamente.

As séries de dados relevantes, então, são a Caged e o Desemprego_SA, que são, segundo Vitor:

… o saldo de admitidos e demitidos do Cadastro Geral de Empregados e Desempregados (CAGED/Ministério do Trabalho) e o desemprego dessazonalizado. 

Ok, então se a variável Caged for positiva, o saldo é de mais admitidos do que demitidos. Mas Vitor tem uma preocupação mais específica. Para entendê-la, você tem que ler o comentário dele, no próprio post.

A ideia global do exercício é ver a seguinte cadeia de causalidade:

PIB => GERAÇÃO LÍQ VAGAS => DESEMPREGO_SA => MASSA_SALARIAL => INFLAÇÃO_SERVIÇOS

Especificamente no ramo GERAÇÃO LÍQ VAGAS => DESEMPREGO_SA a ideia básica era ver se existe alguma relação entre CAGED e PME. A série do CAGED que lhe enviei é a média móvel de 12 meses do saldo entre admitidos e demitidos, fornecido pelo ministério do trabalho, logo envolve apenas trabalho formal. A média móvel se faz necessária porque o saldo original tem oscilações bruscas, principalmente nos meses de dezembro, por questões óbvias.

(…)

Mas ignorando isso, em um primeiro momento, algo que me chamou atenção foi essa diminuição da correlação entre as duas séries, em nível. Como tenho estudado a PNAD, PNAD Contínua e PME de forma mais apurada esse ano, sei que a PEA tem se reduzido bastante. Sendo o desemprego hoje essencialmente explicado por redução da procura por emprego (e não por crescimento), parece ser essa a raiz da explicação para a redução da correlação entre as séries de geração líquida de vagas (CAGED) e o desemprego.

Em palavras outras, mesmo com a redução da média móvel do CAGED, de 190 mil no final de 2010, para 60 mil esse ano, o desemprego não subiu. Pelo contrário, diminuiu. Ao que parece, a redução do crescimento da PEA gerou uma mudança na dinâmica do mercado de trabalho. (…)

Bom, percebe-se que o problema envolve um pouco mais de variáveis do que apenas estas duas. Minha proposta, aqui, é fazer uma análise mais simples destas duas séries e subsidiar o trabalho do Vitor com mais um pouco de descrição destes dados. O que vem a seguir, portanto, é apenas um exercício estatístico, sem maiores preocupações teóricas (este negócio de CAGED, PNAD, PME não é comigo…).

Senta que lá vem análise de dados!

Primeiramente, importei os dados, chequei se estava tudo ok e construí as séries de tempo. Construí uma matriz com os dois vetores (renomeados para caged desemp_sa), obtendo a interseção das duas séries (isto pode ser útil quando elas têm comprimento diferente, mas não foi o caso aqui). Obviamente, gerei um gráfico para visualizar ambas as séries antes de fazer qualquer coisa. Abaixo estão o trecho inicial do meu script em R e o primeiro gráfico.

# dados_caged.xls

base <- read.table(file = "clipboard", sep = "\t", header=TRUE)
head(base)
caged<-ts(base$Caged, start=c(2003,1))
desemp_sa<-ts(base$Desemprego_SA, start=c(2003,1))
data=ts.intersect(caged,desemp_sa)
plot(data)

vitor1

Pois é. Enquanto o desemprego (dessazonalizado) parece apresentar uma (quase linear) tendência de queda, o tal caged tem um comportamento mais irregular. A primeira preocupação seria verificar se estas séries possuem raiz unitária (e quantas). Para isto, usei o pacote forecast do R e usei um comando, ndiffs, aplicando o default do teste ADF. Para 5%, encontrei que ambas as séries teriam apenas uma raiz unitária o que, para os menos iniciados, é um sinal de que deveríamos trabalhar com a primeira diferença das séries em análises como a de um teste de causalidade Granger. Seguem os comandos deste trecho.

library(forecast)

ndiffs(caged, alpha=0.05, test=c("adf"))
ndiffs(desemp_sa, alpha=0.05, test=c("adf"))
# a 5%, ambos têm uma raiz unitária.

Bom, o Vitor encontrou que o caged seria I(0) e o desemprego_sa, I(1). Em outras palavras, apenas a última teria uma raiz unitária. De qualquer forma, vou analisar as correlações das duas séries no caso em que são ambas I(1) e, como ele, uma sendo I(0) e outra sendo I(1).

library(astsa)
lag2.plot(diff(caged),diff(desemp_sa),12,corr=TRUE)
lag2.plot(diff(desemp_sa),diff(caged),12,corr=TRUE)</pre>
<pre>lag2.plot(caged,diff(desemp_sa),12,corr=TRUE)
lag2.plot(diff(desemp_sa),caged,12,corr=TRUE)</pre>
<pre>

Os gráficos desta parte do exercício estão reproduzidos a seguir.

vitor2

vitor3

Neste primeiro conjunto de gráficos acima, vemos que as variações no caged são correlacionadas com as variações no desemprego, mas de forma diferente quando observamos as defasagens no tempo. Por exemplo, no primeiro conjunto de gráficos, vemos que o desemprego de um mês (t) está mais fortemente relacionado com o caged de dois meses antes (t-2), de forma negativa (o valor da correlação é -0.22).

Já na parte inferior deste conjunto, vemos uma variação do desemprego em t-13 correlacionada em 0.28 com a variação atual do caged.

Em outras palavras, temos dois pontos interessantes aqui: quando observamos duas séries de tempo, podemos observar correlações não apenas instantâneas (no mesmo período de tempo), mas também entre diferentes períodos de tempo e, obviamente, elas não precisam ter o mesmo valor. O segundo ponto é que não existe necessariamente simetria superficial entre as correlações: o que você encontra para X(t) e Y(t-1) não será necessariamente igual ao que você encontra para Y(t-1) e X(t).

Do ponto de vista do Vitor, as observações interessantes estariam nos dois conjuntos de gráficos que se seguem.

vitor4

vitor5

Pois é. Mas Vitor fez também um exercício de causalidade por meio de um teste de Causalidade de Granger. Eu vou seguir este exercício, mas considerando ambas as variáveis estacionárias. Em outras palavras, farei o exercício entre as variáveis em diferença.

A primeira coisa é verificar o número de defasagens da matriz. Por uma destas mágicas do destino, todos os critérios de informação nos deram três defasagens e, portanto, nem prossegui para algum tipo de comparação (com aqueles testes LR) porque não havia, simplesmente, nada para se comparar com o único VAR apontado pelos critérios (mas é claro que você poderia se questionar sobre isto…). Eis os comandos.

library(vars)

VARselect(data,lag.max=12, type=c("const"),season=NULL)

# assim, vamos de tres:

grangertest(diff(caged)~diff(desemp_sa),order=3, data=data)
grangertest(diff(desemp_sa)~diff(caged),order=3, data=data)

Finalmente, os resultados dos testes.

vitor6

A hipótese nula é a de que a inclusão de defasagens da outra variável não ajuda na previsão da variável dependente. Então, na parte superior da janela de resultados, vemos que a inclusão da variação do desemprego não ajuda na previsão da variação do caged (o p-valor é de 0.6194). Já na parte inferior da tabela, vemos que a variação do caged ajuda na explicação da variação do desemprego. Em outras palavras, este é o mesmo resultado que Vitor encontrou, embora ele tenha feito o teste para variáveis com ordens de integração diferentes, algo que não vejo como uma boa idéia. Pelo menos não sob o protocolo que estamos seguindo.

Agora, acabou? 

Na verdade, não. Embora eu tenha feito o teste de causalidade de Granger para o leitor ter uma idéia da comparabilidade dos resultados com os do Vitor, o fato é que o teste não precisaria ser feito. Por que? Porque ele fala em quebra estrutural no sistema de variáveis analisado e, além disso, ele analisa apenas duas das variáveis de seu sistema, o que gera um viés (imagino que exista e que não seja desprezível) de omissão de variáveis (e de suas defasagens…). Também há a questão da cointegração, é bom lembrar.

Quanto à quebra estrutural, bem, este é um ponto central no argumento do Vitor, mas falar dela sem analisar mais cuidadosamente o problema é complicado. Afinal, se há mais de duas variáveis, é preciso analisar com calma questões de exogeneidade das mesmas, bem como a de raízes unitárias. Por exemplo, considerando a hipótese de que existam quebras estruturais na relação na relação em que variações no desemprego são causadas por variações no caged (que é a relação que emergiu do teste de Granger, não?), um teste simples (existem vários, claro) não mostra qualquer ponto de quebra na relação. Eis o trecho do script com os comandos.

library(strucchange)

fs.vitor <-breakpoints(diff(desemp_sa)~diff(caged), data=data)
reg<-lm(diff(desemp_sa)~diff(caged))
breakpoints(fs.vitor)

Diante destes resultados, fica difícil saber se existe alguma quebra estrutural. Minha primeira reação, naturalmente, seria dizer: não, não existe. Entretanto, como falei, há dois pontos importantes para serem analisados, antes de qualquer avanço neste trabalho. Primeiramente, a questão do número de raízes unitárias em cada série (o que pode ter implicações em termos de cointegração, por exemplo). Em segundo lugar, o número de variáveis no sistema. Caso a análise do Vitor tenha que levar em conta umas cinco variáveis, então não podemos analisar apenas duas delas, exceto se houver algum grau de exogeneidade entre sub-conjuntos (ou blocos) de variáveis do sistema.