Shock in exogenous variables in a SVAR

Questions and discussions on Vector Autoregressions
torresgc
Posts: 1
Joined: Mon Aug 08, 2011 5:38 pm

Shock in exogenous variables in a SVAR

Unread post by torresgc »

Hello. I could help. How I can generate shocks of 1% in the exogenous variables in a SVAR program?
Thanks for any help! (e-mail address: torresgc@bccr.fi.cr)
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

torresgc wrote:Hello. I could help. How I can generate shocks of 1% in the exogenous variables in a SVAR program?
Thanks for any help! (e-mail address: torresgc@bccr.fi.cr)
This may be a bit more than you need (it does MC integration for the response), but it shows the general idea. You create a placeholder equation which has the exogenous variable as its dependent variable, and shock that using the SHOCKS option on IMPULSE. To get 1%, you would use the option
shocks=.01*%unitv(%nvar+1,%nvar+1)

Code: Select all

*
* Monte Carlo integration with shock to "exogenous" variable
*
compute lags=4				;*Number of lags
compute nstep=16			;*Number of response steps
compute ndraws=10000		;*Number of keeper draws
*
open data haversample.rat
cal(q) 1959
data(format=rats) 1959:1 2006:4 ftb3 gdph ih cbhm
*
set loggdp = log(gdph)
set loginv = log(ih)
set logc   = log(cbhm)
*
* T-Bill rate is treated as exogenous
*
system(model=varmodel)
variables loggdp loginv logc
lags 1 to lags
det constant ftb3{1 to 4}
end(system)
*
* Define placeholder equation to allow shock to T-bills.
*
equation(empty) rateeq ftb3
*
******************************************************************
estimate
compute nshocks=1
compute nvar   =%nvar
compute fxx    =%decomp(%xx)
compute fwish  =%decomp(inv(%nobs*%sigma))
compute wishdof=%nobs-%nreg
compute betaols=%modelgetcoeffs(varmodel)
*
declare vect[rect] %%responses(ndraws)
declare rect[series] impulses(nvar,nvar)

infobox(action=define,progress,lower=1,upper=ndraws) "Monte Carlo Integration"
do draw=1,ndraws
   *
   * On the odd values for <<draw>>, a draw is made from the inverse Wishart
   * distribution for the covariance matrix. This assumes use of the
   * Jeffrey's prior |S|^-(n+1)/2 where n is the number of equations in
   * the VAR. The posterior for S with that prior is inverse Wishart with
   * T-p d.f. (p = number of explanatory variables per equation) and
   * covariance matrix inv(T(S-hat)).
   *
   * Given the draw for S, a draw is made for the coefficients by adding
   * the mean from the least squares estimate to a draw from a
   * multivariate Normal with  (factor of) covariance matrix as the
   * Kroneker product of the factor of the draw for S and a factor of
   * the X'X^-1 from OLS.
   *
   * On even draws, the S is kept at the previous value, and the
   * coefficient draw is reflected through the mean.
   *
   if %clock(draw,2)==1 {
      compute sigmad  =%ranwisharti(fwish,wishdof)
      compute fsigma  =%decomp(sigmad)
      compute betau   =%ranmvkron(fsigma,fxx)
      compute betadraw=betaols+betau
   }
   else
      compute betadraw=betaols-betau
   *
   * Push the draw for the coefficient back into the model.
   *
   compute %modelsetcoeffs(varmodel,betadraw)
   *
   * Shock the combination of the VAR + the placeholder equation with a
   * unit shock to the placeholder.
   *
   impulse(noprint,model=varmodel+rateeq,shocks=%unitv(%nvar+1,%nvar+1),$
     result=impulses,steps=nstep)
   *
   * Save the impulse responses
	*
   dim %%responses(draw)(nvar*nshocks,nstep)
   ewise %%responses(draw)(i,j)=ix=%vec(%xt(impulses,j)),ix(i)
   infobox(current=draw)
end do draw
infobox(action=remove)
*
@mcgraphirf(model=varmodel,shocklabels=||"To Interest Rate"||)
Ozmando
Posts: 52
Joined: Sun Jul 15, 2012 4:04 pm

Re: Shock in exogenous variables in a SVAR

Unread post by Ozmando »

Hi Everyone. I need more help with this code please. Is there a way to modify the code so that the impulse response functions graph only the response to the exogenous shocks? Thanks. Oz
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

That's what this does. The only shock analyzed is to the variable treated as exogenous.
Ozmando
Posts: 52
Joined: Sun Jul 15, 2012 4:04 pm

Re: Shock in exogenous variables in a SVAR

Unread post by Ozmando »

TomDoan wrote:That's what this does. The only shock analyzed is to the variable treated as exogenous.
TomDan thanks. However, I notice that the IFR of LOGC do not correspond to the estimates of the coefficients of FTB(?) They appear to be fine for other variables.
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

Look fine to me. LOGC is the only equation that has a negative coefficient on lag one of FTB3. Beyond lag one, it's very hard to tell what will happen just by eyeballing the coefficients.
Ozmando
Posts: 52
Joined: Sun Jul 15, 2012 4:04 pm

Re: Shock in exogenous variables in a SVAR

Unread post by Ozmando »

More query please: if I read the data into rats into a panel format and I introduce country dummies as exogenous variables. Can that be treated as a panel SVAR? If not is there a way to estimate panel SVAR in the context of exogenous shocks?
Thanks
oz
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

In your panel SVAR, what's heterogeneous and what's homogeneous? What you're describing would seem to have only the intercepts being heterogeneous, which is a rather strong assumption, generally only appropriate if you have a limited amount of data per country. And if you have that, then the small-sample bias in the fixed effects estimator could be quite severe.
Ozmando
Posts: 52
Joined: Sun Jul 15, 2012 4:04 pm

Re: Shock in exogenous variables in a SVAR

Unread post by Ozmando »

TomDoan wrote:That's what this does. The only shock analyzed is to the variable treated as exogenous.
Hi Tom,
Sorry to bother again: If I am right the coefficients obtained are the mean response? is there away to also obtain the cumulative response (let's say after 3 period) and their confidence band?
Thanks
Oz
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

Use the ACCUMULATE instruction. See, for instance, what the BQDODRAWS procedure does.
wfirew
Posts: 5
Joined: Thu Jun 21, 2012 8:16 am

Re: Shock in exogenous variables in a SVAR

Unread post by wfirew »

I am estimating a vector error correction model (vecm) and a shock to the exogenous variable as described above does not work. Any suggestion?
Best,
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

wfirew wrote:I am estimating a vector error correction model (vecm) and a shock to the exogenous variable as described above does not work. Any suggestion?
Best,
Why not?
wfirew
Posts: 5
Joined: Thu Jun 21, 2012 8:16 am

Re: Shock in exogenous variables in a SVAR

Unread post by wfirew »

It works fine for VAR. Then, I have modified the code as follow for vecm (leaving the MC part). When I run it, the programs freezes prompting me to close the program.

Code: Select all

*
* Monte Carlo integration with shock to "exogenous" variable
*
compute lags=4            ;*Number of lags
compute nstep=16         ;*Number of response steps

*
open data haversample.rat
cal(q) 1959
data(format=rats) 1959:1 2006:4 ftb3 gdph ih cbhm
*
set loggdp = log(gdph)
set loginv = log(ih)
set logc   = log(cbhm)
*
* T-Bill rate is treated as exogenous
*
setset dftb3  = ftb3 - ftb3{1}
equation(coeffs=||1.0,0.3,0.3,0.3||) ect1
# loggdp loginv logc ftb3

system(model=vecmmodel)
variables loggdp loginv logc
lags 1 to lags
ect ect1
det constant dftb3{0 to 3}
end(system)
*
* Define placeholder equation to allow shock to T-bills.
*
equation(empty) rateeq ftb3
*
******************************************************************
estimate

impulse(noprint,model=vecmmodel+rateeq,shocks=%unitv(%nvar+1,%nvar+1),$
     result=impulses,steps=nstep)

I have one more concern that is dftb3 is just another exogenous variable instead of the difference of ftb3. But I want the difference of ftb3 outside the co-integrating vector as an exogenous while ftb3 is in the cointegrating vector.
TomDoan
Posts: 7814
Joined: Wed Nov 01, 2006 4:36 pm

Re: Shock in exogenous variables in a SVAR

Unread post by TomDoan »

You need the %MODELSUBSTECT function as shown in this:

impulse(noprint,model=%modelsubstect(vecmmodel)+rateeq,shocks=%unitv(%nvar+1,%nvar+1),$
result=impulses,steps=nstep)
wfirew
Posts: 5
Joined: Thu Jun 21, 2012 8:16 am

Re: Shock in exogenous variables in a SVAR

Unread post by wfirew »

Thanks for the quick response Tom,
It is working now. I have one question tough. I wanted to use short and long to identify other shocks. Therefore, I coded (using just sr restriction as an example) as attached below. Is this a correct way?
I know that it does not matter for the particular shock to the exogenous variable.
One last question which was not clearly put on the last post was about including the difference of ftb3 (the exogenous variable) in the VECM. Assuming ftb3 is I(1), I have to difference it before including it in the VECM where everything is I(0). But, the way I did it a shock to ftb3 does not affect dftb3 (=ftb3 - ftb3 {1})
I want a shock to ftb3 to also affect dftb3. How do I do that?

Code: Select all

*
* Monte Carlo integration with shock to "exogenous" variable
*
compute lags=4            ;*Number of lags
compute nstep=16         ;*Number of response steps
compute ndraws=10000      ;*Number of keeper draws
*
open data "C:\Program Files (x86)\Estima\WinRATS 7\haversample.rat"
cal(q) 1959
data(format=rats) 1959:1 2006:4 ftb3 gdph ih cbhm
*
set loggdp = log(gdph)
set loginv = log(ih)
set logc   = log(cbhm)
*
* T-Bill rate is treated as exogenous
*
setset dftb3  = ftb3 - ftb3{1}
equation(coeffs=||1.0,0.3,0.3,0.3||) ect1
# loggdp loginv logc ftb3

system(model=vecmmodel)
variables loggdp loginv logc
lags 1 to lags
ect ect1
det constant dftb3{0 to 3}
end(system)
*
* Define placeholder equation to allow shock to T-bills.
*
equation(empty) rateeq ftb3
*
******************************************************************
estimate
 	dec rect lr(3,3) sr(3,3)
	input lr
	. . . 
	. . .  
	. . . 
   
	input sr
	. . 0 
	. . 0  
	. 0 . 
	
  dec rect rh(1,4) rv(3,1)
  input rv 
  0 0 0  
  input rh
  0 0 0 1
   dis rv rh
  impulse(model=%modelsubstect(vecmmodel),factor=%identity(3),results=baseimp,noprint,steps=500)
   compute lrsum=%xt(baseimp,500)

@ShortAndLong(lr=lr,sr=sr,masum=lrsum) %sigma f
   compute f=f~rv~~rh

impulse(noprint,model=%modelsubstect(vecmmodel)+rateeq, factor=f, $
     result=impulses,steps=nstep)
Post Reply