Predicting the direction of the economy is difficult because there is no single variable that tells us exactly where economic activity is heading.
Consider manufacturing growth. Employment conditions may begin weakening while stock prices are still rising. Building permits may decline while commodity prices remain strong. The yield curve may signal slower growth months before it becomes visible in traditional economic statistics.
Looking at any one of these variables individually gives us only part of the picture.
This is exactly the problem that Dynamic Factor Models (DFMs) are designed to solve.
In this article, we will build an intuitive understanding of a Dynamic Factor Model using a practical problem:
Can we combine several leading economic indicators to forecast the ISM Manufacturing PMI?
Our Forecasting Problem
Suppose our target variable is the ISM Manufacturing Purchasing Managers’ Index (PMI).
PMI is particularly useful because it provides a timely measure of manufacturing conditions. A reading above 50 generally indicates expansion in the manufacturing sector, while a reading below 50 indicates contraction.
Our objective is not simply to explain today’s PMI.
We want to use information available today to estimate where PMI could be several months into the future.
For this example, suppose we collect the following indicators:
| Variable | Why it may contain information about future PMI |
|---|---|
| ISM Manufacturing New Orders Index | New orders can precede changes in production and the headline PMI |
| 10Y–2Y Treasury Term Spread | The yield curve contains information about expectations for future economic conditions |
| Initial Jobless Claims | High-frequency indicator of changing labor-market conditions |
| S&P 500 Index | Financial markets incorporate expectations about future corporate and economic conditions |
| Chicago Fed NFCI | Measures whether financial conditions are relatively loose or tight |
| Building Permits | Housing and construction activity can provide an early signal about demand |
| Global Copper Price | Copper demand is closely connected with industrial and construction activity |
These variables behave very differently.
Some are percentages. Some are index levels. Some rise when economic conditions improve, while others may rise when conditions deteriorate.
More importantly, they are often correlated with each other.
That creates an interesting modeling problem.
Why Not Just Use a Regression?
A natural starting point would be a multiple regression:
where represents our forecasting horizon.
There is nothing inherently wrong with this approach.
But macroeconomic datasets have an important characteristic:
Many economic variables move together because they are responding to the same underlying economic forces.
For example, imagine economic conditions begin deteriorating.
We might observe:
- new orders falling,
- building permits declining,
- jobless claims increasing,
- financial conditions tightening,
- stock prices weakening,
- industrial commodity prices declining.
These aren’t necessarily seven completely independent stories.
They may partly reflect one common underlying story: weakening economic conditions.
Instead of treating every indicator independently, a Dynamic Factor Model attempts to identify that hidden common signal.
The Core Idea: A Hidden Economic Factor
Imagine that underneath all our observed economic variables there exists something we cannot directly observe.
Call it:
We cannot download “economic momentum” directly from FRED or Bloomberg.
Instead, we observe its fingerprints.
When economic momentum strengthens, we might see stronger orders, improving financial markets, stronger commodity demand and increased construction activity.
When it weakens, many of these variables begin moving in the opposite direction.
A Dynamic Factor Model attempts to extract this hidden common factor from the observed data.
Conceptually:
The important term here is:
It represents the common factor shared across the indicators.
The ‘s are called factor loadings. They tell us how strongly each variable is associated with the common factor.
The ‘s represent information unique to each variable.
So we can think of every observed indicator as:
That is the fundamental intuition behind a factor model.
Why Is It Called a Dynamic Factor Model?
A normal factor model identifies common patterns across variables.
A Dynamic Factor Model goes one step further.
It recognizes that the hidden economic factor itself evolves through time.
For example:
This equation says that today’s economic momentum depends partly on yesterday’s economic momentum plus some new information arriving today.
That makes intuitive sense.
The economy does not normally jump randomly between completely unrelated states every month. Expansion and contraction tend to develop over time.
The complete model therefore has two pieces.
Measurement equation
The first connects our observed indicators to the hidden factor:
where contains New Orders, the term spread, claims, the S&P 500, NFCI, building permits and copper.
Transition equation
The second describes how the hidden factor evolves:
Together, these equations create the Dynamic Factor Model.
An Intuitive Example
Imagine the following situation.
Over several months we observe:
Month 1: Building permits start declining.
Month 2: Copper prices weaken and the yield curve deteriorates.
Month 3: Jobless claims begin increasing.
Month 4: New orders weaken.
Looking at each variable independently can make the economic picture noisy.
The DFM asks a different question:
Is there a common movement hidden underneath these different signals?
If several indicators begin pointing toward weaker activity, the estimated factor may start declining.
Instead of monitoring seven separate charts, we now have something closer to:
This compression is one of the most useful features of factor models.
From the Factor to a PMI Forecast
Extracting the economic factor is only part of our objective.
Ultimately, we want to forecast PMI.
One simple forecasting specification is:
Suppose we want a six-month-ahead forecast.
Then:
The model therefore uses both the current economic factor and information contained in current PMI to estimate future PMI.
The workflow becomes:
How Do We Interpret a Dynamic Factor Model?
One advantage of a traditional regression is its interpretability.
If we estimate:
we can examine the coefficient and statistical significance of each predictor. For example, the coefficient on copper tells us about its conditional relationship with future PMI, while its t-statistic and p-value help us assess whether that relationship is statistically distinguishable from zero under the model assumptions.
A Dynamic Factor Model works differently.
With a single-factor DFM, our indicators do not individually enter the final PMI forecasting equation. Instead, they first contribute to a common latent factor:
This means interpretation happens at two levels.
Step 1: Which Variables Define the Factor?
Each economic indicator has a factor loading.
For example, suppose our estimated model produces:
| Variable | Factor Loading |
|---|---|
| New Orders | 0.85 |
| Copper | 0.72 |
| Building Permits | 0.68 |
| S&P 500 | 0.55 |
| Term Spread | 0.42 |
| Jobless Claims | -0.60 |
| NFCI | -0.51 |
The loading tells us how strongly each variable is associated with the common factor.
For example, the relatively large loading for copper suggests that copper prices contain substantial information about the common movement captured by this factor.
Jobless claims might have a negative loading because claims tend to increase when economic conditions weaken.
Depending on the estimation method, we can also examine standard errors and statistical significance of estimated loading parameters.
However, an important distinction must be made:
A significant factor loading tells us that a variable is related to the latent factor. It does not by itself tell us that the variable significantly predicts future PMI.
Also, the overall sign of a latent factor is arbitrary: multiplying both the factor and all its loadings by -1 represents the same model. Therefore, interpretation should focus on the relative signs and magnitudes across variables rather than treating the factor’s orientation as inherently positive or negative.
Step 2: Does the Factor Predict Future PMI?
Next, we examine the forecasting equation:
Suppose we estimate:
This provides evidence that the common economic factor contains information associated with future PMI.
We can therefore interpret the model as:
The copper factor loading tells us how strongly copper relates to the common economic signal, while the forecasting coefficient tells us whether that common signal helps forecast PM
Why Standardization Matters
There is another problem we need to solve before fitting our model.
Our variables have completely different units.
The S&P 500 may be measured in thousands of index points. Initial claims are measured in thousands of people. The yield spread is measured in percentage points. PMI is centered around roughly 50.
Feeding these raw values directly into a factor extraction procedure can cause variables with larger numerical scales to dominate.
A common solution is standardization:
After standardization, each series is expressed in terms of deviations from its own mean.
This makes the common movement across variables easier to identify.
In a real forecasting system, we also need to consider transformations such as percentage changes, differences or log differences depending on the statistical properties of each series.
A Simple Python Example
We can implement a basic Dynamic Factor Model using statsmodels.
Assume we have a monthly DataFrame called df:
import pandas as pd
from sklearn.preprocessing import StandardScaler
from statsmodels.tsa.statespace.dynamic_factor import DynamicFactor
features = [
"new_orders",
"term_spread",
"jobless_claims",
"sp500",
"nfci",
"building_permits",
"copper"
]
X = df[features].dropna()
# Standardize the economic indicators
scaler = StandardScaler()
X_scaled = pd.DataFrame(
scaler.fit_transform(X),
index=X.index,
columns=X.columns
)
# One latent economic factor with AR(1) dynamics
model = DynamicFactor(
X_scaled,
k_factors=1,
factor_order=1
)
results = model.fit(maxiter=1000, disp=False)
print(results.summary())
The key parameters are:
k_factors=1
which tells the model that we want to estimate one common latent factor, and:
factor_order=1
which allows the factor to depend on its previous value.
We can then extract the estimated factor:
factor = results.factors.filtered[0]
df.loc[X.index, "economic_factor"] = factor
We have now transformed several economic indicators into a single estimate of underlying economic conditions.
Using the Factor to Forecast PMI
We can then create a forecasting model.
For example, suppose we want to forecast PMI six months ahead:
import statsmodels.api as sm
horizon = 6
forecast_df = df[["ISM_PMI", "economic_factor"]].copy()
forecast_df["PMI_future"] = (
forecast_df["ISM_PMI"].shift(-horizon)
)
forecast_df = forecast_df.dropna()
X = forecast_df[
["economic_factor", "ISM_PMI"]
]
X = sm.add_constant(X)
y = forecast_df["PMI_future"]
forecast_model = sm.OLS(y, X).fit()
print(forecast_model.summary())
Conceptually, we are estimating:
The factor summarizes the broader economic information contained across our leading indicators, while current PMI captures persistence in manufacturing conditions.
The Most Important Rule: Avoid Look-Ahead Bias
There is one major problem with the simple example above.
This line:
scaler.fit_transform(X)
uses the entire dataset to calculate the mean and standard deviation.
If we are performing a historical backtest, that means information from the future could indirectly influence transformations applied to the past.
Similarly, estimating the DFM once using the complete dataset and then pretending we generated historical forecasts would create an unrealistic test.
A proper forecasting experiment should instead use an expanding window.
For example:
Train through 2018 → Forecast 2019
Train through 2019 → Forecast 2020
Train through 2020 → Forecast 2021
Train through 2021 → Forecast 2022
...
At every point in history, the model should only see information that would actually have been available at that time.
This is particularly important in macroeconomic forecasting because many economic datasets are revised after their initial publication.
A truly rigorous backtest therefore needs to think about data vintages and publication dates, not simply the dates attached to observations.
How Do We Know Whether the DFM Actually Works?
A sophisticated model is not automatically a better model.
We need a benchmark.
A useful baseline might simply be:
Then compare this against:
If adding the Dynamic Factor Model does not improve out-of-sample forecasting performance, the additional complexity may not be justified.
Metrics such as RMSE and MAE can be used:
The key phrase here is out-of-sample.
We care less about how beautifully the model explains historical data and more about whether the information available at time helps predict PMI at .
One Important Caveat About New Orders
There is an important modeling distinction in our particular example.
The ISM Manufacturing New Orders Index is itself a component of the headline ISM Manufacturing PMI.
That means it is fundamentally different from external predictors such as Treasury yields, jobless claims, building permits or copper prices.
Using New Orders is reasonable if the research question is:
“Can information contained in PMI components and external economic indicators forecast future headline PMI?”
But if the objective is specifically to test whether independent external leading indicators can forecast PMI, New Orders should be excluded because it introduces a direct structural relationship with the target.
This distinction should be explicitly documented when interpreting the results.
What Makes Dynamic Factor Models Useful?
The real advantage of a DFM becomes clearer as the dataset grows.
Imagine that instead of seven indicators we eventually collect:
- labor-market indicators,
- credit spreads,
- interest rates,
- housing indicators,
- equity-market variables,
- commodity prices,
- consumer indicators,
- industrial-production variables,
- financial-condition measures.
We might eventually have 30, 50 or even 100 economic series.
Putting all of them directly into a regression creates problems with dimensionality, multicollinearity and overfitting.
A factor model instead attempts to compress them:
Those factors can then be used for forecasting.
This is one reason factor models became particularly important in macroeconomics: modern economists have access to enormous datasets, but the number of underlying forces driving those datasets may be much smaller.
Final Intuition
The easiest way to understand a Dynamic Factor Model is to imagine a room full of people describing the weather.
One person says the temperature is falling.
Another notices dark clouds.
Another notices the wind increasing.
Another sees people opening umbrellas.
Each observation is noisy on its own.
But together they reveal something that none of them directly measured:
A storm is approaching.
Macroeconomic indicators work in a similar way.
Jobless claims, Treasury yields, financial conditions, building permits, stock prices and commodity prices each provide incomplete information about the economy.
A Dynamic Factor Model tries to extract the common economic signal hidden underneath all of them.
For our application, the ultimate question is therefore not whether any single indicator perfectly predicts manufacturing activity.
It is:
That is the problem the Dynamic Factor Model is designed to answer.