Economic variables rarely move independently.
A decline in building permits may eventually affect manufacturing activity. Tighter financial conditions may influence stock markets and investment. Changes in employment conditions may both affect and respond to broader economic activity.
This creates an important forecasting problem:
How can we model many economic variables together without creating an enormous and unstable model?
One solution is a Bayesian Vector Autoregression, commonly called a BVAR.
In this article, we will build an intuitive understanding of BVAR using the same practical problem:
Can several leading economic indicators help us forecast future ISM Manufacturing PMI?
Our Forecasting Problem
Suppose our target is the ISM Manufacturing PMI.
We want to forecast where PMI might be several months into the future using indicators such as:
| Variable | Economic intuition |
|---|---|
| ISM Manufacturing New Orders | Forward-looking information about manufacturing demand |
| 10Y–2Y Treasury Term Spread | Expectations about future economic conditions |
| Initial Jobless Claims | High-frequency labor-market signal |
| S&P 500 | Financial markets incorporate expectations about future conditions |
| Chicago Fed NFCI | Measures financial conditions and financial stress |
| Building Permits | Forward-looking signal for housing and construction |
| Copper Price | Indicator of industrial and global demand |
With a normal regression, we might write:
But this treats PMI as the main variable being explained while the other variables simply act as predictors.
A VAR takes a different approach.
The Core Idea Behind a VAR
A Vector Autoregression (VAR) assumes that several variables evolve together through time.
Instead of having only one dependent variable, every variable in the VAR is treated as endogenous.
Imagine a simplified system containing only:
A VAR might estimate:
But it also estimates:
and:
So the model does not simply ask:
“Does copper help predict PMI?”
It asks something broader:
“How do PMI, copper, claims and the other economic variables dynamically interact with each other through time?”
That is the basic idea behind a VAR.
Why Are Lags Important?
The AR in VAR stands for autoregression.
This means that past observations are used to explain current observations.
For example:
This makes sense economically.
A change in financial conditions today may not immediately affect manufacturing.
Instead:
The lag structure allows the model to capture these delayed relationships.
If we use two lags, for example, every equation considers information from the previous two periods.
The Problem with a Normal VAR
VARs have one major weakness:
They become very large very quickly.
Suppose we have eight variables:
and use six monthly lags:
Each equation potentially contains:
lag coefficients.
And because there are eight equations, the entire system contains roughly:
lag coefficients, before even considering intercepts and other parameters.
But macroeconomic datasets are often relatively small. We might have only 15–20 years of monthly observations. Now we are trying to estimate hundreds of relationships from only a few hundred observations.
This creates a serious risk of:
The model may explain historical data extremely well while producing poor forecasts.
This is where the Bayesian part becomes useful.
What Does the “Bayesian” Part Actually Do?
A Bayesian VAR is still a VAR.
The difference is that instead of allowing every coefficient to move completely freely, we introduce prior beliefs about what reasonable coefficients should look like.
Before observing the data, we might say:
“Most relationships between these variables probably aren’t extremely large.”
This can be represented conceptually as:
Instead of freely estimating huge coefficients, the prior encourages coefficients toward zero unless the data provides enough evidence to move them away.
This is called shrinkage.
The easiest way to think about it is:
The prior prevents the model from believing every historical relationship is equally important.
An Intuitive Example of Shrinkage
Suppose an ordinary VAR estimates:
Some of these large coefficients may simply result from noise.
A BVAR starts with a prior belief that many coefficients should probably be relatively small.
After combining the prior with the observed data, we might obtain something closer to:
The exact values are only illustrative.
The important idea is:
The data can still move coefficients away from zero when there is strong evidence, but weak relationships are shrunk toward zero.
This often produces more stable forecasts.
The Minnesota Prior
One of the most famous priors used with BVARs is the Minnesota Prior.
Its intuition is surprisingly simple. It typically expresses beliefs such as:
A variable’s own recent history is probably important
For example:
may be a reasonable starting assumption because macroeconomic variables often exhibit persistence.
Other variables may matter, but we should initially be more skeptical
For example:
is possible, but we do not automatically assume that relationship is large.
Distant lags should generally matter less
We might expect:
to contain more useful information than:
unless the data strongly suggests otherwise.
So the prior introduces economically sensible structure into a model that would otherwise contain hundreds of freely estimated coefficients.
How Does the BVAR Produce a PMI Forecast?
Suppose our system contains:
A VAR with lags can be written compactly as:
Each is a matrix containing relationships between the variables.
The BVAR places priors on the coefficients inside these matrices.
Once estimated, forecasting is recursive.
The model predicts the next values:
and those predictions can then help produce:
until we reach our desired horizon:
So conceptually:
How Do We Interpret a BVAR?
This is particularly important for our application.
Unlike a DFM, the BVAR does not compress all our indicators into a hidden factor.
The original economic variables remain inside the model.
However, interpreting individual coefficients becomes difficult because each variable can appear at several lags and across several equations.
Suppose the PMI equation contains:
Looking at only one copper coefficient does not tell us the complete story.
Instead, VAR-type models are often interpreted using tools such as Impulse Response Functions and Forecast Error Variance Decomposition.
Impulse Response Functions
An Impulse Response Function (IRF) asks:
What happens to PMI over the following months after an unexpected change in one variable?
Suppose copper experiences a positive shock today.
We can examine how the model predicts PMI responds:
Month 0 Copper shock occurs
Month 1 PMI +0.1
Month 2 PMI +0.3
Month 3 PMI +0.5
Month 4 PMI +0.3
Month 5 PMI +0.1
Month 6 Effect disappears
We can plot:
This is much more informative than looking at a single coefficient.
Similarly, we could investigate:
or:
One important caution is that an IRF should not automatically be interpreted as a causal effect. Its interpretation depends on how shocks are identified and on the assumptions imposed by the model.
Forecast Error Variance Decomposition
Another useful tool is Forecast Error Variance Decomposition (FEVD).
The question is:
How much of the uncertainty in future PMI forecasts is associated with shocks to each variable?
Suppose at a six-month horizon we obtain something like:
| Shock | Share of PMI Forecast Error Variance |
|---|---|
| PMI itself | 42% |
| New Orders | 22% |
| NFCI | 12% |
| Jobless Claims | 9% |
| Copper | 7% |
| Term Spread | 4% |
| Building Permits | 3% |
| S&P 500 | 1% |
These numbers are hypothetical, but the interpretation is useful.
We could say:
“At the six-month horizon, shocks associated with New Orders account for 22% of the model’s PMI forecast error variance.”
Again, this should not automatically be interpreted as saying New Orders causes 22% of PMI movements.
It describes importance within the estimated BVAR and its shock-identification assumptions.
For our project, IRFs and FEVD provide a useful way of understanding how individual economic indicators relate to the PMI forecast.
A Simple Python Example
A production BVAR requires us to specify priors and estimate a posterior distribution. To make the mechanics clear, we can first fit an ordinary VAR using statsmodels, then extend the same system with Bayesian shrinkage.
import pandas as pd
from statsmodels.tsa.api import VAR
variables = [
"ISM_PMI",
"new_orders",
"term_spread",
"jobless_claims",
"sp500",
"nfci",
"building_permits",
"copper"
]
data = df[variables].dropna()
model = VAR(data)
results = model.fit(
maxlags=3,
ic="aic"
)
print(results.summary())
We can then produce forecasts:
lag_order = results.k_ar
forecast = results.forecast(
data.values[-lag_order:],
steps=6
)
forecast = pd.DataFrame(
forecast,
columns=variables
)
print(forecast["ISM_PMI"])
This gives us the basic VAR mechanics.
For an actual BVAR, the next step is to place priors on the VAR coefficients and estimate their posterior distributions using a Bayesian implementation such as PyMC or a dedicated BVAR package.
The conceptual structure remains:
but now:
are estimated under Bayesian priors rather than completely freely.
Why Bayesian Forecasts Are Different
Another useful feature of Bayesian modeling is that we do not have to think of parameters as single fixed estimates.
Instead, we obtain a posterior distribution.
Conceptually:
or simply:
The prior represents our assumptions before observing the data.
The likelihood represents what the observed data tells us.
The posterior combines both.
As a result, instead of saying:
“PMI six months from now will be 51.4”
we can produce a forecast distribution.
For example:
with an uncertainty interval around that forecast.
For economic forecasting, understanding this uncertainty can be just as important as the point forecast itself.
Avoiding Look-Ahead Bias
Just like the DFM, a BVAR must be evaluated realistically.
We should not estimate the model using the entire historical dataset and then claim that historical predictions represent true out-of-sample forecasts.
Instead, use an expanding or rolling window:
Train through 2018 → Forecast next 6 months
Train through 2019 → Forecast next 6 months
Train through 2020 → Forecast next 6 months
Train through 2021 → Forecast next 6 months
...
At every forecasting date, the model should only use information that would have been available at that point in time.
For macroeconomic data, publication delays and historical revisions should also be considered when constructing a rigorous real-time backtest.
How Do We Know Whether the BVAR Is Actually Better?
The BVAR should compete against simpler models.
For example:
versus:
versus:
and perhaps:
We can compare their out-of-sample forecasting performance using metrics such as:
and:
For example:
| Model | 6-Month RMSE | 6-Month MAE |
|---|---|---|
| PMI AR Model | 3.8 | 3.0 |
| VAR | 3.6 | 2.9 |
| BVAR | 3.1 | 2.5 |
| DFM | 3.2 | 2.6 |
These values are only illustrative.
The important principle is:
A more sophisticated model is useful only if it produces better out-of-sample forecasts or provides additional useful information.
BVAR vs DFM: What Is the Difference?
This is perhaps the easiest way to understand why we might test both models.
A Dynamic Factor Model says:
“These economic variables share some hidden common movement. Let me extract that signal.”
So:
A BVAR says:
“Let me keep the variables themselves and model how they dynamically interact, while using priors to prevent the model from becoming too complex.”
So:
The DFM achieves dimensionality reduction through latent factors.
The BVAR controls dimensionality through Bayesian shrinkage.
That is the fundamental difference.
One Important Caveat About New Orders
As with our DFM specification, ISM Manufacturing New Orders is itself a component of headline ISM Manufacturing PMI.
Therefore, we should be clear about the research question.
If we want to know whether PMI components plus broader economic information can forecast future PMI, including New Orders is reasonable.
If we specifically want to test whether external leading indicators predict PMI, we should exclude New Orders.
A useful robustness experiment would therefore estimate:
and:
and compare their out-of-sample forecasting performance.
Final Intuition
Imagine several people sitting around a table.
PMI says:
“My recent history tells me manufacturing conditions are slowing.”
Copper responds:
“Industrial demand also appears weaker.”
Jobless claims say:
“The labor market is beginning to soften.”
NFCI adds:
“Financial conditions are tightening.”
A DFM listens to everyone and tries to summarize the conversation into a single underlying economic signal.
A BVAR does something different.
It attempts to model the conversation itself — how each variable’s past relates to the future values of the others.
The problem is that this conversation creates hundreds of possible relationships.
Bayesian priors prevent the model from taking every relationship equally seriously.
That gives us the central intuition:
For our application, the final question is straightforward:
Can the historical interactions among our leading economic indicators provide useful information about where ISM Manufacturing PMI will be six months from now?
That is the question a Bayesian Vector Autoregression is designed to help answer.