DataBaseball
2026

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.

Expected runs to end of inning · 2026
Bases0 out1 out2 out
Empty0.5000.2640.099
1st0.8880.5250.229
2nd1.1930.6870.313
3rd1.5000.9120.389
1st & 2nd1.5610.9170.437
1st & 3rd1.7141.1390.507
2nd & 3rd2.0671.3900.510
Loaded2.4601.6020.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:

Run value by event, relative to an average plate appearance
EventRun valueObservations
home run+1.40164,054
triple+1.1167482
double+0.77715,489
fielders choice+0.7768297
single+0.470018,811
field error+0.4581773
hit by pitch+0.34971,527
walk+0.331111,525
catcher interf+0.300065
intent walk+0.1928353
sac fly-0.0065935
sac bunt-0.0338461

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.

What is deliberately absent

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:

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.

What dbWAR does not include

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.