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.103
1st0.8860.5270.233
2nd1.1590.6710.316
3rd1.4330.9150.385
1st & 2nd1.5410.8950.437
1st & 3rd1.7551.1530.501
2nd & 3rd2.0111.3700.519
Loaded2.4481.6050.731

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 181,807 plate appearances:

Run value by event, relative to an average plate appearance
EventRun valueObservations
home run+1.40465,439
triple+1.0851654
fielders choice+0.7783392
double+0.76747,343
single+0.470425,607
field error+0.44481,021
hit by pitch+0.35042,085
walk+0.330915,539
catcher interf+0.320981
intent walk+0.1967487
sac fly-0.00631,257
sac bunt-0.0369645

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.725
wHBP
0.748
w1B
0.894
w2B
1.254
w3B
1.639
wHR
2.026

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

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 990 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.3, 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.

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.