> ## Content Index
> Fetch the complete content index at: https://aligrithm.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 8.11 Stop Using Pairwise Granger (causality upgrade)
- URL: https://aligrithm.com/stop-using-pairwise-granger-causality-upgrade/
- Published: 2026-09-24T11:11:46.000Z
- Updated: 2026-09-24T11:11:46.000Z
- Description: Pairwise Granger on 64 futures at 5% and five lags expects 1,008 false links. Trade the PCMCI parent graph; the 1.51 Sharpe stays on the similarity graph.
- Author: ali askar
- Tags: 8. Physics, Geometry & Event-Driven Markets

A pairwise screen of the 64-futures book, at a 5% level and five lags, expects 1,008 false links when every cross-link is null. That book is the one in the old article ["Network Momentum as a Cross-Asset Factor,"](https://aligrithm.com/network-momentum-as-a-cross-asset-factor/) and the screen is the bivariate test the old article ["Stop Using Pairwise Granger: PCMCI for Financial Causality"](https://aligrithm.com/stop-using-pairwise-granger-pcmci-for-financial-causality/) took apart. The sequel is the object you trade. Both live graphs in this pillar are still pair graphs: one connects futures whose momentum features co-move, and one connects every currency the market lists. The parent graph is the replacement.

## What this actually is

You run 64 futures. Crude, the S&P, the bund, and the euro sit on one graph, and the old article ["Network Momentum as a Cross-Asset Factor"](https://aligrithm.com/network-momentum-as-a-cross-asset-factor/) turns that graph into a position: each contract's signal is a weighted average of its neighbors' momentum. The published book earns a Sharpe of 1.51 and 22% a year, gross, from 2000 to 2022\. The neighbors are whoever co-moves. A dollar squeeze lifts crude and the S&P together, and the graph writes an edge the spillover did not produce.

The method keeps an edge when the link remains after the other series that explain both sides have been removed, then treats the surviving edges as one graph.

A harbor switchboard works the same way. Every pair of docks that rings at the same hour gets a patch cable. Most of the ring is the building generator. Filter the generator out and pull every cable that goes silent. Calls go out on the cables that stay live. You operate the board.

At the desk, crude's signal would come from Brent and heating oil, and the S&P cable would be gone. Delete that cable and a short crude signal becomes a long one, on the same neighbor returns. The cost of a mistaken deletion is the cross-class sleeve the old article measured: equity momentum built inside equities scores a Sharpe of 0.30, and the same equity trades fed by the full cross-asset graph score 0.95\. Miss a real parent, because the link is same-day or the true driver was left out of the file, and you have cut the sleeve that carried that gap. Keep a false parent and the 1.51 is a factor bet wearing a momentum label.

## A pair screen on these two books paints a thousand false arrows

The count this section settles is the false-arrow pile on the two books you would hand the screen.

Call the false-positive level alpha, the number of assets N, and the longest lag you test tau-max. Each ordered pair of distinct assets, at each lag, is one test. Under a null graph and a calibrated test, the expected number of false directed links is alpha times N times (N minus 1) times tau-max.

$$ \\mathbb{E}\[\\text{false links}\] = \\alpha \\, N \\, (N - 1) \\, \\tau\_{\\max} $$

Read it as: alpha is the per-test false-positive level (a fraction, no units), N is a count of assets, tau-max is a count of lags, and the product is a count of arrows you expect to keep even though none of them is real. Five lags is an arbitrary trading-week window; the formula is linear in that choice, so halve the lags and you halve the pile.

Work the two books. For the futures book, N is 64 and tau-max is 5, so the test count is 64 times 63 times 5, which is 20,160, and 5% of that is 1,008\. One lag instead of five still leaves 64 times 63 times 0.05, which is 201.6 false arrows. For the ten-currency book in the old article ["Graph Learning for FX: Interest-Rate-Parity Statarb Done Right,"](https://aligrithm.com/graph-learning-for-fx-interest-rate-parity-statarb-done-right/) the same five-lag screen runs 10 times 9 times 5 tests, which is 450, and expects 22.5 false arrows. One lag expects 4.5\. The chart is that quadratic: the ten-currency dot sits near the origin, and the 64-futures dot sits at 1,008.

![Expected false directed links from a pairwise screen at 5 percent and five lags, marked at 10 currencies (22.5) and 64 futures (1,008)](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/09/article_434-expected_false_links.png)

That 1,008 is the optimistic count. It assumes the test is calibrated. Runge and coauthors show the original PC algorithm, the condition-selection skeleton behind PCMCI, shows an upper tail of false positives reaching 25% on links whose average autocorrelation exceeds 0.7\. Futures momentum features are smooth by construction. A pairwise Granger test conditions on the target's own lags and leaves the driver's parents out of the conditioning set, which is the same failure. Treat 1,008 as a floor.

Full conditional independence, the multivariate Granger test, conditions on N times tau-max minus one lagged series. At five lags that is 319 controls in one regression. The shortest lookback Pu and coauthors use to learn their graph is 252 trading days. 319 coefficients on 252 days is an unidentified regression. Their longest lookback, 1,260 days, can host 319 coefficients and leaves the power problem the old article walked on the climate sample: full conditioning held about 80% detection at five series and 40% at twenty, on 150 observations. Conditioning on everything produces a blind test, or an equation the 252-day window cannot fit.

## The false-discovery cut on the whole graph

The question this section settles is why a 5% test on each link still hands you a junk graph, and what cut replaces it.

PCMCI, as the old article sets it out, holds each link's false-positive rate near 5%. On a null graph that rate times 20,160 tests is the same 1,008 arrows. The momentary conditional independence step scores one link at a time. Runge and coauthors say so: in the numerical experiments they scored links one at a time and left the false-discovery rate uncontrolled. They do print the adjustment you need, the Benjamini-Hochberg q-value on the whole lagged graph.

$$ q = \\min\\left(p \\,\\frac{m}{r},\\, 1\\right), \\qquad m = N^{2} \\, \\tau\_{\\max} $$

Read it as: p is the raw p-value of one lagged link (a probability, no units), r is that p-value's rank after you sort every test from smallest to largest (a count), m is the number of tests, and q is the adjusted value you compare with your false-discovery target. Runge sets m to N squared times tau-max, which counts own-lags as well as cross-links. For 64 futures and five lags, m is 4,096 times 5, which is 20,480\. The rank-1 bar for a 5% false-discovery target is 0.05 divided by 20,480, which is 2.44 times 10 to the minus 6\. A link you would have called at 5% in a single test is nowhere near that bar.

Work three links on that book. A raw p of 0.000001 at rank 1 gives q equal to 0.000001 times 20,480, which is 0.0205, and it survives a 5% target. A raw p of 0.001 at rank 1 gives 0.001 times 20,480, which is 20.48, so the cap sets q to 1 and the link fails. A raw p of 0.0001 at rank 50 gives 0.0001 times 20,480 divided by 50, which is 0.041, and it survives. A raw p of 0.0002 at rank 51 gives 0.0002 times 20,480 divided by 51, which is 0.080, and it fails. The 1995 procedure also replaces each q with the smallest q at that rank or any worse rank, so the adjusted values stay nondecreasing as you walk down the list. On these three numbers the running minimum changes nothing, because 0.0205, 0.041, and 0.080 rise with rank. The formula Runge prints is the per-rank factor with the cap at 1, and a worse rank with a much smaller p can undercut an earlier q. Apply the running minimum on top of the printed factor.

Two consequences for the desk. First, PC1's loose threshold, the one the old article tells you to keep liberal so real parents survive, is a regularizer inside the condition search. The graph comes from the MCI test plus this q cut. At 100 series, Runge reports that more than 80% of the conditions PC1 kept were false positives, even while it recovered more than 80% of the true parents. The MCI test, then this q cut, turns that superset into edges you can propagate. Stop after PC1 and you have rebuilt the spaghetti with extra steps. Second, the q cut is severe on a 64-name book because m is twenty thousand. The Nino-to-British-Columbia link, partial correlation about 0.10 on 468 months, posted p = 0.036\. At rank 1 on this book that p-value gives q = min(0.036 times 20,480, 1) = 1\. A link with that p-value fails the cut at every rank. A thick graph at this m is a graph that skipped the cut.

## Parent weights flip the crude position

The question this section settles is what the network-momentum position does when the edge weight is a surviving parent instead of a co-movement score.

Pu and coauthors learn a symmetric, nonnegative adjacency. The objective rewards assets whose momentum-feature paths vary little across an edge, and two penalties keep the graph from falling into isolated nodes or a handful of huge weights. The result connects series that look alike. Alike includes a common driver. They then scale the adjacency by its degrees and propagate eight momentum features along the scaled edges.

$$ \\tilde{A}\_{ij} = \\frac{A\_{ij}}{\\sqrt{d\_i \\, d\_j}}, \\qquad \\tilde{u}\_{i} = \\sum\_{j} \\tilde{A}\_{ij} \\, u\_{j} $$

Read it as: A-sub-ij is the learned similarity between assets i and j (a nonnegative weight, no dollar units), d-sub-i is the sum of row i (the degree), A-tilde is the degree-scaled weight, u-sub-j is asset j's vector of eight momentum features, and u-tilde-sub-i is the feature vector you hand the regression for asset i. The sum runs over neighbors, and there is no self-loop. The regression in the old article then maps that vector to a sign. The sign is the position.

Put three names on it. Call them crude (CL), Brent (BZ), and the S&P (ES). Choose similarity weights so the arithmetic is exact: CL-BZ is 0.8, CL-ES is 0.6, BZ-ES is 0.2\. Degrees are then 1.4, 1.0, and 0.8\. The scaled CL-BZ weight is 0.8 divided by the square root of 1.4, which is 0.676\. The scaled CL-ES weight is 0.6 divided by the square root of 1.12, which is 0.567\. Give Brent a vol-scaled one-month return of +1.2 and the S&P a return of minus 2.0\. Crude's propagated signal is 0.676 times 1.2 plus 0.567 times minus 2.0, which is 0.811 minus 1.134, so minus 0.323\. Short crude, because the index dumped and the similarity graph trusts that dump.

Now delete the CL-ES edge the way a failed parent test deletes it, leave BZ-ES in place, and recompute the degrees. Crude's degree falls to 0.8, Brent's stays at 1.0\. The scaled CL-BZ weight is 0.8 divided by the square root of 0.8, which is 0.894\. The signal is 0.894 times 1.2, which is +1.073\. Long crude. Same neighbor returns, opposite position. The entire difference is the 0.6 similarity the S&P was allowed to write.

That sign flip is an illustration on chosen weights, and neither paper reran the 2000-2022 book on a parent graph, so the Sharpe of 1.51, the 22% gross annual return, and the equity gap from 0.30 to 0.95 belong to the similarity graph. Read the ablation before you spend it. Intra-class edges alone score 1.21\. Inter-class edges alone score 0.91, with a max drawdown of 60.7% against 19.9% for the full book, and the two sleeves correlate about 0.51\. The cross-class edges are where a missing dollar factor hides, and they are also where the extra equity Sharpe sits. The test has to decide edge by edge. Deleting every cross-class cable throws away a sleeve that diversifies the intra-class book. Keeping every cross-class cable because the Sharpe went up is how the pair screen gets back in.

Two facts about their learned graph make the substitution concrete. Edge sparsity, the share of possible pairs that carry a nonzero weight, sits under 0.4 for most of the sample, and the Jaccard overlap of successive graphs sits above 0.99\. The similarity graph is sparse and sticky. A dollar regime can glue the same edges in place for years, and the Jaccard index will read 0.99\. The overlap of successive similarity graphs leaves the conditional-independence question open.

Costs stay where the old article left them until someone measures turnover on the pruned graph. Network momentum keeps a positive cost-adjusted Sharpe through 3 basis points and prints minus 0.67 at 5 basis points. A thinner parent graph ought to turn the book over less. The paper reports no turnover on a pruned graph. I am against quoting 1.51 as the Sharpe of a causal graph.

## Ten currencies, ninety directed pairs, one constraint graph

The question this section settles is which edges in the FX paper are discovered links, and which are the pairs the market lists.

Hong and Klabjan build the prediction graph with currencies as nodes and tradable exchanges as edges, and they put government-bond yields on the nodes. For ten currencies that is 90 directed crosses, or 45 reciprocal pairs once you impose that the rate one way times the rate the other way equals one. Interest-rate parity is the reason the yields sit on the nodes. Which cross predicts which is a separate test. The triangle identity makes a direct cross a function of two others, so a pairwise regression of euro-dollar on sterling-dollar lights up because both are functions of the dollar leg. PCMCI on the ten rates, with the bond yields in the conditioning pool, asks whether a cross moves the target after the other crosses and the yields are accounted for. The five-lag screen above expects 22.5 false directed links out of 450\. Their prediction graph keeps all 90 by construction.

Their second graph is a different object, and mixing the two is how this upgrade goes wrong. In the arbitrage stage, exchanges become nodes, and an edge exists when an entry of the projection matrix is large. That entry says this trade's quantity moves when that trade's quantity moves, because the flat-holdings constraint says so. It is an accounting edge. Leave it alone. Parents answer what predicts. The projection answers what the flat-book constraint couples. Feed parent weights into the projection and you have changed the constraint. Feed the projection into the momentum propagation and you have called an accounting identity a cause.

The scoreboard the old article reports is a risk cut on that constraint graph, and one column does not match the others. Averaged across USD, EUR, and JPY as the home currency, the graph-net information ratio is 61.89% higher than the linear-program benchmark, Sortino is 45.51% higher, annual volatility is 52.23% lower, max drawdown is 44.77% lower, and annual return is 22.73% lower, from 6.19% to 4.80% on the USD row. Recomputing the three-currency average from the rounded cells lands within a hundredth of those printed percents, so the averages are the table. The information-ratio column is a different series. On the USD row, annual return divided by annual volatility is 6.19 divided by 1.41, which is 4.39, for the benchmark, and 4.80 divided by 0.68, which is 7.06, for the graph net. The information-ratio cells on that same row read 27.21 and 43.86, in a table headed as percents. Dividing 4.39 and 7.06 by the square root of 252 lands near 0.277 and 0.445, against 0.272 and 0.439 if you slide the decimal on the cells. Close, and not equal. The source may be computing the information ratio on a different gain series than the annual return and volatility rows. Keep the printed 61.89% relative lift. Dividing 4.80 by 0.68 recovers 7.06, the return-to-volatility ratio, and leaves the printed cell at 43.86.

The forecast moved little, which is the other reason the parent screen belongs in front of this net. Mean squared error on next-day log-rate changes, FX rates plus interest rates, is 2.8635 against 2.9083 in units of 10 to the minus 5\. The relative gap is (2.9083 minus 2.8635) divided by 2.9083, which is 1.54%. Their paired tests detect the gap, and the change in the rate you hand the arbitrage stage is small. The 61.89% lift came from the risk objective and the constraints, on a graph that keeps every listed pair. A parent screen would ask whether that risk cut survives once the indirect legs are gone. Hong and Klabjan report no such comparison. The paper also charges no spread. Spot loops of a few percent die in the spread, so the lift is a gross, costless number on top of the column mismatch.

## Run the parent graph, and leave the published Sharpe where it is

The question this section settles is the Monday order, and which published number stays on the graph that earned it.

Use the universe the strategy trades, and add the factor you suspect is the common driver. For the futures book that means a dollar proxy or a rates series inside the condition set. Leave it out and every surviving cross-asset edge can be that factor in disguise. Run the two PCMCI stages from the old article with partial correlation on the vol-scaled returns. Price levels fail the stationarity the test assumes. Then apply the q cut across the whole lagged graph, target 5% false discoveries, with m equal to N squared times tau-max. The edge weight you propagate is the momentary partial correlation on the links that survive, entered as A-sub-ij in the degree scaling above, and zero otherwise. Skip the Laplacian objective. You replaced it. For the currency book, run the parent screen on the rates before the prediction net, and leave the projection graph as the constraint layer.

Estimate parents on data through date t and trade date t plus one. The futures paper refits every five years. Refit inside each window. Common drivers rewire when their community ratio drops, which the futures paper records in the 2007 to 2008 window, and a Jaccard above 0.99 on the similarity graph says nothing about that refit.

The assumptions you inherit from Runge bind harder here than in the climate sample. Causal sufficiency fails when the dollar, the funding factor, or a policy shock is absent from the file, and the method will hand you parents that are that missing series. Lagged links get a direction from the clock; same-bar links stay undirected, and a large piece of equity-bond spillover is same-bar. The equity Sharpe gap of 0.65 points may live in that bucket, and this screen will not see it. Observational noise at the scale of the signal breaks the false-positive control, because the common driver stops being detectable. Market closes are noisy. An absent link is the more believable output. A present link is a hypothesis.

I am against wiring 1.51, or the 61.89% information-ratio lift, to this screen. Those numbers were earned by a similarity graph and a constraint graph. The upgrade is the graph you are allowed to propagate. Reproduce the cross-class gap on the parent graph, net of your own costs, before you spend either headline.

![](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/09/article_434-visual-0.png)

## KEY POINTS

- A pairwise screen of 64 futures at 5% and five lags runs 20,160 directed tests and expects 1,008 false links on a null graph. Ten currencies expect 22.5\. One lag cuts those piles to 201.6 and 4.5\. The 1,008 figure assumes a calibrated test; on strong autocorrelation the PC algorithm's false-positive rate reaches 25%, so treat 1,008 as a floor.
- Full conditioning on the same futures book asks for 319 controls. The 252-day graph window cannot fit that regression. The 1,260-day window can, and detection power is the collapse the PCMCI article measured: about 80% at five series, 40% at twenty.
- Each link's 5% rate on 20,160 tests is the same 1,008 arrows. Benjamini-Hochberg on m = N squared times tau-max, which is 20,480 for this book, demands a rank-1 p-value under 2.44 times 10 to the minus 6\. A p of 0.000001 at rank 1 survives (q = 0.0205); a p of 0.001 dies; the climate link's p of 0.036 fails at every rank. Apply the running minimum the 1995 procedure adds on top of the per-rank factor Runge prints. Runge's own experiments skipped this cut.
- Swap co-movement weights for parent weights inside the same degree scaling. With CL-BZ at 0.8, CL-ES at 0.6, Brent at +1.2 and the S&P at minus 2.0, the similarity signal is minus 0.323 and the parent signal, after the S&P edge is deleted, is +1.073\. Same features, opposite position.
- The published 1.51 Sharpe, 22% gross year, and the equity gap from 0.30 to 0.95 belong to the similarity graph. Intra-class alone is 1.21, inter-class alone is 0.91 with a 60.7% max drawdown against 19.9% for the full book, and the sleeves correlate about 0.51\. Decide cross-class edges one at a time. Costs still go negative at 5 basis points (Sharpe minus 0.67). No paper measures turnover after the prune.
- The FX prediction graph keeps all 90 directed crosses because they are listed, not because they survived a test. The second graph's edges are entries of a constraint projection. Keep those two graphs apart. The 61.89% information-ratio lift is a gross risk cut, and annual return over annual volatility is 7.06 on the USD graph-net row while the printed information-ratio cell is 43.86\. The next-day forecast gap is 1.54% relative.
- Monday's order: put the suspected common driver in the file, run PCMCI on vol-scaled returns, cut the graph with the q-value, propagate the surviving partial correlations, leave the FX projection alone, and refit inside each window. Do not attach 1.51 or 61.89% to a screen nobody has run.

## References

- [Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing (Benjamini and Hochberg 1995)](https://doi.org/10.1111/j.2517-6161.1995.tb02031.x?ref=aligrithm.com)
- [Detecting and quantifying causal associations in large nonlinear time series datasets (Runge, Nowack, Kretschmer, Flaxman, and Sejdinovic 2019)](https://doi.org/10.1126/sciadv.aau4996?ref=aligrithm.com)
- [Network Momentum across Asset Classes (Pu, Roberts, Dong, and Zohren 2023)](https://doi.org/10.2139/ssrn.4540651?ref=aligrithm.com)
- [Graph Learning for Foreign Exchange Rate Prediction and Statistical Arbitrage (Hong and Klabjan)](https://arxiv.org/abs/2508.14784?ref=aligrithm.com)