Professional Documents
Culture Documents
Gears of WAR, Part I: Linear Weights
136
By
Shawn Domagal‑Goldman
Updated Jan 18, 2010, 4:44pm CST
SHARE
Here begins my introductory series on sabermeric concepts, which is going to use WAR (Wins
Above Replacement) as a unifying framework. I plan to use WAR for a few reasons. For one, if
you're just going to use one stat for both evaluating past player performance and valuing
future player production, it should be WAR. Why does WAR have this prominence as the best
single number to know about a player? I can answer this by defining the statistic. Simply put,
WAR is the number of wins you'd expect a team to have added to its total due to the presence
of a particular player, instead of a replacement from the minor league ranks. Thus, WAR is
important for the exact same reason why many people are misled into thinking the W‑L record of
a pitcher it so important: WAR is measured in the same units as the ultimate measure of
success... wins! I hope to talk about this later, but the difference between WAR and W‑L
records is that WAR succeeds in this goal whereas W‑L records fail. W‑L records represent a
very poor attempt to attribute wins to a pitcher. WAR does this, too... only WAR does it much,
much, much better, and more precisely than W‑L records do and they have they have the
tremendous advantage of being capable of awarding "wins" to position players and pitchers on
an equal footing. In order to do this properly, WAR need to be all‑encompassing; this
necessitates the inclusion of many components. Thus, by framing things with WAR, I can also
introduce all of you to a variety of tools and concepts currently adopted for use by much of
the sabermetric community: linear weights, wOBA, UZR, FIP, EqBRR, replacement‑level,
positional adjustments, player valuation, forecasting systems, and, error and uncertainty.
This article is the first in a series of 10 parts. (For now... maybe the series will end up
being 11 parts? 8 parts? I'm honestly not sure yet... We'll see where this goes.) Anyways,
this is Part I: Linear Weights. Jump below the fold to for an introduction to a very central
gear in the WAR machine...
Originally, I wanted to make this first story one on error and uncertainty, but I quickly
realized I first need to introduce statistics like wOBA and UZR... and before I can explain
stats like wOBA or UZR I should first tell you what linear weights are... and before I tell
you what linear weights are I should explain what a run expectancy matrix is. So let's start
there... run expectancy. Take a look at the following table (taken from Tangotiger's site) ,
which tells you the average runs scored in innings that occurred in the years 1999‑2002,
starting with given base/out states. The base/out states are a combination of the position of
runners, here shown in different rows, and the number of outs in the inning, here shown in
different columns. Look below the table for an example on how to use it.
RE 99‑02 0 1 2
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 1/27
10/24/2018 Linear Weights - Google Docs
Let's use the game state with a runner on second and nobody out as an example. If you want to
know how many runs were scored (on average) from this game state to the end of the inning, go
to the column labeled "0" (representing the number of outs) and look down to where it
intersects the row labeled "2nd" (representing the presence of a runner on 2nd). There, you'll
find the value "1.189." This means that, on average, teams scored 1.189 runs in the rest of an
inning where there were 0 outs and a runner on 2nd. This particular calculation was for the
years 1999‑2002, but in principle one could calculate this for any given year or range of
years, or even with models. (Professionally, I'm a modeler so this makes me smile.) If you
assume that the run expectancy hasn't changed much since this table was calculated, this
information is very useful. Every base/out combination is in here, so you can figure out how
many runs a team is expected to score in the rest of an inning at any point in the game,
assuming average production from that team the rest of the inning. Note that run expectancy
doesn't take into account things like whether Derrek Lee or Neifi Perez is due up in the
inning, or whether Carlos Zambrano or Aaron Heilman is on the mound. It just tells you how
many runs a team would be expected to score the rest of the inning, based on what teams have
done in the past starting from the same base/run state. It's an expectation based on
precedent. Run expectancy is an important concept, as it's the foundation of a great deal of
sabermetric products these days, including the (super‑cool) win expectancy charts at
fangraphs , their measurements of "leverage index," and some cool individual statistics such as
"clutch." It's also at the heart of
linear weights , a system that places run values on every
type of play ‑ singles, doubles, errors, wild pitches, walks, etc ‑ and in so doing gives us
the ability to translate a player's accumulated singles, doubles, stolen bases, etc. into runs
created. Once we know the runs created, we can translate that to wins, and that'll give us
WAR. But I'm saving that discussion for next time.
Linear weights uses another, larger table (again taken from Tango's site) . This table is
similar to the prior one, except the entire game states (including both where runners are on
base AND the outs) are in now in the different rows and game events (single, double,
strikeout, reached on error, etc.) are now in the different columns. The other difference in
this table is that the numbers now represent a change in the average number of runs teams
scored. This change is the result of the event in the column occurring, and is measured with
respect to the game state in the row. Anyways, here's the table (if it doesn't make sense,
look past the table for an example):
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 2/27
10/24/2018 Linear Weights - Google Docs
Let's continue from the previous example (a runner on 2nd and nobody out) and see the change
in the expected runs scored if the next thing that happened was a double. Go to the row with
"2nd" in the "Base" column and "0" in the "Outs" column. Now head across that row to the "2B"
column. The number there is 0.97. This tells us that, on average, doubles that occurred when
there was a runner on second and 0 outs increased the runs scored in the inning by 0.97 runs.
This makes sense! Think about it with me for a moment. Most of the time, when there's a double
hit with a runner on second, the runner scores. Thus, after the double the team will usually
be left with the same situation we started with: a runner on second with nobody out. However,
there's a huge difference... a run scored! They're still expected to score 1.189 more runs
after the double, and have an extra run across the board. Thus, the increase in run expectancy
of 0.97 runs (a number very close to 1) makes sense. This allows us to place a value on that
double: in this game state, a double is worth 0.97 runs.
Now if you want to find out how many runs a player added to a team's totals, you could take
all the doubles they got with runners on 2nd and nobody out, multiplied each double by its
value, and summed the products... and then do that again for every game event in every game
state, summing the totals. But there are two problems with that: 1.) it's tedious and 2.) it
assumes players do better in certain game states than other game states. I'll show in a later
post how there's no reason to believe 2.) is true case except for a couple minor exceptions.
Besides, it would be nice to be able to go straight from the stats we'd usually find on
player's stats page into runs and wins. Linear weights solves these problems by assigning
values to each game event, independent of the game state. Basically, it answers the following
question: how much is a generic double (or any other game event) worth, in terms of runs? The
answer to that question will let us calculate a player's contributions much more easily, as
we'll be able to simply sum up their doubles, singles, etc. all multiplied by the run value
for each event type, and ignore all the permutations of game type with game state. We don't
have to worry about game state, because we've made the doubles (etc.) all context‑independent.
In other words, linear weights gives us the bridge we need to get from game events that are
easily found in a player's stat page (things like singles, doubles, stolen bases, etc.) to
runs created. For pitching, defense, or Ryan Theriot's baserunning it gives us a similar
bridge to runs prevented. That's pretty cool, if you ask me.
How does linear weights do this? It takes a weighted average of the value of each event over
all the game states. The weighted average allows the game states that occur more often to
count more often in the average. This is necessary because, for example, the game state
"nobody on, nobody out" will occur much more often than the game state "bases loaded, 2 out."
The former state is guaranteed to occur at least 17 times a game; any game in which the latter
game state occurs 17 times would be long remembered for its excitement, (and perhaps as Carlos
Marmol's longest career outing). The weighted average allows us to account for this
discrepancy in how often the game states occur, by applying heavier weights to more common
game states. Once we do that, we have the value of the average double... and every other game
event. Look at the last row in the above table, which has these values for every game event.
If you understand this much, you've grasped a VERY important concept in sabermetrics. If you
"get" how all these game events are valued in terms of runs, you'll be able to easily grasp
other advanced stats like UZR and wOBA, two of the most important components in WAR. We'll
return next week with a look at wOBA, which is the way we incorporate hitting into WAR; we'll
also talk about going from the runs calculated in linear weights to wins. If you DON'T
understand what I've said so far, then fire your questions away in the comments section!
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 3/27
10/24/2018 Linear Weights - Google Docs
Before I finish this piece, I'd like one last word and caveat. You can derive all of these
numbers and tables using a variety of methods, even (woot!) models. I showed the number/tables
above because they were readily available (thanks to Tangotiger), and because they're
empirically derived. It would have taken a lot more text to introduce things like Markov
chains. So, just realize there are other ways to derive these numbers, and some will result in
"better" numbers than the ones here. Indeed, there are a few wonky numbers in the tables
above. If you use Markov chains that wonkiness goes away, but the differences aren't huge and
mostly show up in the last decimal place. More than anything else, my goal here is to help
people understand what a run expectancy matrix is, and how linear weights allow us to put run
values on individual events. Finally, if you're really into this stuff I strongly recommend
grabbing a copy of
"The Book: Playing the Percentages in Baseball" by Tom Tango (tangotiger),
Mitchel Lichtman (mgl) and Andrew Dolphin (dolphin). That book is a great place to learn more
about all this stuff, and will include many applications I may not get the chance to talk
about here. So get the book ‑ it's worth it!
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 4/27
10/24/2018 Linear Weights - Google Docs
who gets credit for this run and how much credit?
If you go by runs and RBI, you would presumably give half the credit to Bonifacio and the
other half to Ramirez, since those are the only two receiving run stats for this set of
circumstances. But does that tell you everything that happened? Bonifacio ended up on base
with a single, but Infante was critical to move him to third base on the double. However, when
you use runs and RBI, Infante receives no credit for that run, despite the fact that he was
very important in moving the runner into position to score.
This gets to the point of what runs and RBI measure. Yes, they measure runs scored and driven
in, but there are more factors to those numbers than meets the eye. Runs scored encompass not
only a player's ability to get on base, but also his team's ability to drive him in.
Similarly, RBI is dependent not only on a player's ability to move runners down the bases with
hits, but also his team's ability to provide runners for him to move. In other words, there is
little separation between the individual and team aspects of runs scored and RBI . If we want
to evaluate the individual, we cannot be using stats that encompass the team's performance as
well.
Note that this does not mean that runs and RBI are "useless." Like all statistics, they do
tell you something, and they can tell a story. As is the case with many stats, it is not the
stat's fault, but rather the misuse of the stat that makes it look bad. These stats can tell
you a lot about the type of player you are dealing with and the quality of the team
surrounding him in the lineup, but they cannot determine how much that player has produced.
Enter Linear Weights
So our goal in this case is to isolate each player's performance from his team and give that
performance a run value. I do not want to give Infante extra credit for hitting a double just
because his teammate is on base, and similarly I do not want to credit Ramirez more for making
an out just because his teammate was on third; neither of these situations were in an
individual player's control.
How can we resolve that? One way to handle this is to give the player an average amount of
credit for each play. Every base‑out state (for example, runners on second and third with no
outs, or runner on first with no outs, or runner on second with one out) has a run expectancy ,
a value of runs that is expected to score based on empirical evidence (for example, how many
runs have scored after a second and third with no outs situation). One can do this with
play‑by‑play data from any era. For example, let us use this table by Tom Tango for the 1999
to 2002 era .
RE 99‑02 0 1 2
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 5/27
10/24/2018 Linear Weights - Google Docs
Note: The columns are the number of outs, while the rows indicate the base situation.
Let's go back to our previous situation. Going from the start of the inning to after
Bonifacio's single, we see that the Marlins would have increased their expected runs scored
from 0.55 runs to 0.95 runs. This means that, in this situation, Bonifacio's single was worth
0.4 runs . Then, Infante's double changed the run expectancy from 0.95 to 2.05, meaning in this
case that Infante's double added 1.1 runs . Finally, Ramirez's sacrifice fly scored a run,
meaning we automatically add one run to his total, but it changed the state to runners on
second with one out (0.73 run expectancy). This means that in total, the change from runners
on second and third with no outs and runner on second with one out and a run scored was worth
‑0.3 runs (yes, that means Ramirez hurt the team's chances of scoring a run by driving in that
run via a sacrifice fly).
But remember, we wanted to give credit isolated from teammates. So what we can do is
average
all of the changes in run expectancy resulting from singles, doubles, home runs, walks, and
other basic events. That is, take all the changes in base‑out state that resulted from a
single, measure the run expectancy change from each single, and take the average. This gives a
player credit for the average event, rather than credit him for what his team provided in
terms of runners on base or teammate ability to drive runners in. It eliminates the effect of
the teammates surrounding the player in the lineup and isolates only that player's production.
What do linear weights look like in terms of run values for each event? You can see an example
for the 1992 to 2002 era at the end of this table by Tom Tango. Here it is summarized:
Event Runs Above Average
Non‑intentional BB 0.33
Hit‑by‑pitch 0.39
Single 0.47
Double 0.76
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 6/27
10/24/2018 Linear Weights - Google Docs
Triple 1.06
Home Run 1.41
Stolen Base 0.20
Caught Stealing ‑0.46
Strikeout ‑0.31
Other Outs ‑0.30
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 7/27
10/24/2018 Linear Weights - Google Docs
Linear Weights
By Keith Glab
Whereas Bill James used primarily intuition to create his Runs Created formula, Pete Palmer
took the average value of every offensive baseball event in instituting a Linear Weights
value. He figured these values by using a computer simulation that modeled run production.
The simulation corresponded to the results that George Lindsay got from recording 373 games of
play‑by‑play data from the 1959 and 1960 seasons.
Basically, you take any event (say, a home run) and a situation (runner on first, one out) and
subtract the initial Inning Run Expectancy from the Inning Run Expectancy after the event (in
this case, 2.243‑.498 = 1.745 runs). You then repeat the process for every situation, and
every event, and come up with this easy additive formula:
.47*1B + .78*2B + 1.09*3B + 1.4*HR + .33*(BB+HB) ‑ .27*(AB‑H)
You can also view it as .47 for a hit +.31 for each extra base. A hitter with a negative
value is hurting his team while one with a positive value is helping his team by that number
of runs.
What
Batting Runs does, is take a player’s linear weights value and adjust it for home
ballpark and era. A value of zero is league average; a negative number indicates how many
runs below average a player is, while a positive number counts a player’s run contribution
over the average player’s.
Offensive Runs
.
3*SB ‑.52*CS ‑ .02K
Offensive Runs take strikeouts, stolen bases, and caught stealings into account. I’m assuming
that whevever someone calculated the value of a strikeout that they have league averages for
how often ground balls and fly balls advance runners, and how often hitters reach on a dropped
third strike. Bill James uses the value .03 for his RC formula… I’ve also seen values below
.02. I’m erring towards the lesser deviation from regular outs.
For SB and CS, Palmer came up with initial values and then bumped them up due to their
situational nature (managers are more likely to steal in key situations where advancing a
runner would be of more benefit, and scoring one run as opposed to bunches would be more
appropriate). In doing so, he sneakily adjusted the ratio of SB and CS values to overly
penalize hitters for a bad SB%.
One of the biggest Sabrmetric cons out there is the notion that you need a 75% success rate
stealing bases to help your team. These are the actual era break‑even values for SB% that
Palmer’s model came up with:
1901‑1920: ~62.5%
1921‑1940: ~64%
1941‑1960: ~65.5%
1961‑1977: ~63%
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 8/27
10/24/2018 Linear Weights - Google Docs
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 9/27
10/24/2018 Linear Weights - Google Docs
Sabermetrics 101: Linear Weights
6
By
Graham MacAree
Feb 20, 2010, 3:31pm PST
SHARE
Now we're really getting into the good stuff.
Prerequisites for understanding:
Game state
,
environment
.
Prerequisites for derivation:
Game state
; database.
The Not‑So‑Missing Link
Let's go all the way back to the beginning. We started this series by looking at the game
state, along with run expectancy and win expectancy. We did so for a reason, and that's
because it's impossible to understand any of the more modern statistics without a good
understanding of the game state (and run expectancy). Here, we have the intermediate step
between game state and a useful metric, whether we wish to look at batting, pitching, or
defence: Linear Weights. Just as runs require some translation in order to be presented in a
measure that has some inherent value, the events on the field must also be converted into
runs. How? By going back to our game state and looking at run expectancy.
We know the average number of runs scored over the remainder of an inning in any
baserunner/out state. Bases loaded, no out? You're looking at a lot of runs. Empty, with two
down? Rather less. With play‑by‑play data, we can actually look at any class of event and find
out the average change said event causes in run expectancy. Add in the average number of runs
that scored on a play and suddenly you're left with the value, in runs ‑ i.e. the linear
weight ‑ of any given event. This is a pretty big deal, as without it we'd have no way to
measure the relative importance of say, walks and singles. Combined with the run/win
conversion, linear weights (in run form) bridge the gap between the old baseball stats and
value.
Nothing Is Arbitrary
Consider the previous paragraph again. It's critically important to have a good grasp of what
it means: that all of our top‑line stats are related to runs above or below average by
empirical means. There is nothing arbitrary in the exact weighting we have of a home run
relative to a triple, or a ground ball to a line drive. Years upon years of data allow us to
convert back and forth, or up and down with ease. A common complaint with modern sabremetrics
is the bewildering array of fractional coefficients that dot the scene, but if you look at a
formula that's based on linear weight, don't see them as confusing numbers. Instead, look at
them as relative values, derived through years of baseball being played.
A Livable Zone
Linear weights is a fantastic tool, but we should be aware of the limitations as we sing its
praises. Because we build our run (and out) values on league average data, there's no
guarantee that they work in extreme environments . And, in fact, they do not. At all. If a
pitcher struck out 100% of the batters he faced and we attempted to estimate his ERA though
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 10/27
10/24/2018 Linear Weights - Google Docs
linear weights, we would end up with our pitcher allowing something like negative three runs
per nine innings, a clearly impossible solution. Situations don't have to be as extreme as
that either: the best pitchers in baseball effect their run environment to the point that
linear weights may not accurately reflect the true conversion between their pitching and the
runs we'd expect. The take away point? Linear weights are optimised for the average baseball
game, and start to fall apart when you drift too far away from that. They're still usable when
a long way from the mean, but as with anything, understanding what's wrong with what we use is
just as important as knowing what's right.
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 11/27
10/24/2018 Linear Weights - Google Docs
Understanding Linear Weights
MARCH 9, 2011
tags:
Linear Weights
by
triplesalley
It’s so nice to have a night where I actually have some free time to write. I’ll be able to
start writing with regularity in about a week and a half or so, right around the time I make
my yearly trip to Arizona for a few days of good ol’ Spring Training. I don’t really have
anything in particular to write about, and I’m not really in the mood to do player analysis,
so I thought I’d write a little bit about a very important sabermetric principle that’s found
its way into essentially every aspect of sabermetrics‑ linear weights. And the more I think
about it, if you understand linear weights (hereafter referred to as “LW” or “LWTS”), you’ll
understand a lot about sabermetrics.
A brief history on LW, and how they are applied
The history of LW begins well before a night custodian by the name of Bill James, when a man
named Ferdinand Cole Lane built a weighted system for measuring the impact of hitting events.
This was later picked up by George Lindsey, who recorded detailed play‑by‑play data on over
1,000 Major League games and produced what is referred to as a run expectancy matrix, which
tells us the probability of scoring from a particular base‑out state. In 2010 , for example, a
team was expected to score .49 runs from a man on first and no outs until the end of the
inning, and 2.4 runs with the bases loaded and no outs. This merely quantifies what we know‑
teams are more likely to score more runs in situations like 123_0 (bases loaded, no out) than
they are in situations like 001_2 (man on first, two outs). Lindsey then took the average
increase in run expectancy from each event to find the average value of each event. And
really, that’s all there is to it. Linear weights are merely the empirical average impact an
event has towards the run‑scoring process. Pete Palmer expanded upon Lindsey’s work in the
1984 classic Hidden Game of Baseball , which introduced the Linear Weights System. What
separated Palmer from the rest of the pack is that he included negative events into the
equation, so that players were held accountable for the outs he made while at the plate; not
just the positive outcomes. Palmer’s original equation (sans outs on bases):
LWTS = .46*1B + .80*2B + 1.02*3B + 1.40*HR + .33*(BB + HBP) + .30*SB – .60*CS – .25*(AB – H)
“What Linear Weights does is to take very offensive event and treat it in terms of its impact
upon the team‑ an average team, so that a man does not benefit in his individual record for
having the good fortune to bat cleanup with the Brewers or suffer for batting cleanup with the
Mets. The relationship of individual performance to team play is stated poorly or not at all
in conventional baseball statistics. In Linear Weights it is crystal clear: the linear
progression, the sum, of the various offensive events, when weighted by their accurately
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 12/27
10/24/2018 Linear Weights - Google Docs
predicted run values, will total the runs contributed by that batter or that team beyond the
league average.” (67)
Players have absolutely no control over where they hit in the lineup. Think of it this way‑
Bengie Molina was the cleanup hitter for the Giants for a number of years. Had he been on
another team, would he have hit in the same spot in the order? And would he have collected as
many RBI? Remember, RBI opportunities are highly dependent on one’s slot in the lineup. The
same goes for runs scored‑ yes, good baserunners will score more runs than bad ones. But the
player’s teammates are the ones that have to put the ball in play first. So it is foolish to
rate players based on team‑dependent numbers. Batting average is useless towards player value
as well‑ yes, it tells us the rate of hits by the player, but what about the impact of the
hits and the walks? OPS sure is nice, but it doesn’t tell us the amount of runs the player
helps generate. Linear weights provides us with a player’s runs above or below the league
average based on the ratio of his positive run output to his outs created. If a player is +0
LWTS, this simply means he hit at
exactly the league average rate. If a player is ‑10 LWTS,
he provided 10 less runs than a league average player in the same amount of opportunities, and
if he’s +10, he’s provided 10
more runs than a league average hitter. That’s all there is to
it.
How I generate LW
This is where things get technical, so you may just want to skip ahead. There are various
ways to generate LW values‑ there is the empirical method, as outlined above (and described in
more detail here ). This is the most “correct” method. But since not everyone is a
programming genius (guilty), there are other methods. One is to use a Markov model to
simulate the impact of each event. This takes a heck of a lot of calculations, so it might
not be for you‑ but there is one
very basic Markov calculator on the internet that will spit
out marginal values for you. The more simple method, and the one that I use, is the
“plus‑one” method outlined by Brandon Heipp , which squeezes out the marginal events from a
dynamic run estimator‑ in this case, Base Runs (BsR). Why BsR?
Because it’s a very simple run estimator, is extremely flexible for the run environment, and
works with a true model of run scoring. The original dynamic run estimator, Bill James’ Runs
Created, works as follows:
Runs = (A*B)/C
Runs = A * (B/(B+C)) + D
Where “A” and “B” are the same as RC, “C” are outs made, and “D” are home runs. In short, it
is essentially:
Runs = Times on Base * Score Rate + Home Runs
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 13/27
10/24/2018 Linear Weights - Google Docs
And it just so happens that it spits out marginal run values that match up perfectly with the
empirical run values. Anyways, let’s say we use the simplest BsR formula out there to extract
run values for the 2010 MLB season:
A = H – HR + BB + HBP
B = .88*1B + 2.42*2B + 3.96*3B + 2.2*HR + .11*(BB + HBP) + .99*SB – .99*CS
C = AB – H + CS
D = HR
LW = ((B+C)*(A*b + B*a) – (A*B)*(b+c))/((B+C)^2) + d
Where the capitalized terms are the sum of the factor (“B,” for example, would be the
frequency of the event times the coefficient in the B term), and the lower case terms are the
coefficient of the factor (i.e. .88 for singles, 2.42 for doubles, etc.). Doing so yields us
the following equation:
LWRC = .47*1B + .75*2B + 1.04*3B + 1.40*HR + .33*(BB + HBP) + .18*SB – .28*CS – .09* (AB – H)
You’ll notice that the title and the out terms look a bit different. The title stands for
“Linear Weights Runs Created,” and the out term is ‑.09 because it is expressed in absolute
terms. In order to make it relative to average, we find the overall runs per out‑ or runs
scored divided by C‑ and add this figure to the events in C. For 2010, runs per out
(excluding pitcher hitting) is .178. That gives us this:
LW = .47*1B + .75*2B + 1.04*3B + 1.40*HR + .33*(BB + HBP) + .18*SB – .45*CS – .27* (AB – H)
Tango LW = .48*1B + .77*2B + 1.06*3B + 1.41*HR + .49*ROE + .31*NIBB + .34*HBP – .28*(AB – H –
ROE – K + SF) – .29*K
And another equation developed from Retrosheet data that spans from 1911 until 2009 gives us
the following formula:
Retro LW = .47*1B + .77*2B + 1.05*3B + 1.40*HR + .50*ROE + .31*NIBB + .34*HBP – .27*(AB – H –
ROE – K + SF) – .29*K
All slightly different coefficients that give us slightly different results. It’s not a big
deal, but I wanted to show how different datasets and BsR formulae can influence the run
values provided. When all is said and done, though, you’re not going to see a big difference
between them.
Applications beyond hitting
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 14/27
10/24/2018 Linear Weights - Google Docs
LW values have expanded beyond the realm of just offense‑ it is applied to defense and to
pitching metrics. With defense, the run value of a play made above average is the difference
between a batted ball and an out, or about .75 runs. For the outfield, it’s about .85 (more
doubles and triples, obviously). With pitching, FIP takes the basic run values, places them
above the value of a ball in play and multiplies by 9 to attain its coefficients. Uber‑stat
tERA takes the linear weight value of each batted ball to estimate the pitcher’s defense
neutral runs allowed. So LW doesn’t apply just to offense‑ it has spread to other aspects of
the game, as well. The same applies to baserunning runs as well.
All in all, LW are the best way to measure a player’s offense due to its simplicity and
theoretical practicality. The process to get them is a bit complicated, sure, but it will
always provide you with an outstanding overall view of a player’s value provided with the bat.
And it’s a construct that allows you to look at all other aspects of the game, as well.
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 15/27
10/24/2018 Linear Weights - Google Docs
Custom wOBA and Linear Weights Through 2010: Baseball Databank Data Dump 2.1
While the "original recipe" uses some pretty standard and effective weights, since then Tango
has published a script that "customizes" wOBA for seasonal run environments. This has been
implemented at FanGraphs , for example. However, many people now prefer these "custom"
versions, but the values aren't readily available. I'm no sabermetric or SQL wizard, but I do
have the script that these things are based. Due to overwhelming demand from my massive
fanbase (okay, a couple of people on Twitter ), I've run the script and have the weights
through this season. I take no great claim to have invented this method or the script, but
below you will find the wOBA coefficients updated for each MLB season through 2010.
A Few Boring Historical and Methodological Details (Feel Free to Skip)
In the
original formulation given in The Book , the linear weights used for events were:
HR
1.70, 3B 1.37, 2B 1.08, 1B 0.77, uBB 0.62 . To scale this to something resembling OBP, Tango
divided all of these by 1.15 and did other stuff to make plate appearances (rather than outs,
as in traditional linear weights) the denominator to come up with this formula for caculating
a player's (or any other entity's) wOBA:
(0.72xNIBB + 0.75xHBP + 0.90x1B + 0.92xRBOE + 1.24x2B + 1.56x3B + 1.95xHR) / PA
To convert to linear weights runs above average (what is called 'wRAA' at FanGraphs), simply
take the players wOBA, subtract the league wOBA from that, and then divide by 1.15 (the
'wOBAScale') and multiply by plate appearances to get back to the actual runs scale.
The "original recipe" was created to give one simple "rate stat" type to get a hitter‑batter
matchups in
The Book
, so stolen bases weren't included. It was easy enough to include them,
though. Reached on Error isn't included in this version because they aren't recorded in the
Baseball Databank (there are differing opinions as to whether they should be credited to the
player, I say yes, but it isn't a big deal). What is or isn't included in a linear
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 16/27
10/24/2018 Linear Weights - Google Docs
weights/wOBA calculation isn't a simple matter of right or wrong, it depends on what you want
to do with it. For figuring out a batting order, for example, you'd probably want to use wOBA
without steals/caught stealing, for overall offensive value, including steals/caught stealing
gives a more accurate picture.
These numbers will get you pretty close to what is used at FanGraphs, but there are some
differences (likely due to things like methods of excluding pitchers from the initial
calculations, overall data sources, rounding, etc.). I know that the league wOBAs for seasons
I get and what FanGraphs get are sometimes different, but they are close enough. This is not
'official.' And again, these are not "my" weights, I just ran the script and wrote this
interminable post... I do think these weights are very good for the most part, in early
baseball there might be some problems because pitchers took a larger offensive role, and prior
to 1956 or so iBBs weren't distinguished in the from uBBs, which also throws things off, but
for most of modern baseball, and certainly for 2010, these will do the trick.
Finally, the Coefficients and Weights
Here it is, your 2010 wOBA formula (drumroll please):
The "wOBAScale" for 2010 is 1.25 and the league wOBA is .320, so for runs above average, use
( (wOBA ‑ .320) /1.25) x PA
The "weights proper" (rounded to two places) for this season are 0.30 uBB, 0.33 HBP, 0.46 1B,
0.76 2B, 1.03 3B, 1.4 HR, 0.2 SB, 0.4 CS.
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 17/27
10/24/2018 Linear Weights - Google Docs
Linear Weights
Linear Weights
are a class of linear run estimators that we use to determine the relative
values of particular events. For example, you’re likely familiar with
Weighted On‑Base Average
(wOBA) and
Fielding Independent Pitching (FIP)
, which have weights assigned to given outcomes
(i.e., singles, doubles, home runs, etc) that provide a more nuanced look than statistics such
as batting average, which counts all hits equally.
Inherently, we know that we should count doubles more than singles, but determining exactly
how much more requires some sort of methodology. Linear weights are one such methodology.
It is important to keep in mind that the values generated using this approach are
one‑size‑fits‑all estimates using a particular sample of data. They might not reflect reality
under extreme conditions or in environments not reflective of the original sample. This page
will use wOBA as a guide, but the logic translates to other applications.
First Things
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 18/27
10/24/2018 Linear Weights - Google Docs
Run Expectancy Matrix 2010‑2015
Runners 0 outs 1 outs 2 outs
SOURCE: Tom Tango
The table listed here was calculated by Tom Tango using 2010‑2015 data for the entire league
and serves as a good baseline. At FanGraphs, we park adjust the matrix for each game, so the
exact numbers might be a touch different if you’re trying to play along at home in
excruciating detail.
Now that you have a run expectancy matrix, you need to learn how to use it. Each plate
appearance moves you from one base‑out state to another. So if you walk with a man on first
base and one out, you move to the “men on first and second and one out” box. That box has an
RE value of 0.884. Because your plate appearance moved you from .509 to 0.884, that PA was
worth +0.375 in terms of run expectancy.
Every plate appearance has one of these values, either positive or negative. You can learn
more about this by following the earlier link.
Calculating Linear Weights
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 19/27
10/24/2018 Linear Weights - Google Docs
calculating wOBA) or for any type of play you wish. This gives you the runs
above average
produced by each of these kinds of events, also known as linear weights.
While these linear weights are an accurate reflection of the data, some people don’t find them
to be particularly intuitive. Saying a player has been worth 15 runs above average over the
course of a season might be accurate, but it also might not translate very well to all
audiences. This leads us to scale our linear weights based stats into things that are easier
to understand.
Optional Scaling
BB 0.55
HBP 0.57
1B 0.70
2B 1.00
3B 1.27
HR 1.65
As you’ll notice, these are not the weights you saw in the wOBA equation. We’re not done
scaling them yet. We know that we want BB, HBP, 1B, 2B, 3B, and HR in the numerator of the
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 20/27
10/24/2018 Linear Weights - Google Docs
wOBA formula and plate appearances (minus weird stuff like sac bunts) in the denominator, so
what we’re going to do is calculate “wOBA” for the entire league using the linear weights in
this table and the total number of events of each type.
In other words, we’re gong to multiply 0.55 times the number of walks in MLB in 2015 and add
that to 0.57 times the number of HBP and so on, and then divide the entire sum by the number
of plate appearances (really AB + BB – IBB + SF +HBP). If we do that, we wind up with 0.250.
But remember that we want wOBA to look like OBP. So we need to scale the entire thing so that
the league’s wOBA is .313 (to match OBP with IBB removed). To do that, we divide .313/.250 and
get 1.251, which we call the wOBA Scale.
We take the wOBA Scale and multiply it against the linear weights from the table above and
viola, we have ourselves the weights listed in the wOBA equation. And we’re done! You can use
a similar approach to derive the FIP weights, although instead of scaling outs to zero, you
want to scale balls in play to zero.
Summary
Essentially, we use linear weights to properly measure different kinds of events. The most
common applications are wOBA and FIP.
Linear weights requires taking the average run expectancy impact of each type of event
(singles, doubles, etc) and finding their average. That leaves you with a run value relative
to average, which you can then scale in any number of ways to generate a statistic you find
useful.
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 21/27
10/24/2018 Linear Weights - Google Docs
The Beginner’s Guide To Deriving wOBA
by Neil Weinberg ‑ April 11, 2016
We feature many statistics on FanGraphs, but one of the most fundamental is Weighted On‑Base
Average (wOBA). If you’re not familiar with the merits of wOBA in general, I invite you to
head over to
our full library page on it or to learn about why it’s a
gateway sabermetric
statistic
. For our purposes, I’ll simply include the summary:
wOBA is designed to weigh the different offensive results by their actual average contribution
to run scoring. Batting average treats all hits equally and ignores walks. OBP treats all
times on base equally. Slugging percentage weighs hits based on the number of bases achieved
but ignores walks. Adding OBP and SLG is better than any one of AVG/OBP/SLG, but it still
isn’t quite right.
Hitting a single and drawing a walk are both positive outcomes, but they have a different
impact on the inning. A walk always moves each runner up one base while a single could have a
variety of outcomes depending on who is on base and where the ball is hit. We want a statistic
that captures that nuance.
Granted, wOBA doesn’t adjust for park, league, quality of competition, or a number of other
factors, but it’s a good starting point on which to build. So how do we take the beautiful
chaos of baseball and create the formula listed above?
The exact numbers are going to change each year based on the run environment (how many runs
are being scored league wide), but they are consistent enough that we won’t have any problems
understanding each other. I’m going to use the 2015 data, but you can view every year
here
.
Allow me to bring a chunk of that table into this post for convenience:
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 22/27
10/24/2018 Linear Weights - Google Docs
Seasonal Constants
Seaso wOBA wOBAScal wBB wHBP w1B w2B w3B wHR runS runC R/P R/W cFIP
n e B S A
2015 .313 1.251 .68 .718 .88 1.25 1.59 2.06 .200 ‑.39 .11 9.42 3.13
7 1 6 4 5 2 3 1 4
2014 .310 1.304 .68 .722 .89 1.28 1.63 2.13 .200 ‑.37 .10 9.11 3.13
9 2 3 5 5 7 8 7 2
2013 .314 1.277 .69 .722 .88 1.27 1.61 2.10 .200 ‑.38 .11 9.26 3.04
0 8 1 6 1 4 0 4 8
2012 .315 1.245 .69 .722 .88 1.25 1.59 2.05 .200 ‑.39 .11 9.54 3.09
1 4 7 3 8 8 4 4 5
2011 .316 1.264 .69 .726 .89 1.27 1.61 2.08 .200 ‑.39 .11 9.45 3.02
4 0 0 1 6 4 2 4 5
2010 .321 1.251 .70 .732 .89 1.27 1.60 2.07 .200 ‑.40 .11 9.64 3.07
1 5 0 8 2 3 5 3 9
You can ignore the last four columns for the purposes of wOBA, but this is a truncated version
of our Guts! page and shows us each year’s league wOBA, the wOBA scale, and the weights for
each of our six offensive events of interest. Hopefully those numbers will look similar to the
wOBA equation you saw earlier.
Our ultimate goal is to create a statistic that measures each offensive action’s context
neutral contribution to run scoring because scoring runs is the currency of baseball. We have
decided that we want to measure walks, HBP, singles, doubles, triples, and home runs. If you
wanted to, you could build wOBA with more nuanced stats like fly ball outs, ground outs,
strikeouts, etc; it would just get more complicated without much added value.
We have a specific goal and the set of offensive actions we want to measure, but now we need a
method of putting them together.
Run Expectancy
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 23/27
10/24/2018 Linear Weights - Google Docs
eight base‑states, meaning that there are 24 base‑out states. Each plate appearance has a
base‑out state.
Let’s use one out, man on first as our example. In order to calculate the run expectancy for
that base‑out state, we need to find all instances of that base‑out state from the entire
season (or set of seasons) and find the total number of runs scored from the time that
base‑out state occurred until the end of the innings in which they occurred. Then we divide by
the total number of instances to get the average. If you do the math using 2010‑2015, you get
0.509 runs. In other words, if all you knew about the situation was that there was one out and
a man on first, you would expect there to be .509 runs scored between that moment and the end
of the inning on average.
You repeat the process for the other 23 base‑out states and wind up with a table like
this
:
Run Expectancy Matrix 2010‑2015
Runners 0 outs 1 outs 2 outs
SOURCE: Tom Tango
The table listed here was calculated by Tom Tango using 2010‑2015 data for the entire league
and serves as a good baseline. At FanGraphs, we park adjust the matrix for each game, so the
exact numbers might be a touch different if you’re trying to play along at home in
excruciating detail.
Linear Weights
Now that you have a run expectancy matrix, you need to learn how to use it. Each plate
appearance moves you from one base‑out state to another. So if you walk with a man on first
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 24/27
10/24/2018 Linear Weights - Google Docs
base and one out, you move to the “men on first and second and one out” box. That box has an
RE value of 0.884. Because your plate appearance moved you from .509 to 0.884, that PA was
worth +0.375 in terms of run expectancy.
Every plate appearance has one of these values, either positive or negative. You can learn
more about this by following the earlier link.
What we want to determine is the average run value of a walk, HBP, single, double, triple, and
home run. To do this, we take the total RE value of all walks (unintentional in this case),
for example, and divide that number by the number of walks in that season. You’re going to
wind up getting something around 0.3. You repeat this for the other five actions. This gives
you the runs
above average
produced by each of these kinds of events.
In theory, we could essentially be done right now because we have everything we need to build
a statistic that will weigh the offensive actions properly. However, the inventors of wOBA
decided that it would probably be best to scale it to something familiar to make it easier to
understand. And they picked OBP.
Scaling
We have the runs above average for walks (0.29), HBP (0.31), singles (0.44), doubles (0.74),
triples (1.01), and home runs (1.39), but what we want to do now is put wOBA on a scale that
will look like OBP. In OBP, an out is worth zero, so the first thing we want to do is adjust
the run value scale so that an out is equal to zero.
There is an easy way to do this. First, we need to find the linear weight for all outs using
the same method we used to find the value for the other events. We’ll call it ‑0.26 for 2015.
This means that an out is worth ‑0.26 runs less than the average PA when it comes to run
expectancy. What we want to do now is add 0.26 to each of our run values so that outs are
equal to zero. So for walks, which we said are worth 0.29 runs above average, we bump those up
to 0.55 runs
relative to an out
. Using linear weights, walks are worth 0.55 runs more than
outs. We repeat this for each of the five other positive offensive outcomes.
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 25/27
10/24/2018 Linear Weights - Google Docs
2015 Linear Weights (Relative To Outs)
Event Run Value
BB 0.55
HBP 0.57
1B 0.70
2B 1.00
3B 1.27
HR 1.65
As you’ll notice, these are not the weights you saw in the wOBA equation. We’re not done
scaling them yet. We know that we want BB, HBP, 1B, 2B, 3B, and HR in the numerator of the
wOBA formula and plate appearances (minus weird stuff like sac bunts) in the denominator, so
what we’re going to do is calculate “wOBA” for the entire league using the linear weights in
this table and the total number of events of each type.
In other words, we’re gong to multiply 0.55 times the number of walks in MLB in 2015 and add
that to 0.57 times the number of HBP and so on, and then divide the entire sum by the number
of plate appearances (really AB + BB – IBB + SF +HBP). If we do that, we wind up with 0.250.
But remember that we want wOBA to look like OBP. So we need to scale the entire thing so that
the league’s wOBA is .313 (to match OBP with IBB removed). To do that, we divide .313/.250 and
get 1.251, which we call the wOBA Scale.
We take the wOBA Scale and multiply it against the linear weights from the table above and
viola, we have ourselves the weights listed in the wOBA equation. And we’re done!
Concluding Thoughts
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 26/27
10/24/2018 Linear Weights - Google Docs
https://docs.google.com/document/d/1WVXu8MSNWw2WKeO7brV75zOYqD3i9_CCDxKcjnIQJrM/edit# 27/27