Quantitative Finance — the Mathematics of Markets · chapter 18
18Covariance, Correlation & the Causation Trap
Chapter 17 left you holding a machine for judging one number. You had an estimate, the cloud a boring world would have produced, and a way to ask how far out your dot landed. Now point that same machine at two things at once and a crack opens immediately. Since Chapter 16 you have been adding variances together as though that were a law of nature. It is not a law. It is the one special case where a third term quietly vanished, and nobody ever told you the term was standing there. That term has a name, covariance, and this whole chapter is the bill for it. Then we do one small piece of division and something far better than tidiness happens. Divide covariance by the two standard deviations and the formula turns into Chapter 6's cosine, character for character. Correlation is the angle between two arrows. Once you can see that, |ρ| ≤ 1 stops being a bound you memorize and zero correlation stops meaning unrelated. The ugliest phrase in quant finance becomes a picture you can draw, and three assets turn out to be forbidden from all hedging each other. We close on a real market correlation of about −0.7 whose cause the field still has not settled.
Look at what this page stands on, because every piece of it is already yours. Chapter 6 gave us the dot product, the norm, and the cosine formula that connects them. Chapter 7 gave us eigenvalues and the Cholesky decomposition, Chapter 11 gave us variance as the expected squared deviation, and Chapter 16 gave us Bessel's n−1. And Chapter 17 gave us the habit this chapter will need most, which is asking what a number looks like in a world where nothing at all is going on.
Your whole toolkit reads one column. Press ADD A SECOND SERIES and watch the machine ask for a number nobody has ever defined.
Ch 17 judged one number against one cloud. Give the same machine a second column and watch where it runs out of definitions.
Right now the machine is complete. One column in, one variance out.
WHY THAT CHAPTER NEEDS THIS ONE
Tap any blue chapter on the spine to the right. Each one is downstream of the number this chapter defines.
one column · nothing missing
What you’re looking at — the exact seam where one variable becomes two
series X and the whole Ch 11–17 rig: mean → variance → standard error. Every step reads a single column.
series Y — a second column. It changes nothing about X, and everything about the answer.
the hole: Var(X+Y) = Var(X) + Var(Y) + 2·something. Ch 11 wrote that term and never defined it.
Ch 18 and the eight chapters that route through it. Tap a chip to read the dependency.
Fig. 1. The seam. Every tool from Ch 11 to Ch 17 reads one column at a time; the moment you hold two, the arithmetic asks for a quantity nobody has defined — and eight later chapters are already standing on it.
That is the seam. Every tool on the left of that picture handled one variable at a time, and the moment you hold two of them the machinery reaches for a quantity that has never been defined.
01The term that was always there
Here is a position. You buy one unit of an asset whose daily volatility is 1.6%, then you short one unit of the same asset, at the same moment, in the same size.
Before you compute anything, answer the question in your head. What is the variance of that position?
Everybody gets this right, because you can see the flat line. The two legs cancel exactly, every single day, forever. Whatever the asset does, you hold a rock worth precisely nothing, and a rock has zero variance.
Now run the rule you have been using since Chapter 16, where each leg on its own is genuinely risky with variance σ² apiece. Variance adds, so the position's variance is σ² + σ² = 2σ², which in this case is a daily volatility of √2 × 1.6% = 2.2627%.
CodeRun — LONG one unit and SHORT one unit of the same asset, on 250 real daily returns (σ = 1.60%). Predict the pair's variance before RUN is allowed to speak.
PREDICT FIRSTpick one
Var of LONG 1 + SHORT 1 of the SAME asset?
SHORT LEG SIZE hafter RUN
Long 1 unit. Short 1 unit. The same asset. What is the pair's variance?
PICK A VARIANCE, THEN RUN
What you're looking at — one real return series, held two ways at once. The stdout is arithmetic on those 250 numbers; the red bar is what the Ch 16 rule promised.
Leg A — long +1 unit. Var(A) = σ² = 0.000256.
Leg B — short −1 unit of the same asset. Its mirror, so Var(B) = σ² too: shorting does not make variance negative.
A + B — dead flat. Measured variance 0.000000. The position cannot lose and cannot win, and the flattest line here is the one the rule called riskiest.
The rule, and the hole in it. "Variance adds" says 2σ² = 0.000512 — a 2.2627% daily vol on a position that never moves. Expand honestly and a third term walks out: 2E[ab] = −0.000512, exactly the cancelling amount. It was always there; every SE = σ/√n since Ch 16 has quietly set it to zero. Next chapter names it.
Fig. 2. Long one unit and short one unit of the same asset: the two legs each carry Var = σ² = 0.000256, yet their sum is a dead flat line whose measured variance is 0.000000 — while “variance adds” insists on 0.000512, a 2.2627% daily volatility for a position that never moves. Expand the square honestly and the missing piece walks out of the arithmetic: 2E[ab] = −0.000512, exactly the amount needed to cancel the other two.
The formula says the flat line is the riskiest thing in the room. So the formula is not a law, and the contradiction is not subtle, because it came out of your own tool in one line with no new notation anywhere.
So go back and expand it honestly. Write a = X − μₓ and b = Y − μᵧ for the two deviations. Chapter 11 defined variance as Var(Z) = E[(Z−μ_Z)²], and linearity of expectation gives μ_Z = μₓ + μᵧ when Z = X + Y. So the variance of the sum is E[(a+b)²], and Chapter 1 already told us how to multiply that out.
There is a third term, and nothing exotic was used to find it. It came out of ordinary algebra applied to a formula you already held, which means it has been sitting there the entire time. In Chapter 16 every example was built from independent draws, and for independent draws that term happens to be zero. That is the only reason variance appeared to add.
Notice how far the damage reaches, because SE = σ/√n is built on variance adding across n independent observations. Every standard error in Chapter 16 and every test in Chapter 17 has this term hiding inside it, set silently to zero. This chapter is the bill.
02The average signed rectangle
Give the thing a name. Covariance is Cov(X,Y) = E[(X−μₓ)(Y−μᵧ)], the average of the product of the two deviations. That sentence is symbol soup on a first reading, so let us not read it at all. Let us draw it instead.
Take five days of two assets, small enough to do entirely by hand. Asset A returns +1.4, +0.9, +0.4, −0.2, −0.5 percent, so its mean is +0.4. Asset B returns +0.7, +0.6, −0.3, +0.4, −0.4 percent, so its mean is +0.2. Plot the five points, then draw a horizontal line at B's mean and a vertical line at A's mean.
Those two lines cut the plane into four quadrants, and every point now has a rectangle attached to it. Its width is that day's deviation in A, and its height is that day's deviation in B. Its sign is positive if the point sits up-right or down-left of the crossing, and negative if it sits up-left or down-right. Covariance is the average of those signed areas.
Covariance, enacted — five days, two mean lines, one signed rectangle per day. Drag a dot and watch its vote change.
← drag any numbered dot →
day 3 sits on mean A → no vote
Day 3 sits exactly on mean A — zero width, zero area, no say. Nudge it sideways and watch it start voting.
What you're looking at — covariance is not a mood, it is an average of rectangles
Five days, and the two dashed mean lines they average out to. ΔA (“delta A”) is just how far a day sat from mean A; ΔB likewise.
Both deviations the same sign → the rectangle is green, and its area is added.
Opposite signs → red, and its area is subtracted. A day on a mean line has zero width: it cannot vote.
Add the five signed areas, divide by n − 1 = 4, and that is cov(A,B) — the average signed rectangle.
Fig. 3. Covariance stops being a vague feeling the moment you draw it. Every day stretches a rectangle out from where the two mean lines cross — width is how far A strayed from its own average, height is how far B strayed from its. Same side of both lines and the rectangle counts positive; opposite sides and it counts negative. Day 3 sits exactly on A's mean line, so its rectangle has no width at all and contributes nothing — drag it a hair sideways and watch it start voting. Add the five signed areas, divide by n − 1 = 4, and you have cov(A, B) = 0.28: literally the average signed rectangle. Note the unit it carries — percent squared — which is exactly why the next step divides the noise out and turns this into a pure number.
The five signed products are +0.50, +0.20, 0.00, −0.12 and +0.54. Look at what each one is doing. Day 1 overshot in both directions at once, so it votes strongly positive. Day 4 missed in opposite directions, so it votes against. Day 3 sits exactly on A's mean line, so its rectangle has zero width and it does not vote at all.
They sum to +1.12, so divide by n−1 = 4, for the reason Chapter 16 gave, and the sample covariance is 0.28. That is the whole definition, enacted rather than stated, and it is worth holding onto the phrase: covariance is the average signed rectangle.
Three famous facts now fall out of that one picture, with no separate proofs.
One field of signed rectangles, put through three transformations. Watch only the gold total bar — where it lands is the whole lesson.
pick a transformation ↓
Cov = +2.54 (the leftover term)
green rectangles add red ones subtract · gold = the total
What you’re looking at — the same 16 rectangles, read three ways, and three famous facts fall out.
a green rectangle is a point that beat the mean on both axes (or missed on both) — its signed area adds.
a red one deviated in opposite directions — its area subtracts. Covariance is nothing but the average of these signed areas.
the gold bar is that running average. Y = X fills it to Var(X) · SWAP does not move it · INDEPENDENT returns it to zero.
Fig. 4. Back in Chapter 11 a term was left on the table. Var(X+Y) = Var(X) + Var(Y) + 2 Cov(X, Y) — and that last piece, the covariance, was never explained. Here it is, drawn. Sixteen points sit around their two means; the dashed cross is the mean corner, the point where a reading is exactly average on both axes. Every point drags a rectangle back to that corner: one side is how far X missed its mean, the other is how far Y missed its. Agree — both above, or both below — and the rectangle counts positive. Disagree and it counts negative. Covariance is the average of those signed areas. Nothing more. Now spend the three buttons, because each one collapses a famous identity into something you can simply look at. Press SET Y = X: the cloud folds onto the diagonal, both sides of every rectangle become the same deviation, and every rectangle is a square. A square has no negative area, so nothing can cancel, and the gold bar walks all the way to the right-hand end of the track — which is labelled Var(X). That is Cov(X, X) = Var(X): variance was self-covariance the whole time, and you can see exactly why. Press SWAP THE AXES: the entire picture reflects through the diagonal, every rectangle turns on its side, width and height trade places — and area does not care which number you call the width. The bar lands on the pale tick it left behind, to the last decimal. Cov(X, Y) = Cov(Y, X), and the symmetry cost nothing to prove. Then press MAKE THEM INDEPENDENT, and watch the mechanism that has been quietly holding up your whole course. The new column is independent in the strictest sense: every value of X occurs with every value of Y, so knowing X tells you nothing. That grid means the rectangles arrive as ± twins — joined here by the thin gold links — a green one and a red one of identical size, and the bar jumps out and snaps straight back, eight times, landing on 0.00. Here is the payoff, and it is worth sitting with: when people say “variance adds for independent variables,” the addition is not the phenomenon. The cancellation is. 2 Cov(X, Y) did not politely disappear; it was annihilated, pair by pair, by a symmetry independence forces on the picture. Every root-n in this book, every “errors shrink as you average,” every diversification claim, is standing on those eight cancelling twins. Which is also the warning: kill the independence and the twins stop matching — the reds shrink, the greens survive, the bar climbs and stays climbed. That is a crisis, drawn. And one thing this picture cannot tell you, which the rest of the chapter will: a total of zero does not mean the two are unrelated.
Set Y = X and every rectangle becomes a square, because the width and the height are the same deviation. So Cov(X,X) = Var(X). Variance was self-covariance all along, and that fact will build the whole covariance matrix later on this page.
Swap the two arguments and nothing at all moves, because a rectangle turned on its side has the same area. So Cov(X,Y) = Cov(Y,X), which is to say that covariance is symmetric. Remember that, because at the end of this chapter that innocent little fact becomes a hard limit on what correlation can ever tell you.
Now make X and Y genuinely independent. Chapter 10 said independence means the joint distribution factorizes, so the double sum for E[XY] splits into (Σx·p(x))(Σy·p(y)) = E[X]E[Y]. Multiply out the definition and you get the computational form Cov(X,Y) = E[XY] − E[X]E[Y], which is therefore zero. On the picture the same thing looks like positive and negative rectangles arriving in balanced pairs and annihilating.
That closes the loop from the opening, and it is worth saying flatly. Independence was never why variance added. Independence caused a cancellation, and the cancellation is why variance added.
One honesty note about E[XY] − E[X]E[Y], because it is the form every library computes and the form that quietly ruins intuition. It is fast, and it is also the numerically fragile one, since it subtracts two nearly equal large numbers. That is Chapter 7's condition-number instinct applied to plain arithmetic. Use it to compute. Do not let it become the definition in your head, because the four quadrants are what you actually need.
03A number with no size
Now break the number on purpose. Keep the same five days, the same two assets and the same picture, and change only the units the returns are written in.
Quote them as decimals and the covariance is 0.000028. Quote the identical returns as percentages and it is 0.28, and quote them in basis points and it is 2,800.
One relationship, quoted three ways. The cloud never moves — but its covariance runs from 0.000028 to 2,800. Guess which one is the strongest link, then cancel the units.
1 · WHICH LINK IS STRONGEST?
cov carries units × units
2 · CANCEL THE UNITS
which link is strongest? pick one
What you're looking at — one relationship between two assets, priced in three currencies of measurement.
the same 44 days, plotted in standardised coordinates in all three panels — so the cloud is provably identical. Only the axis numbers differ.
the covariance, an average of return×return, so it carries two units. Rescale by a and b and it moves by ab: 0.000028 → 0.28 → 2,800.
the two standard deviations, one unit each. Their product moves by ab too — the very same power of ten, sitting underneath.
r, what survives the division. 0.6993 in every panel, and it always will: the only cancellation that could possibly work.
Fig. 5. Two assets, forty-four days, one relationship — and three perfectly honest ways to write down the same returns. A move of 0.015 is a move of 1.5% is a move of 150 basis points; nothing about the world has changed, only the ruler. Look at the clouds: they are not similar, they are the same picture, drawn from one array of standardised coordinates into all three boxes. The only thing that moved is the numbers on the axes. Now read the covariance underneath each one: 0.000028, then 0.28, then 2,800. A factor of one hundred million between the two ends, for a relationship that never so much as flinched. So before you ever ask whether a covariance is big, notice that the question is not answerable: covariance is an average of deviation times deviation, so it carries two units multiplied together — decimals-squared, percent-squared, basis-points-squared. 0.28 is not large and it is not small. It is not anything until someone tells you both scales. That is not a flaw you work around, it is a lawful consequence, and the strip at the bottom is the whole of it: rescale X by a and Y by b and the covariance moves by ab, because each deviation picked up one factor. Meanwhile a standard deviation carries only one unit, so it moves by a alone — and the two of them together move by ab, the very same power of ten, sitting one line below. Press ÷ BY THE TWO SDs and watch what that buys you: 2.8 × 10⁻⁵ over 4.004 × 10⁻⁵, 2.8 × 10⁻¹ over 4.004 × 10⁻¹, 2.8 × 10³ over 4.004 × 10³ — every power of ten struck out, in all three panels at once, leaving the bare ratio 2.8 / 4.004 = 0.6993. That is Pearson's r, and it is worth being precise about what has just happened: nothing new was invented. Correlation is covariance in the only clothing that lets you compare it to anything — a pure number, no units left to carry, pinned between −1 and +1 because a variance cannot be negative. It is also the only cancellation that could have worked. Divide by one standard deviation and you are left holding a unit; divide by the variance of X alone and the scaling on Y survives untouched; you need exactly one factor of X's scale and one of Y's, which is exactly what SD(X)·SD(Y) is. Keep hold of the win and the cost together, though, because the rest of this chapter is going to charge you for the cost: what r has measured is how tightly this cloud hugs a straight line, and nothing else. It never asked whether the relationship was a line. In two figures' time you will meet a shape where Y is a perfect, deterministic function of X — knowing X tells you Y to the last decimal — and this same 0.6993 machinery will report exactly zero.
Nothing about the two assets changed, and the scatter has the same shape in all three panels, so the relationship between them is exactly as strong. Yet the covariance moved by a factor of one hundred million.
The reason is one line of algebra. Scale X by a and Y by b, and the mean scales too, so each deviation picks up its own factor. Linearity of expectation pulls both constants out, and you get Cov(aX, bY) = ab·Cov(X,Y). Covariance is bilinear, which means it carries the product of the two units. The unit here is percent times percent, and nobody has an intuition for that, nor should anyone try to build one.
This is not a flaw to apologise for, because it is a specification rather than a defect. A covariance of 0.000028 is not big and it is not small, because it is not anything at all until you know both scales. If you have ever squinted at a covariance and wondered whether it counted as a strong relationship, that is why you got no feedback. The number was never wrong. It was meaningless.
And the same line of algebra points straight at the fix. Each variable already carries its own natural size, which is its standard deviation, and that scales the same way: SD(aX) = |a|·SD(X). So divide the covariance by both standard deviations and every scale factor cancels dead. What we want is a version of this number that does not move when we relabel the axes.
04Two columns, two arrows
Before doing that division, stop and look at what you are actually holding. This is the step that turns the rest of the chapter from formulas into pictures, and almost every course skips it.
You have two columns of numbers, which are 252 daily returns of asset A and 252 daily returns of asset B. Chapter 6 was explicit that a list of n numbers is a vector in ℝⁿ, and it used exactly this example to say so. So you are holding two arrows, living in a 252-dimensional space you will never draw and never need to.
Do one thing to them, and subtract each column's own mean from every one of its entries. That is centering, and the result is the deviation vector — the same deviations from the rectangle picture, now stacked into a column.
Centering is not cosmetic, and here is the trap that proves it. Take two stocks that both drifted upward all year while wiggling completely independently. Their raw columns are mostly positive, so the raw dot product is a big positive number, and it looks like strong agreement. It is nothing of the kind. What that number reports is that both columns were usually above zero, which is drift rather than co-movement. Centre them and the number collapses into noise.
The rung the subject skips: a column of returns is an arrow. Step it through — and the covariance formula turns out to be a plain dot product.
press NEXT to walk the derivation
beat 1 of 5 — the raw column
a column — five raw numbers
What you're looking at — the missing rung: a column of returns is a vector, and covariance is its dot product
Column a, five daily returns. Its five numbers are the five components of one arrow in ℝ⁵. Subtract its own mean and you get ac, the centred column.
Column b, the second asset, centred the same way into bc. In the drawing only the angle between the two arrows is real — ℝ⁵ will not fit on a page.
Multiply entry by entry — green adds, red subtracts. That is the very same list of signed products the rectangle figure drew.
Sum, divide by n−1: Cov(a,b) = (ac·bc)/(n−1) and sd(a) = ‖ac‖/√(n−1). Covariance is a dot product; standard deviation is a length. So ρ = cos θ is a recognition, not a coincidence.
Fig. 6. Here is the rung almost every course skips. A spreadsheet column of five daily returns is a list — and a list of five numbers is a vector, one arrow with five components, exactly as in Chapter 6. Press NEXT and watch the column get centred: every entry slides down until its dashed mean line lands on zero, which is all “subtract the mean” ever meant. Multiply the two centred columns entry by entry — green adds, red subtracts, the same signed products the rectangle figure drew — then sum and divide by n − 1. Set that beside the textbook covariance formula and they are the same sum of the same products: Cov(a, b) = (ac·bc)/(n−1), and by the same move sd(a) = ‖ac‖/√(n−1). Covariance is a dot product; standard deviation is a length. That is why ρ = cos θ later reads as a recognition rather than a coincidence. Now press the TRAP: two columns that both drift upward while wiggling independently. Uncentred, their dot product is a fat +16.22 — divide by four and you would report a covariance of +4.06. Centre them and it collapses to +0.02, the arrows swing to 89° apart, and the true covariance is +0.01. The fat number was never co-movement; it was the shared level. An uncentred dot product measures drift, not agreement.
Now take the plain Chapter 6 dot product of the two centered columns, which is aᶜ·bᶜ = Σ(aᵢ−ā)(bᵢ−b̄). Put that next to the sample covariance formula and read both lines slowly, because they are the same sum of the same products.
So we can write down two identifications, and neither of them is an analogy.
First, covariance is a dot product: Cov̂(a,b) = (aᶜ·bᶜ)/(n−1). The n−1 is Bessel's correction from Chapter 16, unchanged, and it is there for the same reason as always, since both means were estimated from the same data and one degree of freedom is already spent.
Second, standard deviation is a length: σ̂ₐ = ‖aᶜ‖/√(n−1). Chapter 6 defined the norm as ‖a‖ = √(a·a), and the sample standard deviation is √(Σ(aᵢ−ā)²/(n−1)). Those are the same square root with the constant moved.
Nothing was proved here. Two formulas were placed side by side and recognised as one formula, which is exactly why the step costs you nothing and buys the entire chapter.
05Correlation is a cosine
Now do the division we demanded, and give the result its name. Correlation is ρ = Cov(X,Y)/(σₓσᵧ), which is covariance measured in units of the two standard deviations. Every rescaling cancels, so the number no longer cares whether you quote returns in decimals, percent or basis points. That was the point.
But substitute the two identifications and something much better than tidiness happens. Covariance is (aᶜ·bᶜ)/(n−1), and the two standard deviations are ‖aᶜ‖/√(n−1) and ‖bᶜ‖/√(n−1), so their product carries a 1/(n−1) as well. The n−1 cancels top and bottom, and what is left standing is this.
ρ = (aᶜ·bᶜ) / (‖aᶜ‖ · ‖bᶜ‖)
That is Chapter 6's cosine formula, and not something that merely resembles it. It is the same formula, character for character, unchanged. Correlation is the cosine of the angle between the two centered data vectors.
Kill the (n−1) that sits on top and underneath — and correlation turns out to be a cosine you can drag with your hand.
step 1 — kill the (n − 1)
Cov = (a·b)/(n−1). And σₓσₖ = ‖a‖‖b‖/(n−1). The same factor sits on top and underneath. Press CANCEL.
What you're looking at — two arrows, one angle, and the number we have been calling correlation
a is series A's days with its own mean subtracted, drawn as one arrow; b (violet) is series B given exactly the same treatment. Nothing else is in the picture.
The shadow is b's projection onto a, and its length as a share of b's own length is ρ — so ρ = 0.7 means the shadow keeps 70%. The dashed perpendicular is everything b refused to share.
The cloud is that same pair as an ordinary scatter. Angle and cloud are one object: 0° is a straight line, 90° is a round blob, past 90° it tilts the other way.
Fig. 7. Substitute the two identifications into ρ = Cov/(σxσy) and the same 1/(n−1) appears on top and underneath. Press cancel and it dies, leaving (a·b)/(‖a‖‖b‖) — Chapter 6's cosine formula, character for character. So ρ is an angle, and two things follow at once. First, |ρ| ≤ 1 is not a bound to memorise: a cosine simply cannot exceed one. Second, and more humbling — commit to a guess before you drag, because almost everyone guesses low. Our five days scored ρ = 0.6993, which sounds like a strong relationship, and it is 45.63°: two arrows nearly half a right angle apart, a shadow keeping 70% of a length, with a visible perpendicular remainder left over that the number never mentions.
Everything you were ever told to memorize about correlation now follows without further work. A cosine cannot leave [−1, 1], so |ρ| ≤ 1 is not a bound that needs proving but a plain fact about angles. Most courses reach it with a discriminant trick on E[(tX+Y)²] ≥ 0, which compels agreement and produces no understanding at all.
ρ = 1 means the two arrows point the same way, so one column is literally a positive rescaling of the other. That is perfect linear agreement, which is a much narrower claim than "they always move together". ρ = −1 means antiparallel.
And ρ = 0.7 finally has an honest reading. Project one deviation vector onto the other, and the shadow keeps 70% of the original length, while the rest sticks out perpendicular and is simply not seen. Our five days scored r = 0.6993, which is an angle of 45.63°. So a correlation of 0.7, a number that sounds like a strong verdict, is two arrows sitting about forty-six degrees apart.
Hold on to one more thing, because it is where the chapter goes next. If correlations are angles between arrows, then a set of pairwise correlations is a set of pairwise angles. Angles among several arrows are not independent dials you can turn freely.
Test that on yourself before reading on. Here are three assets, and every pair moves against both of the others, so each one hedges the other two. Set all three correlations to −0.9. Possible?
Three correlation dials that look completely free. Set all three to −0.9 — then try to draw the picture. Geometry got there first.
1 · PREDICT FIRST
Can ρ(A,B), ρ(A,C) and ρ(B,C) all be −0.9 at once?
2 · ONE DIAL, ALL THREE drag →
ρ = +0.00 · angle 90.0°
3 · HOW MANY NAMES, k
k = 3 · floor −0.500
predict first, then turn the dial
What you're looking at — three correlations you thought were three free dials, and the one picture that says otherwise.
A, B, C as arrows from one origin. ρ is the cosine of the angle between two of them: ρ=+1 same arrow, ρ=0 a right angle, ρ=−1 a U-turn.
Three arrows can't all be further than 120° apart — and cos 120° = −0.50. That is the floor, and it is a fact about space.
Push past it and Var(A+B+C) = 3 + 6ρ goes negative — impossible. With k names the floor is −1/(k−1): more names, less mutual hedging.
Fig. 8. Here is the thing nobody warns you about when you first meet a correlation matrix: it looks like a grid of independent knobs. Three assets, three pairs, three numbers you can type — ρ(A,B), ρ(A,C), ρ(B,C) — and nothing in the notation so much as hints that they are talking to each other behind your back. So answer the poll honestly first. You want three names that all hedge each other hard, every pair at −0.9. Can you have it? Before any algebra, listen to the sentence: if A is very nearly the opposite of B, and B is very nearly the opposite of C, then A and C are two descriptions of the same trade — they are forced to move together, not against each other. The third dial was never yours to set. Now turn the one slider, which drives all three correlations at once, and watch what the arrows are doing. Each asset is drawn as an arrow of unit length from a common origin, and this is the whole secret of the chapter: correlation is the cosine of the angle between two arrows. Two arrows lying on top of each other, angle 0, cosine 1 — the same asset twice. A right angle, cosine 0 — uncorrelated. A U-turn, 180°, cosine −1 — a perfect hedge. Push the dial down from +1 and the tripod opens out; the arrows tilt away from the vertical, the dashed triangle joining their tips grows, and the angle between any two of them climbs past 90°, past 100°, past 110°. And then it stops. At −0.50 the three arrows have fallen flat into a single plane, splayed at exactly 120° like the spokes of a Mercedes badge, and there is nowhere left to go: three rays leaving one point in any number of dimensions cannot all be more than 120° apart, because the three angles around the shared axis have to add up to 360°. Three into 360 goes 120, and cos 120° = −0.50. That is the floor, and notice what it is made of — not finance, not markets, not data. Space. The algebra says the same thing in a second language, and it is the language you already own from Chapter 11: Var(A + B + C) = 3 + 6ρ, three ones down the diagonal and six equal covariance terms off it. A variance is an average of squares; it cannot be negative. Set ρ = −0.5 and that expression reads exactly 0.0000 — the equal-weight portfolio has been driven to a dead-flat, riskless nothing, which is the absolute limit of what hedging can buy. Nudge one more step to −0.51 and the readout prints −0.06: a negative variance, an object that does not exist, and the arrows freeze and go red because there is no picture to draw. This is exactly what people mean when they say a correlation matrix must be positive semi-definite — w′Σw is the variance of the portfolio with weights w, so it is never allowed below zero, and the eigenvalue that Chapter 7 taught you to compute goes negative the instant you cross the wall. Then take the last dial, the one that turns three names into a hundred. The floor is −1/(k−1), and it climbs mercilessly toward zero: three names can average −0.50, ten names only −0.11, a hundred names a pitiful −0.0101. The more things you try to make mutually hedging, the less mutual hedging is available to you — on average, a large portfolio is barely allowed to be negatively correlated with itself at all. So when someone hands you a covariance matrix estimated from noisy returns and one of its numbers has been nudged "just to be conservative", this is the trap waiting: the nudged matrix may describe no world at all, and the optimiser you feed it in Chapter 30 will happily find an infinite free lunch inside the impossibility. Correlations were never free dials. They are angles among arrows, and geometry had already decided what you are allowed to want.
Almost everyone says yes, because nothing in the definition of a pair mentions a third asset. Now take the algebra away and ask it in English. If A moves exactly opposite to B, and B moves exactly opposite to C, what is A doing relative to C?
It is moving with it, which means A and C are the same trade. The three dials were fighting each other the whole time, and you did not need a single formula to see it.
The geometry says the same thing with a number attached. Three arrows from one origin can be pushed apart until each pair sits at 120°, and after that there is nowhere left to go. cos 120° = −0.5. That is the floor for three mutually equal correlations, and it is a fact about space rather than a fact about finance.
Watch what happens either side of it. At ρ = −0.5 the three arrows form a flat tripod and the equal-weight portfolio's variance sits at exactly zero. Nudge one dial to −0.51 and the picture cannot be drawn at all, while the variance readout goes negative. A portfolio with less risk than nothing.
06The one line it can see
Push on ρ = 0, because that is where the technical word and the English word finally come apart.
ρ = 0 means cos θ = 0, which means the two centered vectors are perpendicular. Perpendicular is a statement about one line's worth of information. It says B's deviation vector has no component lying along A's, so A's shadow on B is empty. It says nothing whatsoever about whether B is determined by A.
Here is the smallest example that forces the point. Let X be equally likely to be −2, −1, +1 or +2, and let Y = X². Y is a deterministic function of X, so tell me X and I tell you Y exactly, which makes these two as dependent as two variables can get.
Now compute, with four numbers and no theory. E[X] = 0, and E[XY] = E[X³] = (−8 − 1 + 1 + 8)/4 = 0. So Cov(X,Y) = E[XY] − E[X]E[Y] = 0, and ρ = 0.
A cloud where y is exactly x² — and its correlation is 0.00. Sweep the line: the shadow never fills.
1 · SWEEP THE LINE drag →
0° · the x–y frame
shadow r = 0.00
2 · THE SIGNED RECTANGLES
3 · ADD Σ x·y BY HAND tap
4 · THE ONE EXCEPTION
a perfect U — and r = 0.00
What you’re looking at — a relationship with no slack in it at all, wearing a correlation of zero.
the four points: x is −2, −1, +1, +2 equally often and y is exactly x² — no noise, no wiggle room. Tell me x and I will tell you y.
the sweep line and its shadow: the ticks are where the points land on the line. r asks whether the cloud drifts to one side as you travel along it. It never does.
the + rectangles (x and y deviate the same way) — areas +1.5 and +3.0.
the − rectangles (they deviate opposite ways) — −1.5 and −3.0. Every + meets an equal −: Cov = 0, so r = 0.
Fig. 9. Here is the sentence that has to break before the word uncorrelated can ever be trusted again. Look at the cloud: x is −2, −1, +1 or +2, each equally likely, and y is exactly x². Not roughly. Not on average. Tell me x and I will tell you y to the last decimal — there is no relationship in all of statistics tighter than this one. Now read the number in the corner: 0.00. Drag the sweep and watch what correlation is actually doing. The line pivots through the mean, the four points drop their shadows onto it, and the readout asks the only question correlation has ever asked: as you travel along this line, does the cloud drift consistently to one side? Sweep the whole 180° and the answer never changes. The shadow stays empty. Press SHOW RECTS to see why, in the language of the last figure: each point makes a rectangle out of its two deviations, and its sign says whether x and y deviated the same way. The point at x = −2 sits left of μx and high above μy, giving −3.0; its mirror at x = +2 sits right and equally high, giving +3.0. Press CANCEL and watch every plus meet an equal minus and go out. Or do it with your bare hands: because μx = 0, the covariance is just the average of x·y = x³, so tap the four points and add −8, −1, +1, +8. Zero. There is no rounding here and no near-miss — the answer is exactly zero, because a parabola on a symmetric range leans left precisely as much as it leans right. So correlation did not fail. It answered honestly, and its answer was about a straight line: there is no linear component in this relationship, and indeed there is not one. The word uncorrelated means no linear co-movement, and it never meant anything else. It does not mean unrelated, it does not mean independent, and reading it that way is exactly the assumption that detonates in a crisis, when the “uncorrelated” book turns out to have been holding hands the whole time through a relationship no straight line was ever going to see. One exception is worth knowing precisely because it is the source of the confusion: flip to GAUSSIAN. For a jointly Normal pair — and only for that special family — zero correlation really does imply independence, because a joint Normal is completely described by its means and its covariance matrix, so killing the covariance kills every last link between them. That is where the folklore came from, and it does not travel: outside the Normal family, r = 0 buys you nothing but the absence of a line. (Dependence that lives entirely in the tails — the kind that shows up on the worst day of the decade — needs copulas, and waits for Ch 32.)
Draw the cloud and the reason is on the page. It is a U, and a U leans left exactly as much as it leans right. Every positive signed rectangle is met by a negative one of the same size, and they annihilate in pairs.
Correlation did not fail here. It reported honestly that there is no linear component, and there genuinely is not one. The instrument is pointing at the place where the information is not.
So the logic runs one way only, and it is worth writing as an arrow. Independence ⇒ ρ = 0, which we proved with the rectangles. ρ = 0 ⇏ independence, which the U just demonstrated.
One exception deserves naming out loud, because it is why the confusion is so sticky. If X and Y are jointly Normal, then ρ = 0 really does imply independence. Most of your mental library of scatter pictures is Gaussian, so the implication feels true in general. It is not. And the place that exception fails hardest is the joint tails, which is exactly why Chapter 32 needs copulas.
The blind spot has a milder form too, and it is far more common than a perfect parabola.
Four clouds that look nothing alike — and one correlation number that claims to describe all four.
1 · ONE r, OR FOUR DIFFERENT r?
2 · BREAK IT — MOVE ONE POINT
panel 3 · r = 0.82
3 · WHO CARRIES THE NUMBER?
weigh each point’s rectangle
one r, or four different?
What you’re looking at — four different worlds, filed under one identical number.
the observations: 11 pairs (x, y) per panel. Same count, same r — a band, a fan, a blob and an arc.
r, the correlation — covariance divided by both standard deviations. And, in panel 3, the one point that is writing it.
positive rectangles: x and y both above (or both below) their means — these push r up. Area = size of the push.
negative rectangles: one above its mean, one below — these pull r down. r is just the tug-of-war between the two colours.
Fig. 10. Two series move together — what have you actually learned? Here is the honest answer, and it is smaller than you'd like. In Chapter 11 the variance of a sum came out as Var(X+Y) = Var(X) + Var(Y) + 2Cov(X,Y), and that leftover Cov(X,Y) = E[(X−μX)(Y−μY)] is nothing more exotic than the average of a pile of rectangles: for each observation, measure how far x sits from its own mean, measure how far y sits from its mean, and multiply. Press SHOW SIGNED RECTANGLES and there they are — drawn from the crosshair at the two means out to every point. Both deviations the same way (up-right or down-left) and the product is positive: a green rectangle voting the number up. One up and one down, and the product is negative: a red rectangle voting it down. Covariance is the net area, and its units are the product of two units — returns×returns, degrees×icecreams — so the raw number is unreadable and cannot be compared across pairs. Divide by both standard deviations and the units cancel: that is Pearson's r, a pure number pinned into [−1, 1]. Normalisation, not a new idea. Now the part that costs money. The reported r for all four of these clouds is 0.82 — press REVEAL and check it panel by panel, to two decimals, no trick. Panel 1 is what everyone pictures when they hear “correlation 0.82”: a band. Panel 2 is a fan — at the left edge y is pinned to within a hair, at the right edge it sprays; the average link is 0.82 but the reliability of that link is not remotely constant, which in a risk model is the difference between a calm month and a margin call. Panel 4 is a smooth arc, a relationship so tight it is nearly deterministic — and r, which can only ever see the straight-line part, files it under the same 0.82 as the noisy band. Push that all the way and you get the keystone this chapter is built on: a perfect parabola on a symmetric range has correlation exactly zero while knowing x tells you y with no error at all. Zero correlation is not independence. Then panel 3, which is the one to be frightened of. Ten observations sit in a blob with an internal correlation of about −0.02 — genuinely nothing — and one lone point sits out to the right. Drag it (or run the slider, or press the arrow keys) and watch: every other point is frozen, and r sweeps from about −0.91 through 0.00 to about +0.90. Turn the rectangles on while you drag and you can see exactly why — that single observation's rectangle is enormous, carrying the large majority of the total area, so the sum is effectively reporting one data point wearing the costume of eleven. Drag it back into the crowd and 0.82 collapses to nothing. This is why “always plot it” is a rule and not advice, and why uncorrelated must never be read as unrelated — the assumption that detonates in a crisis, when correlations that sat comfortably near zero for a decade all sprint towards 1 in the same week. And nothing here, at any value of r, has said one word about cause: that requires an argument ruling out the lurking third variable, which is the next thing we build. Scaling this up to many assets gives the covariance matrix and its positive-semi-definiteness (a portfolio variance w′Σw cannot be negative, so the entries are not free); the payoff in portfolio optimisation is Chapter 30, PCA is Chapter 24, regression's exact relationship to r is Chapter 20, and copulas and tail dependence — the proper machinery for “correlated only in the crash” — are Chapter 32.
A single number cannot carry the shape of a cloud. A clean line, a widening fan, and one outlier dragging everything can all report the same r. Always look at the scatter. The number is a summary of one specific thing, and it was never a substitute for the picture.
07Somewhere to put the pairs
Scale up, and the container builds itself. Two assets have one covariance, and three assets have three pairs. Five hundred assets have 500·499/2 = 124,750 pairs, plus 500 variances. A quant does not hold two assets.
You need somewhere to put those numbers, and the shape of the container is forced rather than chosen. Index the rows and columns by asset, and define Σᵢⱼ = Cov(Rᵢ,Rⱼ). That is the covariance matrix.
A notation warning first, said once, plainly. That capital sigma is not the summation sign you have used since Chapter 2, and the two of them will appear in the same formulas. Var(Rₚ) = ΣᵢΣⱼ wᵢwⱼ Σᵢⱼ is a genuinely hostile line of text. Read it by position rather than by glyph, because it is an accident of history and not a concept.
Two features of the container are already ours. The diagonal holds Σᵢᵢ = Cov(Rᵢ,Rᵢ) = Var(Rᵢ), because variance is self-covariance. So the variances are not stored somewhere separate, because they were always the diagonal of this object. And the matrix is symmetric, because covariance is symmetric, so the upper and lower triangles mirror each other.
Nobody sat down and invented the covariance matrix. 500 assets force 124,750 pairs into existence — this is simply the container those pairs need.
HOW MANY ASSETS?
4 assets · 6 pairs
WHAT IS IN THE CELLS?
4 assets → 6 pairs + 4 variances = 10 numbers in 16 cells.
Every number still fits inside its own cell — for now.
Cov(1,2) = 0.12 · units are %²
What you're looking at — a table of deviations on the left, and the only container big enough to hold every pair it makes.
the diagonal — not a special case. Cell (k,k) asks a column about itself, and that is exactly Var. Cov(X,X) = Var(X), so the variances were always going to live there.
the off-diagonal — one number per pair, printed twice. Fold the grid along the gold and the two halves land on each other, because Cov(i,j) = Cov(j,i).
the live pair — a cell is just the dot product of two columns ÷ (n−1). One warning on the symbol: Σ̂ here is a matrix, not Chapter 11's “add these up” sign. Same glyph, unrelated jobs.
Fig. 11. Start with the count, because the count is what forces everything else. A desk holding 500 assets does not get to hold 500 numbers: every asset has to be asked about every other asset, which is 500×499/2 = 124,750 pairs, plus the 500 variances it already had. Nothing yet has been designed — that arithmetic happened to us. The only question left is what shape of container holds 124,750 pairs neatly, and the answer is the one in front of you: a square grid with the assets down the side and the same assets across the top, so that cell (i,j) simply is the pair (i,j). Now look at what the shape hands you for free. The gold diagonal is not a special case bolted on; cell (k,k) asks column k about itself, and Cov(X,X) is literally E[(X−μ)(X−μ)] = Var(X). The variances were always going to be there. And the grid is a mirror — hover any blue cell and watch its twin light up across the gold, because Cov(i,j) and Cov(j,i) are the same question asked in the opposite order. That is why 12 assets need only 66 + 12 = 78 numbers to fill 144 cells. One warning while we are here, and then we never mention it again: the symbol Σ̂ is a matrix, and it has nothing whatever to do with the summation Σ from Chapter 11. Same glyph, unrelated jobs; blame three centuries of notation. Now check the machinery by hand, which is the whole point of this figure. Take the two-asset toy: asset 1 deviates (+0.6, −0.6, 0.0) over three days, asset 2 deviates (+0.4, 0.0, −0.4). Press BUILD IT and the grid empties, then refills one square at a time with the arithmetic printed underneath. Cell (1,2) computes 0.6×0.4 + (−0.6)×0.0 + 0.0×(−0.4) = 0.24, and dividing by n−1 = 2 gives 0.12, which is exactly the number that drops into the square. Do the same for the diagonal and you get 0.36 and 0.16; the whole matrix is [0.36, 0.12 ; 0.12, 0.16]. Notice what that computation actually was: a dot product of two columns, done for every ordered pair of columns. So the entire object is one matrix product, Σ̂ = XcᵀXc / (n−1) — the Gram matrix of the asset arrows, the complete table of their lengths and the angles between them. That is why it is not bookkeeping. Finally press CORRELATION: every cell is divided by the two spreads (here 0.600 and 0.400), the units cancel, the diagonal is forced to 1.00 everywhere, and 0.12 becomes r = 0.50. Same object, same angles, just measured with the lengths divided out. Drag the asset slider and watch the blue bar sprint away from the gold one: the diagonal grows like n, the pairs grow like n²/2, and by 12 assets you can no longer even print the numbers inside their own cells. Hold that image — in Chapter 16's language every one of those 78 numbers is an estimate with its own noise, and estimating 124,750 of them from a few hundred days is the quiet reason real covariance matrices are so unstable.
Divide every entry by the two relevant standard deviations and you get the correlation matrix. Same object, rescaled, with ones down the diagonal, and every off-diagonal entry a cosine.
Computing it is one matrix product rather than a loop over pairs, so stack the centered data columns into a matrix Xᶜ with n rows for days and k columns for assets. Then XᶜᵀXᶜ is the matrix of all pairwise dot products, so Σ̂ = (1/(n−1))·XᶜᵀXᶜ.
Check that on a toy small enough to multiply by hand, with three days, two assets, A at +1.0, −0.2, +0.4 and B at +0.5, +0.1, −0.3 percent. Centre them and the deviations are (+0.6, −0.6, 0.0) and (+0.4, 0.0, −0.4). The off-diagonal entry of the product is 0.6×0.4 + (−0.6)×0 + 0×(−0.4) = 0.24, and dividing by n−1 = 2 gives 0.12. That is the dot product from the centering step, landing in the cell with its name on it.
The full toy is Σ̂ = [0.36, 0.12 ; 0.12, 0.16], with standard deviations 0.6 and 0.4, so the correlation is 0.12/(0.6×0.4) = 0.5. So the covariance matrix is the Gram matrix of the asset arrows, which is the complete table of their lengths and the angles between them.
08What the matrix is for
Now give the container a job. A portfolio is a set of weights, so its return is Rₚ = w₁R₁ + w₂R₂ + … + w_k R_k. Its variance is the same expansion we did at the top of this chapter, run over every pair instead of one.
Do the two-asset case completely, because the general case adds nothing but indices. Expanding the square and using bilinearity to pull the weights out of each covariance gives this.
Notice the shape of it before moving on. The weights arrive squared on the variances and multiplied on the cross term. Expectations were not like this, since E[Rₚ] = Σwᵢμᵢ is linear in the weights and risk plainly is not. Return and risk do not scale the same way, and that asymmetry is roughly the whole of portfolio theory.
The one line every book asserts and nobody checks: wᵀΣw is the portfolio variance. Two columns, one term at a time, on the smallest case there is — two assets.
THE DERIVATIONpress →
WEIGHT w₁drag →
ASSETS kdrag →
Every book writes wᵀΣw and moves on. Press STEP and we do both sides by hand — on the smallest case there is.
docked 0 of 4 · nothing yet
What you're looking at — the same portfolio variance computed twice, and the four terms landing in the same order.
the two diagonal terms — a weight arrives squared on a variance: w₁²σ₁₁ = 0.1296 and w₂²σ₂₂ = 0.0256.
the two off-diagonal terms — weights arrive multiplied, w₁ from the left and w₂ from the right, twice over: 2×0.0288 = 0.0576. That asymmetry is why risk and return do not scale the same way, and why the covariance share is 0% at both corners and peaks at 33.3% at w₁ = 0.40.
the same portfolio with the covariance deleted: vol 0.3940 instead of 0.4613. Drag k: at 100 assets it is 100 variances against 9,900 covariances (4,950 distinct pairs) — 99% of a real risk number is co-movement, not individual wobble.
Fig. 12. Textbooks state it in one line — the variance of a portfolio with weights w is wᵀΣw — and then never do it. So do it, slowly, on the smallest case there is. On the left the reader's own Chapter 11 machinery: subtract the means to get deviations, square the two-term sum, and four products fall out; take the expectation of each and every one becomes a weight times a covariance. On the right, the matrix sandwich, multiplied out honestly: Σw first, then wᵀ into that — and four products fall out of that too. Press STEP and each term flies into the ledger and docks beside its twin. They match, in order, four for four, because the sandwich is that expansion with the bookkeeping tidied up. Watch how the weights arrive, because that is the part the one-line assertion hides: on the diagonal a weight comes in squared (w₁²σ₁₁ = 0.1296, w₂²σ₂₂ = 0.0256), while off the diagonal two different weights come in multiplied, once from each side (0.0288 twice, the familiar 2w₁w₂σ₁₂ = 0.0576). Total 0.2128, a volatility of 0.4613 — against 0.3940 if that covariance had been zero. Now drag w₁ across its whole range. The blue contributions vanish at their own corner, but the gold one vanishes at both corners and peaks in between, at exactly 33.3% of the total when w₁ = 0.40 — diversification is a covariance statement, and it is largest where neither holding dominates. Finally drag k. Two assets gave you 2 variances and 2 covariances, an even split. A hundred assets give you 100 variances and 9,900 covariances: 99% of the number you are calling "risk" is not how the pieces wobble on their own, it is how they move together — every one of those 4,950 distinct pairs estimated from finite data (Ch 16), and every one of them free to change when the market decides to move as one.
For k assets the identical expansion produces one term for every ordered pair, which is Var(Rₚ) = ΣᵢΣⱼ wᵢwⱼ Cov(Rᵢ,Rⱼ). That double sum is exactly what the matrix sandwichwᵀΣw computes. Multiply Σw and each row of Σ gets weighted and summed, then wᵀ weights and sums those results.
Write the two-asset case both ways on adjacent lines and the four terms match one for one. That verification matters more than it looks, because Chapter 30 differentiates this expression to build every optimizer in the book, and you cannot differentiate an incantation with any confidence.
Run it on our toy matrix with weights (0.6, 0.4). The three pieces are 0.36×0.36 = 0.1296, 0.16×0.16 = 0.0256, and 2×0.6×0.4×0.12 = 0.0576. They total 0.2128, so the portfolio volatility is 0.4613%. Set the covariance to zero and the same weights give 0.1552 and 0.3940%. On two assets, the cross term is already 27% of the variance.
Now count what sits inside that sum for a real book, because the count is the point. For 100 assets there are 100 variance terms on the diagonal and 100 × 99 = 9,900 covariance terms off it, which is 4,950 distinct pairs. Ninety-nine percent of the terms in your risk number are covariances.
Portfolio risk is not mostly about how risky your assets are. It is almost entirely about how they move together. That is why every risk system in the world is built around this matrix rather than around a list of volatilities.
09Why it cannot be any matrix you like
Read the last result backwards and collect the debt from the three-dial figure. wᵀΣw is the variance of a real portfolio, one you could actually hold with those weights. A variance is an average of squares. So it cannot be negative, ever, for any weights at all.
That sentence, wᵀΣw ≥ 0 for every w, is the definition of a positive-semidefinite matrix. Read the order carefully, because textbooks run it the other way and that is why the term feels like bureaucracy. PSD is not a technical condition someone imposes on covariance matrices, but the shadow cast on the matrix by the fact that variances are never negative.
Every consequence is now something you already own from Chapter 7. A symmetric matrix's eigenvectors are the directions it only stretches, so wᵀΣw along an eigenvector is just its eigenvalue times a squared length. Therefore every eigenvalue is ≥ 0. And here is the reading nobody hands you: each eigenvector is a portfolio, and its eigenvalue is that portfolio's variance.
Every direction is a portfolio, and its variance is how far the gold contour sits — push one variance to zero, then below.
1 · λ₁ = VARIANCE OF A
portfolio A · var 1.60
2 · λ₂ = VARIANCE OF B — BREAK IT
portfolio B · var 0.70
3 · IS Σ A REAL COVARIANCE?
the equicorrelated matrix
every portfolio: variance > 0
What you’re looking at — the portfolios whose risk is exactly 1, and what a negative variance does to them.
portfolio A — an eigenvector of Σ, a real basket of assets. Its eigenvalue λ₁is that basket’s variance.
portfolio B — the second eigenvector, at right angles to A (Σ is symmetric, Ch 7). Slider 2 sets its variance λ₂.
the contour wᵀΣw = 1 — along any direction it sits at 1/√variance. Small variance, far out; zero, gone to infinity.
w, the portfolio you point at. The bar is wᵀΣw — its variance. If that bar ever goes below 0, Σ is not a covariance matrix.
Fig. 13. Scale the two-variable picture up to a whole book of assets and the object you carry around is the covariance matrix Σ — variances down the diagonal, covariances off it. The temptation is to treat it as a grid of numbers you may fill in as you please. You may not, and the reason is not algebra: it is arithmetic you already trust. Hand me any weights w — how much of each asset you hold — and the quantity wᵀΣw is not an abstraction, it is the variance of that portfolio’s return, assembled out of exactly the term Chapter 11 left lying around: Var(X+Y) = Var(X) + Var(Y) + 2Cov(X,Y), one covariance for every pair. A variance is an average of squares. It cannot be negative. So wᵀΣw ≥ 0 for every w, no exceptions — and that is the whole content of the phrase positive semi-definite. The name arrives after the fact, as a label for something you already knew. Here is that constraint made visible. Every direction on the dotted ring is a portfolio, and the gold contour collects the ones whose variance is exactly 1. Its axes are Σ’s eigenvectors (Chapter 7 — symmetric matrix, so they sit at right angles), and each is itself a portfolio: A and B, with eigenvalues λ₁ and λ₂ that are simply their variances. Drag the probe w anywhere and watch the mechanism in the corner: the contour sits at 1/√variance along your direction, so a low-variance portfolio pushes the contour far out and a high-variance one pulls it close. Now break it. Pull λ₂ down and the ellipse stretches along B, further and further, until at exactly zero it stops being a closed curve at all — it opens into two parallel lines, because a portfolio with zero variance never moves and no amount of it ever reaches risk 1. That is a non-zero holding with zero risk: one asset is an exact combination of the others, Σ is singular, its determinant is 0 and it cannot be inverted — Chapter 6’s collapse, now with money attached, and the reason a near-redundant asset makes an estimated covariance matrix explode when you try to optimise with it. Push one step further, to λ₂ < 0, and the curve tears: the ellipse becomes a hyperbola and a red wedge opens up where the contour used to be. Point w into that wedge and read the bar — a portfolio whose variance is less than nothing. There is no such portfolio; there is only an impossible matrix. Press CHOLESKY TEST and the arithmetic says the same thing without any pictures: the factorisation Σ = L Lᵀ walks down the diagonal taking square roots of pivots, and the moment a pivot goes negative there is no real L. At exactly zero it still succeeds but hands back a singular L. This is why a correlation matrix cannot hold arbitrary numbers. Press 3 ASSETS, ρ = −0.6: three assets, every pair correlated −0.6, which sounds like a diversifier’s dream and is in fact forbidden. Its eigenvalues are −0.2, 1.6, 1.6 — the equally-weighted basket has variance −0.2 — and the general bound falls straight out: for three equicorrelated variables 1 + 2ρ ≥ 0, so ρ ≥ −½. Three things simply cannot all disagree with each other at once. Keep that with you when someone hands you a hand-tweaked correlation matrix, or one stitched together from series of different lengths: check the eigenvalues. And remember that these numbers are estimates (Chapter 16) — with n assets you are fitting n(n+1)/2 of them from a limited sample, which is exactly why estimated Σs sit so close to singular. The optimisation payoff is Chapter 30; PCA, which is this ellipse read as an algorithm, is Chapter 24.
The level set wᵀΣw = 1 is an ellipsoid whose axes are those eigenvectors. It is long where risk is small and short where risk is large, which makes it the shape of the portfolio's risk, drawn. Drag one eigenvalue down to zero and the ellipse flattens into a line. Push it below zero and the picture tears open into a hyperbola, at which point "the set of portfolios with risk 1" stops being a bounded thing at all.
Two consequences are worth cashing immediately. The first is the floor we felt in words earlier, now proved in one line. Three variables standardized to variance 1, all pairwise correlations ρ, give Var(X+Y+Z) = 3 + 6ρ ≥ 0, so ρ ≥ −½. Run the same line for k variables and 1 + (k−1)ρ ≥ 0, so the floor is ρ ≥ −1/(k−1). The more assets you try to make mutually hedging, the less mutual hedging geometry will allow.
The second is the difference between semidefinite and definite, which is never explained and matters constantly. An eigenvalue of exactly zero means some non-zero portfolio has variance exactly zero, so there is a combination of your assets that never moves. That is a genuinely redundant asset. It is also Chapter 6's singular matrix wearing a financial hat.
And Chapter 7's Cholesky decomposition needs positive-definiteness to exist, which quietly makes it two useful things at once. Run it as a test and a refusal tells you your matrix is not a covariance matrix. Run it forwards and it turns independent random numbers into correlated ones, which is how every Monte Carlo in Part 4 generates a market.
Try it on the three-asset matrix with every correlation at −0.6. Its eigenvalues are 1 + 2ρ = −0.2 and 1 − ρ = 1.6 twice, so Cholesky refuses to run. Being told a matrix is invalid is forgettable. Watching it promise a portfolio with negative risk is not.
10How much can you diversify away?
Cash the matrix out on the question every investor has already asked. Take k assets, each with volatility σ, every pair correlated ρ, held in equal weights of 1/k.
Before the algebra, commit to an answer. Every stock has 20% annual volatility and every pair is correlated 0.3. What is your portfolio volatility with 10 names, then 100, then all 5,000?
k names, each with volatility σ = 20%, every pair correlated ρ — how low can the portfolio go?
your guess for σₚ (%) at k =
101005,000
guess, then REVEAL
What you're looking at — the point where buying more names stops paying
σₚ: the volatility of an equally-weighted portfolio of k names, each with volatility σ = 20%, every pair correlated ρ.
the floor σ√ρ — the shared term σ²ρ has no k in it, so no number of names can touch it.
your three guesses, pinned exactly where you put them.
the ρ = 0 fantasy, σ/√k — the only world where risk really does go to zero.
Fig. 14. Equally weighted, every name at σ = 20% and every pair correlated ρ, the portfolio's variance is σ²ρ + σ²(1−ρ)/k. Guess the volatility at 10, 100 and 5,000 names, then reveal: the second term dies like 1/k, the first never mentions k at all, so the curve flattens onto a permanent floor of σ√ρ. Thirty names spend nearly the whole benefit — and the remaining risk is not yours to remove.
The answers are 12.17%, 11.08% and 10.96%. Almost everyone predicts something falling toward zero, or at least toward a few percent, because Chapter 16's SE = σ/√n showed exactly that shape. The whole benefit was gone by about thirty names, where the volatility is already 11.37%.
Now look at why, because it is visible in the formula itself. The double sum has k diagonal terms and k(k−1) off-diagonal ones, all carrying weight 1/k². So Var = (1/k²)[kσ² + k(k−1)ρσ²] = σ²[1/k + (1−1/k)ρ].
Read the two pieces separately, because they behave nothing alike. The first, σ²/k, is the part that dies as you add names. That is idiosyncratic risk, the wiggle each asset does alone, and it is the σ/√n world you came from. The second term marches straight to ρσ² and stops. It does not contain k anywhere.
So push k to infinity and the variance does not go to zero. It goes to ρσ², which means the volatility floor is σ√ρ. With σ = 20% and ρ = 0.3 that is 10.95%. Owning every stock in the market, equally weighted, removes 45.2% of your volatility and not one basis point more.
Half the risk in a diversified equity book is not diversifiable at all. It is not the assets' risk but the covariance they share, and there is nothing left to average that against.
The only thing that actually removes shared risk is a negative cross term, and we just proved how little of that is available. With k assets the average pairwise correlation cannot go below −1/(k−1), which for a hundred names is −0.0101. A large, mutually hedging book is not difficult to build. It is geometrically forbidden.
11The Σ you actually have
Everything so far assumed you have Σ. You do not. You have Σ̂, an estimate, and the gap between the two is where real money is lost. Keep the hat visible from here on, because the population object and the sample estimate share one symbol in most of the literature and switch meaning mid-sentence.
Start by counting the parameters. A k-asset covariance matrix holds k(k+1)/2 distinct numbers, which for 500 stocks is 125,250. Estimate that from one year of daily data and you have 252 rows to do it with. There is not enough data in the file.
The failure is not gentle degradation. It is structural, and Chapter 6 already gave us the tool to see it. Xᶜ has at most 252 rows, and centering spends one, so its rank is at most 251. Therefore Σ̂ = XᶜᵀXᶜ/(n−1) is a 500 × 500 matrix of rank at most 251, and at least 249 of its eigenvalues are exactly zero.
CodeRun — 500 fake assets, 252 days of pure independent noise. Build Σ̂, ask it for the minimum-variance portfolio, and read what it swears the risk is.
VIEWtap
PREDICT FIRSTpick one
Pure noise: 500 names, 252 days. The min-var portfolio's ESTIMATED vol will be —
Pick one. RUN unlocks once you commit.
predict, then RUN
What you’re looking at — 500 names and only 252 days, so Σ̂ cannot be full rank. 249 of its eigenvalues are exactly 0, and each one is a portfolio it swears is riskless.
Σ̂ = XᶜᵀXᶜ/(T−1) has rank 251 at most (252 days, minus one for the mean) — the 251 blue points are the only directions it ever measured.
the wall of 0.000000: 500 − 251 = 249 exact zeros. Curve flat on the floor. No error, no warning — the optimiser walks straight in.
gold is the truth from the generating process: that “riskless” portfolio really carries about 1% a year. Estimated ÷ true = 0.
the sweep: the ratio is 0 for every T ≤ k, and even at T = 4k it only reaches ~0.75. That gap is the honest reason shrinkage and PCA exist.
Fig. 15. Nothing here is real. Five hundred names, two hundred and fifty two days, every single number drawn from independent noise — there is no structure to find, and the code does not know that. It forms Σ̂ = XᶜᵀXᶜ/(T−1) the way every desk forms it, and then hands it to the standard minimum-variance optimiser. Predict what volatility that portfolio will report, then run it. The answer is 0.000000% — not small, exactly zero — because with 252 days you can only ever see 251 independent directions in a 500-dimensional space, so rank Σ̂ = 251 and the spectrum ends in a wall of 249 exact zeros. Every one of those zeros is a direction the estimate believes carries no risk at all, and the optimiser is built to find exactly such a direction and put all its weight there. The truth, which we happen to know because we wrote the generating process, is about 1% a year. No exception was raised. No warning printed. The matrix inverted, the constraint held, the report looked clean. Then switch to the sweep: hold the 500 names and grow T, and the estimated-to-true ratio stays pinned at 0 for the whole singular region and, even at T = 2000 — four times as many days as names — still only reaches about 0.75. That last curve is the honest reason shrinkage, factor models and PCA exist: not mathematical fashion, but the fact that a covariance matrix estimated from a normal amount of data is always partly a work of fiction, and the optimiser reads fiction with total confidence. (PCA as an algorithm arrives in Ch. 24; the portfolio payoff in Ch. 30.)
Read that through the dictionary we built, in which an eigenvalue of zero is a portfolio with estimated variance zero. So this matrix is asserting the existence of 249 riskless portfolios built out of ordinary stocks, and they are not riskless. They are artefacts of having fewer days than names.
An optimizer that minimizes wᵀΣ̂w will walk straight into them with enthusiasm, because to a machine that believes its inputs they look like free money. Nothing errors and nothing warns, and you get a beautiful low-risk portfolio whose reported risk is fiction. That is the honest reason Chapter 22's shrinkage and Chapter 24's PCA exist.
Two more field failures belong here. Correlation matrices assembled by hand, or stitched from different sources, routinely come out non-PSD — this pair from five years of data, that one from a trader's judgement, a third interpolated. Cholesky refusing to run is the alarm. The standard repair is to eigendecompose, clip the negative eigenvalues to zero, and rebuild, which is Chapter 7's spectral view earning its keep.
And now the deepest one, which is that Σ is not a constant of nature. Correlations rise toward 1 in crashes, when you need them not to. The diversification floor we just computed uses a ρ measured in calm markets, and the ρ you actually need is the one that will hold on the day everything falls. That number is higher, exactly when you were relying on it being low.
One more thing on this page is an estimate, and it is the one everybody quotes as though it were a fact, which is r̂ itself. Somebody says gold and equities are correlated −0.2. Over what window?
A correlation computed from n observations is a statistic, so Chapter 16 says it has a sampling distribution and Chapter 17 says the way to judge it is against the cloud a boring world would produce. Before you look, guess. Take two genuinely unrelated series over 60 days, and ask how big r̂ can get by pure luck 5% of the time.
Sixty days of two unrelated things. Predict how big a correlation pure chance can hand you — then watch the exact null distribution get drawn on top of your guess.
① YOUR 5% LINEdrag →
guess: |r| = 0.05
② SAMPLE SIZE ndrag →
n = 60 · cut 0.254
③ QUOTE MEtype & press
drag → then press REVEAL
What you’re looking at — every correlation that pure chance produces when the truth is ρ = 0, drawn exactly. Its width is about 1/√(n−1), so the 5% bar is a function of the sample size and nothing else.
the curve is f(r) ∝ (1−r²)(n−4)/2, the exact null density of the sample correlation r̂. Heights are rescaled so the peak is always 1 — only the width is the message.
the shaded 5% tails and the cut. At n = 60 it is |r̂| ≥ 0.254; at n = 30, 250, 2520 it is 0.361, 0.124, 0.039.
your pinned guess. Nearly everyone puts it near 0.05 — that is a p-value being mistaken for an r, and it lands deep inside the noise.
the r̂ you quoted, held still while n moves. The dashed grey ghost is the n = 60 curve, left behind so you can see the narrowing.
Fig. 16. Chapter 17 taught the move once already: a number means nothing until you have seen what pure chance produces. Here is that same move applied to r̂. Two series that have nothing whatever to do with each other — the true correlation is exactly ρ = 0 — still hand you a non-zero sample correlation every single time, and the exact distribution of that number is known in closed form: f(r) ∝ (1−r²)(n−4)/2, a bell centred on zero whose spread is about 1/√(n−1). Before it is drawn, put your own line where you think the 5% cut falls. Almost everyone lands near 0.05 — which is a p-value wearing an r’s clothes, and it sits so far inside the noise that it is barely a step from the middle. On sixty days the real cut is |r̂| ≥ 0.254, with an SD of 0.130: one unrelated pair in twenty scores 0.25 or worse from nothing at all. Now drag n. Nothing about the world changes — only how long you watched — and the whole distribution collapses inward: the cut falls to 0.361 at n = 30, 0.124 at n = 250, 0.039 at n = 2,520, while the grey ghost of the n = 60 curve stays behind to show how far it moved. Hold the violet line at r̂ = 0.25 and watch it change meaning underneath you: at sixty days it is ordinary weather (p = 0.054, one pair in nineteen), at 250 days it is a one-in-fifteen-thousand event, at ten years it is off the map. That is the whole point: the number on the page is identical. A correlation quoted without its sample size is not a weak fact or a rough fact — it is not a fact. It is half a sentence.
Most people guess 0.05, maybe 0.10. The true answer is 0.254, which is squarely inside the range where a practitioner would say there is a relationship there. The spread of r̂ under ρ = 0 is about 1/√(n−1), which at n = 60 is 0.130.
The width shrinks like 1/√n, and that is the whole practical lesson. The 5% cut is 0.361 at 30 days, 0.254 at 60, 0.124 at 250 and 0.039 over ten years. The same measured 0.25 is weather in one column and a real finding in another. So a correlation quoted without its sample size is not a fact.
Now notice the door this opens. If one honest correlation can be off by 0.13 through luck alone, what happens when you screen a thousand candidate pairs looking for the biggest one? That question is Chapter 19.
12The causation trap
Everyone can recite the slogan and almost nobody can defend it. So here is the reason, and it is not that statisticians are cautious.
You proved it yourself in the rectangle picture, where Cov(X,Y) = Cov(Y,X). Correlation is symmetric in its two arguments, and causation is not, because "the rain wet the street" and "the street wet the rain" are different claims. A symmetric quantity cannot encode an asymmetric relation.
Read what that rules out. It is not that correlation is weak evidence of direction. Direction is structurally not among the things it can carry, no matter how large it is or how much data produced it.
So any observed r̂ leaves four live explanations, and the discipline is naming which one you are claiming.
Four causal worlds drawn above one scatter — tap each, swap the axes, then cut the arrow into X with a pair of scissors.
WHICH WORLD?tap a card ↑
CONFOUNDER VIEWcard 3
PULL A,B TOWARD Z0%
Four causal worlds, one dataset. Tap a card — and watch the scatter not move.
tap a card — data won't move
What you’re looking at — four different causal worlds drawn above one scatter. The data is identical in all four, so the data cannot choose between them.
X and Y are the two series. Cov(X,Y) = E[(X−μX)(Y−μY)] — swap the letters and every rectangle in that average is the same rectangle.
Z is the lurking cause. Two arrows pulled toward one Z end up close to each other automatically — that is the confounder, with no anecdote required.
ρ never moves. Same value in all four worlds, and identical after SWAP AXES mirrors the picture. A symmetric number cannot encode an asymmetric relation.
the scissors: randomise X and you cut every arrow entering X. Reverse and confounder die; chance and cause survive. That is what an experiment buys.
Fig. 17. Four different worlds are drawn along the top, and beneath them sits one scatter — the same points, unmoved, whichever card you tap. That is the whole argument. In world 1 nothing connects X and Y and a small sample simply got lucky; in world 2 the arrow runs backwards and Y is what moves X; in world 3 a third thing Z — summer heat — drives ice-cream sales and drownings both, touching neither to the other; in world 4 X really does cause Y. Four incompatible mechanisms, one identical picture. The reason is one line you already wrote in Ch. 11: Cov(X,Y) = E[(X−μX)(Y−μY)], an average of signed rectangles — and swapping the letters swaps nothing, because each rectangle is the same rectangle. Press SWAP AXES and watch it happen: the cloud mirrors across its own diagonal, and the number beside it does not so much as flicker. Cov(X,Y) = Cov(Y,X), always, by construction. A quantity that is symmetric in its two arguments cannot report anything that differs between the two orderings, and "which one caused which" is exactly such a thing. Direction is not weak evidence in a correlation; it is structurally not among the things the number can carry. The confounder deserves better than another anecdote, so switch card 3 to GEOMETRY: A and B are each part Z plus their own noise, and as you drag them toward that common Z the angle between them closes and ρ(A,B) = cos(angle) climbs toward 1 with no link whatsoever between A and B. Two arrows pulled toward the same third thing are automatically near each other. Then the one tool that actually cuts through: press RANDOMISE, and a pair of scissors drops onto every arrow enteringX. Assign the treatment by coin flip and nothing upstream can point into it any more — reverse causation and the confounder are severed at the source, and only chance (which is what the p-value is for) and genuine cause are left standing. That is what an experiment buys you, and why an observational correlation cannot be promoted to a cause until you have an argument that does the same work.
It could be chance, and we just watched luck manufacture 0.25 on sixty days. It could be reverse causation, where Y drove X. It could be a confounder, a third variable Z driving both, which is easy to see geometrically now: two arrows both pulled close to a third are automatically close to each other. Summer heat drives both ice-cream sales and drownings, and Chapter 15's Simpson's paradox was this same effect strong enough to flip a sign. Or it could be genuine causation.
There is a fifth trap that belongs to markets specifically, and it is a false positive of a different kind.
Two assets with nothing whatsoever connecting them. Correlate their prices and you get 0.9. Correlate their returns and it vanishes — same data, both times.
press it a dozen times ↑
guess r first — then REVEAL
the toggle swaps what is drawn — the two assets never change. cointegration is the real exception → Ch 35
What you’re looking at — one number that is about the trend, and one that is about the assets.
asset A is a running sum of independent coin-flip steps (Ch 14’s random walk), drawn as a price path.
asset B is the same recipe with its own separate coin. A and B share nothing but a calendar.
r on the LEVELS is huge and wildly unstable — press enough times and the red dots fill the whole strip, −0.9 to +0.9.
r on the RETURNS — the very same two assets, differenced — is a tight green cluster at zero. That is the honest number.
Fig. 18. Here is the false positive that costs real money, and the reason it costs it is that nothing about the calculation looks wrong. Both lines are random walks — Ch 14’s running sums, each one a pile of independent coin-flip steps with a whisper of upward drift. Asset A and asset B are generated in separate loops that never speak to each other; there is no shared factor, no common shock, no hidden link of any kind. Before you press anything, look at the two paths and commit to a number: how correlated are they? Now press REVEAL. The correlation of the levels is routinely 0.8, 0.9, sometimes 0.95 — and if it came out negative this time, press again, because it will swing all the way across. Then flip the toggle to RETURNS. Same two assets, same 120 days, nothing regenerated — and r collapses to a hair either side of zero. Two numbers, one dataset, and only one of them is telling you about the assets. Keep pressing and let the evidence stack up: after a dozen draws the red strip is smeared across the entire range from −0.9 to +0.9, while the green strip is a tight knot around 0. That contrast is not an opinion; you built it. Why does it happen? Because correlation is a statement about how two series deviate from their means, and a wandering series has no stable mean to deviate from — each path spends long stretches on one side, so two paths that both happen to drift up look, arithmetically, like they are moving together. What the number actually measured was the shared shape of two trends, not any relationship between the assets. Differencing kills the trend and leaves the thing you care about: what A did today versus what B did today. Hence the rule that saves you: correlate returns, not prices. One honest exception exists — two series can be genuinely tied together in the long run even though each wanders (a stock and its own futures contract, two share classes of one company), and that is cointegration, a real and tradeable relationship with its own statistical test; we do it properly in Ch 35. Everything else on a levels chart should be assumed to be this figure until proven otherwise.
Correlate prices instead of returns and you are correlating two random walks. Chapter 14 built those as running sums of independent steps, and their sample correlation does not settle down to zero at all. It wanders across the whole range, so two entirely unrelated trending series routinely score 0.9. Correlate returns, not levels. The proper treatment of the genuine exception, where two prices really are tied together, is cointegration in Chapter 35.
Now the constructive half, because "correlation is not causation" gets over-learned into "correlation is useless", and that is badly wrong. Correlation is exactly what a portfolio is built on, and you need no causal story at all to hedge. This whole chapter was a demonstration of how much work a bare association can do.
What licenses a causal claim is not a bigger r̂. It is a different kind of data, which is an intervention. When you assign the treatment yourself at random, you have severed every arrow into it, because no confounder can be feeding the assignment when a coin flip did. The difference that remains has one explanation left.
You already built that machine in Chapter 17, and the A/B test is not merely a hypothesis test. Randomizing is the operation that converts an association into a cause.
13The leverage effect, unresolved
Close on a live case from your own field, where every piece of this chapter is in play at once and the honest answer is not a clean one.
Take the daily returns of an equity index and the daily changes in its volatility, and correlate them. The number comes back near −0.7. It is not a marginal effect and it is not a small-sample artefact, since it clears the test we just built with enormous room to spare over decades of data. Volatility goes up when the market goes down, hard and reliably.
CodeRun — 504 days of an index and its own volatility. RUN settles the sign past any doubt. Then two stories, arrows pointing opposite ways, predict the same cloud.
VIEWtap
WHICH ONE?pick one
RUN computes r on all 504 days, then the same r on four 126-day windows.
504 days loaded — press RUN
What you’re looking at — the correlation is settled to a certainty no experiment ever gives you. The cause is still an open question, and the figure refuses to close it.
the cloud and its number: r̂ ≈ −0.72 on n = 504, against a 5% cut of only ±0.087 — about 8× over, p ≈ 10⁻⁹¹. Chance is dead.
① leverage (Black): price falls → debt/equity rises → the firm is riskier → vol rises. Arrow: PRICE → VOL.
② feedback: vol rises → required return rises → price must fall today. Arrow: VOL → PRICE — the same sign, reversed.
what is not settled: reverse causation, a confounder and direct causation all survive. The measured effect is also too large for leverage ratios alone.
Fig. 19. The chapter closes on a question nobody has finished answering. Here are 504 days of an equity index and its own volatility — x is the daily return in per cent, y is that day's change in the volatility index in points — and RUN does the whole of Ch. 16 on them in one breath. It prints n = 504, the measured r̂ ≈ −0.72, the 5% critical value for that sample size, ±0.087, and the margin between them: about eight times over the cut, with a p-value so far into the tail it has to be printed as a power of ten. Chance is not a live explanation here; it is dead, and one line kills it. Then the same calculation on four separate 126-day windows: the number wanders from about −0.5 to about −0.78, so the size is a moving, regime-dependent thing — but the sign is negative in every single window. That is the settled part. Now switch views and look at the honest part. Two mechanisms are on the table. Black's leverage story: a fall in price shrinks the equity while the debt sits unchanged, the debt-to-equity ratio rises, the very same firm is now a more levered and therefore more volatile bet — the arrow runs price → vol. The volatility-feedback story: volatility rises, investors demand a larger premium to hold the index, the required return goes up, and the only way for a claim on fixed future cash to offer more return is to be cheaper today — so the price falls, and that fall is the negative return. The arrow runs vol → price. Opposite directions of causation. Identical prediction: a negative correlation. Pick one and the figure lights both, because a correlation is a property of the joint distribution and a joint distribution has no arrow in it. And the tie-breaker you might reach for cuts the wrong way: the effect measured on indices is generally too large to be produced by leverage ratios alone. So this is what a real open question looks like — not a shrug, but a fact pinned down to eight standard errors sitting next to a mechanism nobody can name. And notice what the sign alone already buys, with no mechanism attached at all: a market that gets more violent as it falls is a market whose returns are left-skewed, where a crash is worth strictly more than any symmetric model will price it, where index puts trade rich and stay rich, and where a stress test that shocks price without shocking volatility is lying to you. The mechanism would buy something further — a forecast of when the effect strengthens or fades — and until someone settles the arrow, nobody gets that. (Copulas and tail dependence, which is where "everything moves together at once" is modelled properly, arrive in Ch. 32.) The sample here is a synthesised 504-day stand-in, generated from one joint law per regime and matched to the published signature of the real pair, so the code runs offline and the numbers you see are computed live from it; the sign and its rough magnitude are the documented empirical facts.
This is the leverage effect, and it is the single most important covariance in derivatives. So run the four-explanation checklist on it, and watch chance die on the first line. What remains is two mechanisms that predict the same correlation with the arrow pointing in opposite directions.
Black's leverage story runs price → volatility. A firm's equity is the residual claim sitting on top of its debt. When equity falls, the debt-to-equity ratio mechanically rises, so the remaining equity is a more levered claim on the same assets, and a more levered claim is more volatile.
The volatility-feedback story runs volatility → price, because when expected volatility rises investors demand a higher return to hold the asset. The only way to deliver a higher future return on unchanged cash flows is for the price to fall right now.
Same sign, same data, opposite causal arrows. The evidence is genuinely mixed, and the measured effect for indices is generally too large to be explained by leverage ratios alone. We do not fully know.
What we do know is the sign, and the sign is what the desk trades. A market that gets more violent as it falls is a market where a crash is worth more than a symmetric model says. That single asymmetry is what bends the flat Black–Scholes volatility surface into the downward skew you will invert in Chapter 29.
Notice what separated the actionable part from the open part. Pricing a skew needs the sign and its size, while forecasting whether the effect will hold through a regime change would need the mechanism. Knowing which half of a causal question you actually need answered before you can act is a skill nobody teaches.
The closing map — one picture of two arrows, and every result in this chapter read straight off it. Tap a rim reading; tap it again to see which chapter collects it.
TAP A RIM READING · AGAIN = CHAPTER
WHERE IT IS COLLECTED
reading 1 of 7 · 0 chapters shown
What you're looking at — the whole chapter hanging off one angle
X: one series, centred (its mean subtracted) and drawn as an arrow — its length is the standard deviation.
Y: the other series, same treatment. The angle between the two arrows is the only thing correlation ever measures.
anything you build from them — a third series, or a portfolio mix w₁X + w₂Y.
the blind spot and the forbidden region — what the picture is not allowed to say.
Fig. 20. Centre two series and draw each as an arrow: the length is the standard deviation, and the angle between them is the correlation, cos θ = ρ. Every result in this chapter is a reading off that one picture. You cannot open an arrow past parallel, so |ρ| ≤ 1. A right angle only kills the linear part — Y = X² sits at exactly 90° while being perfectly determined, which is why “uncorrelated” must never be read as “unrelated”. Write every length and every angle into one table and you have written Σ; mix the arrows and wᵀΣw is the mixed arrow's squared length, which cannot be negative — that single fact is why a correlation matrix may not hold arbitrary numbers, and why three equally correlated series cannot go below −½ (three arrows have no room to spread past 120°). And because the angle is the same whichever arrow you name first, the picture is silent about direction: correlation cannot tell you which series moved, or whether a third thing moved both. Tap a reading twice and it names the chapter that collects it — with Ch. 19 lit differently for a reason. Everything here was drawn from a sample: one honest correlation wanders by roughly ±0.13 on noise alone, and the next chapter starts by screening a thousand pairs to see what “survives”.
Look back at what you are holding, because it is one picture. Two centered columns are two arrows. The angle between them is the correlation, which is why it cannot exceed 1 and why a right angle says nothing about dependence. The table of all their lengths and angles is the covariance matrix, so wᵀΣw is a squared length and cannot be negative. Three arrows cannot spread past 120°, which is the −½ floor. And the angle between two arrows is the same whichever one you name first, which is why none of this can ever tell you what caused what.
The chapter opened with a cross term nobody had noticed. It closes with that same cross term setting the price of every index put in the world, still carrying a mechanism the field has not settled. Chapter 19 picks up the loose end. If a single honest correlation can wander by 0.13 through luck alone, then screening a thousand pairs for the largest one is not research. It is manufacturing, and something has to pay for the extra looks.