bvar icon indicating copy to clipboard operation
bvar copied to clipboard

Noise added to unconditional forecast

Open syrop87 opened this issue 2 years ago • 2 comments

Hello,

First, thanks a lot for developing the package! I am relying on it heavily in my daily work.

However, only recently I started to doubt if I understand the details of how the BVAR unconditional forecasts are generated. In predict method there is a line made to add noise to a forecast generated with compute_fcast method.

fcast_store[["fcast"]][i, , ] <- fcast_base + t(crossprod(sigma[j, , ], matrix(rnorm(M * fcast[["horizon"]]), nrow = M)))

I have a two questions on that:

  1. It looks like we want to augment fcast_base with a set of shocks drawn from $N(0, \Sigma)$. But to get that, shouldn't we multiply a sample drawn form $N(0,1)$ by $L$ defined so $\Sigma=LL^T$ (e.g. obtained with Cholesky decomp), instead of multiplying that sample by the covariance matrix itself?
  2. More generally, wouldn't it be more appropriate to add the noise within compute_fcast in a period-by-period manner? I mean doing that within a core loop in compute_fcast, so that Y_f[i+1,] is calculated based Y_f[i, ] that is consistent with added period i noise/shock. Adding all the shocks as a batch after the full path of base forecast was calculated seems inconsistent. The loop that I refer to:
for(i in seq.int(2, 1 + horizon)) {
    Y_f[i, ] <- tcrossprod(Y_f[i - 1, ], beta_comp) +
      c(beta_const, rep(0, M * (lags - 1))) # Maybe go back to normal beta
  }

Thanks,

Pawel

syrop87 avatar Sep 25 '23 10:09 syrop87

Hey Pawel, You raise good points. I'd have though that sigma is already the Cholesky factor (may be wrong), but the forecast definitely seems off to me. I'll have to put a closer investigation off until a later date, but thanks for raising the issue! Best, Nikolas

nk027 avatar Oct 01 '23 16:10 nk027

Hey @syrop87, your observation wrt to the forecasting noise hits the mark – seems that I introduced this bug while over-optimizing vectorization. We're putting off a fix until the next version, but a patched version of the package is available here: https://github.com/nk027/bvar/tree/dev_fcasts.

nk027 avatar Feb 16 '24 14:02 nk027