In plain English
Once a series is stationary, the modelling question is simple to state: what explains this period's value — its own past (ARIMA), another variable's past (ADL, VAR), a long-run relationship it keeps returning to (cointegration and ECM), or the size of recent surprises (GARCH)? Pick two candidates, fit both, and let out-of-sample accuracy decide.
The advanced view
The model family is a hierarchy of conditioning sets. ARIMA conditions on the series' own history. ADL adds the lagged history of exogenous regressors. VAR treats several variables as jointly endogenous, giving impulse responses and forecast-error variance decompositions. If the variables are individually I(1) but a linear combination is I(0), Engle–Granger or Johansen identifies the cointegrating vector and the ECM splits adjustment into a long-run equilibrium term and short-run dynamics. ARCH/GARCH models the conditional second moment, which is what risk work actually needs.
The model family
ARIMA(p,d,q): Δ^d y_t = c + Σφ_i Δ^d y_(t−i) + Σθ_j ε_(t−j) + ε_t ADL(p,q): y_t = c + Σφ_i y_(t−i) + Σβ_j x_(t−j) + ε_t VAR(p): Y_t = c + A_1 Y_(t−1) + … + A_p Y_(t−p) + ε_t ECM: Δy_t = α(y_(t−1) − βx_(t−1)) + γΔx_t + ε_t (α < 0) GARCH(1,1): σ²_t = ω + αε²_(t−1) + βσ²_(t−1), α + β < 1 Long-run variance = ω / (1 − α − β) Forecast interval = ŷ ± z × σ̂_h
Model selection: identify candidate orders from the ACF and PACF (an AR(p) has PACF cutting off at p, an MA(q) has ACF cutting off at q), then compare by AIC or BIC — BIC penalises complexity harder and is the safer choice for forecasting. Diagnose the residuals: a Ljung–Box test on the residuals should fail to reject white noise, and an ARCH-LM test tells you whether you still need a volatility model. None of that substitutes for a genuine out-of-sample test: hold back the final 20% of the sample, or roll the estimation window forward one period at a time, and compare RMSE and MAE against a naive random-walk benchmark. If you cannot beat the random walk, say so — for many financial price series that is the honest finding.
Frameworks
ARIMA
Univariate: the series explained by its own lags and past shocks. The forecasting workhorse.
ADL
One dependent variable, lagged exogenous drivers. Natural for demand or cost models.
VAR + impulse responses
Several endogenous series. Traces how a shock to one variable propagates through the system.
Cointegration / ECM
Non-stationary series with a stable long-run relation. α is the speed of return to equilibrium.
ARCH / GARCH
Conditional volatility with clustering and persistence. The basis of VaR and option-implied comparisons.
Granger causality
Does x's history improve the forecast of y? Predictive precedence, not causation.
Worked example — GARCH(1,1) volatility
Step 1 of 9
- 1Fitted: ω = 0.000004, α = 0.09, β =
Worked example — an error correction model
Step 1 of 8
- 1Two I(1) series: company revenue and industry demand index.
Deeper
The R workflow, end to end
Import and clean: read the series with readr or fetch it live (quantmod::getSymbols for market data, Quandl or an API for macro data), convert to a tsibble or xts object, check the frequency, and decide explicitly what to do with missing observations rather than letting a function drop them silently.
Explore: plot the level, the log, and the difference; plot ACF and PACF (forecast::ggAcf); decompose seasonality with STL. Half of all modelling mistakes are visible in these four charts.
Test and transform: tseries::adf.test and kpss.test, then diff() or log() as the evidence dictates. Record the test statistic, critical value and decision — an examiner or a client will ask.
Estimate: forecast::Arima or auto.arima for univariate; dynlm for ADL; vars::VAR plus irf() for systems; urca::ca.jo for Johansen; rugarch::ugarchfit for GARCH. Report coefficients with standard errors and say what the signs mean in business terms.
Validate and forecast: checkresiduals() for Ljung–Box, FinTS::ArchTest for remaining heteroscedasticity, then a rolling-origin evaluation (forecast::tsCV) against a naive benchmark. Present forecasts with intervals, and state the assumption the intervals rest on.
Deeper
Running an empirical time-series project
Introduction: one research question, stated so that a number answers it. Say why anyone should care — a decision that changes depending on the answer — and what your approach adds relative to the obvious alternative.
Data: source, frequency, seasonal adjustment, date range, and a justification for each. Show the series. Report the stationarity tests as hypotheses with statistics and critical values, and document every transformation.
Methods: at least two models from different families, with a reason for each and the diagnostic checks you will apply. Say in advance how you will choose between them.
Estimation: fit, significance, signs and magnitudes against theory and prior literature. Be explicit about what you did with insignificant coefficients and why. Report diagnostics and any re-specification.
Conclusion: name the better model on out-of-sample evidence, answer the question with it, and reflect on usefulness for a decision-maker plus the limitations you would fix with more data. That final honesty section is where most marks are won.
Essential vocabulary
- Cointegration
- Two or more I(1) series whose linear combination is stationary — a stable long-run relationship.
- Error correction term
- The lagged deviation from equilibrium. Its coefficient is the speed of adjustment and must be negative.
- Impulse response
- The path of each variable after a one-off shock to one of them in a VAR.
- Granger causality
- x Granger-causes y if x's lags improve the forecast of y. Prediction, not causation.
- Volatility persistence
- α + β in GARCH(1,1). Close to 1 means shocks to volatility decay slowly.
- Rolling-origin evaluation
- Re-estimating as the window moves forward, forecasting one step ahead each time.
Must know cold
- ✓ADF: H0 = unit root. KPSS: H0 = stationarity. Run both.
- ✓Model in returns, not prices, unless you are testing cointegration.
- ✓α + β < 1 for a stationary GARCH; long-run variance = ω/(1 − α − β).
- ✓Annualise volatility with √252 for daily and √12 for monthly data.
- ✓Always benchmark a forecast against the random walk.
- ✓Granger causality is predictive precedence, never causality.
Common pitfalls
- ×Judging models on in-sample R² instead of out-of-sample error.
- ×Fitting a VAR on non-stationary levels when an ECM is the correct specification.
- ×Reading an impulse response as causal without justifying the ordering or identification.
- ×Reporting a point forecast without an interval, then defending it as if it were certain.
- ×Using data that was not available at the forecast date — look-ahead bias.
Finance connection
GARCH feeds VaR, option-pricing comparisons and margining. Cointegration is the statistical basis of pairs trading and of long-run FX parity tests. ADL and VAR models are how a consulting team turns a macro forecast into a client demand forecast — and the forecast interval is what makes the scenario range defensible.
Exercises
Try each one on paper before revealing the worked solution.
Exercise 1
Daily returns give a GARCH(1,1) with ω = 0.000002, α = 0.12, β = 0.85. What is the annualised long-run volatility, and how persistent are shocks?
Exercise 2
An ECM gives an adjustment coefficient of −0.20 per quarter, short-run elasticity 0.5 and long-run elasticity 1.2. Demand rises 10% permanently. Sketch the revenue path.
Exercise 3
Messy prompt: a client wants a 12-month revenue forecast and asks for 'the model that is most accurate'. Structure your response.
The point forecast decays toward the mean while the interval widens roughly with √h. Present the band: a forecast without one invites a false precision debate, and the width is often the actual insight for a client deciding how much slack to hold.
Two series both have unit roots, yet their spread is mean-reverting. That is cointegration: regress in levels here and the error correction term is meaningful rather than spurious. The speed-of-adjustment coefficient must be negative, and its size tells you how many periods it takes to close a gap.
The traced path of a variable after a one-off shock elsewhere in the system. It decays back to zero when the VAR is stable, and the area under it is the cumulative effect. Any causal reading depends entirely on the identification assumption, so state the ordering out loud.