This project is read-only.

conditional forecasting with SVAR

May 7, 2014 at 7:12 PM

I would like to make conditional forecasts (or scenarios) with a SVAR, conditioning on both certain endogenous variable(s) and certain shock processes/residuals.

I have tried to use the following command

cfdb = forecast(sv_HDmedian,data,first_fcst:last_fcst,db_tune);

or alternatively

cfdb = forecast(sv_HDmedian,data,first_fcst:last_fcst,db_tune,'omega=' myomega);

In particular the conditioning database db_tune has the following structure
                        stress: [0x1 tseries]
                             MW: [0x1 tseries]
                            YER: [0x1 tseries]
                           PGDP: [0x1 tseries]
                            RAP: [0x1 tseries]
    r_new_loans_banks_corrected: [16x1 tseries]
                     int_spread: [0x1 tseries]
                       LOANLOSS: [16x1 tseries]
                   res_LOANLOSS: [16x1 tseries]
                         res_MW: [0x1 tseries]
                       res_PGDP: [16x1 tseries]
                        res_RAP: [16x1 tseries]
                        res_YER: [16x1 tseries]
                 res_int_spread: [16x1 tseries]
res_r_new_loans_banks_corrected: [0x1 tseries]
                     res_stress: [0x1 tseries]

Hence, I'm trying to condition on the endogenous variable r_new_loans_banks_corrected, and on a number of shock processes /residuals. The problem is that conditioning on the shock processes does not seem to affect the conditional forecast at all.

There is probably something that I have not done correctly here.

Many thanks in advance for any help.

Br. Markus
May 8, 2014 at 12:42 PM
Edited May 8, 2014 at 12:52 PM
Hi Markus

For backward compatibility reasons, and contrary to what the documentation actually says, you unfortunately need to enter the tunes on residuals through the input database (i.e data in your example), and not through the conditioning dabatabase (db_tune in your example). I apologize for this mess. At some point, I'm going to rewrite and streamline both VAR/forecast and model/jforecast so that the syntax how users enter conditioning information is the same.

In the meantime, I'll fix the behavior of VAR/forecast so that you will be able to enter the residual tunes also the way you do it (through the conditioning database).

Keep also in mind that those are not tunes on residuals, but on the mean of the distribution for residuals.

Again, sorry about this.

Marked as answer by jaromirbenes on 5/8/2014 at 9:22 AM
May 8, 2014 at 1:11 PM

Hi Jaromir,

Many thanks for the reply!

>>Keep also in mind that those are not tunes on residuals, but on the mean of the distribution for residuals.

So I guess that this basically means that I should also modify the variance-covariance matrix (putting certain variances to zero, or close to zero), in order to hit the target path of residuals / shocks.

Br. Markus

May 8, 2014 at 1:15 PM
Exactly right. (And remember to zero the entire columns and rows :)))

You should, of course, still keep enough "degrees of freedom" in the covariance matrix to hit the conditions for the endogenous variables.

Jun 15, 2015 at 10:29 AM
Edited Jun 16, 2015 at 4:28 PM

I have a question closely related to the discussion in this thread, i.e. about conditional forecasting with an SVAR model (identified by recursive Cholesky ordering).
Can anyone explain to me why conditional forecasting on future residuals/shocks produces the same results regardless of whether I employ a structural or a reduced form VAR?

I understand that unconditional forecasts and conditional forecasts on future endogenous variables should be identical for VARs/SVARs, which they are, but shouldn't the imposed identification scheme of the model matter when conditioning on future shocks?

In particular, with the estimated VAR model v, the SVAR model sv, and the database M, the following code produces identical forecasts conditioned on a future shock in the IR variable:
j_reduced.res_IR(startFcast:endFcast) = [1 0 0 0 0 0 0 0]
j_struct.res_IR(startFcast:endFcast) = [1/0.1635 0 0 0 0 0 0 0]; 

cfcst_reduced = forecast(v,M,startFcast:endFcast,j_reduced); 
cfcst_struct = forecast(sv,M,startFcast:endFcast,j_struct); 
with 0.1635 determined as the respective entry in the B matrix of instantaneous shock effects (B = get(sv,'B')

I'd also very much appreciate references to relevant literature clarifying how the conditional forecasting is carried out. The only information I've found (link) states that the forecast function is based on Waggoner and Zha (1999). However, as I see it that paper only covers forecasting conditional on observables, not on future shocks/residuals.
[edit end]
Many thanks in advance for any help.