Methodology · 2026
How these statistics are computed
None of the constants on this site are copied from a published table. Run expectancy is measured from the season's own play-by-play, linear weights are derived from that measurement, and the wOBA scale is solved so that league wOBA equals league OBP — which is its definition, not an approximation. That makes every rate statistic era-correct automatically: a 1968 weight and a 2019 weight genuinely differ, because the run environments did.
Step 1 — Run expectancy
For every plate appearance we reconstruct the base-out state before the pitch by simulating each half-inning forward. Averaging the runs that actually scored from each state to the end of the inning gives the matrix below. Only innings that ended with three outs are counted; walk-off fragments would bias it downward.
| Bases | 0 out | 1 out | 2 out |
|---|---|---|---|
| Empty | 0.500 | 0.264 | 0.099 |
| 1st | 0.888 | 0.525 | 0.229 |
| 2nd | 1.193 | 0.687 | 0.313 |
| 3rd | 1.500 | 0.912 | 0.389 |
| 1st & 2nd | 1.561 | 0.917 | 0.437 |
| 1st & 3rd | 1.714 | 1.139 | 0.507 |
| 2nd & 3rd | 2.067 | 1.390 | 0.510 |
| Loaded | 2.460 | 1.602 | 0.699 |
Step 2 — Linear weights
The run value of an event is the change in run expectancy it causes, plus any runs that scored on the play: RV(e) = mean(runs + REafter − REbefore). Measured across 134,413 plate appearances:
| Event | Run value | Observations |
|---|---|---|
| home run | +1.4016 | 4,054 |
| triple | +1.1167 | 482 |
| double | +0.7771 | 5,489 |
| fielders choice | +0.7768 | 297 |
| single | +0.4700 | 18,811 |
| field error | +0.4581 | 773 |
| hit by pitch | +0.3497 | 1,527 |
| walk | +0.3311 | 11,525 |
| catcher interf | +0.3000 | 65 |
| intent walk | +0.1928 | 353 |
| sac fly | -0.0065 | 935 |
| sac bunt | -0.0338 | 461 |
Step 3 — wOBA weights
Shifting those values so a generic out is worth zero, then scaling so league wOBA equals league OBP, produces the weights actually used on every player page:
- wBB
- 0.723
- wHBP
- 0.746
- w1B
- 0.891
- w2B
- 1.261
- w3B
- 1.671
- wHR
- 2.015
League wOBA is .318, the wOBA scale 1.206, and league runs per plate appearance 0.1185.
Step 4 — Pitching
FIP uses the conventional (13·HR + 3·(BB+HBP) − 2·K) / IP + c, where the constant c is solved each season so that league FIP equals league ERA. For 2026 that gives league ERA 4.18 and a FIP constant of 3.09.
xFIP is left blank rather than approximated: it needs a league fly-ball rate that the box score does not carry, and inventing one would be worse than showing nothing. DRS and UZR are proprietary and are not reproduced here. Where a statistic cannot be computed honestly for a given era, it is empty rather than estimated.
Step 5 — dbWAR
Wins Above Replacement here is ours. It is deliberately not an attempt to reproduce fWAR or bWAR: those are their authors' models, and reproducing one badly would be worse than publishing our own honestly. Every constant is either derived above or stated here.
For position players, four run terms sum to runs above replacement, which is then divided by runs-per-win:
- Batting — wRAA, from the weights in step 3.
- Baserunning — stolen-base runs against league rate. Caught-stealing cost is derived from this season's own runs-per-out.
- Position — a standard per-600-PA adjustment, weighted by plate appearances actually taken at each position.
- Replacement — 20 runs per 600 PA below average.
Pitchers use FIP against a replacement baseline that sits further below average for starters (0.90 runs per nine) than for relievers (0.45), because a replacement arm is easier to find for one inning than for six.
Runs per win scales with the run environment — RPW = 10 × (league R/G ÷ 4.5) — so a run matters less in a high-scoring league.
No fielding runs. DRS and UZR are proprietary and Statcast OAA is not in this feed, so a fielding term would be invented rather than measured. Position-player WAR here is offence plus positional adjustment only, which understates elite defenders and flatters poor ones. Baserunning covers steals but not first-to-third advancement. Both gaps are real and are stated rather than papered over.
Sources
Method follows Tango, Lichtman & Dolphin, The Book: Playing the Percentages in Baseball (2007), chapter 1. Historical play-by-play comes from Retrosheet, player identity from the Chadwick Bureau register, and season aggregates are cross-checked against the Lahman database.