1 Introduction

Now I want to write quickly about nowcasting. What is nowcasting? It is the process of modeling data that we get on a faster frequency in order to anticipate the true underlying data that we may get on a longer frequency. A perfect example of this is the GDP. Here we get GDP information quarterly, but we get data regarding other economic activity monthly (or faster). So let’s try!

3 Model

Now we can build out model. Nowcasting using a state-space model that takes the form of predicting GDP, first by estimating a latent state for GDP denoted by \(x\), using the previous state’s value and a matrix of new predictors (\(Z\)). This will then be used to predict the actual value of GDP, \(y\).

\[x_i \sim N(\alpha + X_{i-1}+\bf{Z}\gamma, \sigma_{\eta})\] \[y_i\sim N(x_i, \sigma_{\epsilon})\]

We also specify fairly vague priors that could be refined (or we could specify hyperpriors which are learned from the data).

3.1 In Stan

Now we can code this up in Stan. Here I am taking inspiration from @nowcastingStan with a few tweaks.

data {
  int N1; // length of low frequency series
  int N2; // length of high frequency series
  int K;
  int freq; // every freq-th observation of the high frequency series we get an observation of the low frequency one
  vector[N1] y;
  matrix[N2, K] z;
}
parameters {
  real<lower = 0> sigma_epsilon;
  real<lower = 0> sigma_eta;
  vector[K] gamma;
  real alpha;
  vector[N2] x;
}
model {
  int count;
  // priors
  sigma_epsilon ~ cauchy(0,1);
  sigma_eta ~ cauchy(0,1);
  gamma ~ normal(0,1);

  // likelihood
  count = 0;
  for(i in 2:N2){
    target += normal_lpdf(x[i]| alpha + x[i-1] + z[i,]*gamma, sigma_eta);
    if(i%freq==0){
      count = count + 1;
      target += normal_lpdf(y[count]| x[i], sigma_epsilon);
    }
  }
}

Now we can compile the model.

We also need to format our data for Stan.

Now we can run the model. Note that this will take a little while to run because of the number of iterations required. I’ve set the max_treedepth argument to 15 which allows the algorithm to explore the posterior space before turning.

4 Results

Now we can examine our outputs:

## Inference for Stan model: nowcast.
## 2 chains, each with iter=10000; warmup=5000; thin=1; 
## post-warmup draws per chain=5000, total post-warmup draws=10000.
## 
##           mean se_mean   sd  2.5%   25%   50%   75% 97.5% n_eff Rhat
## alpha    -0.01       0 0.01 -0.03 -0.02 -0.01 -0.01  0.00  7129    1
## gamma[1]  0.09       0 0.08 -0.06  0.04  0.09  0.14  0.25  6959    1
## gamma[2] -0.01       0 0.03 -0.07 -0.03 -0.01  0.01  0.05 11945    1
## 
## Samples were drawn using NUTS(diag_e) at Tue Jan 21 16:48:36 2020.
## For each parameter, n_eff is a crude measure of effective sample size,
## and Rhat is the potential scale reduction factor on split chains (at 
## convergence, Rhat=1).

And visualize said outouts. Note that zero is included in the posterior intervals for these predictors indicating that these might not be the best for predicting GDP.

It looks our model does fairly well in predicting GDP, at least since 2015 or so!

LS0tCnRpdGxlOiBOb3djYXN0aW5nCi0tLQoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc291cmNlKCJSL2hlbHBlcnMuUiIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGZyZWRyKQprbml0cjo6b3B0c19jaHVuayRzZXQod2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGZpZy5hbGlnbiA9ICJjZW50ZXIiLCBvdXQud2lkdGggPSAiODAlIikKYGBgCgojIEludHJvZHVjdGlvbgoKTm93IEkgd2FudCB0byB3cml0ZSBxdWlja2x5IGFib3V0ICoqbm93Y2FzdGluZyoqLiAKV2hhdCBpcyBub3djYXN0aW5nPyAKSXQgaXMgdGhlIHByb2Nlc3Mgb2YgbW9kZWxpbmcgZGF0YSB0aGF0IHdlIGdldCBvbiBhIGZhc3RlciBmcmVxdWVuY3kgaW4gb3JkZXIgdG8gYW50aWNpcGF0ZSB0aGUgdHJ1ZSB1bmRlcmx5aW5nIGRhdGEgdGhhdCB3ZSBtYXkgZ2V0IG9uIGEgbG9uZ2VyIGZyZXF1ZW5jeS4KQSBwZXJmZWN0IGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgR0RQLiAKSGVyZSB3ZSBnZXQgR0RQIGluZm9ybWF0aW9uIHF1YXJ0ZXJseSwgYnV0IHdlIGdldCBkYXRhIHJlZ2FyZGluZyBvdGhlciBlY29ub21pYyBhY3Rpdml0eSBtb250aGx5IChvciBmYXN0ZXIpLiAKU28gbGV0J3MgdHJ5IQoKIyBEYXRhCgpGaXJzdCwgSSBhbSBnb2luZyB0byBwdWxsIGRhdGEgdXNpbmcgdGhlICoqZnJlZHIqKiBwYWNrYWdlIHRvIHB1bGwgZGF0YSByZWdhcmRpbmcgdGhlIEdEUCwgRW1wbG95bWVudCwgYW5kIEluZHVzdHJpYWwgcHJvZHVjdGlvbi4KSW4gZWFjaCBjYXNlIEkgd2lsbCBwdWxsIHRoZSBlYWNoIG1ldHJpYyBpbiBwZXJjZW50IGNoYW5nZSBmcm9tIHRoZSBwcmV2aW91cyBtZWFzdXJlLgoKYGBge3J9CiMgQmlsbGlvbnMgb2YgRG9sbGFycwpnZHBfZGF0IDwtIGZyZWRyKHNlcmllc19pZCA9ICJHRFBDMSIsCgkJCQkJCQkJIG9ic2VydmF0aW9uX3N0YXJ0ID0gYXMuRGF0ZSgiMTk1MC0wMS0wMSIpLCB1bml0cyA9ICJwY2giKQoKIyBBbGwgRW1wbG95ZWVzCmFsbGVtcCA8LSBmcmVkcihzZXJpZXNfaWQgPSAiUEFZRU1TIiwgCgkJCQkJCQkJb2JzZXJ2YXRpb25fc3RhcnQgPSBhcy5EYXRlKCIxOTUwLTAxLTAxIiksIHVuaXRzID0gInBjaCIpCgojIEluZHVzdHJpYWwgUHJvZHVjdGlvbgppbmR1c3RyaWFsX3Byb2QgPC0gZnJlZHIoc2VyaWVzX2lkID0gIklORFBSTyIsIAoJCQkJCQkJCW9ic2VydmF0aW9uX3N0YXJ0ID0gYXMuRGF0ZSgiMTk1MC0wMS0wMSIpLCB1bml0cyA9ICJwY2giKQpgYGAKCgojIE1vZGVsCgpOb3cgd2UgY2FuIGJ1aWxkIG91dCBtb2RlbC4KTm93Y2FzdGluZyB1c2luZyBhIHN0YXRlLXNwYWNlIG1vZGVsIHRoYXQgdGFrZXMgdGhlIGZvcm0gb2YgcHJlZGljdGluZyBHRFAsIGZpcnN0IGJ5IGVzdGltYXRpbmcgYSBsYXRlbnQgc3RhdGUgZm9yIEdEUCBkZW5vdGVkIGJ5ICR4JCwgdXNpbmcgdGhlIHByZXZpb3VzIHN0YXRlJ3MgdmFsdWUgYW5kIGEgbWF0cml4IG9mIG5ldyBwcmVkaWN0b3JzICgkWiQpLgpUaGlzIHdpbGwgdGhlbiBiZSB1c2VkIHRvIHByZWRpY3QgdGhlIGFjdHVhbCB2YWx1ZSBvZiBHRFAsICR5JC4KCiQkeF9pIFxzaW0gTihcYWxwaGEgKyBYX3tpLTF9K1xiZntafVxnYW1tYSwgXHNpZ21hX3tcZXRhfSkkJAokJHlfaVxzaW0gTih4X2ksIFxzaWdtYV97XGVwc2lsb259KSQkCgpXZSBhbHNvIHNwZWNpZnkgZmFpcmx5IHZhZ3VlIHByaW9ycyB0aGF0IGNvdWxkIGJlIHJlZmluZWQgKG9yIHdlIGNvdWxkIHNwZWNpZnkgaHlwZXJwcmlvcnMgd2hpY2ggYXJlIGxlYXJuZWQgZnJvbSB0aGUgZGF0YSkuCgojIyBJbiBTdGFuCgpOb3cgd2UgY2FuIGNvZGUgdGhpcyB1cCBpbiBTdGFuLgpIZXJlIEkgYW0gdGFraW5nIGluc3BpcmF0aW9uIGZyb20gQG5vd2Nhc3RpbmdTdGFuIHdpdGggYSBmZXcgdHdlYWtzLgoKYGBge3IgY29tbWVudD0nJ30Kd3JpdGVMaW5lcyhyZWFkTGluZXMoIm5vd2Nhc3Quc3RhbiIpKQpgYGAKCk5vdyB3ZSBjYW4gY29tcGlsZSB0aGUgbW9kZWwuCgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHJzdGFuKQpvcHRpb25zKG1jLmNvcmVzID0gcGFyYWxsZWw6OmRldGVjdENvcmVzKCkpCnJzdGFuX29wdGlvbnMoYXV0b193cml0ZSA9IFRSVUUpCgptb2RlbF9ub3djYXN0IDwtIHN0YW5fbW9kZWwoIm5vd2Nhc3Quc3RhbiIpCgpgYGAKCldlIGFsc28gbmVlZCB0byBmb3JtYXQgb3VyIGRhdGEgZm9yIFN0YW4uCgpgYGB7cn0KbW9kZWxfZGF0YSA8LSBsaXN0KE4xID0gbGVuZ3RoKGdkcF9kYXQkdmFsdWUpLCAKICAgICAgICAgICAgICAgICAgIE4yID0gbnJvdyhhbGxlbXApLCAKICAgICAgICAgICAgICAgICAgIGZyZXEgPSA0TCwgCiAgICAgICAgICAgICAgICAgICB5ID0gZ2RwX2RhdCR2YWx1ZSwgCgkJCQkJCQkJCSBLID0gMiwKICAgICAgICAgICAgICAgICAgIHogPSBhcy5tYXRyaXgoY2JpbmQoYWxsZW1wJHZhbHVlLCBpbmR1c3RyaWFsX3Byb2QkdmFsdWUpKSkKYGBgCgpOb3cgd2UgY2FuIHJ1biB0aGUgbW9kZWwuIApOb3RlIHRoYXQgdGhpcyB3aWxsIHRha2UgYSBsaXR0bGUgd2hpbGUgdG8gcnVuIGJlY2F1c2Ugb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHJlcXVpcmVkLgpJJ3ZlIHNldCB0aGUgYG1heF90cmVlZGVwdGhgIGFyZ3VtZW50IHRvIDE1IHdoaWNoIGFsbG93cyB0aGUgYWxnb3JpdGhtIHRvIGV4cGxvcmUgdGhlIHBvc3RlcmlvciBzcGFjZSBiZWZvcmUgdHVybmluZy4gCgoKYGBge3IgY2FjaGU9VFJVRX0KZml0IDwtIHNhbXBsaW5nKG1vZGVsX25vd2Nhc3QsIAoJCQkJCQkJCWRhdGEgPSBtb2RlbF9kYXRhLCAKCQkJCQkJCQljaGFpbnMgPSAyLCBpdGVyID0gMTAwMDAsIHJlZnJlc2ggPSAwLAoJCQkJCQkJCWNvbnRyb2wgPSBsaXN0KG1heF90cmVlZGVwdGggPSAxNSksCgkJCQkJCQkJc2VlZCA9IDQyKQpgYGAKCiMgUmVzdWx0cwoKTm93IHdlIGNhbiBleGFtaW5lIG91ciBvdXRwdXRzOgoKYGBge3J9CnByaW50KGZpdCwgcGFycyA9IGMoImFscGhhIiwgImdhbW1hIikpCmBgYAoKQW5kIHZpc3VhbGl6ZSBzYWlkIG91dG91dHMuIApOb3RlIHRoYXQgemVybyBpcyBpbmNsdWRlZCBpbiB0aGUgcG9zdGVyaW9yIGludGVydmFscyBmb3IgdGhlc2UgcHJlZGljdG9ycyBpbmRpY2F0aW5nIHRoYXQgdGhlc2UgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGZvciBwcmVkaWN0aW5nIEdEUC4KCgpgYGB7cn0Kc3Rhbl9wbG90KGZpdCwgcGFycyA9IGMoImdhbW1hIiwgImFscGhhIikpCmBgYAoKCmBgYHtyfQpvdXQgPC0gYXMuZGF0YS5mcmFtZShmaXQsIHBhcnMgPSAieCIpCgpvdXRfbG9uZyA8LSBvdXQgJT4lIAoJZ2F0aGVyKGl0ZXIsIHRpbWUpICU+JSAKCWdyb3VwX2J5KGl0ZXIpICU+JSAKCXN1bW1hcmlzZShsb3dlciA9IHF1YW50aWxlKHRpbWUsIHByb2JzID0gLjAyNSksCgkJCQkJCW1lZGlhbiA9IHF1YW50aWxlKHRpbWUsIHByb2JzID0gLjUpLAoJCQkJCQl1cHBlciA9IHF1YW50aWxlKHRpbWUsIHByb2JzID0gLjk3NSkpICU+JSAKCW11dGF0ZShpbmRleCA9IHBhcnNlX2ludGVnZXIoc3RyX2V4dHJhY3QoaXRlciwgIlxcZHsxLDR9IikpKSAlPiUgCglhcnJhbmdlKGluZGV4KSAlPiUgCglhZGRfY29sdW1uKGRhdGUgPSBhbGxlbXAkZGF0ZSkKYGBgCgoKYGBge3J9Cm91dF9sb25nICU+JSAKCWdncGxvdChhZXMoZGF0ZSkpKwoJZ2VvbV9yaWJib24oYWVzKHltaW4gPSBsb3dlciwgeW1heCA9IHVwcGVyKSwgYWxwaGEgPSAuNSwgZmlsbCA9IHVuY2dfcGFsW1syXV0pKwoJc2NhbGVfeF9kYXRlKCkrCglnZW9tX3BvaW50KGRhdGEgPSBnZHBfZGF0LCBhZXMoZGF0ZSwgdmFsdWUpLCBjb2xvciA9IHVuY2dfcGFsW1sxXV0pKwoJbGFicygKCQl0aXRsZSA9ICJOb3djYXN0aW5nIFVTIEdEUCIsCgkJc3VidGl0bGUgPSAiVXNpbmcgRW1wbG95bWVudFxuSW5kdXN0cmlhbCBQcm9kdWN0IE1vbnRobHkgUGVyYyBDaGFuZ2UiLAoJCXkgPSAiR0RQIiwKCQl4ID0gTlVMTAoJKQpgYGAKCkl0IGxvb2tzIG91ciBtb2RlbCBkb2VzIGZhaXJseSB3ZWxsIGluIHByZWRpY3RpbmcgR0RQLCBhdCBsZWFzdCBzaW5jZSAyMDE1IG9yIHNvIQo=


Intermediate Macroeconomics
me.dewitt.jr@gmail.com

Code licensed under the BSD 3-clause license
Text licensed under the CC-BY-ND-NC 4.0 license

See the Repository


Copyright © 2020 Michael DeWitt