Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Chapter 23 — Impulse Response Functions

In the previous chapter, we introduced VAR models as systems of interacting time series.

VAR models allow:

to be modeled jointly.

But VAR coefficient tables are often difficult to interpret directly.

Suppose we estimate a VAR involving:

A natural question immediately arises:

Impulse response functions (IRFs) were developed precisely to answer such questions.

IRFs trace:

This chapter introduces:

The emphasis remains intuition-first and applications-oriented.


Learning Objectives

By the end of this chapter, you should be able to:


23.1 Why Impulse Responses Matter

Economic systems are dynamic.

A shock today may influence variables:

For example:


23.2 What Is an Impulse Response Function?

The response is tracked period by period.


Example

Suppose interest rates suddenly increase unexpectedly.

We may ask:

IRFs attempt to answer these questions visually and dynamically.


23.3 Why VAR Coefficients Are Difficult to Interpret

In univariate models, coefficients are often interpreted directly.

VAR systems are different.

Because variables interact dynamically:

A shock today may influence:

This is why IRFs became one of the central tools of modern macroeconomics and finance.


23.4 Intuition: Dropping a Stone into Water

A useful analogy is:

Dropping a stone into water.

The initial splash creates waves.

The waves then:

Economic shocks behave similarly.



23.5 Impulse Responses in a VAR

Consider a VAR involving:

Suppose an unexpected interest-rate shock occurs today.

The VAR traces:


Dynamic Feedback

Because variables interact:

This creates rich dynamic behavior.


Example

Suppose central banks unexpectedly raise interest rates.

Possible dynamic effects include:

PeriodPossible Effect
immediateborrowing becomes more expensive
short runinvestment falls
medium runoutput slows
longer runinflation declines


23.6 Reading Impulse Response Functions

Impulse response functions contain several types of economic information.

When reading an IRF, economists often focus on:


Direction

Does the response move:


Timing

Does the response occur:


Persistence

Do effects disappear quickly?

Or do they remain for many periods?


Stability

Does the response eventually return toward zero?


Oscillation

Some responses:

This often reflects rich dynamic feedback within the system.


Positive and Negative Responses

Impulse responses may be:

For example:


23.7 Common Shapes of Impulse Responses

Impulse responses may display several common dynamic patterns.

Understanding these patterns helps economists interpret dynamic systems more effectively.

Rapidly Decaying Response

Some shocks disappear quickly.

This suggests:

Source
import numpy as np
import matplotlib.pyplot as plt

h = np.arange(15)

irf = np.exp(-0.8*h)

plt.figure(figsize=(7,4))

plt.plot(h, irf, marker="o")

plt.axhline(0, linestyle="--", linewidth=1)

plt.title("Rapidly Decaying Impulse Response")
plt.xlabel("Horizon")
plt.ylabel("Response")

plt.tight_layout()

plt.savefig("figs/ch23/rapid_decay.png",
            dpi=300,
            bbox_inches="tight")

plt.close()
Rapid Decay IRF

Persistent Response

Some shocks decay only gradually.

This suggests:

Source
h = np.arange(20)

irf = 0.95**h

plt.figure(figsize=(7,4))

plt.plot(h, irf, marker="o")

plt.axhline(0, linestyle="--", linewidth=1)

plt.title("Persistent Impulse Response")
plt.xlabel("Horizon")
plt.ylabel("Response")

plt.tight_layout()

plt.savefig("figs/ch23/persistent_irf.png",
            dpi=300,
            bbox_inches="tight")

plt.close()
Persistent Response IRF

Oscillating Response

Some systems overshoot and oscillate before stabilizing.

This may reflect:

Source
h = np.arange(20)

irf = np.exp(-0.15*h) * np.cos(1.2*h)

plt.figure(figsize=(7,4))

plt.plot(h, irf, marker="o")

plt.axhline(0, linestyle="--", linewidth=1)

plt.title("Oscillating Impulse Response")
plt.xlabel("Horizon")
plt.ylabel("Response")

plt.tight_layout()

plt.savefig("figs/ch23/oscillating_irf.png",
            dpi=300,
            bbox_inches="tight")

plt.close()
Oscillating IRF

Explosive Response

An unstable system may produce impulse responses that grow through time.

This suggests:

Source
h = np.arange(12)

irf = 1.15**h

plt.figure(figsize=(7,4))

plt.plot(h, irf, marker="o")

plt.axhline(0, linestyle="--", linewidth=1)

plt.title("Explosive Impulse Response")
plt.xlabel("Horizon")
plt.ylabel("Response")

plt.tight_layout()

plt.savefig("figs/ch23/explosive_irf.png",
            dpi=300,
            bbox_inches="tight")

plt.close()
Explosive IRF

23.8 Why Orthogonalization Is Necessary

A major complication arises because VAR shocks are often correlated.

For example:

may occur simultaneously.

This creates an important problem.

This is the motivation for orthogonalization.

23.9 Cholesky Decomposition

One common solution is:

Cholesky decomposition

This transforms correlated shocks into orthogonal shocks.

Intuition

Suppose stock returns and volatility both move unexpectedly today.

Cholesky decomposition attempts to separate:

This allows impulse responses to trace cleaner dynamic effects.

23.10 Ordering and Identification

Orthogonalized impulse responses depend on variable ordering.

Example ordering:

  1. returns

  2. volatility

  3. interest rate

This ordering implicitly imposes assumptions about contemporaneous relationships.

For example:

Why Ordering Matters

Different orderings may produce:

This is one reason IRFs should be interpreted carefully.


23.11 Structural Interpretation

Reduced-form VARs describe:

But economists are often interested in structural interpretation.

For example:

What is a monetary policy shock?

Answering this requires economic theory and identifying assumptions.

Structural interpretation requires assumptions about the economic system.

Structural interpretation requires assumptions.


23.12 Confidence Intervals and Uncertainty

Impulse responses are estimated statistically.

Therefore they contain uncertainty.

Confidence intervals help assess statistical precision.


Interpretation

Wide confidence bands imply:

Responses close to zero may not be economically meaningful.


23.13 Estimating IRFs in Python

We now estimate impulse responses using a financial VAR system.

The system contains:

This example is useful because:

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from statsmodels.tsa.api import VAR

# Download data
spy = yf.download(
    "SPY",
    start="2015-01-01",
    auto_adjust=False
)

# Compute returns
returns = 100 * np.log(
    spy["Adj Close"] /
    spy["Adj Close"].shift(1)
)

returns = returns.dropna()

# Volatility proxy
volatility = returns.rolling(20).std()

# Combine variables
data = pd.concat(
    [returns, volatility],
    axis=1
)

data.columns = [
    "Returns",
    "Volatility"
]

data = data.dropna()

# Estimate VAR
model = VAR(data)

results = model.fit(2)

# Impulse responses
irf = results.irf(12)

fig, axes = plt.subplots(
    2,2,
    figsize=(10,8),
    facecolor="white"
    )

# plt.style.use("default")
irf.plot()

plt.savefig("figs/ch23/irf.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
IRF

23.14 Interpreting the IRF Results

Figure above shows impulse responses for the VAR system containing:

Several important dynamic patterns emerge.


Returns Shock → Returns

The response of returns to their own shock decays very quickly.

This suggests:


Volatility Shock → Volatility

Volatility responses are much more persistent.

The effects decay only gradually through time.

This is one reason volatility modeling becomes especially important in finance.


Cross-Variable Responses

The off-diagonal impulse responses show how shocks propagate across variables.

For example:

This illustrates the dynamic feedback captured by VAR systems.


Confidence Bands

The dashed lines represent confidence intervals.

Wide confidence bands imply:

Responses close to zero may not be economically meaningful.


General Interpretation

Impulse responses help answer questions such as:


23.15 Forecast Error Variance Decomposition (FEVD)

Impulse responses show how shocks propagate dynamically.

Another important question is:

Forecast Error Variance Decomposition (FEVD) helps answer this question.

FEVD measures how much forecast uncertainty comes from different shocks.


Intuition

Suppose volatility forecasts are highly uncertain.

FEVD asks:


23.16 Interpreting FEVD Results

Impulse responses are especially useful because they connect:

Examples include:


FEVD tables summarize the relative importance of different shocks.

For example:


23.17 Impulse Responses and Economic Theory

Suppose central banks unexpectedly raise interest rates.

Possible impulse responses:

VariablePossible Response
inflationdeclines gradually
GDPslows
unemploymentrises
exchange rateappreciates

Delayed Effects

Many macroeconomic responses occur only after several periods.

This is sometimes called:

policy transmission lag

23.18 Impulse Responses in Finance

IRFs are also widely used in finance.

Examples include:


Example

Question:

How does a U.S. market shock affect Asian stock markets?

VAR and IRF methods are commonly used to study such problems.


23.19 IRFs and Stability

In stable systems:

In unstable systems:



23.20 Generalized Impulse Responses

Standard orthogonalized IRFs depend on ordering assumptions.

An alternative approach is Generalized Impulse Responses

Generalized IRFs reduce sensitivity to variable ordering.

Trade-Off

Orthogonalized IRFs:

Generalized IRFs:


23.21 Gretl Example: Impulse Responses

Gretl provides built-in tools for IRF analysis.


Step 1

Estimate a VAR model.

Menu:

Model → Time Series → VAR

Step 2

From the VAR output window:

Analysis → Impulse responses

Step 3

Choose:


[GRETL Screenshot Placeholder: IRF settings]

23.22 Reading IRF Graphs

Typical IRF graphs show:

The zero line is especially important.



23.23 Common Mistakes


23.24 Looking Ahead

Impulse responses allow us to move from:

toward:

The next chapter introduces Vector Error Correction Models (VECMs), which combine:

within a unified framework.

We will move from

toward:


Key Takeaways

Concept Check

Basic

  1. What is an impulse response function (IRF)?

  2. What does a “shock” represent in a VAR model?

  3. Why are IRFs used instead of directly interpreting VAR coefficients?


Intuition

  1. Explain the “stone in water” analogy for impulse responses.

  2. Why do economic shocks often have effects over multiple periods?

  3. What does it mean for a shock to “propagate” through a system?


Dynamics

  1. What is the difference between:

    • contemporaneous effects

    • lagged effects

  2. Why do impulse responses often decay over time?


Challenge

  1. What does it mean if an impulse response does not decay?


Interpretation & Practice

  1. An IRF shows:

  1. An IRF shows a negative response after a positive shock.

    • What does this suggest about the relationship?

  2. An IRF oscillates before stabilizing.

    • What might this indicate?

  3. An IRF is close to zero at all horizons.

    • What does this imply?


Persistence

  1. A shock has effects that persist for many periods.

    • What does this suggest about the system?

  2. A shock disappears quickly.

    • What does this imply?


Confidence Bands

  1. Confidence intervals are wide.

    • What does this imply?

  2. Confidence bands include zero.

    • What does this suggest?


Challenge

  1. Why should IRFs always be interpreted together with confidence intervals?


Orthogonalization & Identification

  1. Why are VAR shocks often correlated?

  2. What is orthogonalization?

  3. What does Cholesky decomposition do?


Ordering

  1. Why does variable ordering matter?

  2. What assumption is made when a variable is ordered first?

  3. What assumption is made when a variable is ordered last?


Interpretation

  1. Why are IRFs not automatically causal?


Challenge

  1. How can different ordering assumptions change conclusions?


Numerical & Graph Interpretation

Interpreting an Impulse Response Function

  1. Consider the following impulse response function:

Source
import numpy as np
import matplotlib.pyplot as plt

horizon = np.arange(10)

# stylized IRF: rise → peak → decay
irf = [0.0, 0.5, 0.9, 1.2, 1.0, 0.7, 0.4, 0.2, 0.1, 0.0]

plt.figure(figsize=(8,4))
plt.plot(horizon, irf, marker='o')

plt.axhline(0, linestyle='--', linewidth=1)

plt.title("Stylized Impulse Response Function")
plt.xlabel("Horizon")
plt.ylabel("Response")

plt.tight_layout()

plt.savefig("figs/ch23/irf_Q.png", dpi=300, bbox_inches="tight")
plt.close()   # replace with plt.show()
IRF


Reading an IRF

  1. Suppose an IRF shows:



Cumulative Effects

  1. Why might we use cumulative impulse responses?

  2. Suppose cumulative IRF increases steadily.


Stability

  1. Suppose IRFs grow larger over time.


Comparison

  1. Two IRFs:



Challenge

  1. Suppose a shock produces different responses depending on ordering.


Appendix 23A — Orthogonalized vs Generalized IRFs

Orthogonalized IRFs:

Generalized IRFs:

Different approaches may produce somewhat different results.



VAR coefficient matrices are often difficult to interpret directly.

Impulse responses became popular because they:

They transformed VAR analysis from:

large coefficient tables

into dynamic economic interpretation.