vincent nazzareno projects contact fr · en

Contagion, or less than advertised

When markets fall, correlations rise, and we call that contagion. I recomputed the classic proof on the S&P 500 and the CAC 40, then obtained the exact same picture in a simulated world where, by construction, nothing propagates.

Labels S&P 500 × CAC 40 Forbes-Rigobon 2002 9023 trading days conditional correlations no dependencies

The finding

The phrase comes back with every crisis: "in times of stress, everything becomes correlated". It has a standard proof, and the proof fits in one chart. Take the daily closes of the S&P 500 and the CAC 40, 9023 common trading days from 5 March 1990 to 13 August 2026; turn them into log returns smoothed with a two-day moving average, to absorb the time-zone gap between New York and Paris. Then sort the days into ten deciles of US return magnitude, from calmest to wildest, and measure the correlation inside each one.

The curve rises, without hesitation: from 0.09 in the calmest decile to 0.82 in the wildest, against a full-sample correlation of 0.64. On stormy days, Paris follows New York almost step for step. There, we are told, is contagion, measured.

S&P 500 × CAC 40 correlation by magnitude decile Sample correlation rises from the first to the last decile of S&P return magnitude; the horizontal line is the full-sample correlation. 0.00 0.25 0.50 0.75 1.00 raw full sample 1 2 3 4 5 6 7 8 9 10 0.03% 0.34% 1.53% decile of |S&P return|, median magnitude below
the plotted values
DecilenMedian magnitudeδCorrelation
19020.03%−1.000.091
29030.10%−0.980.112
39020.18%−0.950.254
49020.25%−0.900.245
59030.34%−0.810.363
69020.44%−0.680.483
79020.56%−0.490.535
89020.73%−0.100.603
99030.98%0.630.693
109021.53%5.220.816

The reversal

Before concluding, a counter-test. I build a simulated Gaussian pair of the same size, whose true correlation is constant by construction, equal to 0.64, the real pair's full-sample value. No regimes, no crises, no propagation: the tamest world one can draw at random. The same decile procedure produces the same rising curve, from 0.04 in the first decile to 0.86 in the last, and the analytic prediction, drawn as a solid line, threads through the Monte-Carlo points. The chart that "proved" contagion therefore proves nothing on its own: it rediscovers a property of the estimator, not a property of markets.

The same procedure on a constant-correlation world Simulated Gaussian pair whose true correlation is constant, equal to the real pair's full-sample value, put through the same decile procedure: the curve rises the same way, and it follows the analytic prediction drawn as a solid line. 0.00 0.25 0.50 0.75 1.00 Monte-Carlo formula full sample 1 2 3 4 5 6 7 8 9 10 0.06 0.61 1.96 decile of simulated |x|, median magnitude below
the plotted values
DecilenMedian magnitudeδCorrelationFormula
19020.06−0.990.0420.061
29030.19−0.960.1900.162
39020.32−0.890.2610.262
49020.46−0.790.3690.360
59030.61−0.630.4520.452
69020.77−0.410.5480.538
79020.94−0.120.6030.617
89021.150.330.7100.694
99031.441.100.7710.771
109021.963.360.8620.867

The mechanism

The mechanism fits in a single line: y = βx + ε, with ε independent of x. Conditioning on the days when x is large changes neither β nor the noise; it only changes the signal-to-noise ratio. In a wild decile, the part of y explained by x weighs more against the same noise, and the sample correlation rises, mechanically, with no structural parameter having moved.

Writing δ for the relative excess variance of x in the subsample, the conditional correlation is ρA = ρ·√(1 + δ) / √(1 + δ·ρ²): it rises with δ, and with δ alone.

the full derivation
  1. Model: y = βx + ε, ε independent of x with variance σ²; A is the conditioning event, defined on x alone.
  2. Cov(x, y | A) = β·Var(x | A), because ε does not depend on x.
  3. Var(y | A) = β²·Var(x | A) + σ², for the same reason.
  4. Hence ρA = β·√Var(x | A) / √(β²·Var(x | A) + σ²).
  5. Set δ = Var(x | A) / Var(x) − 1 and divide top and bottom by the unconditional standard deviation of y, which brings out ρ.
  6. What remains is ρA = ρ·√(1 + δ) / √(1 + δ·ρ²): the whole effect goes through δ.

A trap met along the way shows where the effect really lives. One of the first tests multiplied both series by three, stormy days included, and expected the correlation to rise: it did not move by a single decimal place, Pearson correlation being invariant under changes of scale. What the conditioning amplifies is not the size of the returns, then, but the share of the common shock against a noise that does not grow with it: inflate x alone, leaving ε untouched, and the raw correlation soars while the corrected one returns ρ. The whole question of contagion sits in that ratio, not in the turbulence itself.

The correction

The formula inverts: if the rising curve is only the image of a constant correlation seen through δ, then it can be straightened. That is the Forbes-Rigobon correction, applied here decile by decile to the real data. From the third to the tenth decile, where the estimator is tight, the rise of the first chart vanishes: the corrected curve has no overall slope left and stays within 0.15 of the full-sample value. In the two lowest deciles, by contrast, the inversion divides by a number close to zero and amplifies noise instead of removing the bias: the first corrected decile comes out at 0.88, with an interval running from 0.46 to 0.96, which is to say a point that says nothing. The intervals in the figure say so on their own; the flattening, for its part, is only claimed from the third decile onwards.

The last decile is worth pausing on. There the correction does more than flatten: the corrected value drops to 0.49, below the 0.64 reference, and its interval, from 0.46 to 0.53, excludes it. Two readings are compatible with that point. Either the inversion, driven by this decile's δ of 5.2, corrects beyond what was needed; or the raw excess of the wildest days really was volatility bias through and through, down to the last point. The page reports what comes out of the computation and does not decide between the two.

The real deciles, raw and corrected The same real deciles, raw correlation and Forbes-Rigobon corrected correlation side by side. The corrected curve stays near the full-sample correlation where the estimator is tight, from the third to the tenth decile; in the lowest deciles the inversion amplifies noise, and the wide intervals say so. 0.00 0.25 0.50 0.75 1.00 raw corrected full sample 1 2 3 4 5 6 7 8 9 10 0.03% 0.34% 1.53% decile of |S&P return|, median magnitude below
the plotted values
DecilenMedian magnitudeδCorrelationCorrected
19020.03%−1.000.0910.881
29030.10%−0.980.1120.648
39020.18%−0.950.2540.760
49020.25%−0.900.2450.615
59030.34%−0.810.3630.668
69020.44%−0.680.4830.701
79020.56%−0.490.5350.665
89020.73%−0.100.6030.622
99030.98%0.630.6930.601
109021.53%5.220.8160.493

What is left

Deciles mix every era together; to look at the crises themselves, I switch to a rolling correlation over 60 trading days. The raw curve climbs to 0.92 at the height of the crises. The corrected curve tells another story: averaged over each episode, it sits at 0.44 in autumn 2008 and 0.58 in February-April 2020, both below the full-sample line.

These means are descriptive, and it matters to say why. Two successive windows share 59 of their 60 days: the 84 windows of autumn 2008 amount to one or two independent observations, not 84. The two-day smoothing also autocorrelates the returns, 0.45 at the first lag, so that a 60-day window carries about 23 effective observations. And it is precisely in a crisis that δ becomes huge, a median of 8.3 in autumn 2008, which is exactly where the inversion amplifies noise the most. February-April 2020 makes the point: the standard deviation of the corrected windows there reaches 0.21, and 18 of the 51 windows go above the reference. "Below the reference" is a statement about a noisy average, not about every window.

The solid argument lies elsewhere, and it is an a fortiori one. The correction's variance reference is the full sample, crises included, not a calm period: the correction therefore under-corrects by construction. If extra propagation were added to the mechanism, above the reference is where it would have ample room to survive; yet, averaged over each episode, nothing survives. That an under-correcting adjustment lands below is, moreover, no paradox: at huge δ, averaging a noisy and roughly concave transform pulls downward, and the windows mix regimes, those ending in early September 2008 still looking back at a calm summer. The careful reading fits in one sentence: most of the crisis-time surge in correlations is the mechanical effect of volatility, not proof of extra propagation.

60-day rolling correlation, raw and corrected 60-day rolling correlation between S&P 500 and CAC 40 returns, raw and Forbes-Rigobon corrected, 1990 to 2026, with autumn 2008 and February-April 2020 as shaded bands. The correction reduces the excess of both crises. The variance reference is the full sample, crises included: the correction under-corrects, and whatever would stay above the reference in a crisis is not by itself evidence of contagion. Each window carries less information than its 60 points, hence per-episode means in the table; in calm windows the corrected curve runs above the raw one, a mechanical and symmetric effect of the inversion. 2008 2020 0.00 0.25 0.50 0.75 1.00 raw corrected full sample 1990 1995 2000 2005 2010 2015 2020 2025
the plotted values
EpisodeRawCorrected
autumn 20080.7610.438
February-April 20200.7920.578
full sample0.6410.641

What the computation assumes

Out of scope, finally: dynamic conditional correlations of the DCC-GARCH kind, copulas, correlations implied by option prices. So many doors left open for a follow-up post. The starting point remains the Forbes and Rigobon article, "No Contagion, Only Interdependence" (Journal of Finance, 2002), and the whole computation behind this page can be re-run from tools/contagion, on GitHub.

Every number on this page comes out of the same computation pipeline; the paired returns themselves are in contagion.json.

Posted by Vincent Nazzareno on .