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.4990.2650.104
1st0.8870.5260.233
2nd1.1600.6730.319
3rd1.4440.9200.388
1st & 2nd1.5400.8940.437
1st & 3rd1.7541.1520.503
2nd & 3rd2.0061.3610.514
Loaded2.4441.6030.728

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 183,849 plate appearances:

Run value by event, relative to an average plate appearance
EventRun valueObservations
home run+1.40385,512
triple+1.0921666
fielders choice+0.7779399
double+0.76737,434
single+0.470225,889
field error+0.44501,035
hit by pitch+0.34952,105
walk+0.330215,698
catcher interf+0.320381
intent walk+0.1958495
sac fly-0.00361,273
sac bunt-0.0378655

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.724
wHBP
0.747
w1B
0.894
w2B
1.254
w3B
1.647
wHR
2.025

League wOBA is .318, the wOBA scale 1.212, and league runs per plate appearance 0.1184.

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.10.

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

The structure follows Baseball-Reference's position-player WAR: six run terms, five measured against league average and one measuring the distance from average down to replacement.

RAR = batting + baserunning + double plays + fielding + position + replacement

Five of the six are computed here. Fielding is not, and that is the honest headline of this section rather than a footnote to it — see below. Where B-R states a constant, it is measured here from this season's own play-by-play instead, because the run expectancy matrix in step 1 already contains what those constants summarise, and measuring keeps them era-correct rather than fixed at a modern average.

Replacement level

Replacement level used to be the one number on this site that was stated rather than solved. It is now an identity, and B-R's: a team of replacement players wins .294 of its games, so a season has team-games × (.500 − .294) wins above replacement to distribute — 1,001 across a full 30-team, 162-game season, and 1,001 across the 2026 games played so far. Nothing special-cases a short season: 2020's sixty games come to 370, which is what B-R publishes for that year. Position players take 59% of them and pitchers the rest, B-R's split, from what free-agent hitters and pitchers are paid.

The runs that implies are now an output. Solving so that position players end the season holding their share gives 18.6 runs per 600 plate appearances, against the 20.5 B-R publishes. The gap is not noise: with no fielding term, this WAR has fewer runs to spread over the same number of wins.

Measuring the marginal pool directly instead — everyone under 130 plate appearances, pitchers excluded — gives 27.6, and using it would be worse: a player gets few plate appearances precisely when he hits badly in them, so the pool measures failed auditions rather than available talent. It is published as marginal_runs_per_600 beside the identity it did not replace.

The five terms

Pitchers use FIP against a replacement baseline that sits further below average for starters than for relievers, because a replacement arm is easier to find for one inning than for six. That shape is stated; the level it scales to is solved from the same identity, so the two halves of the league add up to the whole rather than to whatever they happened to come to.

Runs become wins through PythagenPat rather than a flat ten. At 4.48 runs per team per game, 2026 converts at 9.59 runs to the win — the rule of thumb of 10 is this model evaluated at a 4.5 R/G league, and it stops being right as soon as the run environment moves.

What dbWAR does not include

No fielding runs. This is the one component of B-R's recipe that cannot be reproduced here. From 2003 onward — every season this archive covers — B-R uses Defensive Runs Saved, which is Sports Info Solutions' proprietary system and rests on trained scorer observations no public feed carries. Total Zone, which B-R uses before 2003, is a published method but a pre-2003 one. So a position player here is batting, baserunning, double plays and position, which understates good defenders and flatters bad ones by however much their glove was worth. Expect the gap against bWAR to be roughly the size of a player's fielding runs, and no smaller.

Baserunning is steals only. The feed does carry every runner's origin and destination and the fielder credited with the ball, so first-to-third and outs on the bases are computable; they are not extracted yet.

What each season holds

The play-by-play runs from 2005 to 2026, and everything computed from it does too: run expectancy, linear weights, wOBA, wRC+, FIP, dbWAR, splits, situational hitting, and spray charts from where each ball landed. The measurements taken on each pitch arrived later. Pitch locations begin in 2007, and not in every park that year; pitch types partly in 2007 and everywhere from 2008; exit velocity and launch angle in 2015. A season before those years has no zone chart, pitch arsenal or contact-quality figures, and a player's page says which ones it is missing. A pitcher-season with more than a quarter of its pitches untyped gets no arsenal rather than one built around an “Unknown” slice.

Sources

Method follows Tango, Lichtman & Dolphin, The Book: Playing the Percentages in Baseball (2007), chapter 1. Play-by-play, for every season shown, comes from MLB Advanced Media's Stats API (game data © MLB Advanced Media, L.P.), player identity from the Chadwick Bureau register, and salaries from Baseball-Reference. This is a non-commercial site, not affiliated with or endorsed by Major League Baseball.