Sabermetrics: Pythagorean Won-Loss ComputationsBy Patrick Mondout
Our yearly pages for each franchise (example)
contain the won/loss records for each team as well as computed
Pythagorean, Pythangeport and Pythagenpat won/loss records. This page
describes what these figures actually are.
Simply put the Pythagorean formula, which was developed by Bill James,
calculates expected wins based on runs scored and runs allowed. Here is
the theorem:
RS^2
Winning Pct = WPct = -----------
RS^2 + RA^2
Where RS=Runs Scored, RA=Runs Allowed, ^2=raised to the power of 2.
This is similar to Pythagorean theorem in geometry (a^2 = b^2 + c^2),
hence the name. Anyway, this statistic is believed by some to show whether
a team has been lucky or unlucky during the season, depending upon whether
they finish with a higher or lower record than expected using this
theorem.
James' later came to the conclusion that the power of 1.82 was more
accurate than 2. Thus we include the ^1.82 figures on
our pages as well as two other variants of James' formula.
Clay
Davenport of Baseball Prospectus came up with another method called Pythagenport,
which he claimed was accurate when the runs per game (RPG) were between 4
and 40. Rather than using a fixed exponent, like 1.82 or 2.0, the
Pythagenport method uses a variable exponent based on the total runs
scored per game. That is, the exponent rises or decreases based on how
many runs a team and its opponents scored combined (thus the exponent will
vary between the 1995 Colorado Rockies and a team from the Dead Ball Era).
To calculate the so-called Pythagenport record, the exponent must first be
calculated:
X = .45 + 1.5 * Log10 ((RS+RA)/G)
Where RS=Runs Scored, RA=Runs Allowed, G=Games Played
Then the same formula as before with the new exponent (X) is used:
RS^X
Winning Pct = WPct = -----------
RS^X + RA^X
Where RS=Runs Scored, RA=Runs Allowed, ^X=raised to the power of X.
Yet another variant is the Smyth/Patriot method, also known as Pythagenpat.
Like the last Pythangenport method, the exponent is computed based on
total runs scored:
X = ((RS+RA)/G)^.287
Where RS=Runs Scored, RA=Runs Allowed, G=Games Played
This method, though the .287 exponent is still debated, appears to many
to be the most accurate of the two variants and Clay Davenport himself has
concluded that Pythagenpat is a better fit than Pythangeport. We include
both.
Rather than show you the Pythagorean, Pythangeport and Pythagenpat
winning percentages, we go a step further and show you the predicted wins
and losses for a given team. So there is no confusion and to open up
myself to widespread criticism for my programming techniques, here are the
actual formulas we use on our hand-coded pages to do this
(VBScript/ASP3.0, underscores indicate a linebreak):
Function
Log10(X)
Log10 = Log(X) /
Log(10)
End Function
PythagBillJames=teamGamesPlayed*(teamRunsScored^1.82/_
(teamRunsScored^1.82+teamRunsAllowed^1.82))
PythagBillJames=Round(PythagBillJames,0)&"-"&int(teamGamesPlayed)_
-Round(PythagBillJames,0)
PythagenportPower=1.50*Log10((int(teamRunsScored)_
+int(teamRunsAllowed))/int(teamGamesPlayed))+0.45
Pythagenport=int(teamGamesPlayed)*(int(teamRunsScored)_
^PythagenportPower/((int(teamRunsScored)^PythagenportPower)_
+(int(teamRunsAllowed)^PythagenportPower)))
Pythagenport=Round(Pythagenport,0)&"-"&int(teamGamesPlayed)-Round(Pythagenport,0)
PythagenpatPower=((int(teamRunsScored)+int(teamRunsAllowed))_
/int(teamGamesPlayed))^.287
Pythagenpat=teamGamesPlayed*(teamRunsScored^PythagenpatPower)_
/(teamRunsScored^PythagenpatPower+teamRunsAllowed^PythagenpatPower)
Pythagenpat=Round(Pythagenpat,0)&"-"&int(teamGamesPlayed)-Round(Pythagenpat,0)
(Special thanks to Joe Dimino for help with the formulas.)
Should other methods prove more useful in the future, we will be happy
to provide those calculations as well.
|