GDPNow: Metodologia e Implementação em Python

Autor

José Victor Santos Lopes

Data de Publicação

28 de outubro de 2025

1 Introdução

O GDPNow é um modelo de nowcasting desenvolvido pelo Federal Reserve Bank of Atlanta para fornecer estimativas em tempo real do crescimento do PIB real dos Estados Unidos. O modelo foi apresentado no Working Paper 2014-7 por Higgins (2014).

Este documento apresenta tanto a metodologia original do paper quanto a implementação em Python desenvolvida como replicação do modelo.

1.1 Resumo Executivo da Metodologia

1.1.1 O que é o GDPNow?

O GDPNow é um modelo estatístico que prevê o PIB atual (daí “now-casting” = previsão do agora) antes da divulgação oficial dos dados. Diferente de modelos tradicionais que preveem o futuro distante, o GDPNow quer saber: “Como está a economia AGORA?”

1.1.2 Por que é necessário?

O Bureau of Economic Analysis (BEA) divulga os dados do PIB com cerca de 1 mês de atraso. Por exemplo: - Janeiro, Fevereiro, Março = 1º trimestre de 2024 - Final de Abril = BEA divulga o PIB do 1º trimestre

Durante esse mês de espera, diversos indicadores econômicos são divulgados (vendas no varejo, produção industrial, comércio exterior, etc.). O GDPNow usa esses dados para estimar o PIB antes da divulgação oficial.

1.1.3 Como funciona? (Versão Simples)

O modelo funciona em 3 passos principais:

1.1.3.1 1. Decomposição: Quebrar o PIB em Pedaços

Em vez de prever o PIB total diretamente, o modelo separa em 13 componentes:

  • Consumo: o que as famílias compram (bens e serviços)
  • Investimento: empresas comprando equipamentos, construindo fábricas
  • Governo: gastos federais e estaduais
  • Comércio exterior: exportações menos importações
  • Estoques: variação de inventários das empresas

Por quê fazer isso? Cada componente tem seus próprios indicadores. Por exemplo: - Vendas no varejo → prevê consumo - Produção industrial → prevê investimento em equipamentos - Dados de comércio → prevê exportações/importações

1.1.3.2 2. Modelagem: Dois Modelos Trabalhando Juntos

Modelo A: BVAR (Bayesian Vector Autoregression) - Captura como os 13 componentes se relacionam ao longo do tempo - Exemplo: se exportações sobem, importações tendem a subir também - Usa dados históricos desde 1968 - Fornece previsão “base” quando não há dados novos

Modelo B: Equações Bridge - Conecta indicadores mensais (vendas, produção) aos componentes trimestrais do PIB - Exemplo: “vendas no varejo subiram 2% → consumo de bens deve crescer X%” - Atualiza as previsões quando novos dados são divulgados

Filtro de Kalman: O Árbitro - Combina as previsões dos dois modelos de forma ótima - Pergunta: “Qual modelo está mais confiável agora?” - Se há muitos dados novos → dá mais peso às equações bridge - Se há poucos dados → dá mais peso ao BVAR

1.1.3.3 3. Agregação: Juntar os Pedaços

Depois de prever os 13 componentes, soma tudo para obter o PIB total:

\[ \text{PIB}_{\text{total}} = \sum_{i=1}^{13} \text{Peso}_i \times \text{Crescimento}_i \]

Os pesos refletem o tamanho de cada componente na economia. Por exemplo: - Consumo ≈ 70% do PIB → peso maior - Exportações ≈ 12% do PIB → peso menor

1.1.4 Exemplo Prático: Como o GDPNow Funciona no Dia a Dia

Cenário: Estamos em Fevereiro de 2024, no meio do 1º trimestre.

Dia 1 de Janeiro: - Trimestre começou, sem dados novos ainda - GDPNow usa apenas o BVAR: “Baseado no histórico, prevejo crescimento de 2.0%”

Dia 15 de Janeiro: - Saem dados de vendas no varejo de Dezembro - Equação bridge: “Vendas caíram → consumo pode crescer só 1.5%” - Filtro de Kalman combina: Nova previsão = 1.8%

Dia 1 de Fevereiro: - Saem dados de produção industrial de Janeiro - Equação bridge: “Produção forte → investimento vai bem!” - Nova previsão = 2.1%

Dia 1 de Março: - Saem dados de comércio exterior de Fevereiro - Equação bridge: “Exportações em alta!” - Nova previsão final = 2.3%

Final de Abril: - BEA divulga: PIB cresceu 2.4% - Erro do GDPNow: apenas 0.1 ponto percentual!

1.1.5 Principais Vantagens

  1. Atualização contínua: Nova previsão a cada dado divulgado
  2. Transparência: Metodologia totalmente documentada
  3. Granularidade: Mostra qual setor está impulsionando/freando a economia
  4. Acurácia: Historicamente muito próximo dos dados oficiais

1.1.6 Principais Desafios

  1. Volatilidade inicial: No início do trimestre, com poucos dados, a previsão é menos confiável
  2. Dependência de dados: Se indicadores são revisados, previsão muda
  3. Apenas estatístico: Não incorpora informações qualitativas (guerras, pandemias, etc.)

1.1.7 Resumo em Uma Frase

O GDPNow quebra o PIB em 13 pedaços, prevê cada pedaço usando indicadores mensais e dados históricos, depois junta tudo para estimar o crescimento econômico atual antes da divulgação oficial.

1.2 Objetivo

O objetivo principal do GDPNow é produzir uma estimativa atual (“nowcast”) do crescimento do PIB real antes da divulgação oficial dos dados pelo Bureau of Economic Analysis (BEA). O modelo atualiza suas previsões conforme novos dados econômicos são divulgados ao longo do trimestre.

1.3 Conceito de Nowcasting

Nowcasting refere-se à previsão do presente, do passado muito recente e do futuro muito próximo. Diferentemente de previsões tradicionais que se concentram em horizontes mais distantes, o nowcasting busca estimar o estado atual da economia usando dados parciais e indicadores de alta frequência.

1.4 Status da Implementação

Passo 1 Completo: BVAR com Minnesota Prior
Passo 2: Dynamic Factor Model (em desenvolvimento)
Passo 3: Factor-augmented autoregressions (pendente)
Passos 4-5: Bridge equations (pendente)
Passo 6: Chain-weighted aggregation (pendente)

2 Estrutura do Modelo

2.1 Visão Geral

O GDPNow é um modelo de previsão bottom-up baseado em três componentes principais:

  1. Modelo BVAR (Bayesian Vector Autoregression) para as 13 subcomponentes do PIB
  2. Modelo Bridge que conecta indicadores econômicos de alta frequência às subcomponentes do PIB
  3. Agregação das previsões das subcomponentes para obter o PIB total

2.2 Decomposição do PIB

O PIB real é decomposto em 13 subcomponentes principais:

2.2.1 Consumo Pessoal (PCE)

  1. Bens duráveis (Durable goods)
  2. Serviços (Services)

2.2.2 Investimento Privado Doméstico

  1. Equipamentos (Equipment)
  2. Produtos de propriedade intelectual (Intellectual property products - IPP)
  3. Estruturas (Structures)
  4. Residencial (Residential)
  5. Variação de estoques privados (Change in private inventories)

2.2.3 Comércio Internacional

  1. Exportações de bens (Exports of goods)
  2. Exportações de serviços (Exports of services)
  3. Importações de bens (Imports of goods)
  4. Importações de serviços (Imports of services)

2.2.4 Gastos do Governo

  1. Governo federal (Federal government)
  2. Governos estaduais e locais (State and local government)

3 Etapa 1: Modelo BVAR

3.1 Especificação do Modelo

O primeiro passo da metodologia é estimar um BVAR(5) (Bayesian Vector Autoregression de ordem 5) para as 13 subcomponentes do PIB.

3.1.1 Variáveis do Modelo

  • 12 componentes são modeladas em logaritmos naturais dos níveis reais
  • 1 componente (variação de estoques) é modelada como razão em relação ao PIB (pois pode assumir valores negativos)

3.1.2 Forma do Modelo

\[ \mathbf{y}_t = \mathbf{c} + \mathbf{\Phi}_1 \mathbf{y}_{t-1} + \mathbf{\Phi}_2 \mathbf{y}_{t-2} + ... + \mathbf{\Phi}_5 \mathbf{y}_{t-5} + \mathbf{u}_t \]

onde:

  • \(\mathbf{y}_t\) é o vetor 13×1 das variáveis (12 em log + 1 razão)
  • \(\mathbf{c}\) é o vetor de constantes
  • \(\mathbf{\Phi}_1, ..., \mathbf{\Phi}_5\) são matrizes 13×13 de coeficientes
  • \(\mathbf{u}_t\) é o vetor de erros com \(\mathbf{u}_t \sim N(\mathbf{0}, \mathbf{\Sigma})\)

3.1.3 Minnesota Prior

O modelo usa Minnesota Prior (Litterman, 1986) implementado via dummy observations (Banbura, Giannone, Reichlin, 2008):

  • λ: Tightness do prior (0.15 para quantidades, 0.12 para preços)
  • τ: Prior no termo constante (τ = 10λ)
  • δ: Peso no random walk prior (δ = 1 para log-levels)

3.1.4 Período de Estimação

O modelo BVAR é estimado usando dados trimestrais de 1968Q1 a 2013Q4 (179 observações).

3.1.5 Propriedades do Modelo

  • Frequência: Trimestral
  • Lags: 5 trimestres (conforme Appendix do paper)
  • Método: Bayesiano via dummy observations
  • Uso: O BVAR captura as relações dinâmicas entre as subcomponentes e fornece previsões de médio prazo

3.2 Função do BVAR no GDPNow

O modelo BVAR tem duas funções principais:

  1. Fornecer previsões de longo prazo para as subcomponentes quando não há dados de indicadores disponíveis
  2. Capturar spillovers entre componentes: mudanças em uma subcomponente podem afetar outras através das correlações capturadas pelo VAR

3.3 Implementação em Python

3.3.1 1. Download dos Dados do FRED

Primeiro, baixamos os 13 componentes do PIB diretamente do FRED:

Código
import pandas as pd
from pandas_datareader import data as web
import numpy as np
import matplotlib.pyplot as plt

# API key do FRED
fred_key = 'e8f25a1732f12c324ad37204f2cb1fa3'

# Definir códigos FRED para os 13 componentes
components = {
    'consumption_goods': {
        'growth': 'DGDSRL1Q225SBEA',
        'level': 'DGDSRX1Q020SBEA'
    },
    'consumption_services': {
        'growth': 'DSERRL1Q225SBEA',
        'level': 'PCESVC96'
    },
    'equipment': {
        'growth': 'Y033RL1Q225SBEA',
        'level': 'Y033RX1Q020SBEA'
    },
    'ipp': {
        'growth': 'Y001RL1Q225SBEA',
        'level': 'Y001RX1Q020SBEA'
    },
    'structures': {
        'growth': 'A009RL1Q225SBEA',
        'level': 'B009RX1Q020SBEA'
    },
    'residential': {
        'growth': 'A011RL1Q225SBEA',
        'level': 'PRFIC1'
    },
    'exports_goods': {
        'growth': 'A253RL1Q225SBEA',
        'level': 'A253RX1Q020SBEA'
    },
    'exports_services': {
        'growth': 'A646RL1Q225SBEA',
        'level': 'A646RX1Q020SBEA'
    },
    'imports_goods': {
        'growth': 'A255RL1Q225SBEA',
        'level': 'A255RX1Q020SBEA'
    },
    'imports_services': {
        'growth': 'A656RL1Q225SBEA',
        'level': 'B656RX1Q020SBEA'
    },
    'federal_govt': {
        'growth': 'A823RL1Q225SBEA',
        'level': 'FGCEC1'
    },
    'state_local_govt': {
        'growth': 'A829RL1Q225SBEA',
        'level': 'SLCEC1'
    },
    'inventories': {
        'level': 'CBIC1'
    }
}

# Baixar dados e reconstruir séries históricas
# (Ver build_gdp_from_fred.py para código completo)

3.3.2 2. Implementação da Classe BVAR

Classe que implementa BVAR com Minnesota Prior via dummy observations:

Código
import numpy as np
from scipy import linalg

class BVAR:
    """
    Bayesian VAR com Minnesota Prior via dummy observations.
    
    Implementação baseada em Banbura, Giannone, Reichlin (2008).
    """
    
    def __init__(self, lags=5, lambda_param=0.15, tau=None, delta=1):
        """
        Parâmetros:
        -----------
        lags : int
            Número de defasagens
        lambda_param : float
            Tightness do prior (0.15 para quantidades, 0.12 para preços)
        tau : float
            Prior no termo constante (default: 10*lambda)
        delta : float
            Peso no random walk prior (1 para log-levels)
        """
        self.lags = lags
        self.lambda_param = lambda_param
        self.tau = tau if tau is not None else 10 * lambda_param
        self.delta = delta
        
    def _create_dummy_observations(self, Y, X):
        """
        Cria dummy observations para implementar Minnesota Prior.
        
        Três tipos de dummies:
        1. Prior nos coeficientes (favorece random walk)
        2. Prior na constante (evita explosão)
        3. Prior na soma dos coeficientes (co-persistência)
        """
        T, n = Y.shape
        k = X.shape[1]
        
        # Calcular desvios-padrão das primeiras observações
        s = np.std(Y[:self.lags], axis=0)
        
        # Dummy 1: Prior nos coeficientes
        Y_dummy1 = np.diag(s * self.delta / self.lambda_param)
        X_dummy1 = np.zeros((n, k))
        for i in range(n):
            X_dummy1[i, i::n] = s[i] * self.delta / self.lambda_param
        
        # Dummy 2: Prior na constante
        Y_dummy2 = np.diag(s)
        X_dummy2 = np.zeros((n, k))
        X_dummy2[:, -1] = s / self.tau
        
        # Dummy 3: Prior na soma dos coeficientes  
        Y_dummy3 = np.tile(s * self.delta / self.tau, (self.lags, 1))
        X_dummy3 = np.kron(np.ones((1, self.lags)), np.diag(s * self.delta / self.tau))
        X_dummy3 = np.hstack([X_dummy3, np.zeros((self.lags, 1))])
        
        # Concatenar dados reais com dummies
        Y_star = np.vstack([Y, Y_dummy1, Y_dummy2, Y_dummy3])
        X_star = np.vstack([X, X_dummy1, X_dummy2, X_dummy3])
        
        return Y_star, X_star
    
    def fit(self, data):
        """
        Estima o BVAR.
        
        Parâmetros:
        -----------
        data : array-like (T, n)
            Dados observados
        """
        data = np.asarray(data)
        T, n = data.shape
        self.n_vars = n
        
        # Criar defasagens
        Y = data[self.lags:]
        X = np.column_stack([data[i:T-self.lags+i] for i in range(self.lags)])
        X = np.column_stack([X, np.ones(len(Y))])  # adicionar constante
        
        # Criar dummy observations
        Y_star, X_star = self._create_dummy_observations(Y, X)
        
        # Estimação via OLS nos dados aumentados
        self.coef_ = linalg.lstsq(X_star, Y_star)[0]
        
        # Calcular resíduos e matriz de covariância
        fitted = X @ self.coef_
        residuals = Y - fitted
        self.sigma_ = (residuals.T @ residuals) / len(residuals)
        
        # Guardar últimas observações para previsão
        self.last_obs = data[-self.lags:]
        
        return self
    
    def forecast(self, last_obs=None, steps=1):
        """
        Faz previsão h passos à frente.
        
        Parâmetros:
        -----------
        last_obs : array-like (lags, n_vars)
            Últimas observações (se None, usa últimas do fit)
        steps : int
            Número de passos à frente
        
        Retorna:
        --------
        forecasts : array (steps, n_vars)
        """
        if last_obs is None:
            last_obs = self.last_obs
        else:
            last_obs = np.asarray(last_obs)
        
        forecasts = []
        current = last_obs.copy()
        
        for _ in range(steps):
            # Construir vetor de regressores
            X_new = np.concatenate([current[::-1].flatten(), [1]])
            
            # Prever
            y_new = X_new @ self.coef_
            forecasts.append(y_new)
            
            # Atualizar para próximo passo
            current = np.vstack([current[1:], y_new])
        
        return np.array(forecasts)
    
    def information_criteria(self, data):
        """
        Calcula AIC e BIC.
        """
        data = np.asarray(data)
        T, n = data.shape
        T_eff = T - self.lags
        
        # Número de parâmetros
        k = n * (n * self.lags + 1)
        
        # Log-likelihood
        det_sigma = np.linalg.det(self.sigma_)
        log_lik = -0.5 * T_eff * (n * np.log(2*np.pi) + np.log(det_sigma) + n)
        
        # Critérios
        aic = -2 * log_lik / T_eff + 2 * k / T_eff
        bic = -2 * log_lik / T_eff + np.log(T_eff) * k / T_eff
        
        return {'AIC': aic, 'BIC': bic, 'log_likelihood': log_lik}

3.3.3 3. Estimação do BVAR para Quantidades

Estimar BVAR(5) com λ=0.15 para os 13 componentes do PIB:

Código
import pandas as pd
import numpy as np
import pickle
import matplotlib.pyplot as plt
from bvar_implementation import BVAR

# Carregar dados
df = pd.read_csv('gdp_13_components_for_bvar.csv', index_col=0)

# Período de estimação: 1968Q1-2013Q4
df_estimation = df.loc['1968Q1':'2013Q4'].copy()

print(f"Dados: {df_estimation.shape[0]} observações, {df_estimation.shape[1]} variáveis")
print(f"Período: {df_estimation.index[0]} a {df_estimation.index[-1]}")

# Instanciar e estimar BVAR
bvar = BVAR(lags=5, lambda_param=0.15, delta=1)
bvar.fit(df_estimation.values)

# Calcular critérios de informação
info = bvar.information_criteria(df_estimation.values)
print(f"\nAIC: {info['AIC']:.2f}")
print(f"BIC: {info['BIC']:.2f}")
print(f"Log-likelihood: {info['log_likelihood']:.2f}")

# Prever 2014Q1
last_5_obs = df_estimation.iloc[-5:].values
forecast_2014Q1 = bvar.forecast(last_5_obs, steps=1)[0]

# Calcular taxas de crescimento
growth_rates = {}
for idx, col in enumerate(df_estimation.columns):
    last_value = df_estimation[col].iloc[-1]
    
    if col == 'inventories_to_gdp':
        growth_rates[col] = forecast_2014Q1[idx]
    else:
        growth_rates[col] = (np.exp(forecast_2014Q1[idx] - last_value) - 1) * 100

# Exibir resultados
print("\nCrescimento previsto para 2014Q1 (%):\n")
for comp, growth in growth_rates.items():
    print(f"{comp:25s}: {growth:+7.2f}%")

# Salvar modelo
with open('bvar_bayesian_model.pkl', 'wb') as f:
    pickle.dump(bvar, f)

print("\n✓ Modelo BVAR salvo em 'bvar_bayesian_model.pkl'")

3.3.4 4. Resultados da Estimação

Critérios de Informação:

  • AIC: -70.80
  • BIC: -55.52
  • Log-likelihood: 6362.19

Previsões de Crescimento para 2014Q1 (%):

Componente Crescimento
Consumption goods -0.08%
Consumption services +0.80%
Equipment +3.35%
IPP +1.37%
Structures +1.63%
Residential +1.71%
Exports goods +4.40%
Exports services -2.77%
Imports goods +2.43%
Imports services -2.31%
Federal govt -0.94%
State/local govt -0.07%

Visualização das Previsões:

Previsões BVAR para Quantidades - 2014Q1

A figura mostra as previsões do BVAR para cada componente do PIB em 2014Q1 (log-levels), comparadas com o último valor observado em 2013Q4. As barras indicam a direção e magnitude das mudanças previstas.

3.3.5 5. Validação da Implementação

A implementação foi validada comparando com o pacote vars do R:

Código
# Correlação com R vars package: 0.999989
# RMSE: 0.009778 (< 1%)
# ✓ Implementação validada como correta

A correlação de 0.999989 confirma que a mecânica do VAR está implementada corretamente. As pequenas diferenças vêm do prior bayesiano (shrinkage), que é exatamente o comportamento desejado para prevenir overfitting.

3.3.6 6. BVAR para Deflatores de Preço

Repetimos o processo com λ=0.12 para os 13 deflatores:

Código
# Carregar deflatores de preço
df_prices = pd.read_csv('price_deflators_for_bvar.csv', index_col=0)
df_prices_estimation = df_prices.loc['1968Q1':'2013Q4'].copy()

# Estimar BVAR com lambda = 0.12 (mais shrinkage para preços)
bvar_prices = BVAR(lags=5, lambda_param=0.12, delta=1)
bvar_prices.fit(df_prices_estimation.values)

# Calcular critérios de informação
info_prices = bvar_prices.information_criteria(df_prices_estimation.values)
print(f"\nAIC: {info_prices['AIC']:.2f}")
print(f"BIC: {info_prices['BIC']:.2f}")

# Prever 2014Q1
last_5_obs_prices = df_prices_estimation.iloc[-5:].values
forecast_prices_2014Q1 = bvar_prices.forecast(last_5_obs_prices, steps=1)[0]

# Calcular inflação trimestral (todas em log)
inflation_rates = {}
for idx, col in enumerate(df_prices_estimation.columns):
    last_value = df_prices_estimation[col].iloc[-1]
    inflation_rates[col] = (np.exp(forecast_prices_2014Q1[idx] - last_value) - 1) * 100

# Exibir resultados
print("\nInflação prevista para 2014Q1 (%):\n")
for comp, inflation in inflation_rates.items():
    print(f"{comp:25s}: {inflation:+7.2f}%")

# Salvar modelo
with open('bvar_prices_bayesian_model.pkl', 'wb') as f:
    pickle.dump(bvar_prices, f)

Critérios de Informação:

  • AIC: -95.13
  • BIC: -79.86

Inflação prevista para 2014Q1 (%):

Componente Inflação
Consumption goods +0.96%
Consumption services +0.51%
Equipment -0.20%
IPP +0.01%
Structures +1.51%
Residential +0.80%
Exports goods -0.06%
Exports services +0.87%
Imports goods +2.67%
Imports services +0.73%
Federal govt +0.73%
State/local govt +0.85%
Inventories +0.10%

Visualização das Previsões:

Previsões BVAR para Deflatores - 2014Q1

A figura mostra as previsões de inflação trimestral do BVAR para cada deflator de preço em 2014Q1 (log-levels). Note que a maioria dos deflatores mostra inflação positiva, com destaque para importações de bens (+2.67%) e estruturas (+1.51%).

4 Etapa 2: Equações Bridge

4.1 Conceito

As equações bridge conectam indicadores econômicos de alta frequência (mensais ou semanais) às subcomponentes trimestrais do PIB. Essas equações permitem que o modelo incorpore informações mais recentes conforme novos dados são divulgados.

4.2 Especificação Geral

Para cada subcomponente \(i\) do PIB, existe uma equação bridge da forma:

\[ \Delta \ln y_{i,t} = \alpha_i + \sum_{j} \beta_{ij} x_{j,t} + \epsilon_{i,t} \]

onde:

  • \(\Delta \ln y_{i,t}\) é a taxa de crescimento trimestral da subcomponente \(i\)
  • \(x_{j,t}\) são os indicadores econômicos relacionados
  • \(\beta_{ij}\) são os coeficientes estimados por mínimos quadrados ordinários

4.3 Tipos de Indicadores

Os indicadores usados incluem:

  • Dados do Census Bureau: vendas no varejo, comércio exterior, gastos em construção
  • Dados de emprego e renda: folhas de pagamento, renda pessoal (BEA)
  • Índices de produção industrial: Federal Reserve Board
  • Dados de preços: índices de preços ao consumidor e ao produtor (BLS)

4.4 Tratamento dos Dados Mensais

Quando os indicadores são mensais, mas o PIB é trimestral:

  1. Média trimestral dos valores mensais para fluxos (vendas, produção)
  2. Último valor do trimestre para estoques
  3. Agregação temporal respeitando as identidades contábeis do PIB

4.5 Previsões Within-Quarter

Durante o trimestre em curso:

  • Se há dados mensais completos para os 3 meses: usa equação bridge diretamente
  • Se há dados parciais (1 ou 2 meses): combina dados observados com previsão BVAR para os meses faltantes
  • Se há dados semanais (ex: initial jobless claims): usa interpolação para estimar valores mensais

5 Etapa 3: Filtragem de Kalman

5.1 Motivação

O Filtro de Kalman é usado para combinar de forma ótima:

  1. As previsões do modelo BVAR (mais suaves, baseadas em histórico)
  2. As previsões das equações bridge (mais voláteis, baseadas em dados recentes)

5.2 Modelo em Espaço de Estados

O sistema é representado como:

5.2.1 Equação de Estado (Transição)

\[ \mathbf{y}_t = \mathbf{F} \mathbf{y}_{t-1} + \mathbf{v}_t \]

5.2.2 Equação de Observação (Medição)

\[ \mathbf{z}_t = \mathbf{H} \mathbf{y}_t + \mathbf{w}_t \]

onde:

  • \(\mathbf{y}_t\) é o vetor de estados não observados (as verdadeiras taxas de crescimento das 13 subcomponentes)
  • \(\mathbf{z}_t\) é o vetor de observações (previsões das equações bridge)
  • \(\mathbf{F}\) é a matriz de transição (derivada do VAR)
  • \(\mathbf{H}\) é a matriz de observação
  • \(\mathbf{v}_t\) e \(\mathbf{w}_t\) são ruídos (erros de previsão)

5.3 Processo de Filtragem

Em cada período \(t\):

  1. Previsão (a priori): \[\hat{\mathbf{y}}_{t|t-1} = \mathbf{F} \hat{\mathbf{y}}_{t-1|t-1}\]

  2. Atualização (a posteriori): quando nova observação \(\mathbf{z}_t\) chega, \[\hat{\mathbf{y}}_{t|t} = \hat{\mathbf{y}}_{t|t-1} + \mathbf{K}_t (\mathbf{z}_t - \mathbf{H}\hat{\mathbf{y}}_{t|t-1})\]

  3. Ganho de Kalman: \[\mathbf{K}_t = \mathbf{P}_{t|t-1} \mathbf{H}' (\mathbf{H} \mathbf{P}_{t|t-1} \mathbf{H}' + \mathbf{R})^{-1}\]

onde \(\mathbf{P}\) é a matriz de covariância do erro de estimação e \(\mathbf{R}\) é a matriz de covariância do ruído de observação.

5.4 Vantagens do Filtro de Kalman

  • Tratamento de dados faltantes: quando não há nova informação para alguma subcomponente, o filtro usa apenas a previsão do BVAR
  • Ponderação ótima: combina previsões levando em conta a precisão relativa de cada fonte
  • Incorporação sequencial: atualiza as estimativas conforme cada novo dado é divulgado

6 Etapa 4: Agregação para o PIB Total

6.1 Identidade Contábil

O PIB real é a soma das contribuições de cada subcomponente:

\[ \text{PIB}_t = \sum_{i=1}^{13} w_{i,t-1} \cdot g_{i,t} \]

onde:

  • \(g_{i,t}\) é a taxa de crescimento da subcomponente \(i\)
  • \(w_{i,t-1}\) é o peso (share) da subcomponente no PIB do trimestre anterior

6.2 Cálculo dos Pesos

Os pesos são calculados usando os valores nominais (em dólares correntes):

\[ w_{i,t-1} = \frac{\text{Valor nominal da subcomponente } i \text{ em } t-1}{\text{PIB nominal em } t-1} \]

6.2.1 Considerações Especiais

  • Estoques: a contribuição é a variação do estoque, não o nível
  • Importações: contribuem negativamente (sinal negativo)
  • Atualização dos pesos: os pesos mudam a cada trimestre conforme a composição do PIB evolui

6.3 Taxa de Crescimento do PIB

A taxa de crescimento anualizada do PIB no trimestre \(t\) é:

\[ g_{\text{PIB},t} = \sum_{i=1}^{13} w_{i,t-1} \cdot g_{i,t} \]

Esta é a estatística principal reportada pelo GDPNow (“nowcast” do crescimento do PIB).

7 Atualização e Revisão das Previsões

7.1 Calendário de Divulgação

O GDPNow é atualizado várias vezes ao longo do trimestre, conforme novos dados são divulgados:

  • Início do trimestre: apenas previsões BVAR (sem dados novos)
  • Durante o trimestre: incorporação de dados mensais (vendas, produção, comércio)
  • Final do trimestre: incorporação de dados semanais e indicadores de alta frequência
  • Após o trimestre: incorporação dos primeiros dados oficiais do BEA

7.2 Fontes de Revisão

As previsões do GDPNow podem mudar por três razões:

  1. Novos dados para o trimestre atual: dados mensais mais recentes
  2. Revisões de dados passados: o BEA frequentemente revisa estimativas anteriores
  3. Re-estimação do modelo: o BVAR pode ser re-estimado com dados atualizados

7.3 Convergência

Historicamente, as previsões do GDPNow tendem a convergir para o valor oficial do BEA conforme o trimestre avança e mais dados se tornam disponíveis.

8 Vantagens e Limitações

8.1 Vantagens

  1. Transparência: metodologia totalmente documentada e replicável
  2. Atualização frequente: incorpora novos dados assim que disponíveis
  3. Granularidade: fornece previsões para cada subcomponente, não apenas PIB agregado
  4. Bottom-up: captura dinâmicas específicas de cada setor da economia

8.2 Limitações

  1. Dependência de dados: qualidade da previsão depende da disponibilidade e precisão dos indicadores
  2. Instabilidade inicial: no início do trimestre, quando há poucos dados, as previsões podem ser voláteis
  3. Sem julgamento qualitativo: o modelo é puramente estatístico e não incorpora informações não quantificáveis
  4. Revisões de dados: previsões podem mudar devido a revisões dos dados históricos pelo BEA

9 Implementação Prática

9.1 Dados Necessários

9.1.1 Para Estimação do BVAR (Etapa 1)

  • Séries históricas trimestrais das 13 subcomponentes do PIB real
  • Período: de 1968Q1 em diante (quanto mais longo, melhor)
  • Fonte: FRED (Federal Reserve Economic Data) ou BEA (Bureau of Economic Analysis)

9.1.2 Para Equações Bridge (Etapa 2)

  • Indicadores mensais relacionados a cada subcomponente
  • Correspondência conceitual: cada indicador deve ter relação econômica com sua subcomponente
  • Exemplo: vendas no varejo para consumo de bens

9.1.3 Para Nowcasting (Etapas 3 e 4)

  • Dados mais recentes dos indicadores mensais/semanais
  • Calendário de divulgação: saber quando cada dado será divulgado
  • Pesos das subcomponentes: valores nominais do trimestre anterior

9.2 Ferramentas Computacionais

A implementação do GDPNow requer:

  • Estimação VAR: pacotes de econometria (ex: statsmodels em Python, vars em R)
  • Filtro de Kalman: bibliotecas de espaço de estados (ex: statsmodels.tsa.statespace)
  • Coleta de dados: APIs do FRED, BEA, Census Bureau
  • Agregação: cálculos matriciais e manipulação de dados temporais

9.3 Fluxo de Trabalho

  1. Setup inicial (uma vez):
    • Coletar dados históricos
    • Estimar BVAR e equações bridge
    • Calibrar filtro de Kalman
  2. Atualização regular (quando novos dados são divulgados):
    • Baixar novos dados dos indicadores
    • Atualizar previsões das equações bridge
    • Rodar filtro de Kalman
    • Agregar para PIB total
    • Publicar nowcast atualizado

10 Conclusão

O GDPNow representa um avanço significativo em nowcasting do PIB por combinar:

  • Modelagem estrutural (BVAR captura relações econômicas entre subcomponentes)
  • Uso eficiente de dados (equações bridge conectam indicadores de alta frequência)
  • Rigor estatístico (filtro de Kalman combina informações de forma ótima)
  • Transparência e replicabilidade (metodologia completamente documentada)

A abordagem bottom-up permite não apenas prever o PIB agregado, mas também entender quais setores estão impulsionando ou freando o crescimento econômico, fornecendo insights valiosos para formuladores de política econômica e analistas de mercado.

11 Referências

Higgins, P. (2014). “GDPNow: A Model for GDP Nowcasting.” Federal Reserve Bank of Atlanta Working Paper 2014-7.

Federal Reserve Bank of Atlanta. GDPNow Methodology. Disponível em: https://www.atlantafed.org/cqer/research/gdpnow

Bureau of Economic Analysis (BEA). National Income and Product Accounts (NIPA).

Federal Reserve Economic Data (FRED). Federal Reserve Bank of St. Louis.