sabr - R package (GitHub)
Connect to the Lahman SQL Database to query and calculate MLB offensive performance statistics
https://github.com/mikeleeco/sabrThe sabr package connects the Lahman SQL Database with functions used in calculating offensive performance in the MLB, namely wOBA. Created by Tom Tango and popularized in The Book: Playing the Percentages in Baseball, wOBA uses yearly MLB performance to weigh offensive measures relative to league value. This package offers the following capabilities:
- Retrieves the most up-to-date wOBA measures from 1871-2015
- Queries yearly and career offensive performance from the Lahman SQL database
- Calculates a playerâs seasonal wOBA performance
Installation:
Download the latest development version from github:
if (packageVersion("devtools") < 1.6) {
install.packages("devtools")
}
devtools::install_github("mdlee12/sabr")
Motivation:
wOBA is one of the best catch-all offensive performance statistics, but itâs formula is a bit convoluted since it requires 1) ten distinct rate stats and 2) weighted values based on a seasonâs run environment.
For example, the wOBA formula for the 2013 season was:
wOBA = (0.690 * uBB + 0.722 * HBP + 0.888 * (H - DB - TR - HR) + 1.271 * DB + 1.616 * TR + 2.101 * HR) / (AB + BB - IBB + SF + HBP)
Check out Fangraphsâ library for additional details.
New Functions with 0.2:
- wRAA_season : Returns a MLB playerâs weighted Runs Above Average by yearID
library(sabr)
wRAA_season("braunry02","2015")
## [1] 23.89798
- wRC_season : Returns a MLB playerâs weighted Runs Created by yearID
wRC_season("molitpa01","1991")
## [1] 127.0164
- wRCp_season : Returns a MLB playerâs weighted Runs Created Plus by yearID
wRCp_season("yountro01","1989")
## [1] 152.5421
Full calculation details are in the wOBA and wRC+ calculation.Rmd file
wRCp_season makes a couple assumptions:
- Park Factors are pulled from the Lahman Database - these are different from other sources
- A playerâs primary position is used to remove pitchers from the League Runs/Plate Appearance calculation
Key Functions from 0.1:
- battingseason : Offensive seasonal performance by playerID and yearID
battingseason("parrage01","2014")
## playerID yearID stints teamID AB R H DB TR HR RBI SB CS BB SO IBB SF SH GIDP HBP
## 1 parrage01 2014 2 ARI,MIL 529 64 138 22 4 9 40 9 7 32 100 5 2 6 10 5
- battingcareer : Offensive career performance by playerID by organized by season
battingcareer("fieldpr01")
## playerID yearID stints teamID AB R H DB TR HR RBI SB CS BB SO IBB SF SH GIDP HBP
## 1 fieldpr01 2005 1 MIL 59 2 17 4 0 2 10 0 0 2 17 0 1 0 0 0
## 2 fieldpr01 2006 1 MIL 569 82 154 35 1 28 81 7 2 59 125 5 8 0 17 12
## 3 fieldpr01 2007 1 MIL 573 109 165 35 2 50 119 2 2 90 121 21 4 0 9 14
## 4 fieldpr01 2008 1 MIL 588 86 162 30 2 34 102 3 2 84 134 19 10 0 12 12
## 5 fieldpr01 2009 1 MIL 591 103 177 35 3 46 141 2 3 110 138 21 9 0 14 9
## 6 fieldpr01 2010 1 MIL 578 94 151 25 0 32 83 1 0 114 138 17 1 0 12 21
## 7 fieldpr01 2011 1 MIL 569 95 170 36 1 38 120 1 1 107 106 32 6 0 17 10
## 8 fieldpr01 2012 1 DET 581 83 182 33 1 30 108 1 0 85 84 18 7 0 19 17
## 9 fieldpr01 2013 1 DET 624 82 174 36 0 25 106 1 1 75 117 5 4 0 20 9
## 10 fieldpr01 2014 1 TEX 150 19 37 8 0 3 16 0 0 25 24 11 1 0 5 2
## 11 fieldpr01 2015 1 TEX 613 78 187 28 0 23 98 0 0 64 88 14 5 0 21 11
- woba_season : Returns a MLB playerâs weighted On-Base Average by yearID
woba_season("fieldpr01","2014")
## [1] 0.3049516
- lahman_search : Returns a playerâs Lahman playerID using either:
- nameFirst (Player First Name)
- nameLast (Player Last Name)
- nameGiven (Player Given Name)
- retroID (Retrosheet ID)
- bbrefID (Baseball Reference ID)
lahman_search(nameFirst = "Robin")
## playerID nameFirst nameLast nameGiven retroID bbrefID
## 1 jenniro01 Robin Jennings Robin Christopher jennr001 jenniro01
## 2 roberro01 Robin Roberts Robin Evan rober102 roberro01
## 3 venturo01 Robin Ventura Robin Mark ventr001 venturo01
## 4 yountro01 Robin Yount Robin R. younr001 yountro01
lahman_search(nameLast = "Fielder")
## playerID nameFirst nameLast nameGiven retroID bbrefID
## 1 fieldce01 Cecil Fielder Cecil Grant fielc001 fieldce01
## 2 fieldpr01 Prince Fielder Prince Semien fielp001 fieldpr01
lahman_search(nameGiven = "Russell Oles")
## playerID nameFirst nameLast nameGiven retroID bbrefID
## 1 branyru01 Russell Branyan Russell Oles branr001 branyru01
lahman_search(retroID = "molip001")
## playerID nameFirst nameLast nameGiven retroID bbrefID
## 1 molitpa01 Paul Molitor Paul Leo molip001 molitpa01
lahman_search(bbrefID = "yostne01")
## playerID nameFirst nameLast nameGiven retroID bbrefID
## 1 yostne01 Ned Yost Edgar Frederick yoste001 yostne01
Have a question, issue or suggestion? Create a pull request, file an issue, or feel free to contact me on Twitter