◈ quant roadmapPart 2 · Ch 19/45
Quantitative Finance — the Mathematics of Markets · chapter 19

19Multiple Testing & the Bayesian Split

Chapter 18 closed on a warning. A single honest correlation can wander by 0.13 through luck alone, so screening a thousand pairs for the largest one is not research. This chapter is the bill for that sentence, and the bill is larger than it looks. Test twenty things at the 5% level and one discovery arrives free, made of nothing at all. The two standard repairs are Bonferroni and Benjamini–Hochberg, and both are usually taught as hygiene. They are not hygiene. They are prices, and the thing they price is a number you never wrote down: how many hypotheses you walked in with, and that number has another name. Chapter 17 told you a p-value can never be P(H₀ | data), because the posterior needs a prior the test deliberately never asks for. The prior was in the room the whole time. It is your search. Once you see that, the multiple-testing correction and the Bayesian prior stop being two subjects. They are one bill in two currencies, and it is charged twice — once on the verdict, and once on the size of the effect.

Look at what this page stands on, because all of it is already yours. Chapter 9 gave us the complement rule and inclusion–exclusion, and Chapter 10 gave us independence, Bayes' theorem, and the habit of counting a crowd instead of multiplying percentages. Chapter 12 gave us the Beta distribution and its conjugate update. Chapter 13 gave us order statistics, and the fact that the maximum of a sample is a random variable with a life of its own. Chapter 16 gave us SE = σ/√n and the decomposition MSE = Var + bias². And Chapter 17 gave us the whole testing machine: the null distribution, the p-value as a tail area, α as a line drawn before the data, and one warning it could not cash.

Ch 17’s machine answers one question and refuses another. Press the three buttons in order and watch where the trace stops.
THE CH 17 MACHINE, TRACED ▸ press 1, then 2, then 3 YOUR DATA one backtest H₀ GENERATOR assume H₀ is TRUE sealed · no prior goes in PRINTED OUTPUT P(data | H₀) = 0.03 3 in 100 no-edge runs look this good P(H₀ | data) the bar flipped · same trace how many things you tried the input the procedure never asked for P(H₀|data) PRIOR LOCKED The box only ever runs the world where H₀ is true. So it can price your data. It cannot price the hypothesis. THE SPINE SO FAR tap a chapter ▾ Ch 15 Ch 16 Ch 17 Ch 18 Ch 19 Ch 20 Ch 21 Ch 19 · you are here: the search, its error rate, and the missing prior.

Ch 17 refused you a number. Not out of pedantry — watch the trace hit a wall.

1 · DATA IN, P(data | H₀) OUT
Read “|” as given. H₀ is the null: this strategy has no edge. The box assumes that, then prints how odd your data would look in that world. 0.03 = rare, but rare in a world you assumed.
CH 19 · YOU ARE HERE
Tap any chapter on the strip below the drawing to see what it hands this page.
answered · P(data | H₀) = 0.03
What you’re looking at — one trace, two questions, and the door between them
your data — the side you actually observed. It is the same input in all three panels.
the trace: data → the sealed H₀ box → a printed number. Ch 17’s whole machine, drawn.
H₀, the hypothesis, and the locked door P(H₀ | data). Its keyhole is shaped like a prior — an input the procedure never asks for.
the key this chapter cuts: how many things you tried. Ch 19 on the spine is lit for the same reason.
Fig. 1. The door Ch 17 could not open. The same sealed box prints P(data | H₀) all day; flip the bar to the quantity you actually wanted and the trace stops at a keyhole shaped like a prior — and the key is engraved with how many things you tried.

That is the seam. Chapter 17 did not withhold P(H₀ | data) to be pedantic. That quantity needs an ingredient the procedure never asks for, and the whole job of this chapter is to find out where the ingredient has been hiding.

01Twenty strategies made of nothing

Let us start by building nothing, twenty times, and watching it look like something.

Here is the generator, and you own it completely. Each day, each strategy returns a draw from a Normal distribution with mean exactly zero and a daily standard deviation of 1%. There is no edge. There is no signal. There is no subtle structure hiding in the data that a clever reader might defend, because we wrote the line of code that produced every number.

Run twenty of them over 1,260 days, which is five years of daily data. Then run Chapter 17's machine on each one. Compute t = mean / (sd/√n), look up the tail area, and read off twenty p-values.

Twenty strategies with zero edge by construction — run the search and watch one of them “win”
1 rng = default_rng(20260819) # one fixed seed 2 R = rng.normal(0, 0.01, (1260, 20)) # mean 0 = ZERO edge 3 for s in range(20): # test each idea, honestly 4 r = R[:, s] # 1260 daily returns 5 t = r.mean() / (r.std(ddof=1)/sqrt(1260)) 6 p = 2 * (1 - t_cdf(abs(t), 1259)) # Ch 17 7 print(s+1, t, p, "WIN" if p < 0.05 else "") stdout ↓ batch 1 of 12 · one rng stream #04 t = +2.106 p = 0.0354 ← WIN … and #4 is false. We wrote the generator. p < 0.05 — the 5% bar (this red sliver) 0 0.25 0.5 0.75 1 p — small means “surprising, if this idea is pure noise”
▼ press this
#4 wins — and #4 is FALSE
tests run20
false alarms1
alarm rate5.0%
Each dot is one honest test. Red ones cleared the bar.
Nothing here is broken. The generator has no edge, every t-test is correct — and 5% of them fire anyway.
one dot = one strategy’s p-value, spread flat across 0…1 because they are all pure noise
the red sliver is 1/20 of the line — so 1 in 20 lands there, and every red dot is a false alarm by definition
after 12 batches: 13 alarms in 240 tests = 5.4%. The machine met its specification
Fig. 2. Twenty strategies with zero edge, and one discovery. The seven lines above are the whole experiment: draw twenty streams of pure noise — mean exactly zero, so no strategy has any edge — and put each through Chapter 17’s t-test at the usual 5% bar. Strategy #4 clears it, p = 0.0354, and it is false by construction: we wrote the generator. Press run it again to step through eleven more batches from the same random stream. The tally lands on 13 false alarms in 240 tests — 5.4%. Nothing malfunctioned; a 5% threshold is a promise to be fooled one time in twenty, and if you look twenty times you have bought exactly one fooling. Switch to the histogram to watch the p-values lie flat across 0…1, which is what “no edge” looks like from the inside.

Look at the whole set rather than any single one. The p-values are spread roughly evenly across the interval from 0 to 1. Some sit near 0.9, some near 0.4, and one of them, strategy #4, comes in at 0.0354. That result is significant at the 5% level. It is also, by construction, made of absolutely nothing.

Press it again and the pattern holds. Across twelve batches the run produces 13 false alarms in 240 tests, which is 5.4%. The expected count per batch of twenty is exactly 1.00, and the run delivers 1.08.

Chapter 17 stated this fact in its closing breath: under H₀ the p-value is uniform on the interval from 0 to 1. It arrived there as a curiosity, and it is nothing of the kind. It is a manufacturing specification, and it deserves one line of proof using nothing we have not already built.

The p-value is defined as the fraction of the null cloud lying beyond you. Now suppose you are a draw from the null cloud. Then asking what fraction of the cloud lies beyond you is asking where you landed in your own ranking. And the bottom 5% of a ranking contains 5% of the draws, by the meaning of the word fraction.

CodeRun — 20,000 null draws, p = 2Φ(−|z|), sorted. Drag the gold line: the threshold and the fraction it catches are the same number.
$ python null_ranks.py · 20,000 null draws · p = 2Φ(−|z|) · sorted rank k sorted p k / n 1,000 2,000 5,000 10,000 15,000 19,000 0.0457 0.0942 0.2461 0.4970 0.7486 0.9509 0.050 0.100 0.250 0.500 0.750 0.950 sorted p · each tick = 200 of the 20,000 real draws 0.00 0.25 0.50 0.75 1.00 rank fraction k / n · perfectly even, by definition THRESHOLD α FRACTION OF THE 20,000 BELOW IT 0.0500 5.41% = 1,082 draws the same number twice · a p-value just reports its own rank THE SAME α, SAID AS A MANUFACTURING RATE 5.41 false alarms manufactured per 100 boring worlds 1,082 already manufactured out of 20,000 dead worlds α is not a discovery rate · it is a manufacturing rate
α = 0.0500 · 5.41% below
SAY IT AS
0.0500 in → 5.41% out
What you're looking at — one honest run, printed and then drawn. The k-th smallest null p-value lands on k/n, so a p-value is nothing but its own rank.
the 20,000 real draws, sorted — the upper comb, one tick per 200 of them. Nothing was tidied: the biggest gap between this run and a perfect ruler anywhere in [0,1] is 0.0083.
the rank fraction k/n — the lower comb, dead even because counting is dead even. The threads joining the two hang almost vertical: that is the identity.
your threshold α and everything it catches. Drag it: 0.05 → 5.41%, 0.25 → 25.36%, 0.50 → 50.24%. Asking a null p-value what fraction of the cloud is more extreme is asking it for its own rank — which is why the null histogram is flat, and why α is a rate you manufacture, not a risk you discover.
Fig. 3. Twenty thousand times, a computer drew a number from a world where nothing is happening, and turned it into a p-value the ordinary way: p = 2Φ(−|z|), the chance a boring world would have produced something at least this extreme. Then it sorted them. Read the printed row: the 1,000th smallest of the twenty thousand is 0.0457, and 1,000/20,000 is 0.050. The 10,000th is 0.4970; 10,000/20,000 is 0.500. All the way up. A null p-value is its own rank in the crowd — that is not a coincidence to memorise, it is what "the fraction of boring worlds more extreme than me" means when you are yourself a boring world. So the two combs are the same comb, and dragging the threshold is dragging a single number that has two names: at α = 0.05 it sits five per cent of the way along, and it catches 1,082 of the 20,000 — 5.41%. Flip it to a rate and the sentence changes character completely: five per cent is not the chance you are wrong, it is the number of false alarms you will manufacture per hundred dead-flat worlds you test. Manufacture. Test twenty ideas that are all pure noise and you have ordered roughly one discovery from the factory — and it will look exactly like the real thing.

That is the entire argument, and nothing else is being claimed. The 5% smallest p-values and the 5% most extreme null draws are the same set of draws called by two different names.

So read α correctly, once and for all. It is not a rate of being right. It is not a rate of being wrong about things that are real. It is a manufacturing rate, the number of false alarms a procedure produces per hundred boring worlds you point it at. Point it at twenty boring worlds and it manufactures, on average, one.

Now say the objection out loud, in your own words, because it is coming anyway. The data does not know how many other tests I ran.

Exactly right. It does not. Strategy #4's 1,260 returns are the same 1,260 numbers whether it was the only thing you tried or one of a thousand. Nothing in that column of data changes when you run something else in another window.

Hold on to that objection, because it is not a defence of the winner. It is the whole diagnosis, and everything that follows is the consequence of taking it seriously.

02The family, and the number fourteen

Every guarantee Chapter 17 handed you was about one test. Draw the line before you look, and you accuse an innocent null 5% of the time. Nobody in this business runs one test.

So change the unit of accounting. Define the family as the set of tests whose errors you have decided to control together, and then ask the only question that matters about a family. What is the probability that at least one of them produces a false alarm? That quantity is the family-wise error rate, or FWER.

Before we compute it, commit to a guess. At the 5% level, how many honest tests does it take before at least one false alarm is more likely than not?

Twenty honest tests on twenty strategies that do nothing. Before you touch anything — guess how often at least one “wins”.
Every lamp is a strategy with NO real edge. All duds. m = 20 tests · α = 0.05 no batch run yet runs so far: 0 P(at least one red) crosses 50% at m=14 100% 50% 0% 1 14 20 50 100 Where does it cross 50%? Pick a number — then we draw it AT LEAST ONE 1 − (1−α)^m ONE ON AVERAGE E[V] = m × α Why almost everyone answers 20: m × α = 1 — one false alarm ON AVERAGE “at least one” tips past half at m = 14
① tap your guess below ↓
Pick a number. Then look.
every lamp is a dud —
a red one is luck, not a find
What you’re looking at — m strategies that genuinely do nothing, each tested honestly at threshold α.
blue lamp = one honest test. Nothing is there to find, so every “win” is luck.
red lamp = a false alarm. Each reddens with probability α, so the count is Binomial(m, α).
gold curve = 1 − (1−α)m, the chance of at least one red. It passes half at m = 14.
Fig. 4. Twenty ideas went into the machine. One came back significant at α = 0.05. What have you found? Here is the honest answer, and it is worth the sting: probably nothing. Every lamp in this grid is a strategy that truly does nothing — there is no edge in any of them, by construction — and every test is run correctly, at a threshold that permits a 5% chance of crying wolf. Press RUN THE BATCH and watch one or two lamps go red anyway. Press it again and different ones do. Nothing in the picture is broken. The threshold is doing exactly what Chapter 17 said it would: reject a true null one time in twenty. The error is not inside any single test — each one is blameless — it lives one level up, at the search, and that level is invisible from inside the test you happen to be staring at. That is why careful people walk into this: no individual step was wrong. So before the reveal, you were asked to guess the tipping point — how many honest tests before a false alarm is more likely than not. Almost everyone says 20, and the instinct behind that answer is real arithmetic: E[V] = m × α, so twenty tests at five percent give one false alarm on average. But “one on average” and “at least one” are different questions, and they have different answers. For the second one, build it the way Chapter 9 taught: do not chase the many ways at least one alarm can happen — take the complement. A single test stays quiet with probability 1 − α; the tests are independent, so by Chapter 10’s product rule all m stay quiet with probability (1 − α)m; and the chance that at least one screams is whatever is left over. That is the family-wise error rate, FWER = 1 − (1−α)m — the gold curve — and nothing new was assumed to get it. Read it off: 14 tests is already 51.2%, so the coin flip is crossed six tests earlier than the folklore. At m = 20 it is 64%. At m = 100 — a modest parameter sweep, a few lookbacks crossed with a few thresholds — it is 99.4%, which is to say: certain. Drag α and watch the crossing marker slide, because the two knobs trade against each other in exactly the way the rest of this chapter exploits. And notice what the curve does not care about: whether you meant to search. Tuning a lookback from 10 to 60 days is sixty tests. Trying three exit rules on four universes is twelve. Each knob you turn is another look, and the looks compound whether or not anyone wrote them down. This is why a desk asks “how many things did you try?” before it asks “what was your Sharpe?”, and why published anomalies fade the moment everyone can see them. A strategy found by searching is guilty until proven innocent — and the rest of this chapter is about what counts as proof: paying for the extra looks (Bonferroni), controlling the proportion of your discoveries that are wrong instead of forbidding every mistake (Benjamini–Hochberg), and finally the deeper reframe — that a prior you refuse to state is still a prior, just a hidden one.

Almost everyone answers twenty, and the reasoning behind twenty is sound as far as it goes: you want one expected false positive, and one expected false positive takes 1/α = 20 tests. The trouble is that this computes E[V] = mα, the expected count of false alarms, and the question asked for P(V ≥ 1). Two different quantities, one intuition, and they separate fast.

The real calculation takes two facts you already hold. Each test stays quiet with probability 1 − α, and Chapter 10's product rule lets us multiply across independent tests, so P(all quiet) = (1−α)^m, and Chapter 9's complement rule finishes it.

FWER = 1 − (1−α)^m

Now put numbers on it, because the numbers are the shock. At α = 0.05, five tests give 22.6%, ten give 40.1%, and fourteen give 51.2%. Twenty give 64.2%, and a hundred give 99.4%.

Fourteen. Fourteen impeccably conducted tests, each one at the 5% level, and it is already more likely than not that you are holding a discovery made of noise.

The shape behind those numbers is worth seeing too. Chapter 2 gave us the approximation (1−x)^m ≈ e^(−xm) for small x, so FWER ≈ 1 − e^(−αm). At m = 14 that reads 0.5034 against the exact 0.5123, which is close enough to trust the shape.

Two error rates on one axis — and the product αm that secretly runs both
0 0.5 1.0 1.5 2.0 0 10 20 30 40 50 a probability stops here 1−exp(−αm) E[V] = αm P(≥1) gap 0.36 same curve at first αm ≈ 0.05 → that is α/m: Bonferroni drag α — watch FWER not move only the product αm matters m=14 m=20 ← tap to park the marker P(≥1 false alarm) 0.642 E[false alarms] = αm 1.00 α × m — you drag 0.050 × 20.0
One axis, two animals: a probability that bends over, a count that never stops. Watch what happens near m = 20.
m=20 · α=0.050 · FWER 64.2%
What you're looking at — the same α, counted two different ways
P(≥1 false alarm) = 1−(1−α)m, the family-wise error rate: a probability, so it can never pass 1 — it bends over.
E[false alarms] = αm, an average count of wrong "wins": nothing stops it at 1, so it climbs straight forever.
The ghost 1−e−αm tracks the exact curve almost perfectly — proof that only the product αm matters, which is why the one fix is α/m.
Fig. 5. Both error rates ride the same product αm — lock it and the family-wise error rate refuses to move, however wildly you swing α and m.

Read what that approximation says, because it is the sentence worth carrying. The thing governing your exposure is not α and it is not m, but their product. Cut α by a factor of ten, run ten times as many tests, and you are standing in exactly the same place.

Which means the fix, if there is one, is already visible. If αm is what you are exposed to, then the only way to hold your exposure still while m grows is to divide α by m. We will derive that properly in a moment, but notice that the picture handed it to you first.

03You do not report a random one

There is a second crime at this scene, and it is the one that actually costs money.

Nobody runs a thousand backtests and reports a randomly chosen one. You sort by Sharpe ratio and you report the top of the list. So the statistic you hand to your risk committee is not a t-stat at all. It is the maximum of m t-stats, and Chapter 13 already told us that the maximum of a sample is a random variable in its own right, with a distribution of its own.

Building that distribution takes one honest line. The maximum is below x exactly when every one of the m tests is below x. Those are the same event written two ways, so independence gives us the answer immediately.

P(max ≤ x) = Φ(x)^m

Set that equal to 0.5 and solve for x, and you get the typical best t-statistic that pure noise produces. It is arithmetic, not simulation, and the numbers are unpleasant.

The cloud never moves — the winner does. Drag m from 1 to a million.
−4 −2 0 2 4 6 typical best t = 1.82 the number you report √(2 ln m) = 2.45 the cloud is identical at every m — no single test changed 1 ½ 0 P(max ≤ t) = Φ(t)ⁿ "max ≤ t" means all m of them ≤ t dashed: the m = 1 curve median best t (exact) 1.82 √(2 ln m) says 2.45 exact arithmetic, not simulated
All m tests are pure noise. Guess the best t you'd see — then drag.
m = 20 tests · all noise
Φ(t)ⁿ = ½ → t = 1.82
mbest t√(2 ln m)
m=20 · typical best t = 1.82
What you're looking at — the same noise, a different number reported
The cloud is one test's noise, drawn as 60 exact quantiles of the standard normal. It is the same picture at m = 1 and at m = 1,000,000 — no individual test got worse.
Gold is what you report: the maximum. "max ≤ t" is the same event as "all m of them ≤ t", so P(max ≤ t) = Φ(t)m. Set that to ½, solve, and you have the typical winner of pure noise.
√(2 ln m) is the back-of-envelope version of the same march. It always runs a little generous — 2.45 where the exact answer is 1.82.
Fig. 6. Every test in the cloud is pure noise, and the cloud never changes shape. Only the gold number — the maximum, the one you report — marches right, from t = 1.82 at twenty tries to 4.83 at a million. Nothing got worse; you just started reporting a different quantity.

Twenty tests give a best t of 1.82, a hundred give 2.46, and a thousand give 3.20. And a million-combination parameter sweep, which is an afternoon on a laptop, gives 4.83.

Sit with that last number for a moment. A t-statistic of 4.8 is the kind of number that ends arguments in a meeting. It is also the ordinary, expected output of a machine searching noise.

You will also meet the rule of thumb √(2 ln m), which gives 2.45, 3.04, 3.72 and 5.26 at those same four sizes. It runs a shade generous at every m on the table, so treat it as an upper sketch rather than a value. Its real lesson is the one Chapter 5 taught: ln m crawls. A million tests buy only about 2.6 times the best t-stat that twenty tests buy, so every extra decimal place of t costs you an order of magnitude more searching.

Now the deeper damage, and this is the one the corrections will never touch.

Suppose one of your candidates is genuinely real, with a true Sharpe of 0.80. What got it to the top of your sorted list? Its edge, plus a good run of luck. Among a thousand candidates the winner is almost never the one with the best truth. It is the one with the best truth plus luck.

Twenty candidate strategies, and every one of them truly earns a Sharpe of 0.80 — no duds, no skill differences. Guess what the winner of the sort will report, then reveal it.
TRUTH · all 20 really earn Sharpe 0.80 identical by construction — pick ANY k, their true mean = 0.80 MEASURED · what one 10-year backtest says ? · ? · ? 0.0 0.4 truth 0.80 1.2 1.6 REPORTED = TRUTH + LUCK reported ? TRUTH 0.80 LUCK · hidden until you look you sorted ON the gold — winner’s gold must be + you said 0.90
1 · WHEN IT WINS, IT SHOWS drag →
your guess: 0.90
2 · SELECT THE TOP k drag →
top 1 of 20 · luck ?
roll 1 · winner ahead 1 of 1
set your guess, then reveal
What you're looking at — one honest edge, twenty honest measurements, and the number the sort hands you.
the truth: every candidate really earns 0.80. Stacked, they are one dot — and the true mean of any set you pick is 0.80, always.
the measured Sharpes: same edge, one 10-year backtest each, so each lands at truth plus its own noise.
the luck: the gold thread from 0.80 to where a name landed. Sorting picks the longest rightward threads — that is the bias.
your guess, committed before the reveal. Keep k = 20 in mind: take everyone and the luck cancels to exactly 0.00.
Fig. 7. Twenty candidate strategies, and here is the rule of this little universe: every single one of them is genuinely good. They all earn a true Sharpe of exactly 0.80 — that is what the top rail is, twenty dots stacked on one number, because in truth there is nothing to choose between them. Then each gets what a real desk gets: one ten-year backtest. Ten years is a lot of data, and the measurement is still noisy — the standard error of an annual Sharpe over T years is about √((1+S²/2)/T), which at ten years is 0.36. So the bottom rail scatters. Nobody cheated; nobody's edge decayed. The only thing that happened is that the world was sampled once. Now do the thing every quant does, and press the sort. Pull top k to 1 and look at what you are holding: the gold thread running from 0.80 out to the winner is not skill — it is that candidate's luck, drawn to scale, and it is positive. It has to be. You did not pick the name with the best edge, because there is no such name; you picked the name whose noise landed furthest right. The sort is a filter on the noise. That is the winner's curse, and here is the sentence worth carrying out of this chapter: selection biases the estimate even when the verdict is completely correct. "Is this strategy real?" — yes, gloriously so, 0.80 real. "Then is 1.4 what I should expect next year?" — absolutely not, and no amount of the strategy being real makes 1.4 any less inflated. Watch the two triangles on the axis: the green one is the true mean of the set you selected, and it never moves, because whichever names you take, their truth is 0.80. The gold one is what those same names report. The gap between them is manufactured entirely by which ones you chose to look at. Now drag k all the way to 20 and watch the gold collapse to 0.00 exactly — take everybody and there is no bias at all, because taking everybody is not a choice. Bias is not in the measurement. Bias is in the choosing. And press RE-ROLL THE DECADE as many times as you like: a fresh ten years, a different winner, and the winner's gold is positive again, every time, forever. It is not a run of bad luck you can wait out — the top of a sorted list is above that list's average by definition. This is why a desk asks "how many did you try?" before it asks "what was the Sharpe?", and it is why the honest response to a search is a haircut: deflate the best-of-m Sharpe by roughly the expected maximum of m noise draws — about 1.9 standard errors at m = 20, near 2.5 at m = 100 — before you believe a number of it. Notice, finally, what none of this chapter's machinery touches. Bonferroni and Benjamini–Hochberg police the verdict: they decide who gets called significant. Neither one repairs the number. Even a strategy that passes every correction ever invented still reports a Sharpe with its own good luck baked in, because you selected on that luck. The only instrument that removes it is data the search never saw — which is exactly what out-of-sample testing is, and exactly where Chapter 21 goes next.

And that luck is now sitting inside the number you reported, positively, by construction, because you selected on it. This is the winner's curse, and it survives the effect being completely real.

So multiplicity does not damage you once. It damages you twice. There is a false verdict, where you believe something is there, and there is an inflated estimate, where you believe it is this big. Hold on to the second one, because half of this chapter exists to pay for it.

04Divide by m, and what it costs

Now fix the verdict, with the bluntest instrument in statistics.

You want the probability of at least one false alarm across the whole family to stay under α. Start from Chapter 9's inclusion–exclusion for two events, P(A∪B) = P(A) + P(B) − P(A∩B), and notice one small thing. The subtracted term is a probability, so it cannot be negative, so throwing it away can only make the right-hand side bigger.

Where α/m actually comes from — five beats from inclusion–exclusion to Bonferroni
BEAT 1/5 — the exact identity beat the bill, split open blue = true · red = over-charge you over-pay 14.2% of it two tests · P(A) = P(B) = α′ = 0.0500 P(A ∪ B) = P(A) + P(B) − P(A ∩ B) the lens sits inside BOTH discs, so the sum counts it twice subtract it once and the line is EXACT — nothing thrown away the bill P(A)+P(B) 0.1000 the truth P(∪) 0.0858 over-charge (slack) 0.0142 tap a beat dot, or press next — drag the overlap slider at any time
Five beats. Each one changes exactly one thing in the line under the discs — and the last one hands you α/m.
exact — nothing thrown away
What you're looking at — the union bound is inclusion–exclusion with the overlap dropped in the bin
Each disc is one event Ai = “test i fires a false alarm”, probability α′. Blue = P(at least one), the truth.
The red lens is the shared overlap. Beat 2 deletes −P(A∩B) — a probability, so never negative — and the sum now counts it twice. That double-count is the slack.
Gold is the bill Σ P(Ai) = mα′. Put α′ = α/m and the m cancels: FWER ≤ α. The proof never once said independent — drag the overlap and watch the bill refuse to move.
Fig. 8. Bonferroni is not a rule someone announced — it is inclusion–exclusion with one non-negative term dropped in the bin. Step the five beats and watch α/m fall out; then drag the overlap and notice the proof never once needed the word independent, which is exactly why its waste equals your candidates' overlap.

Extend that to m events and you have the union bound, P(A₁∪…∪A_m) ≤ ΣP(Aᵢ). It is inclusion–exclusion with the overlaps thrown in the bin, which makes it a deliberate over-count. Point it at the family: if each test runs at level α', then FWER ≤ mα', and setting α' = α/m caps the whole thing at α.

That is Bonferroni, and the most important thing about it is what the derivation never used. Nothing was assumed about how the tests relate to one another. Your thousand signals can be tangled together in any way you like and the guarantee still holds, which is exactly why a crude nineteenth-century inequality is what a compliance department reaches for.

Now count the cost, on Chapter 17's own instrument. At m = 100 the per-test level is 0.0005, and the two-sided critical value moves from 1.96 out to 3.48. Slide that line to the right on the two-curve picture and watch the area under the alternative collapse behind it.

Bonferroni's bill, paid on Ch 17's own two curves — the bar slides right, the power falls off a cliff
step 1 of 5 · m = 1 — one honest test H₀ · nothing there H₁ · a real effect 2.80 SE z* = 1.960 α′ tail predict: power at m = 1,000? hold your guess — then step. 80% real effects caught 0 1 2 3 4 5 6 the test statistic z — standard errors from zero 1,000 settings tested — but how many are really different? ≈ 1000 genuinely different strategies correction you never used you paid for 1,000 looks · you really took 1000 bar 4.056 where 4.056 would do · power 10% not 10% drag the similarity dial → and watch the thousand fuse power α′ = 0.05 / m 0.05 the bar z* 1.960 power at 2.80 SE 80%
One honest test. The bar sits at 1.96 and you catch 80% of real effects that are truly 2.80 SE away.
m=1 · bar 1.960 · power 80%
What you're looking at — Ch 17's two curves, held still, while only the bar moves
H₀, the world where your strategy is worthless; H₁ (white) is the same strategy with a real edge 2.80 standard errors away — effect and sample size never change here.
The bar z* is the score you must beat. Bonferroni cuts α to 0.05/m, which slides the bar 1.96 → 2.807 → 3.481 → 4.056.
Green = power, the real effects you still catch: 80% → 50% → 25% → 10%.
Red = risk. The false-alarm tail shrinks to invisible, but the missed-effect block swells to fill the curve. The risk was never removed — it was converted.
Fig. 9. Effect size and sample size never move — only the bar does. Each extra look you pay for slides it right (1.96 → 2.807 → 3.481 → 4.056) and the green power under the real-effect curve collapses 80% → 50% → 25% → 10%: “conservative” is not “safe”, it is Type I risk traded for Type II. Step 5 shows the insult on top — when the thousand tests are near-copies of a dozen ideas, most of that correction is pure waste.

Hold the effect size and the sample size fixed, and place the alternative where you have 80% power at the ordinary bar. The power ladder then reads 80% at m = 1, 50% at m = 10, 25% at m = 100 and 10% at m = 1,000.

So Bonferroni does not make you careful. It makes you deaf. Real and modest edges go undetected, and for a fund that is not safety. It is bankruptcy in a different font. The word conservative is doing quiet damage here, because in ordinary English it means safe, and what it actually means is that Type I risk has been converted into Type II risk. Chapter 17 was clear that those two costs are not equal and not interchangeable.

The over-count has one more expensive shape, and it is specific to quant work. Suppose your thousand strategies are really one idea with a thousand parameter settings. They are near-duplicates, so the overlap terms the union bound discarded were enormous, the effective number of independent tests might be a dozen, and Bonferroni charges you for a thousand.

05Two error rates wearing one word

Stop and ask a question nobody asked you. What are you actually trying to guarantee?

Bonferroni's objective is a strong one: across this entire family, be near-certain you have not made even one false claim. For a drug going into humans that is obviously right. For a quant screening five hundred candidate signals it is close to mad, because you are not making a claim. You are building a book, and a book of forty signals of which three are junk is an excellent book.

So write down the tally of an m-test campaign honestly. Of the m hypotheses, some are truly null. You reject R of them in total. Of those R, V were nulls you falsely accused and S were real effects you correctly caught, so R = V + S.

Bonferroni controls P(V ≥ 1), while the quantity a signal book actually cares about is V/R, the fraction of the things you are about to trade that are noise. Its expectation is the false discovery rate, FDR = E[V/R].

One campaign, one table, counted twice. Drag the sweep — the 22 on top never changes, only the direction you divide by.
→ READ THE ROW · P(sig|null) 500 tested · 60 real · α = 5% · power 50% of every 100 candidates that are pure noise, 5 slip through anyway significant not significant total truly null no real edge truly real a real edge 22 false alarms 418 correctly quiet 30 real finds 30 real, but missed 440 nulls 60 real 52 discoveries 448 stayed quiet 500 read the row → read the column ↓ P(significant | truly null) 22 440 = 5.0% the ROW fraction = α ◆ the sweep starts at 100%: 22 of 22 — then 418 quiet nulls arrive and drown it. 5% is a fraction of the ROW.
pick a reading ↓ then drag the sweep
sweep across  100%
FDR dial  q = 0.10
5.0% — the ROW fraction = α
same 22 · two directions
What you’re looking at — one campaign of 500 tests, and the two different fractions people call “the error rate”.
Blue is the row: the 440 candidates that are pure noise. Sweep it and you get 22/440 = 5% — that is α, and it is the number every paper quotes.
Gold is the column: the 52 names you actually announced. Sweep that and the same 22 becomes 22/52 = 42% — the false discovery rate, the number a book actually loses money to.
Red is what a fix costs. Bonferroni buys near-zero false alarms and misses 56 of the 60 real edges; BH lets you dial q — the share of your list you agree to be wrong about.
Fig. 10. Five hundred candidate strategies went into the machine. Sixty of them — unknown to anybody at the time — had a real edge; the other four hundred and forty were pure noise. Every one was tested honestly at α = 5%, with a realistic 50% chance of catching a real edge when one is there. That is the whole campaign, and it fits in four boxes. Now watch what happens when you divide, because the same table answers two completely different questions depending on which way you sweep it. Press READ THE ROW and the shade travels left to right along the truly-null row. It starts on the 22 false alarms and, for that instant, the fraction reads 100% — every null it has met so far came out significant. Then the sweep reaches the next cell and 418 quiet, well-behaved nulls pour into the denominator and drown it: 22/440 = 5.0%. That is α. It is the number in the paper, the number in the footnote, the number everyone quotes — and it is a fraction of the row, a promise made to the nulls. Now press READ THE COLUMN. The same 22 stays gold on top; nothing about the campaign changed. But the shade now runs top to bottom down the significant column, and the only thing that joins the denominator is the 30 real finds — because those are the only other names you actually announced. 22/52 = 42%. Forty-two per cent of the strategies on your list are noise, in a campaign where every individual test was textbook-correct. Look at the two arrows: they are perpendicular. That is the entire lesson, geometrically. This is Chapter 10’s conditioning flip — P(evidence | no edge) is not P(no edge | evidence) — wearing an acronym: the row fraction is α, the column fraction is the false discovery rate, and the one people quote is not the one a trading book pays for. The third tab is where you have to grow up and choose. FWER says not one false alarm in the whole campaign, and Bonferroni delivers it by testing everything at 0.05/500 = 0.0001: watch the discovery bar collapse from 52 to 4. You did buy silence — and it cost you 56 of the 60 real edges. That is Chapter 17’s Type II error with teeth in it. FDR refuses the perfectionism and makes a different promise: at most a share q of the names on my list will be junk. Move the q dial and read the junk count beside it — that is the trade, stated out loud, in units of names. And here is the sting worth carrying out of this figure: your uncorrected campaign was already running at q = 0.42. You never chose it. You just never looked down the column. Deferred on purpose: the only genuine cure — testing on data the search never touched — is Chapter 21.

Now look at where those two numbers live in the same table, because this is the sentence to carry out of the chapter. Lay the m tests out as a two-by-two grid. The rows are what the world is, null or real, and the columns are what you declared, significant or not.

Take 500 candidates of which 60 are genuinely real, test at 5%, and give yourself 50% power. The 440 nulls throw up 22 false alarms, and the 60 real effects yield 30 catches. So R = 52 discoveries and V = 22 of them are noise.

Read along the row and you get 22/440 = 5%, which is α, which is P(significant | null). Read down the column and you get 22/52 = 42%, which is the FDR, which is P(null | significant). Same table, same cells, two perpendicular sweeps, and a factor of eight between the answers.

You have met this pair before, wearing a medical coat. Chapter 10's test with a 99% detection rate produced a set of positives that was mostly false. The false positive rate and the false discovery rate differ by one flip of the conditioning bar, and confusing them is base-rate neglect with a job in finance.

Which objective you want is a business question, not a statistical one. Ask which sentence you would rather be able to say to a risk committee. Either I am 95% sure not one of these forty signals is fake, or I expect about four of these forty to be fake. The first is unbuyable at any workable power, and the second is what you wanted anyway. Call the FDR level you are willing to run a book at q.

Before we build the procedure, notice one tell. To compute an FDR you must know how many of the m candidates were real. That is a base rate. That is a prior. The frequentist objective a quant actually wants already has a prior sitting inside it.

06The sag, and the line drawn through it

Now build the procedure that controls that quantity, and build it out of a picture rather than a recipe.

Sort your m p-values from smallest to largest, write them p₍₁₎ ≤ p₍₂₎ ≤ … ≤ p₍m₎, and plot each one against its rank k. Then ask what that plot looks like if nothing in your pool is real.

We already know the answer. The null p-values are uniform, and m uniform draws cut the interval into m+1 gaps of equal expected width, so the k-th smallest sits on average at k/(m+1). The all-null picture is a straight diagonal from bottom-left to top-right, drawn by pure noise, free of charge.

Sort 100 p-values, plot them against their rank — pure noise draws a straight line, and real effects sag it.
0 0.5 1 p-value rank 1 rank 100 the 100 tests, sorted smallest p first extra below 0.5 × 2 → 0 noise draws this line p(k) ≈ k / (m+1) no sag — nothing to find the line IS the law
press ↻ · then drag below
you put in0
the sag implies0
pure noise — it draws the line
What you're looking at — 100 tests sorted smallest p-value first, each plotted at its rank k.
the all-null line. m noise p-values cut 0–1 into m+1 gaps of equal average width, so the k-th smallest sits at k/(m+1). Re-roll: it never bends.
your sorted p-values (m = 100 tests; k = a test's rank once sorted).
the sag. Noise puts half its tests below p = 0.5. Count the extras that landed below, double it — that's how many real effects are in the pool, read off the data instead of assumed.
Fig. 11. One hundred honest tests, sorted smallest p-value first and plotted against their rank. When every test is pure noise the dots lie on a straight line — not a coincidence but arithmetic: m uniform draws cut the interval 0–1 into m+1 gaps of equal average width, so the k-th smallest sits at k/(m+1). Re-roll and it keeps drawing itself. Now inject real effects: the left end peels below the line, and the gold sag between them is the excess of small p-values over what noise would ever have produced. Count that excess — the two readouts track — and you have measured how much of your pool is real, instead of assuming it.

Now plot a real campaign on top of it. If some of your hypotheses genuinely carry an effect, their p-values pile up near zero, and the left end of your curve sags below the diagonal.

That sag is not decoration. It is a measurement. It is the visible excess of small p-values over what noise alone would have produced, and how far it extends tells you roughly how many real effects are sitting in the pool.

Benjamini and Hochberg turn exactly that sag into a licence. Draw a second line through the origin with slope q/m. Find the largest rank k whose p-value still falls under that line. Reject everything up to and including rank k.

Ten sorted p-values, one family. Drag q to tilt BH’s line (k/m)q — the cut lands after the last rank that passes, not the first that fails.
ONE CUT FOR THE WHOLE FAMILY largest passing rank k = 5 m = 10 tests · each dot is one honest p-value, sorted smallest first 0.20 0.15 0.10 0.05 0 (k/m)q rank 1 · p = 0.004 rank 2 · p = 0.013 rank 3 · p = 0.022 rank 4 · p = 0.041 rank 5 · p = 0.048 rank 6 · p = 0.071 rank 7 · p = 0.094 rank 8 · p = 0.128 rank 9 · p = 0.161 rank 10 · p = 0.190 rank p(k) 1 2 3 4 5 6 7 8 9 10 .004 .013 .022 .041 .048 .071 .094 .128 .161 .190 ◆ each dot is one honest test on its own tap a dot to check it against its rung TAP A DOT
drag q → · tap any dot
FDR level  q = 0.10
cut at k = 5 · 5 of 10 rejected
one cutoff · not ten verdicts
What you’re looking at — ten sorted p-values, and ONE cut drawn through the whole family.
Blue dots = the ten p-values, smallest first; rank k and the value p(k) read underneath.
Gold = BH’s line (k/m)q from the origin — one rung per rank. Drag q and it tilts.
Green = rejected: everything up to the largest rank under its rung — even rank 4, ringed in red, which failed its own.
Violet = Bonferroni’s flat bar at q/m — which is exactly BH’s k = 1 rung.
Fig. 12. Ten strategies, ten honest tests, ten p-values — sorted smallest first and laid along the bottom so you can check every number by hand. The rising gold line is the whole of Benjamini–Hochberg: at rank k it sits at (k/m)q, where m is how many tests you ran (here 10) and q is the share of your announced list you are willing to have wrong. Notice where it starts — the origin. It has to: at rank 0 you have announced nothing, so nothing can be junk. Now the part that makes people argue. Read the ladder at the factory setting q = 0.10, where the rungs are simply 0.010, 0.020, 0.030, and so on. Rank 1 (0.004) is under its rung. Rank 2 and rank 3 are under theirs. Rank 4 is 0.041 against a rung of 0.040 — it fails, by one thousandth — and yet it comes out rejected. Tap it and the note says so in black and white, with a red FAIL badge sitting next to a dot that is unmistakably green. That is not a bug and it is not a rounding fudge. Look one rung further along: rank 5 (0.048) is under 0.050. BH does not walk up the ladder handing down a verdict per test; it walks down from the top, finds the largest rank that still clears its own rung — the ringed one — and then draws ONE cut there, rejecting everything below it. That is why the procedure is called step-up, and it is why a p-value above its own line can still be a discovery: it was carried in by a stronger colleague standing further up the same list. Drag q and watch the line tilt about the origin like a hand on a dial: the cut does not slide smoothly, it jumps from one rank to the next, because there are only ten rungs it can land between. Then press SHOW BONFERRONI. The violet bar is flat, at q/m = 0.010, and one lonely dot survives it — one discovery against BH's five, out of the same ten tests at the same q. And look where that flat bar meets the gold line: exactly at k = 1. Bonferroni is not a rival procedure at all; it is BH's first rung, applied to all ten — the demand that every single one of your tests clear the strictest bar in the family. That is the cost of “not one false alarm ever”, drawn to scale: the other four are real edges you just threw away, which is Chapter 17’s Type II error arriving with a price tag. Deferred honestly: none of this rescues a strategy found by searching — only data the search never touched can do that, and that is Chapter 21.

Two things about that rule deserve slow attention. The first is why we take the largest passing rank rather than judging each point on its own. This is a step-up procedure, so the crossing sets one cutoff for the whole family. In the ten-value set on screen, rank 4 sits at 0.041 against its own line of 0.040 and fails. It is rejected anyway, because rank 5 came in at 0.048 against a line of 0.050 and passed. That is one decision about where to cut, not ten separate verdicts.

The second is why it beats Bonferroni, and the answer is that the bar is adaptive. The more small p-values you actually observe, the further right the crossing happens and the looser the final bar becomes. BH lets the data tell it how many real effects are around, and then spends that information as power. On the same ten values, Bonferroni at 5% has a bar of 0.005 and rejects one. BH at q = 0.10 rejects five.

And look at where the BH ladder starts. At k = 1 the threshold is q/m, which is Bonferroni run at level q, character for character. So these are not two rival recipes. Bonferroni is BH's first rung, the bar you must clear if you found nothing else, and every additional discovery loosens the bar for the rest.

07The correction that never touched the number

Now collect on the debt from the winner's curse, because it is about to reorganize the chapter.

Run the honest experiment on two hundred candidate strategies, with ten years of daily data each. Twenty of them are genuinely real with a true annualised Sharpe of 0.80, and the other 180 are dead. You know exactly which is which, because you built them that way. Sort by measured Sharpe, apply both corrections to the whole family, and check both things at once.

CodeRun — 200 candidates, ten years each, 20 of them real. Change the correction and watch the verdict move. Now watch the number the bet is sized off.
$ python search.py --n 200 --yrs 10 200 candidates, 10 years of daily P&L 20 are REAL true Sharpe 0.80 180 are NOISE true Sharpe 0.00 correction pass real fake FDP none a=.05 ? ? ? ? BONF a/m ? ? ? ? BH q=.10 ? ? ? ? RANKED BY t | truth: HIDDEN WINNER #184 found by SEARCHING 200 PASSED · ? of 200 reported Sharpe (SR-hat) 1.496 t 4.73 p ? true Sharpe 0.80 KELLY BET SIZE 1.87× excess leverage rule changed: 0 times 1.496 moved: 0.000 PRESS RUN ▶ 200 tests, computed live SEALED the winner
CORRECTIONtap
TRUE COLUMNtap
200 candidates, 10 years each. 20 are real, 180 are pure noise. Press RUN.
200 candidates — press RUN
What you’re looking at — the correction decides who gets in. The bet is sized off a number no correction ever touched.
the three rules run on the identical 200 p-values — they only move the line between reject and fail-to-reject.
the 20 real ones (true Sharpe 0.80) — and the green part of the bar: the position 0.80 actually earns.
SR̂ = 1.496, the winner’s reported Sharpe. Frozen. Toggle all you like: it moves 0.000.
the bill: noise that got through, and the 0.87× of leverage the inflated number bought that nothing earns.
Fig. 13. This is a real search, run in front of you, with the one thing a real search never has: the answer key. Two hundred candidate strategies, ten years of daily P&L each. Twenty of them are genuinely good — true Sharpe 0.80 — and one hundred and eighty are pure noise, true Sharpe 0.00. Press RUN and the program tests all two hundred honestly, then applies three different decision rules to the identical set of p-values. With no correction, at the familiar 5% threshold, twenty-five candidates pass — and nine of them are noise. That is not bad luck; it is arithmetic. Five per cent of one hundred and eighty nulls is nine, and you got nine. Thirty-six per cent of your discoveries are false. Bonferroni divides the threshold by the number of tests, 0.05/200 = 0.00025, and it works: zero fakes get through. It also throws away fifteen of the twenty real strategies, because a bar that noise cannot clear is a bar most truth cannot clear either. Benjamini–Hochberg at q = 0.10 asks the grown-up question — not "never be wrong once" but "what fraction of my discoveries may be wrong" — and passes twelve: eleven real, one false, a realised false-discovery proportion of 8.3%, and six real strategies that Bonferroni would have binned. Now switch the true column on and look at rank twelve. The best pure-noise candidate in the pile reported a Sharpe of 0.877 — higher than the true Sharpe of every real strategy in the study. It is worth sitting with that for a second: nothing generated it but two thousand five hundred and twenty coin flips and the fact that you looked one hundred and eighty times. And then the part nobody bills you for. The winner, #184, is real: true Sharpe 0.80. Its reported Sharpe is 1.496, t = 4.73, and it sails through all three corrections. Toggle none → Bonferroni → BH and watch what actually moves: the badge count moves, the verdict moves, the discovery line moves — and 1.496 does not move by 0.000. A multiple-testing correction adjusts the boundary between reject and fail to reject. It does not adjust the estimate. But the estimate is what sizes the position: Kelly leverage scales with the Sharpe you believe, so believing 1.496 when the truth is 0.80 buys you 1.87× the position the strategy earns — eighty-seven per cent of that bar is leverage nothing pays for, and it will be there through every drawdown. This is why the maximum of many noisy draws is biased upward and why the winner of a search always looks better than it is; the honest move is to deflate the reported Sharpe by how hard you searched, not merely to raise the bar it had to clear. (The Sharpe haircut itself, and the only real cure — data the search never touched — are Ch. 21. The 180 nulls here sit on the exact quantiles of the null law and the 20 real t-statistics are one fixed sample, so the run is reproducible; every count, proportion and ratio on the screen is computed live from those two hundred p-values.)

The verdict machinery works, and it works well. BH at q = 0.10 makes 12 discoveries, of which 11 are real and 1 is noise, so the realised false-discovery proportion is 8.3% against a promised 10%. Bonferroni makes 5 discoveries with no false ones at all, and pays for that purity by missing six real strategies that BH caught. The whole of the last two sections is vindicated in one run.

Then look at the number attached to the winner. Strategy #184 has a true Sharpe of 0.80. Its measured Sharpe is 1.496, and its t-statistic of 4.73 clears Bonferroni's bar of 3.66 with room to spare.

BH said yes. BH was right to say yes, because the effect is real. And the reported number is nearly double the truth, and neither correction touched it, because neither of them is in that business.

Read what a correction actually does, because it is narrower than it sounds. It moves the line separating reject from fail to reject. It is a verdict machine, so it changes who gets through. It has no opinion whatsoever about how big the thing that got through is.

That gap has a price, and it is not academic. Chapter 15 established that the size of the bet is set by the size of the edge, because Kelly stakes a fraction of your bankroll proportional to your estimated advantage. Feed a Sharpe of 1.496 into a sizing rule when the truth is 0.80 and you are 1.87 times too levered, on a position that is genuinely real. That is the precise recipe for a drawdown that is survivable in theory and terminal in practice.

So we need a second machine, one that fixes the number. Ask what such a machine would have to know. It would have to know something you have never once written down: how big effects tend to be among the kinds of things you test. Not this effect. The population of effects your search draws from.

If most of your candidates are duds, and even the good ones earn a Sharpe of 0.3, then a measured 1.5 is mostly luck and should be pulled hard toward zero. If you work somewhere real effects are usually huge, a measured 1.5 is unremarkable and should be left alone. That distribution over the truth is the missing ingredient, and it has a name we have been circling since Chapter 10.

08★★ The search IS the prior

Here is the identification the whole chapter turns on.

Two research notes land on your desk, and every number on them is identical. Five years of daily data. A mean daily return, a standard error, t = 2.5 and p = 0.012. Note A comes from a quant who tested one signal she had an economic reason to expect, with a specific mechanism she can argue for. Note B comes from a quant who swept a thousand mechanical parameter combinations and printed the best one.

Commit to an answer before the arithmetic. Is one of these more likely to be a real edge than the other, and by how much?

Two research notes, every field identical — five years, t = 2.5, p = 0.012. Commit to a call, then count the crowds.
t = 2.5 · p = 0.012 the same reading on both notes — and it cannot change QUANT A QUANT B her research note his research note sample 5 years t-statistic 2.50 p-value 0.012 bar it cleared 5% sample 5 years t-statistic 2.50 p-value 0.012 bar it cleared 5% how it was found how it was found one hypothesis, from one economic argument the best of 1,000 mechanical variants every field identical — is one more likely to be real?
your call — before any arithmetic A is 1.0× more likely · drag
set your call, then COMMIT
A's search size 1 variant · prior 50%
B's pool quality 2% of his 1,000 are real
What you're looking at — the same t-statistic, counted inside two different crowds
t = 2.5, p = 0.012: pinned to the top and identical on both notes. p is computed inside the world where the idea is dead — and that world has no channel for how many ideas you brought.
true winners — candidates with a real edge that the test actually caught (about half of them).
false winners — dead candidates that cleared the 1.2% bar anyway. Of 980 dead ideas, about 12 will.
never fired. Only the coloured dots are “significant”, and the gold plate is the share of them that is real.
Fig. 14. Two notes, one t-statistic, two different beliefs. Every field matches — five years, t = 2.5, p = 0.012 — and only the last line differs: A reasoned her way to one hypothesis, B kept the best of a thousand. Commit to a call, then count. Of 1,000 candidates like A's, 500 are real, half get caught (250 true winners) and 1.2% of the 500 dead ones fire anyway (6 false): 98%. Of 1,000 like B's, only 20 are real, so 10 true winners arrive beside 12 false ones: 45%. The p-value could not have told them apart — it is computed inside the world where the idea is dead, and that world has no opinion about how many hypotheses walked in. Drag A's search from 1 variant to 25 and her 98% falls onto B's coin flip; lift B's pool to 30% real and he climbs past 90%. The t never moves. The search is the prior.

The p-values are the same, and they are the same for a structural reason rather than by oversight. Chapter 17 built the p-value entirely inside H₀'s world, and H₀'s world is a generator with numbers in it. It can tell you how often a boring market coughs up a t of 2.5. It has no channel through which to learn that you walked in carrying a thousand hypotheses instead of one.

So the objection you raised in the first section was correct all along. The data does not know. The p-value cannot know.

And here is the resolution, which agrees with you rather than overruling you. The number you actually wanted was never the p-value. You wanted P(this edge is real | it came out significant), which is Chapter 10's Bayes read in the direction that matters, and whose denominator contains the base rate of real effects in your candidate pool.

So put the p-value away and count candidates. Quant B swept a thousand variants, so suppose 2% of mechanical variants carry any real edge, which leaves 20 real and 980 dead. The 980 dead ones, tested at the 1.2% bar his winner cleared, throw up about 12 false winners. His 20 real ones, at realistic power, yield about 10 true winners. His headline result is one of 22 winners, and 12 of those 22 are noise, so P(real | significant) ≈ 45%. A coin flip.

Quant A tested one hypothesis with an economic argument behind it, so call her prior 50-50. Half the time it is real and half of those get caught, which puts 0.25 of the mass on a true winner. Half the time it is dead and 1.2% of those fire, which is 0.006. So P(real | significant) = 0.25/0.256 ≈ 98%.

Ninety-eight per cent against forty-five, from the same t-statistic. Nothing in the data differed. Nothing in the p-value could have differed. The only thing that differed between these two quants was how they searched, and the only number that moved was the prior.

That is the identification. The search is the prior. Sweeping a thousand mechanical variants is not a neutral act of diligence. It is a statement that you had no particular reason for any one of them, which is exactly a claim that the base rate of your pool is low. The prior did not arrive from philosophy. It arrived through your workflow, and it has been in the room the entire time, unstated.

Once you see that, the three procedures on this page collapse into one object. Bonferroni multiplies the bar by m because a large m means a low prior, and it is crude precisely because it uses only the head-count of your search. Benjamini–Hochberg does better, because the sag in the sorted p-value plot measures how many real effects are in the pool, so it estimates the prior from your own data and spends it as power. And the Bayesian route writes the prior down as a distribution and pays the bill on the estimate instead of the threshold.

One bill, three currencies. And notice which of the three can also fix the inflated number the winner's curse left behind. Only the one that puts a distribution on the truth.

One last thing before we name the split. The prior is never optional. It is only ever unstated. Quoting a raw p-value is acting on a flat prior, and in a world where most backtests are junk, flat is the most aggressive assumption in the room.

09What the two camps disagree about

Name the split, now that it has already happened underneath us.

Everything in this chapter has been a fight over one question. Is θ, the true edge, a fixed unknown constant, or is it a thing you can put a distribution on? Both answers are coherent, and they define the two camps.

The frequentist says θ is a fixed number, unknown but not random. The randomness lives entirely in the data, because the data is what you re-draw when you imagine the experiment repeated. That is why every frequentist guarantee is a statement about a procedure over hypothetical repeats. It is also why Chapter 17 insisted that a 95% confidence interval's 95% belongs to the interval-making machine and not to θ.

The Bayesian says the data is not random at all, because you already saw it and it is sitting on your desk. What is uncertain is θ. So put a distribution on θ that encodes what you know, and let the data update it by Chapter 10's rule. Every Bayesian statement is then about this dataset, conditional on a prior you must write down and defend.

One interval, two readings of the word “probability” — tap a question row, then flip the reading.
the question FREQUENTIST BAYESIAN what’s random the DATA. θ is one fixed number you never get to see. θ — it carries a distribution. The data is fixed: you saw it. what it says 95% of intervals built this way cover θ. This one? Unknown. P(θ is in here | your data) = 95%. A claim about θ itself. the guarantee on the PROCEDURE, over repeats — never on the one you got. on THIS dataset, given the prior. No repeats needed. the price α, the family, the model — chosen, and never argued. one stated prior you have to defend out loud. what it won’t P(hypothesis | data) — the question you actually wanted. an answer nobody can argue with. Your prior is on trial. reading: CONFIDENCE — θ is pinned, the data jumps θ (fixed truth) 95% over repeats the prior belief about θ Ch 17 forbade this reading. Legal here — price: one prior. 0 = no edge θ (now uncertain) price: one prior your one interval
what nobody argued for
α = 0.05unargued
the family: m testsunargued
the modelunargued
the priorhidden
θ fixed — the DATA is random
tap a row ↑ · then flip the reading
What you’re looking at — the same interval, read twice: the split is narrower than the argument
θ = the true value. Frequentist: a gold pin that never moves — only the data (and so the interval) jumps.
blue = intervals, built from data. 100 repeats: ~95 catch θ. That 95% is the procedure’s record, not this one’s.
red = the misses. You can never tell which one you got — that is exactly what the frequentist refuses to say.
violet = a prior. Flip to credible and the pin becomes a hill: now P(θ in the band) is legal — bought with one prior you must defend. Search hard → be more sceptical (shrinkage, next figure).
Fig. 15. The split, one question at a time. Tap a row to light both answers; flip the reading to watch the same interval change what it is about — a pinned θ with jumping data, or a frozen dataset with θ spread into a hill. The frequentist pays nothing visible; the Bayesian pays one stated prior. Only one of them prints the price on the tin.

Now cash the mirror, because it retro-justifies the pedantry you resented in Chapter 17. When you first met a confidence interval you wanted to read it as there is a 95% chance θ is in here, and you were told firmly that this is not what it says.

That reading was never stupid. It was Bayesian. It is the credible interval, P(θ ∈ [a,b] | data) = 0.95, and it is completely legitimate. It costs exactly one thing, which is a stated prior. Your instinct was right about the question and wrong about which machine answers it.

Two closing honesties. The first is that neither camp is correct, because they answer different questions. How weird is this data if nothing is going on, and what should I now believe about θ, are not rival answers. Swapping one for the other is precisely the inversion error Chapter 17 warned about.

The second is the practical stance, said plainly. A working quant is Bayesian in the gut and frequentist in the report. You do not truly believe that a signal found by grid search and a signal derived from a market mechanism deserve the same credence. That belief is a prior, and it is doing work whether or not you write it down. All anyone is asking is that you write it down, so that it can be argued with.

And if the word subjective is being used as a slur, take an inventory first. Choosing α = 0.05 is unargued. Choosing which tests belong to the family is unargued. Choosing to report a raw p-value is unargued. The difference between the two camps is not which one makes assumptions. It is which assumptions get written down.

10Four imaginary coin flips

Build the machine that fixes the number, out of something you already own, so that it costs almost nothing.

Go back to Chapter 12's conjugate pair. You put a Beta(a,b) prior on a coin's bias, saw h heads and t tails, and the posterior was Beta(a+h, b+t) with mean (a+h)/(a+b+h+t). Stare at that fraction, because it is hiding a message.

It is exactly the weighted average of the prior mean a/(a+b) and the sample mean h/(h+t), with weights (a+b) and (h+t). In other words the prior behaves like a batch of pseudo-observations. A Beta(2,2) prior is worth four imaginary flips that came up even.

A balance beam with two trays: imaginary flips on the left, real flips on the right. The fulcrum settles on the posterior mean — drag anything and watch the algebra rewrite itself underneath.
IMAGINARY · Beta(2,2) · 0.500 REAL · 7 of 10 heads · 0.700 no prior flips no real flips 0 0.25 0.5 0.75 1 posterior 0.643 (a+h)/(a+b+h+t) = (2+7)/(2+2+7+3) = 9/14 = 0.643 same thing: (4/14) × 0.500 + (10/14) × 0.700 weights × means: 0.286×0.500 + 0.714×0.700 = 0.643 the beam balances: 4 × 0.143 = 10 × 0.057
① THE PRIORdrag →
a — imaginary HEADS2
b — imaginary TAILS2
prior mean 0.500 · weight 4
② THE REAL FLIPSdrag →
h+t — how many flips10
h — how many heads7
data mean 0.700 · weight 10
③ PARK ITtap one
9/14 = 0.643 · data 71%
What you’re looking at — the rail is the probability of heads, 0 to 1. Each tray puts a mass on it at its own average, and the fulcrum is forced to sit where the two moments cancel. That balance point is the posterior mean.
the prior = a imaginary heads and b imaginary tails (that is all “Beta(a,b)” means). Mass a+b, sitting at a/(a+b).
the data = h real heads and t real tails. Mass h+t, sitting at h/(h+t). Flip more coins and this mass outgrows the other.
the fulcrum = (a+h)/(a+b+h+t), which the strip rewrites as the weighted average. Shrinkage is just a heavy tray winning slowly.
Fig. 16. Everything above this figure has been a patch: Bonferroni divides, Benjamini–Hochberg sorts, and both are bolted onto a machine that was never asked the question you cared about. Here is the other road. A Bayesian answers P(hypothesis | data) directly — but the entry fee is a prior, and the word makes people nervous because it sounds like an opinion smuggled into arithmetic. It is not. A prior is a batch of imaginary observations, and you can count them. Put a imaginary heads and b imaginary tails in the left tray — that is the whole meaning of “Beta(a,b)” — and put your h real heads and t real tails in the right. The posterior mean is (a+h)/(a+b+h+t): you simply pooled them and took the average, exactly as if the imaginary flips had happened. Watch the strip rewrite that one fraction into (a+b)/N × a/(a+b) + (h+t)/N × h/(h+t) — a weighted average of the prior mean and the sample mean, weighted by how many flips each one is made of. That is shrinkage, and it was never a separate idea; it is a see-saw. Press 9/14: ten real flips landing 7 heads, against a mere four imaginary flips, and the answer is 0.643 rather than 0.700 — the data has 71% of the mass and drags the fulcrum most of the way over. Press 5/7: three flips, all heads. Now press NO PRIOR and watch the fulcrum slam onto 1.000 — three coin flips and you have just declared the coin certain to come up heads forever. Four imaginary flips were all it took to stop that. And the balance is exact: the two moments printed on the bottom line, (a+b)×d and (h+t)×d, are always equal — the fulcrum has nowhere else it could sit. This is the answer to a search that ran twenty strategies: a sceptical prior is a stack of imaginary flips that came out flat, and the more you searched, the more of them you owe. Turn the prior weight up and watch your one impressive winner get pulled back toward nothing — not by a correction factor bolted on afterwards, but by the honest weight of everything you already believed.

Watch it work on real counts. Ten real flips with 7 heads against those four pseudo-flips gives a posterior mean of 9/14 = 0.643, which sits between the prior's 0.5 and the sample's 0.7 and leans toward the data. Three real flips that all came up heads gives 5/7 = 0.714, nowhere near the sample's 1.0, because four imaginary flips outweigh three real ones.

That is all a posterior mean ever is. It is the data dragged toward the prior by an amount set by how much data you brought. It has a name, shrinkage, and you have been doing it since Chapter 12 without calling it that.

Now transplant the shape onto a continuous effect like a mean return or a Sharpe ratio, where the conjugate story is Normal on Normal and the role once played by the count is played by precision, which is one over variance.

Your estimate θ̂ arrives with a standard error SE, so it carries precision 1/SE². Your prior says effects around here are centred on zero with spread τ, so it carries precision 1/τ². Take the same precision-weighted average of the prior mean and the data, and the posterior mean falls out.

posterior mean = θ̂ · τ²/(τ² + SE²)

Drag SE and τ — watch the answer slide between θ̂ and 0, and the total error fall as you bias it on purpose.
likelihood · prior · posterior — one Sharpe axis, −3 to +3 SE ≪ τ → your data is sharp: keep it SE ≫ τ → your data is mush: bin it flat prior — is a Sharpe of 3 really as likely as 0? −3 −2 −1 0 1 θ̂ = 2.0 3 K = τ²/(τ²+SE²) = 1.00²/(1.00²+1.00²) = 0.50 → keep 1.00 of 2.00 MSE = Var + bias² MSE now 0.50 · unshrunk 1.00 lowest no shrink (K=1) all the way to 0
K = 0.50 → keep 1.00 of 2.00
drag a slider → · or tap an end-stop
What you’re looking at — the count is gone; precision (1/variance) does its job now
likelihood — what your backtest alone says: centred on the measured Sharpe θ̂ = 2.0, spread SE. Narrow = precise.
prior — centred at 0, because most searched-for edges are nothing; spread τ = how big real edges get.
posterior, and the marker on the axis at K·θ̂ with K = τ²/(τ²+SE²) — a weighted average, but weighted by precision, not by a count. SE≪τ → K→1, keep it. SE≫τ → K→0, keep nothing.
bias² — the price. Ch 16 said MSE = Var + bias²: watch the total bar fall as you add red, because the blue you buy back is worth more. The gold ring sits exactly at K — that is why the factor is τ²/(τ²+SE²) and not its reciprocal.
Fig. 17. Same weighted average as the count version — only now the weights are precisions. Drag SE down and the blue likelihood turns tall and narrow, the gold marker slides out to θ̂, and K → 1: the data is sharp enough to keep. Drag it up and the marker walks back to 0. Below, the same K read as error: the blue variance you buy back outweighs the red bias² you pay, so the total falls — and the ring lands exactly on K = τ²/(τ²+SE²). Flip to a flat prior and the shrink vanishes: you are back to trusting a searched-for Sharpe at face value.

With the prior centred at zero, that factor always sits between 0 and 1, so the posterior mean is the estimate pulled toward zero. Never past it, and never beyond θ̂.

Read the two limits and the formula stops being a formula. When the data is precise, so SE ≪ τ, the factor goes to 1 and you keep your estimate, because the data is telling you something the prior did not know. When the data is noisy, so SE ≫ τ, the factor goes to 0 and you keep almost nothing, because a measurement whose wobble dwarfs the entire spread of real effects is mostly wobble.

Notice what you have just agreed to do. You are returning an estimate you know is biased low, on purpose. That feels wrong, and Chapter 16 wrote you the permission slip three chapters ago: MSE = Var + bias², and a biased estimator beats an unbiased one whenever the variance it buys back is worth more than the bias it pays. Shrinkage is not a philosophical concession. It is that trade, executed.

And if the flat prior still feels like the neutral choice, draw it. A flat prior over Sharpe ratios from −3 to +3 says a true Sharpe of 2.8 is exactly as plausible as a true Sharpe of 0.1. Nobody believes that. Refusing to choose a prior is not neutrality. It is choosing a bad one quietly.

11The Sharpe haircut

Point the machine at the number a quant is actually judged on.

You have a backtest reporting a Sharpe ratio of 1.5 over T years. Chapters 16 and 17 already handed you its wobble for free. The template t = SR·√T puts SE(SR̂) ≈ 1/√T in the denominator, so five years of daily data leaves your Sharpe with a standard error of about ±0.45. That is an enormous error bar, and almost nobody quotes it.

One honesty note before we spend that number. The 1/√T form ignores the error in estimating the volatility itself. The fuller expression for iid normal returns is √((1 + SR²/2)/T), which at a Sharpe of 0.8 over ten years gives 0.363 rather than 0.316. So 1/√T is a floor on your uncertainty, and the honest haircut is slightly larger than the one we are about to compute.

Now the prior, which asks a question you have never been made to answer. What is the spread of true Sharpe ratios among the strategies people actually test? Not among the ones that get published, but among the ones that get tried. Most are exactly zero, and the survivors, after costs, mostly sit under 0.5. So a prior centred at zero with spread τ ≈ 0.3 is not pessimism. It is an inventory of the industry, and it is a modelling choice you should be ready to defend.

Run the shrinkage factor. With τ² = 0.09 and SE² = 1/5 = 0.2, you keep 0.09/0.29 = 31%, so a reported 1.5 becomes 0.47. That is the Sharpe haircut, and it is the single most useful number in this chapter.

CodeRun — the same pool of 200 candidates, ten years each. Eleven cleared Bonferroni honestly. Now apply the prior and watch every reported Sharpe lose its lie.
$ python haircut.py --pool 200 200 tried 40 real 160 noise keep t >= 3.481 (a/m = 2.5e-4) -> 11 discovered, 0 false # TRUE REPORTED t SHRUNK MSE reported = 0.1522 MSE shrunk = ------ T = 10 yrs -> SE = 0.316 tau = 0.30 -> K = 0.474 shrunk = K * reported floor: SE ignores vol err all eleven, one axis 0 0.5 1.0 1.5 winner 1.496 -> not cut yet
VIEWtap
PREDICT: 1.496 →pick one
PRIOR WIDTH τre-runs it
Pick where 1.496 lands. The button unlocks once you commit.
predict first — pick one
What you’re looking at — eleven strategies that all passed the corrected test, and every reported Sharpe still far too big. Bonferroni chose which to keep. It never said a word about how big they are.
TRUE = the Sharpe each strategy really has. We only know it because we wrote the world. The * row is the genuinely best one (0.93) — the search ranked it 7th.
REPORTED = the in-sample Sharpe that cleared the gate (t ≥ 3.481). All 11 are real, 0 are fakes — and all 11 are inflated, because you only see the ones luck pushed up.
SHRUNK = reported × K, with K = τ²/(τ²+SE²) = 0.474. The winner’s 1.496 becomes 0.709 against a truth of 0.80. MSE 0.1522 → 0.0766.
τ = how good you believe a strategy can plausibly be. At τ = 0.20 MSE goes up to 0.2462; at 0.50 it falls to 0.0105. Move the dial and watch your prior carry the answer.
Fig. 18. This is a genuinely executed run, and the gate held. Two hundred candidates were searched, forty of them carrying a real edge; the Bonferroni threshold demanded t ≥ 3.481 and let eleven through, every one of them real, not a single false discovery. That is the correction doing exactly the job Ch. 17 asked of it. Now read the columns. The search winner reported 1.496 — a t of 4.73, the kind of number that gets a strategy funded — against a true Sharpe of 0.80. The standard error of a Sharpe estimate over T years is roughly 1/√T, so ten years buys you 0.316; with a prior width τ = 0.3 the shrinkage factor is K = τ²/(τ²+SE²) = 0.474, and the honest estimate is 0.709. Across all eleven, mean squared error against the truth falls from 0.1522 to 0.0766: less than half the error, from one multiplication. Move τ and watch how much of that answer is yours rather than the data's — at 0.20 the same procedure makes things worse (0.2462), because a prior too sceptical is its own mistake. And look at row seven, the starred one: the genuinely best strategy in the pool, true Sharpe 0.93, came seventh in a search that crowned a 0.80. The winner won on luck, not edge. The honest footnote rides on the second tab: 1/√T ignores the error in the volatility estimate, so it is a floor — the fuller √((1+SR²/2)/T) gives 0.363 rather than 0.316, which drags K down to 0.405 and the winner to 0.606. The haircut is larger than shown, never smaller. Passing the corrected test and being sized on the raw number are two separate decisions; the desk that funded 1.496 only ever made the first one.

Be candid about how much of that answer the prior is carrying. At τ = 0.2 the reported 1.5 becomes 0.25. At τ = 0.3 it becomes 0.47. At τ = 0.5 it becomes 0.83. The shape of the answer is stable and the size of it is yours to argue for, which is exactly what writing a prior down is for.

Now run the case that settles the verdict-versus-estimate argument beyond appeal, using the same 200-candidate pool. Strategy #184 has a t-statistic of 4.73 and clears Bonferroni's bar of 3.66. The verdict machine says yes, and says it convincingly. Then shrink it. With ten years of data and τ = 0.3, the factor is 0.474, and the reported 1.496 becomes 0.709 against a truth of 0.80.

Look at what that just did. The raw report missed the truth by 0.70, and the shrunk estimate missed it by 0.09. Across all eleven real strategies the run discovered, the mean squared error falls from 0.1522 to 0.0766, which is Chapter 16's cheque cashed in full: a deliberately biased estimator, measurably better.

The frequentist route reaches the same neighbourhood by a different road. The published factor literature contains several hundred candidates, so a family that large has a multiplicity-adjusted hurdle nearer t = 3.0 than the familiar 2.0, and the believable part of any reported result scales down accordingly. The two routes do not agree to two decimal places, and they should not, because one is priced by m and the other by τ. What they agree on is that a headline 1.5 does not survive contact with either.

Read the two levers before leaving. The haircut grows with m, which is how hard you searched, and shrinks with T, which is how much data you brought. Those are the only two dials, and one of them costs nothing but patience.

12The number nobody can audit

Close on the thing that makes all of this harder than it looks.

Every correction in this chapter needs m. Bonferroni divides by it, BH ranks against it, and the prior is set by it. So what is your m?

Count honestly. The eight lookback windows in your final grid. The two ways you handled the overnight gap. The four universes you screened before settling on this one. The dozen variants you tried on Monday and abandoned. And the signal you shelved in March and quietly retried in July.

Count your own m for one ordinary week — then try to count the one you inherited.
one ordinary research week — one idea 1 idea 4 universes ×2 gap rule ×8 lookbacks +12 one-offs +5 re-runs now widen the frame: the search you inherited your week: 81 — countable the published factor zoo + every variant tried and quietly dropped you can count your own looks. you cannot count theirs. tests actually run 1 “I tested one idea” DOOR 1 · PRE-REGISTRATION you name the ONE test you will run before you ever see the data. “12–1 momentum, long–short, 2000–2019. One test.” m = 1 set by COMMITMENT, not by counting nothing to correct here — nothing else was ever tested. DOOR 2 · FRESH DATA data the search never touched what A promised luck (of sample A) real edge sample A you searched here sample B never touched luck stayed. the edge travelled. → Ch 21 · out-of-sample
what one week actually ran
data universes×4
overnight-gap rule×2
lookback windows×8
abandoned one-offs+12
quiet re-runs+5
you would say: m = 1
press ↑ to open the next branch
What you’re looking at — every correction needs m, and m is the one number nobody can hand you
blue = one test. Four data universes, two overnight-gap conventions, eight lookbacks, twelve dropped one-offs, five quiet re-runs — 81, for what you’d honestly call one idea.
gold = m, the count Bonferroni (α/m) and Benjamini–Hochberg (i·q/m) both take as an input. Widen to the zoo and it becomes ? — so a correction is a negotiation, not a calculation.
red = selection luck: the part of the winner’s score that exists only because you picked the best of many. It is a property of the sample it was selected in.
green = the real edge. Draw a sample the search never touched and the luck cannot follow — only the edge does. That is why fresh data needs no m at all (Ch 21).
Fig. 19. Every correction on this page — Bonferroni’s α/m, Benjamini–Hochberg’s i·q/m — takes m as an input. So count it. One ordinary week: four data universes, two overnight-gap conventions, eight lookbacks, twelve one-offs you abandoned, five quiet re-runs of a shelved signal — 81 tests for a thing you would sincerely call one idea. Then widen the frame to the published factor zoo and the count becomes a question mark. That is why a correction is a negotiation, not a calculation — and why exactly two exits need no m at all: pre-registration, which sets m = 1 by commitment, and fresh data, where the winner’s luck stays behind in the sample it was selected in and only the edge travels. That second door is Chapter 21.

Tallied properly, one ordinary research week reaches 81 trials, for a project you would describe to a colleague as I tested one idea.

And then there is the part nobody counts at all. More than three hundred factors have been documented in the published finance literature, and a large share of them fail to replicate. You are choosing your novel idea from among the survivors of that search. So your m inherits a search you did not run, cannot audit, and were never shown.

Say the consequence plainly, because pretending otherwise is how corrections become theatre. The family is not a fact about the world. It is a judgement about which tests belong together, two honest people will draw the boundary in different places, and they will get different verdicts from the same data. Multiple-testing corrections are a negotiation, not a calculation, and their honesty rests on a number only you know.

So what survives? Two things, and only two.

The first is pre-registration, which Chapter 17 already named. Commit to the test before you look, and m is one because you made it one.

The second is fresh data, a stretch of history the search never touched. That one is the escape hatch, and the mechanism is worth stating exactly. The luck that pushed your winner to the top of the sorted list was a property of that sample. It is not a property of the strategy, so it does not travel. Point the winner at data the search never saw and the luck does not come along. Only the edge does, if there was one.

You do not need to know m. You do not need to justify τ. You need data your search never touched.

Look back at what you are holding, because it is one idea rather than seven. Twenty tests at 5% manufacture one discovery out of nothing, because α was always a rate. Fourteen tests pass a coin flip, because at least one is not the same question as one on average. The winner of a thousand-run sweep carries a t near 3.2 out of pure noise, and its measured edge is inflated even when the edge is real. Bonferroni raises the bar by m, BH measures how far the sag extends and raises it adaptively, and the Bayesian writes the prior down and pays on the estimate instead. Three procedures, one quantity, one bill.

Chapter 20 does not make this easier. It stops testing correlations one at a time and regresses the target on every predictor at once, which multiplies the number of coefficients you can go fishing in and hands you an that always rises when you add another. Then Chapter 21 gives the escape hatch its proper name and its discipline, because the only correction that charges the right price without counting the trials is data the search never touched.

iolinked.com
Written by Ajai Raj