top of page
  • Devlin Sullivan

Using Statcast Data to Create a Wins Above Replacement Metric

Baseball Savant has overtaken Fangraphs as my primary resource for looking at baseball player pages. I think a big part of this is the narrative that the data (and viz) tells right away. You know exactly what this guy is good at (most things):

And what this guy is good at (the complete opposite of those things):


Part of my enjoyment of a site like Baseball Savant is piecing together how good people are from this information, but it'd also be nice to synthesize all this information into a single, sortable statistic. This is why I created xWAR.

The main components of WAR for position players are runs from batting, fielding, base running, and positional adjustment. I took the latter two figures directly from Fangraphs for these calculations, but I substituted Statcast's batting and fielding stats here instead. Instead of using wOBA as the basis for calculating wRAA (and subsequently batting runs), xWAR uses xwOBA. Where Fangraphs uses UZR in their calculations, xWAR uses Statcast's Runs Extra Strikes for catchers and Fielding Runs Prevented, based on Outs Above Average but with some extra weighting to plays that save extra base hits, for everyone else. (RES vs OAA is not a big deal for discerning between corner/middle infielders but is very meaningful when comparing IF and OF) This points to the first scenario in which xWAR is a bit of a misnomer for this calculation - it combines things that aren't outcome dependent on an individual basis (xwOBA) with fielding stats that reflect the outcome of a play. Because of this, xWAR isn't so much of an answer to the question "how good was this player completely outside the influence of his circumstances/luck/etc.", but more so an answer to the question "how good does Statcast suggest this player is" - which is more in line with what motivated this project.

This also suggests that xWAR is no more predictive than regular WAR - not very. xWAR can only be calculated from the 2017 season onwards (Statcast's OAA history), and the level of correlation between xWAR and the following year's fWAR is low, similar to the correlation between fWAR and fWAR from the following year. The r^2 score between xWAR and fWAR from the same season is strong however, as can be seen in the table below.

Plus, xWAR and fWAR follow similar distributions:

Another limitation of this project is that the inputs for defense are whole numbers. Presumably a decimal-accurate measure of runs saved from framing/defense exists somewhere, but xWAR incorporates only the outward facing stuff from Baseball Savant. Furthermore, fWAR (and others) account for league adjustment and park factors, and I omitted both from my calculation of xWAR. I used Fangraphs' calculations for the wOBA Scale and the Runs/Win value for each year for simplicity's sake - you can read how Fangraphs' calculates WAR for position players here: https://library.fangraphs.com/war/war-position-players/. Skip to this part if you want to see the leaderboards - you can also get the full output and code on Github here: https://github.com/dev-1999/statcast_xwar

For a quick overview of the data, here is an interactive plot showing xWAR vs fWAR, as well as how the player performed by fWAR in the following season.

And here is a summary of key leaderboards from the full time range of the data:


Dansby Swanson's 2019 offers the most compelling case of a high xWAR relative to fWAR being a harbinger of positive regression to come. Fangraphs and Savant switched opinions on Swanson's defense in '19 and '20. As you'd imagine, Savant was more bullish with a 62nd percentile OAA in 2019 but a 11th percentile grade in 2020. Fangraphs credited Swanson with 3.6 extra runs on defense in 2020 as compared to 2019, however. Furthermore, by bringing his 2020 wOBA up towards the level of his 2019 and 2020 xwOBA, 2020 Swanson put up 1.9 fWAR in 264 PA. Defensive stats over such a small sample should be taken with a grain of salt, obviously. 2017 Nick Castellanos hit the ball super hard without much to show for it. Fangraphs docked Nick 15 runs from defense but Statcast was more generous by subtracting "only" 11. In 2018, Castellanos posted 3.0 fWAR over a full season, absolutely no thanks to any contributions in the field by either Fangraphs or Statcast's judgement. 2018 Castellanos was the worst defender in baseball by 6 runs, posting a bilious -22 Runs Prevented and -24 OAA.

Other names on these lists are, for the most part, due to big disagreements between OAA and UZR and/or a hitter substantially underperforming or outperforming their xwOBA over the course of a full season, or a combination of both (ex: 2019 Lorenzo Cain, 2018 Rougned Odor). As such, I'm not sure how much I prefer using only a player's xWAR to describe their season when the granular data is so readily available and clearly presented, but xWAR is a valid synthesis of Statcast data into one number nonetheless.

85 views0 comments
bottom of page