Thursday, June 23, 2016

Impulse Responses by Local Projections

Author and guest post by Eren Ocakverdi.

Vector Autoregression (VAR) is a standard tool for analyzing interactions among variables and making inferences about the historical evolution of a system (e.g., an economy). When doing so, however, interpreting the estimated coefficients of the model is generally neither an easy or useful task due to complicated dynamics of VARs. As Stock and Watson (2001) aptly puts it, impulse responses are reported as a more informative statistic instead.

The Impulse Response Function (IRF) measures the reaction of the system to a shock of interest. Unfortunately, when the underlying data generating process (DGP) cannot be well approximated by a VAR(p) process, IRFs derived from the model will be biased and misleading. Jordà (2005) introduced an alternative method for computing IRFs based on local projections that do not require specification and estimation of the unknown true multivariate dynamic system itself1.

The usual presentation of IRFs is through visualizing the dynamic propagation mechanism accompanied by error bands. In addition to marginal error bands, Jordà (2009) introduced two new sets of bands to represent uncertainty about the shape of the impulse response and to examine the individual significance of coefficients in a given trajectory. In this framework, it becomes straightforward to impose restrictions on impulse response trajectories and formally test their significance.

The EViews add-in “localirfs” implements the methodology outlined in Jordà (2009). The add-in is designed as a complementary tool for the existing VAR object and can also be run from the command line. In that respect, it is similar to the “hdecomp” or “svarpatterns” add-ins. For details, please see the information in the documentation that comes with the add-in2. Note that although the local projection methodology does not depend on the previous estimation of a VAR, the localirfs add-in must be used on an existing EViews VAR object.

Jordà (2009) uses the three-variable monetary VAR model of Stock and Watson (2001), where the inflation, unemployment, and federal funds rate variables used in that study are extended to cover the 1960q1-2007q1 period. These particular data are used for demonstrating the use of the add-in as well.

First, we import the data into EViews:

import .\swqdata.csv names=(P,UN,FF) @freq q 1960Q1

Then build a VAR model with the longest possible lag:

var 1 14 p un ff

Now let the add-in find the optimal lag length based on a corrected version of AIC using the covariance matrix “unadjusted” for degrees of freedom.


You can safely skip previous steps if you have already built a VAR model of your own. In that case, it is straightforward to obtain the local projection IRFs and compare the results with regular IRFs generated by the VAR itself:


If you like, you can also use the GUI:

The resulting output will be a graph object that contains 3x3 charts similar to those produced by EViews’ VAR object. Solid lines with circles are regular IRFs, while remaining solid lines are local projection IRFs with associated marginal error bands:

Impulse response coefficient estimates can suffer from serial correlation, which may lead to wider marginal error bands. Conditional error bands help remove the variability caused by the serial correlation. Conditional error bands are consistent with the joint null of significance and give a better sense about the significance of individual responses. In the absence of correlation among impulse response coefficients, marginal and conditional bands would be similar (Jordà, 2009).
In order to obtain conditional error bands and save the correlation matrix of estimated impulse coefficients to the workfile, simply run the following:


Note that the chart titles include the resulting p-values of two null hypotheses: i) “Joint”refers to the null that all the response coefficients are jointly zero, ii) “Cumulative” refers to the null that the accumulated impulse response after 24 periods is zero.

Another way to construct error bands is by applying Scheffé’s method to approximate simultaneous confidence coverage3. For instance, you can obtain the percentile bound for the 50th percentile by4:


You can test the equality of two responses. In order to compare the response of unemployment (2nd variable) to a shock in inflation (1st variable) with the response of interest rate (3rd variable) to a shock in interest rate (3rd variable):

swmodel.localirfs(horizon=24,imp=4,equality="2 1 3 3")

The result will be a 1x2 matrix, where the columns hold the p-values associated with the hypothesis testing of joint and accumulated equality, respectively.

Finally, you can create a conditioning response path in order to examine the change in the system’s behavior. Jordà (2009) imposes a restriction on the response of inflation (1st variable) to a shock in interest rate (3rd variable) by subtracting 0.25 points from every coefficient.

First, we need to save the impulse response matrix:


Next, we extract the IRF of interest and construct the conditioning path:

vector condition = @columnextract(irf01,3) - 0.25*@ones(@rows(irf01))

Now we are ready to see how the response of the interest rate to a shock changes due to the conditioning path:

swmodel.localirfs(horizon=24,imp=4,cfact="3 3 1 3",cpath="condition",charts)

Solid (blue) lines with squares and associated dashed (blue) lines are the original impulse responses with conditional error bands. The solid (red) line with circles is the counterfactual response in the bottom graph, while it denotes the conditional response given this counterfactual in the top panel.

The p-value at the bottom of the graph is a test result measuring the distance between the conditioning event and the sample estimates5.

As for the change in the response of unemployment (2nd variable) to a shock in inflation (1st variable):

swmodel.localirfs(horizon=24,imp=4,cfact="2 3 1 3",cpath="condition",pvalue=2,charts)

Unlike the previous chart, the p-value at the bottom of the graph is obtained from an F-test.


Jordà, Ò. (2005). “Estimation and Inference of Impulse Responses by Local Projections,” American Economic Review, v. 95 (1), pp. 161–182.

Jordà, Ò. (2009). “Simultaneous Confidence Regions for Impulse Responses,” Review of Economics and Statistics, v. 91 (3), pp. 629–647.

Kilian, L., and Kim, Y. J (2009). “Do Local Projections Solve the Bias Problem in Impulse Response Inference?”, CEPR Discussion Paper Series 7266.

Lütkepohl, H., Staszewska-Bystrova, A. and Winker, P. (2013) “Comparison of Methods for Constructing Bands for Impulse Response Functions,” SFB649 Discussion Paper 2013-31, Humboldt University of Berlin.

Stock, J. H., and Watson, M. W. (2001). “Vector Autoregressions,” Journal of Economic Perspectives, v. 15 (4), pp. 101-115.

1  Please refer to Kilian and Kim (2009) for a criticism of this approach.
2  Special thanks to Eviews Rebecca for testing the code and comparing the output to that of original GAUSS source code. The usual disclaimer applies.
3  Please refer to Lütkepohl (2013) for a criticism of this method.
4  In his final version of the source code, Professor Jordà had made a revision to the computation of Scheffé error bands and adapted a step-down procedure, which creates wider intervals for the early responses. Please visit his website for details of his research:
5  In original study the p-value is reported as 0.217, which can only be obtained if you construct a conditioning path by substracting 0.30 instead of 0.25.


  1. Could you explain more what the the conditioned path is? Not familiar with this term in regards to IRPs. Additionally, for the comparison between Jorda Method & Wold Decomposition method of IRPs. When you specify structural decomposition, the wold method fails to show.

  2. I am using Eviews 9.0, but when executing local IRF, the following error messages pops up. "Eviews version 9.0 or higher must be installed to run the add-in".. How can I solve this problem? Thanks.

  3. Dear Eren Ocakverdi,
    I am using your local projections add-in, but it shows that
    "the use of add-in is expired. Please contact the author." My eviews is 9.0 version. How can I fix this problem?

    1. You can download the add-in in the eviews and then run the test.

  4. Same problem as previous post: "add-in is expired." ???

  5. For me personally, this is very important information that will allow me to finish some work that will significantly improve my professional level.

  6. How we can run non linear impluse responses using LP method,please?

  7. Hi can we do the Auerbach and Gorodnichenko (2012) state dependent LPIRF in eview.

  8. Hello! Could you explain haw to save the matrix with Joint and Cummulative tests? Thanks a lot!!

  9. Where can I find the data for this analysis?