Faust and Leeper JBES 1997 |
These are replication files for Faust and Leeper(1997), which looks at a pair of two-variable models with structural VAR's with long- and short-run restrictions (basically, the Blanchard-Quah model applied to different data sets). One uses the same GDP-unemployment rate combination of B-Q's paper; the other GDP and prices. In both cases, the structural model assumes that a shock which has a zero long-run effect on GDP is the "demand" shock. The other shock (which is determined entirely by the fact that it is orthogonal to the demand shock) is the "supply" shock. The object of the paper is to examine how well the "long-run" restriction identifies shocks.
There are three programs:
YUQUARTERLY.RPF
This is the same pair of series used in B-Q with the data set extended several more years. It estimates the model and uses the @BQDODRAWS, @MCGRAPHIRF and @MCFEVDTABLE procedures to do error bands for the responses and decomposition of variance for the model.
YPQUARTERLY.RPF
This is the same analysis but with the unemployment rate replaced by the inflation rate.
YUYPCOMPARE.RPF
This estimates both the YU and YP models, uses @STRUCTRESIDS to compute the structural residuals for each model and does some joint analysis of those.
YUQUARTERLY.RPF
This has quarterly U.S. data from 1948 to 1992. The two variables in the VAR are GDP in growth rates (required to be differenced to apply the Blanchard-Quah model), and the unemployment rate. Following B-Q, the growth rates are separately de-meaned with a sample split at 1973:4 and the unemployment rate is linearly detrended. The GDP adjustment would be based upon the notion that there was a change in the GDP growth rate that is due to factors outside the model. The unemployment adjustment is almost certainly unreasonable over a long time period.
open data faustleeper.rat
calendar(q) 1948
data(format=rats) 1948:1 1992:4 gdp87 unmale20 gdpdefl
*
set dlogrgdp = 100.0*(log(gdp87/gdp87{1}))
*
set dummy1 = t<=1973:4
set dummy2 = t>1973:4
*
linreg dlogrgdp
# dummy1 dummy2
set gdpadjust = %resids
*
* Also following BQ, the unemployment rate is linearly detrended
*
filter(remove=trend) unmale20 / uradjust
The model is estimated on the adjusted data using eight lags:
system(model=varmodel)
var gdpadjust uradjust
lags 1 to 8
det constant
end(system)
*
estimate(noprint)
The procedure @BQDODRAWS does Monte Carlo draws specifically for a two variable Blanchard-Quah identified model, that is a model where shock #2 is defined by a zero long-run response of variable #1 (with a positive impact on #1). This does 10000 draws for 40 steps. It defines the %%RESPONSES information that is used by the two other procedures.
@BQDoDraws(model=varmodel,draws=10000,steps=40)
@MCGRAPHIRF and @MCFEVDTABLE take the generated draws and produce impulse responses with error bands and similarly decomposition of variance.
@MCGraphIRF(model=varmodel,varlabels=||"Y","U"||,$
shocklabels=||"Supply","Demand"||)
*
disp "Table 1-Variance Decomposition. Percentage Explained by Demand Shock"
@MCFEVDTable(model=varmodel,varlabels=||"Y","U"||,percent=||.025,.50,.975||,$
shocklabels=||"Supply","Demand"||,table=byshock,$
horizons=||1,2,3,4,8,12,24,40||)
YPQUARTERLY.RPF
This is the same analysis but with the unemployment rate replaced by the inflation rate (which is computed from the GDP deflator). The inflation rate is demeaned separately over the same subsamples as GDP growth. The remainder of the program is basically the same as YUQUARTERLY.RPF.
open data faustleeper.rat
calendar(q) 1948
data(format=rats) 1948:1 1992:4 gdp87 unmale20 gdpdefl
*
set dlogrgdp = 100.0*(log(gdp87/gdp87{1}))
set dlogdefl = 100.0*(log(gdpdefl/gdpdefl{1}))
*
* De-mean both GDP growth and inflation with the same break
*
set dummy1 = t<=1973:4
set dummy2 = t>1973:4
*
linreg dlogrgdp
# dummy1 dummy2
set gdpadjust = %resids
*
linreg dlogdefl
# dummy1 dummy2
set padjust = %resids
YUYPCOMPARE.RPF
This estimates the two models above, and uses the procedure @STRUCTRESIDS to create the structural residuals (model shocks) from each of the models. For the YU model, this is done with
estimate(noprint,resids=yuresids)
*
compute factor=%bqfactor(%sigma,%varlagsums)
*
* Make sure that the two shocks have a positive impact on GDP (variable #1).
*
@impactsignflip factor ||+1,+1||
*
* Convert the VAR residuals to structural residuals
*
@structresids(factor=factor) yuresids / yushocks
@IMPACTSIGNFLIP is used to ensure that the impact of both the supply and demand shocks are positive on GDP. There is no guarantee that %BQFACTOR will produce that, as it is based upon a Cholesky factorization of a transformed matrix.
This computes a correlation matrix of the four structural shock series (two from the YU model, two from the YP model) and uses REPORT to display that (rearranging the results to group the demand and supply shocks together).
vcv(noprint,nocenter,matrix=cc)
# yushocks ypshocks
*
compute cc=%cvtocorr(cc)
*
report(action=define)
report(atrow=1,atcol=2,tocol=3,span) "Demand Shocks"
report(atrow=1,atcol=4,tocol=5,span) "Supply Shocks"
report(atrow=2,atcol=1,align=center) "Shocks" "YU-D" "YP-D" "YU-S" "YP-S"
report(atrow=3,atcol=1) "YU-D" cc(2,2) cc(2,4) cc(2,1) cc(2,3)
report(atrow=4,atcol=1) "YP-D" "" cc(4,4) cc(4,1) cc(4,3)
report(atrow=5,atcol=1) "YU-S" "" "" cc(1,1) cc(1,3)
report(atrow=6,atcol=1) "YP-S" "" "" "" cc(3,3)
report(action=format,picture="*.##",width=6)
report(action=show)
Output (from YUYPCOMPARE)
Demand Shocks Supply Shocks
Shocks YU-D YP-D YU-S YP-S
YU-D 1.00 0.65 -0.00 0.56
YP-D 1.00 -0.13 -0.00
YU-S 1.00 0.20
YP-S 1.00
This is the correlation of the structural shocks generated by the two models. Note that the 0's (showing as -0.00 because of round-off) are by construction for correlation between the S and D shocks from a given model. The point of the paper is that the "demand" and (especially) "supply" shocks from the two models aren't particularly similar.
Copyright © 2025 Thomas A. Doan