Fever BaseballFuture Value Radar (FVR) · On the record
RECORD: 0 HIT · 0 MISS · 11 OPEN · FIRST CALL RESOLVES AUG 12

The receipts · published verbatim from the working file

The expectation model can't see legs — pre-registration

Frozen 2026-07-13. Includes the hypothesis the author walked in with, which the train years had already refuted.

Last changed

Pre-registration — the expectation model can't see legs (H-SP)

Frozen 2026-07-13, before any 2022–2025 data was examined for this question. The git timestamp of this file is the freeze receipt. One confirmatory run; results published regardless.

Motivation

The Fade board ranks luck_gap_adj: results on contact minus what the launch physics say those batted balls were worth, park-adjusted. The model that computes "what they were worth" sees exit velocity and launch angle. It does not see legs. A ball hit exactly the same way is worth more to a man who runs 30 ft/s than to one who runs 25 — he beats out the chopper, he takes the extra base.

The board's own output raised the question. Tonight's Fade board is a speed-and-contact cluster: Chandler Simpson, Ernie Clement, José Caballero, Jake Mangum, Ceddanne Rafaela. Fade-board mean EV95 is 103.4 against the Breakout board's 108.6. If a fast man carries a structurally positive gap that is not luck, we are flagging him for regression that will not come.

Exploratory findings (TRAIN pairs, 2015→16 … 2018→19, n=1,152)

Run in catalyst/analysis/sp_exploratory.py, which is guarded against reading any reserved season.

The level bias is real and stable. Within-season correlation of sprint speed with the luck gap:

2015 +0.365   2016 +0.390   2017 +0.324   2018 +0.352
pooled +0.358

Mean gap by speed tercile, pooled: slow −0.008, mid +0.006, fast +0.019. Fast men beat the expectation model every single year. That is not luck; luck does not repeat four years running.

Speed predicts next year's gap better than the gap does.

gap_next ~ gap + sprint + gap:sprint          (n=1,152, R² 0.158)
  luck_gap_adj   b=+0.167   p<0.0001
  sprint_speed   b=+0.296   p<0.0001
  gap_x_sprint   b=−0.055   p=0.046

The hypothesis I started with is refuted. I expected the gap to persist more for fast men (skill, not luck). The interaction runs the other way, and the tercile correlations agree: gap year-over-year r is +0.266 slow, +0.185 mid, +0.069 fast. Once you know a man's speed, his own gap tells you little about next year's.

And the fade signal itself still works on fast men. In the outcome model the interaction is null (p=0.17 on value on contact, p=0.67 on WAR) — a positive gap predicts decline at every speed. But sprint speed carries its own coefficient:

aval_next ~ aval + ev95 + gap + sprint + gap:sprint   (R² 0.390)
  luck_gap_adj   b=−0.180   p<0.0001
  sprint_speed   b=+0.137   p<0.0001
  gap_x_sprint   b=−0.032   p=0.170

So the defect is not that the fade signal breaks for fast men. It is that the boards are missing a variable. Two hitters with identical current value, identical EV95, and identical luck gaps are ranked identically by our engine — and the faster one will do measurably better next season.

PRIMARY hypothesis (H-SP-1, confirmatory)

On the reserved seasons, untouched at freeze time:

z(aval_next) ~ z(aval) + z(ev95) + z(luck_gap_adj) + z(sprint)

Sample: pairs with predictor seasons 2022, 2023, 2024 (outcomes 2023, 2024, 2025), pooled. Batters with ≥100 balls in play in BOTH seasons of the pair and ≥10 competitive runs on the Savant sprint-speed leaderboard in the predictor season.

SUCCESS = sprint coefficient positive AND two-tailed p < 0.05. Anything else — wrong sign, p ≥ 0.05 — is a MISS and gets published exactly like a hit would.

The outcome is value on contact, not WAR, and that choice is load-bearing. WAR credits baserunning directly, so a positive speed coefficient there is close to tautological. Value on contact measures only what happened to batted balls — a speed effect there means speed changes the outcome of a batted ball, which is precisely the blind spot claimed.

SECONDARY (reported, with criterion)

The level bias: within-season r(sprint_speed, luck_gap_adj), computed separately in each reserved predictor season (2022, 2023, 2024).

SUCCESS = r ≥ +0.20 in all three.

TERTIARY (reported, no criterion — expected null)

The gap × sprint interaction on value on contact. TRAIN says null (p=0.170). It is reported because it was the hypothesis I walked in with, and a pre-registration that quietly drops the author's refuted hunch is a pre-registration with its thumb on the scale.

ROBUSTNESS (reported, no criterion)

The primary model with hp_to_1b (home-to-first, seconds) substituted for sprint speed. Lower is faster, so the coefficient should flip sign.

Integration gate

If PRIMARY passes, sprint speed earns candidate status as a board input, on this reasoning: the expectation model's residual is what the boards rank, and a residual with a known, stable, measurable structure in it is not a residual — it is an unmodelled variable.

The candidate design (to be built, validated, and ratified separately — this pre-registration authorizes none of it):

  • rank the Fade board on the speed-adjusted gap, gap − E[gap | sprint], so the board flags results that outran the physics after the physics have been told about legs; and
  • carry the same adjustment into the breakout overlay, whose gap term (−0.2781) inherits the same bias.

Any such change is designed separately, validated on its own terms, ratified by the founder, and its effect on the live boards published before it ships. If PRIMARY fails, the finding dies in public and the boards stand exactly as they are.

Caveats declared in advance

  • Season isolation is imperfect, and I will not pretend otherwise. Eleven seasons exist. 2022–2023 were H2's confirmatory holdout (a different model: CR/overlay → WAR, with no speed term anywhere). 2024–2025 were H-BT's train years (bat tracking → value on contact, again no speed term). What has never been computed on any season, by anyone here, is the relationship between sprint speed and the luck gap — sprint speed was ingested into this repo for the first time today, and it has been examined only on 2015–2019.
  • 2020 is excluded by house convention (short season). 2021 is unused as a predictor because its outcome year is 2022, which is reserved.
  • Savant's qualification threshold (≥10 competitive runs) is Savant's, not ours; it gates train and test identically.
  • Sprint speed and EV95 are close to orthogonal in TRAIN (r = −0.075), so the primary is not smuggling in a contact-quality effect. This will be re-reported on the confirmatory sample.
  • One evaluation. No re-runs, no threshold shopping. The script is catalyst/analysis/sp_confirmatory.py, committed before it is run.