Sign In
  • Support FanGraphs
    FanGraphs Membership
    FanGraphs Shirts
    FanGraphs Mugs
    Gift a Membership
    Donate to FanGraphs
  • Games
    Ottoneu Fantasy Baseball
    Signup, FAQ, Blog Posts
  • Blogs
    Blog Roll

    FanGraphs
    Podcasts: FanGraphs Audio | Effectively Wild | Chin Music

    FanGraphs Prospects

    RotoGraphs
    Podcasts: The Sleeper and The Bust | Field of Streams | Beat the Shift

    Community Research

    Archived Blogs: The Hardball Times | NotGraphs | TechGraphs | FanGraphs+
    Archived THT: THT Live | Dispatch | Fantasy | ShysterBall
    Archived Podcasts: Stealing Home | Doing It For Bartolo | OttoGraphs | UMP: The Untitled McDongenhagen Project
  • Projections
    2023 Pre-Season Projections
    ZiPS, ZiPS DC
    Steamer
    Depth Charts
    ATC
    THE BAT, THE BAT X
    2023 600 PA / 200 IP Projections
    Steamer600
    2023 Updated In-Season Projections
    ZiPS (RoS), ZiPS (Update)
    Steamer (RoS), Steamer (Update)
    Depth Charts (RoS)
    THE BAT (RoS), THE BAT X (RoS)
    3 Year Projections
    ZiPS 2024, ZiPS 2025
    On-Pace Leaders
    Every Game Played, Games Played %
    Auction Calculator
  • Scores
    Today
    Live Scoreboard, Probable Pitchers
    Live Daily Leaderboards
    Win Probability & Box Scores
    2022, 2021, 2020, 2019, 2018, 2017...
  • Standings
    2022 Projected Standings
    2022 Playoff Odds, Playoff Odds Graphs
    ZiPS Postseason Game-By-Game Odds
    AL East
    AL Central
    AL West
    NL East
    NL Central
    NL West
  • Leaders
    Major League Leaders
    Batting: 2022, 2021, 2020, 2019, 2018, Career
    Pitching: 2022, 2021, 2020, 2019, 2018, Career
    Fielding: 2022, 2021, 2020, 2019, 2018, Career
    Splits Leaderboards
    Season Stat Grid
    60-Game Span Leaderboards (Special)

    KBO Leaders
    Batting, Pitching

    Minor League Leaders
    AAA: Triple-A East, Triple-A West, Mexican
    AA: Double-A Northeast, Double-A South, Double-A Central
    A+: High-A Central, High-A East, High-A West
    A: Low-A West, Low-A East, Low-A Southeast
    R: Appalachian, Gulf Coast, Pioneer, Arizona
    R: Dominican
    WAR Tools
    Combined WAR Leaderboards
    WAR Graphs
    WPA Tools
    WPA Inquirer
    Rookie Leaders
    Batters 2022, Pitchers 2022
    Splits Leaders
    Batters: vs L, vs R, Home, Away
    Pitchers: vs L , vs R, Home, Away
  • Teams
    Team Batting Stats
    2022, 2021, 2020, 2019, 2018, 2017...
    Team Pitching Stats
    2022, 2021, 2020, 2019, 2018, 2017...
    Team WAR Totals (RoS)
    AL East
    Blue Jays  |  DC
    Orioles  |  DC
    Rays  |  DC
    Red Sox  |  DC
    Yankees  |  DC
    AL Central
    Guardians  |  DC
    Royals  |  DC
    Tigers  |  DC
    Twins  |  DC
    White Sox  |  DC
    AL West
    Angels  |  DC
    Astros  |  DC
    Athletics  |  DC
    Mariners  |  DC
    Rangers  |  DC
    NL East
    Braves  |  DC
    Marlins  |  DC
    Mets  |  DC
    Nationals  |  DC
    Phillies  |  DC
    NL Central
    Brewers  |  DC
    Cardinals  |  DC
    Cubs  |  DC
    Pirates  |  DC
    Reds  |  DC
    NL West
    D-backs  |  DC
    Dodgers  |  DC
    Giants  |  DC
    Padres  |  DC
    Rockies  |  DC
    Positional Depth Charts
    Batters: C, 1B, 2B, SS, 3B, LF, CF, RF, DH
    Pitchers: SP, RP
  • RosterResource
    Current Depth Charts
    AL East
    Blue Jays
    Orioles
    Rays
    Red Sox
    Yankees
    AL Central
    Guardians
    Royals
    Tigers
    Twins
    White Sox
    AL West
    Angels
    Astros
    Athletics
    Mariners
    Rangers
    NL East
    Braves
    Marlins
    Mets
    Nationals
    Phillies
    NL Central
    Brewers
    Cardinals
    Cubs
    Pirates
    Reds
    NL West
    D-backs
    Dodgers
    Giants
    Padres
    Rockies
    Offseason Tools
    2023 Opening Day Tracker
    2023 Offseason Tracker
    2023 Free Agent Tracker
    In-Season Tools
    2023 Closer Depth Chart
    2023 Injury Report
    2022 Lineup Tracker
    2023 Payroll Pages
    2022 Probables Grid
    2022 Schedule Grid
    2023 Transaction Tracker
  • Prospects
    Prospects Home
    THE BOARD!
    THE BOARD: Scouting + Stats!
    How To Use THE BOARD: A Tutorial
    Top Prospects List
    Top Prospects
    2023 2022
    AL
    BALCHWHOU
    BOSCLELAA
    NYYDETOAK
    TBRKCRSEA
    TORMINTEX
    NL
    ATLCHCARI
    MIACINCOL
    NYMMILLAD
    PHIPITSDP
    WSNSTLSFG
    AL
    BALCHWHOU
    BOSCLELAA
    NYYDETOAK
    TBRKCRSEA
    TORMINTEX
    NL
    ATLCHCARI
    MIACINCOL
    NYMMILLAD
    PHIPITSDP
    WSNSTLSFG

    • 2022 Preseason Top 100

  • Glossary
    Library
    Batting Stats
    wOBA, wRC+, ISO, K% & BB%, more...
    Pitching Stats
    FIP, xFIP, BABIP, K/9 & BB/9, more...
    Defensive Stats
    UZR Primer, DRS, FSR, TZ & TZL, more...
    More
    WAR, UBR Primer, WPA, LI, Clutch
    Guts!
    Seasonal Constants
    Park Factors
    Park Factors by Handedness
  • Sign In
Help Support FanGraphs


Become a Member No Thanks
Already a member? Log In
  • Intro
  • Features
  • Offense
    • Complete List (Offense)
    • OBP
    • OPS and OPS+
    • wOBA
    • wRC and wRC+
    • wRAA
    • Off
    • BsR
    • UBR
    • wSB
    • wGDP
    • BABIP
    • ISO
    • HR/FB
    • Spd
    • Pull%/Cent%/Oppo%
    • Soft%/Med%/Hard%
    • GB%, LD%, FB%
    • K% and BB%
    • Plate Discipline (O-Swing%, Z-Swing%, etc.)
    • Pitch Type Linear Weights
    • Pace
  • Defense
    • Overview
    • Def
    • UZR
    • DRS
    • Defensive Runs Saved – 2020 Update
    • Inside Edge Fielding
    • Catcher Defense
    • FSR
    • RZR
    • TZ / TZL
  • Pitching
    • Complete List (Pitching)
    • ERA
    • WHIP
    • FIP
    • xFIP
    • SIERA
    • Strikeout and Walk Rates
    • Pull%/Cent%/Oppo%
    • Soft%/Med%/Hard%
    • GB%, LD%, FB%
    • BABIP
    • HR/FB
    • LOB%
    • Pitch Type Linear Weights
    • SD / MD
    • ERA- / FIP- / xFIP-
    • Plate Discipline (O-Swing%, Z-Swing%, etc.)
    • Pace
    • PITCHF/x
      • What is PITCHF/x?
      • Pitch Type Abbreviations & Classifications
      • Heat Maps
      • Common Mistakes
      • PITCHf/x Resources
  • WE/RE/LI
    • RE24
    • Win Expectancy
    • WPA
    • LI
    • WPA/LI
    • Clutch
  • Principles
    • DIPS
    • Regression toward the Mean
    • Replacement Level
    • Sample Size
    • Splits
    • Projection Systems
    • Linear Weights
    • Counting vs. Rate Statistics
    • Park Factors
    • Park Factors – 5 Year Regressed
    • Positional Adjustment
    • Aging Curve
    • League Equivalencies
    • Pythagorean Win-Loss
    • Luck
  • WAR
    • What is WAR?
    • WAR for Position Players
    • WAR for Pitchers
    • FDP
    • fWAR, rWAR, and WARP
    • WAR Misconceptions
  • Business

Calculating Position Player WAR, A Complete Example

by Neil Weinberg
September 19, 2014

One of the hallmark statistics available at FanGraphs is Wins Above Replacement (WAR) and we’ve just rolled out an updated Library entry that spells out the precise calculations in more detail than ever before. There’s always been a clear sense of the the kinds of things that go into our WAR calculation, but we’re never just dropped an equation in front of you and said, “Here!”

As of today, we’ve done that and I encourage you to go check out our basic primer on WAR and our detailed breakdown of how we calculate it for position players. If you’re a hands on learner, grab a pen and paper or spreadsheet and follow along. I’m going to walk you through a complete examples of how to calculate WAR for position players. Let’s use the 2013 version of Joey Votto as our exemplar.

The basic WAR equation is:

WAR = (Batting Runs + Base Running Runs + Fielding Runs + Positional Adjustment + League Adjustment +Replacement Runs) / (Runs Per Win)

You can simply go to the value section of his player page and find everything that goes into the numerator and go to the Guts! page to get Runs Per Win for the denominator, but that’s probably not why you’re here. Let’s break it down component by component.

Batting Runs

To calculate Batting Runs, you want Weighted Runs Above Average (wRAA) and then you want to park and league adjust it. So let’s start by calculating his wRAA, although you can also find this pre-calculated on the site.

To find his wRAA, you need his wOBA (.400), his PA (726), and some data about the league, specifically the league average wOBA (.314) and the wOBA Scale (1.277). Those values can be found here.

wRAA = ((wOBA – lgwOBA)/wOBA Scale) * PA

48.9 = ((.400-.314)/1.277)*726 

On the site, it’s listed as 49.1, which is just a matter of rounding on the league constants. This will come up again, so keep it in mind. Some of the constants and park factors you see are rounded off so that the site isn’t a giant string of numbers. Try not to sweat it.

So if we have 48.9 wRAA, let’s now go through the process of adjusting it for his home park (Park Factor = 101) and for the National League. To do this, we need the MLB R/PA (.110), the NL non-pitcher wRC (9783), and the NL non-pitcher PA (86,959).

To convert wRAA into Batting Runs, you do the following:

Batting Runs = wRAA + (lgR/PA – (PF*lgR/PA))*PA + (lgR/PA – (AL or NL non-pitcher wRC/PA))*PA

46.3 = 48.9 + (.110 – (1.01*.110))*726 + (.110 – (9783/86959))*726

Again, the number listed on the site is 45.9, which is the the result of not rounding until the end, but no one wants to see strings of nine digits. We now have Votto with 46.3 Batting Runs Above Average.

Base Running Runs

Base Running (BsR) is the sum of Ultimate Base Running (UBR) and Weighted Stolen Base Runs (wSB). You can’t calculate UBR by hand because it requires video tracking data from Baseball Info Solutions, but we provide it on the site. You can calculate wSB, however. The equation is as follows:

wSB = SB * runSB + CS * runCS – lgwSB * (1B + BB + HBP – IBB)

-0.8 = (6*0.2) + (3*-0.384) – 0.0035*(120 + 135 + 4 -19)

League stolen base runs (lgwSB) is:

lgwSB = (lgSB * runSB + lgCS * runCS) / (lg1B + lgBB + lgHBP – lgIBB)

0.0035 = ((2693*0.2) + (1007*(-0.384))) / (28438 + 14640 + 1536 – 1018)

As with all linear weights-based metrics, the runs values are estimates. In this case, the run value of a stolen base is set at .2 runs for all seasons. The run value of a caught stealing changes from year to year to reflect the changing value of runs and outs over the season.

runCS = 2 x RunsPerOut + 0.075

-0.384 = -1*(2 * (20255/130969) + 0.075)

Runs Per Out is simply runs scored in the season divided by outs in the season. This leaves us with a runSB of 0.2, a runCS of -0.384, and a lgwSB of about .0035 to use as constants in the wSB equation.

If we locate his UBR on the site (0.2) and add it to his wSB (-0.8) we arrive at -0.6 Base Running Runs Above Average. The site lists -0.5, again because of simple rounding differences.

Fielding Runs

FanGraphs uses Ultimate Zone Rating (UZR) for our fielding runs above average for each non-catcher position and Votto had a 2.2 UZR in 2013 at first base. That means he had 2.2 Fielding Runs Above Average in 2013.

Positional Adjustment

The positional adjustment allows us to compare players who played different positions, as fielding runs only compares players to the average player at their specific position. To calculate the positional adjustment for each player, you do the following:

Positional Adjustment = ((Innings Played/9) / 162) * position specific run value

-12.3 = ((1430.66/9) / 162) * -12.5

You can find the positional run values per 162 games here and we are left with Votto with -12.3 positional runs relative to league average.

League Adjustment

Adjusting for league only has a small impact on player value, but it is done so that each league has exactly zero Runs Above Average for hitting, fielding, base running, and position.

To find the league adjustment find the league specific values (AL or NL) and do the following:

League Adjustment = ((-1)*(lgBatting Runs + lgBase Running Runs + lgFielding Runs + lgPositional Adjustment) / lgPA)*PA

0.8 = (-1)*((-653.1 – 11.7 +74.0 +491.4)/92116)*726

This leaves us with a league adjustment for Votto of 0.8 runs above average.

Replacement Runs

So far we’ve been talking in runs above or below average, but now we need to shift and refer to Votto’s performance relative to replacement level. To do this, we start with 570 WAR (or 57% of the total 1,000 WAR) and multiply it by the number of games in the season divided by 2,430 because position players make up 570 WAR per 2,430 games. We then multiply that by Runs Per Win divided by League PA to convert WAR into runs per PA and then we multiple that by the player’s PA to determine their share of runs.

Replacement Level Runs = (570 * (MLB Games/2,430)) * (Runs Per Win/lgPA) * PA 

20.7 = (570 * (2,431/2,430)) * (9.264/184873) * 726 

This leaves Joey Votto with 20.7 replacement level runs.

Putting it all together

We’ve calculated all of the Votto specific numbers so far and need just one more piece of data. We need the MLB Runs Per Win, which is essentially the number of extra runs a team needs to score to add one win to their total. It varies yearly with the run environment and can be found here. For 2013, as we saw a moment ago, it is 9.264. The WAR equation listed at the top is as follows:

WAR = (Batting Runs + Base Running Runs + Fielding Runs + Positional Adjustment + League Adjustment +Replacement Runs) / (Runs Per Win)

6.2 = (46.3 – 0.6 + 2.2 – 12.3 + 0.8 +20.7) / (9.264)

You’ll notice his WAR comes out to 6.2 instead of the listed 6.1, which is a simple rounding issue because I didn’t type out the long chain of digits that go with each of the various constants.

So go ahead and try this yourself. It takes several steps because it’s an all-inclusive metric, but it’s all doable with basic addition, subtraction, multiplication, and division. No calculus or regression needed on your end. I’ll work on creating a file to share that does the arithmetic for you, but for now, you can use this post as a model for calculating WAR and as a framework if you want to vary the calculations in any way.

Think the positional adjustment is wrong? Think UZR isn’t trustworthy? Want to give more credit to hitters than 57%? Want to swap in RE24 for Batting and wSB? You can do all of these things now and work from the same WAR framework. Enjoy.

Questions? Ask them in the comments!





The Beginner’s Guide to Using Statistics Properly
 
Why It’s Always Better to Use Multiple Statistics

Neil Weinberg is the Site Educator at FanGraphs and can be found writing enthusiastically about the Detroit Tigers at New English D. Follow and interact with him on Twitter @NeilWeinberg44.

16 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
AC_Butcha_AC
8 years ago

How do you arrive at 2431 MLB games, when there are only 2430 games every year in MLB?

-2
Gabes
8 years ago
Reply to  AC_Butcha_AC

In 2013 there was a game 163 between Tampa and Texas for the final playoff spot. MLB counts those as regular season games, not playoff games, so they count toward regular season stats, constants, etc.

4
AC_Butcha_AC
8 years ago
Reply to  Gabes

My bad. I didnt check it was 2013. Thanks, Gabes.

2
Leo
8 years ago

This is great. It also seems like a good place to ask a question I’ve been wondering about for a while:

Why isn’t there a rate stat comparable to WAR?

WAR is fabulous as a counting stat, but when you want to compare two players who have played different amounts of time it requires adjustment. It’s easy enough to do this kind of adjustment on your own, but it still seems like a natural enough think for Fangraphs to include in its stats.

1
Leo
8 years ago
Reply to  Leo

Should be “natural enough thing.”

-1
Bravos4evr
8 years ago
Reply to  Leo

I reckon you could divide WAR by innings or plate appearances or wtvr you want to get a an actual “production/participation” rate if you wanted to and compare to your hearts content. (Now granted , the resulting number would probably be out 7-10 decimal places, but you would have a pretty darn accurate number to compare.

EXAMPLE: Votto’s 2013 WAR was 6.1 if you divide that by 726 you get .008402 WAR per plate appearance, compare to Paul Goldschmidt who had 6.4 WAR in 710 PA’s for a WAR per PA of .00901

1
Neil Weinbergmember
8 years ago
Reply to  Leo

Yeah, you would just divide by PA or IP for your rate stat. More typically, we might express it as WAR per 600 PA or WAR per 200 IP or whatever. So it’s really more a matter of “is this something that would be useful to have listed on the site?” And your rec is noted!

1
Leo
8 years ago
Reply to  Neil Weinberg

Yep, it isn’t that hard to calculate on your own, but the same thing is true of a lot of stats on the site (WAR itself is just adding up a few other numbers and dividing by ~10). But at least for me, it comes up often enough to want an automated calculation.

Anyway, your noting of my rec is noted (and appreciated)!

1
Bravos4evr
8 years ago
Reply to  Leo

I formally note Leo’s noting of neil’s noting.

2
AC_Butcha_AC
8 years ago

What is the positional adjustment for pitchers hitting? Is it based on PA or IP? There was never a number thrown out here.

I know B-Ref calculates the positional adjustment for pithcers y-t-y based on their hitting stats so they arrive at replacement level as a group.

So how is this handled here at FG, Neil Weinberg?

0
Neil Weinbergmember
8 years ago
Reply to  AC_Butcha_AC

I think it’s like 60 runs per 600 PA or thereabouts. I don’t think it changes every year. Can’t say for sure. Will have to look into it.

0
AC_Butcha_AC
8 years ago
Reply to  Neil Weinberg

Well it seems like it changes year to year. The r² of batting runs and the pos. adj. for pitchers y-t-y is .98.

linear regression formula is:

pos.adj(wraa)=.86(wraa)-101.2

so if all the pitchers were lg avg hitters their pos. adj. would be something like -100 runs.

formula based on this:
http://www.fangraphs.com/leaders.aspx?pos=p&stats=bat&lg=all&qual=0&type=6&season=2014&month=0&season1=1999&ind=0&team=0,ss&rost=0&age=0&filter=&players=0

0
Neil Weinbergmember
8 years ago
Reply to  AC_Butcha_AC

Yeah, you might be right. I’ll have to see.

0
David Appelmanmember
8 years ago
Reply to  AC_Butcha_AC

The positional adjustment for pitchers is whatever it takes to zero out pitchers RAR on a plate appearance basis. Basically we assume that pitchers, as a whole, should have about 0 WAR as a positional player. It’s a little tricky to zero out completely, but it’s pretty close.

0
David
8 years ago

When a position player pitches, and let’s say, he gives up 6 runs, does that bring down his overall WAR?

0
Neil Weinbergmember
8 years ago
Reply to  David

It goes in as WAR as a pitcher. So you can find Adam Dunn or Danny Worth listed separately as pitchers with WAR from their time on the mound.

1
You are going to send email to

Move Comment

Updated: Saturday, January 28, 2023 7:05 AM ETUpdated: 1/28/2023 7:05 AM ET
Player Linker - @fangraphs - Contact Us - Advertise - Terms of Service - Privacy Policy
sis_logo
All major league baseball data including pitch type, velocity, batted ball location, and play-by-play data provided by Sports Info Solutions.
mlb logo
Major League and Minor League Baseball data provided by Major League Baseball.
Mitchel Lichtman
All UZR (ultimate zone rating) calculations are provided courtesy of Mitchel Lichtman.
TangoTiger.com
All Win Expectancy, Leverage Index, Run Expectancy, and Fans Scouting Report data licenced from TangoTiger.com
Retrosheet.org
Play-by-play data prior to 2002 was obtained free of charge from and is copyrighted by Retrosheet.