VertoxQuant

VertoxQuant

Causality in Time Series

Bayesian networks, Granger causality, directed information, and the limits of inference under hidden confounding

Vertox's avatar
Vertox
Jul 14, 2026
∙ Paid

I’m sure all of you have heard the following sentence before: “Correlation is not Causation”. That much is clear, but what is Causation exactly then? And how do we measure which variable causes which other variable?

Two time series can move together for a lot of reasons that have nothing to do with one driving the other. Ice cream sales and drowning incidents both rise every summer without either one causing the other; they’re both just downstream of the same thing: hot weather.

We start with Bayesian networks and how they tell us which variables can influence which. From there, we move to structural equation models, which let us distinguish between observing a variable and actually intervening on it. We then bring in Granger causality, the classical way of asking whether one time series helps predict another, and its more general, information-theoretic counterpart, directed information. In the end, we take a look at the hardest and most practically relevant case: what happens when some of the variables actually driving the system were never observed at all, and how much of the true causal structure can still be recovered despite that.


I write about quantitative trading the way it’s actually practised:

Robust models and portfolios, combining signals and strategies, understanding the assumptions behind your models.

Topics I write about include portfolio construction, market making, risk management, research methodology, and more.

If this way of thinking resonates, you’ll probably like what I publish.

VertoxQuant is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.


What you’ll learn

  • What it actually means for one variable to cause another, and why a Bayesian network’s conditional independencies alone can’t answer that.

  • Why conditioning on the wrong variable can create a dependence between two variables that never existed.

  • How the intervention operator do(.) formally separates observing X=x from forcing X=x.

  • How Granger causality turns “does X cause Y” into a precise, testable statement about prediction, and what directed information has to do with it.

  • Why a naive causality test across many time series can show a relationship between two variables that don’t actually influence each other at all, and what conditioning on the rest of the system has to do with fixing it.

  • What happens when hidden variables enter the system, and under what conditons the true causal structure can still be recovered anyway.

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2026 Vertox · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture