The cool thing about ISO is its simplicity. You can calculate it in your head, just based on the slash line you would get on the back of a baseball card, or on the jumbotron at a stadium.
Is there a comparable stat for OBP? My hypothesis is that we can subtract batting average from OBP to get a fairly good estimate of walk rate. In homage to ISO, I call this stat IBO.
Comparing OBP to average is trickier that slugging and average. Both SLG and AVG are denominated on AB. OBP is more complicated: (H+BB+HBP) / (AB +BB+HBP+SF), per Baseball-Reference.
To test this out, I'm using the Lahman Baseball database data from 2014, for all qualified hitters (a total of 135 players).
First step, I created a table to store IBO values. I'm going to get a little hand-wavey here, because I don't want to post all the database structure code. Trust me on this, I'm pretty sure I subtracted one number from another successfully.*
That accomplished, I wrote an R script to pull the data and do some MATH!
library(RMySQL)
ammlb = dbConnect(MySQL(), user='myuser', password='mypassword', dbname='AMMLB', host='localhost')
rs = dbSendQuery(ammlb, "select * from vw_QualifiedIBO where yearID = 2014")
tempdata = fetch(rs, n=-1)
query_results = data.frame(tempdata)
leaders <- query_results[c("nameLast", "nameFirst", "BBPct", "IBO")]
leaders <- leaders[order(-leaders$BBPct),]
print(leaders)
ammlb = dbConnect(MySQL(), user='myuser', password='mypassword', dbname='AMMLB', host='localhost')
rs = dbSendQuery(ammlb, "select * from vw_QualifiedIBO where yearID = 2014")
tempdata = fetch(rs, n=-1)
query_results = data.frame(tempdata)
leaders <- query_results[c("nameLast", "nameFirst", "BBPct", "IBO")]
leaders <- leaders[order(-leaders$BBPct),]
print(leaders)
The leaders are who you would expect, the guys who walk a lot:
Last Name | First Name | BB% | IBO |
Santana | Carlos | 0.1712 | 0.1341 |
Bautista | Jose | 0.1548 | 0.1176 |
Stanton | Giancarlo | 0.1473 | 0.1074 |
LaRoche | Adam | 0.1399 | 0.1027 |
Carpenter | Matt | 0.1344 | 0.1025 |
Smith | Seth | 0.1327 | 0.1009 |
Werth | Jayson | 0.132 | 0.1022 |
Fowler | Dexter | 0.131 | 0.0985 |
McCutchen | Andrew | 0.1296 | 0.0966 |
Freeman | Freddie | 0.1271 | 0.0973 |
Dozier | Brian | 0.1264 | 0.1027 |
Ortiz | David | 0.1246 | 0.093 |
Crisp | Coco | 0.1234 | 0.0902 |
Granderson | Curtis | 0.1208 | 0.0987 |
Valbuena | Luis | 0.119 | 0.0917 |
Rizzo | Anthony | 0.1185 | 0.1001 |
Trout | Mike | 0.1177 | 0.0899 |
Duda | Lucas | 0.1158 | 0.0961 |
Mauer | Joe | 0.1158 | 0.0841 |
Moss | Brandon | 0.1155 | 0.1005 |
Zobrist | Ben | 0.115 | 0.0824 |
Davis | Chris | 0.1145 | 0.104 |
Encarnacion | Edwin | 0.1144 | 0.0859 |
Teixeira | Mark | 0.1142 | 0.0971 |
Holliday | Matt | 0.1109 | 0.0985 |
Choo | Shin-Soo | 0.1096 | 0.0985 |
Donaldson | Josh | 0.1094 | 0.0875 |
Ramirez | Hanley | 0.1094 | 0.0862 |
Martinez | Victor | 0.1092 | 0.0736 |
Yelich | Christian | 0.1065 | 0.0788 |
Rollins | Jimmy | 0.1056 | 0.0799 |
Crawford | Brandon | 0.105 | 0.0774 |
Puig | Yasiel | 0.105 | 0.0867 |
Howard | Ryan | 0.1034 | 0.087 |
Heyward | Jason | 0.1032 | 0.0808 |
Gordon | Alex | 0.1011 | 0.0851 |
Lucroy | Jonathan | 0.1008 | 0.0716 |
Montero | Miguel | 0.1 | 0.0852 |
Upton | BJ | 0.0984 | 0.0786 |
Carter | Chris | 0.0979 | 0.0809 |
McGehee | Casey | 0.097 | 0.0673 |
Upton | Justin | 0.0938 | 0.0719 |
Beltre | Adrian | 0.0928 | 0.0634 |
Peralta | Jhonny | 0.0924 | 0.0735 |
Cano | Robinson | 0.0917 | 0.0677 |
Plouffe | Trevor | 0.0911 | 0.0705 |
Lowrie | Jed | 0.0904 | 0.0719 |
Kipnis | Jason | 0.0903 | 0.0705 |
Gardner | Brett | 0.0899 | 0.0715 |
Jennings | Desmond | 0.0882 | 0.0746 |
Cabrera | Miguel | 0.0876 | 0.0582 |
Markakis | Nick | 0.0873 | 0.0666 |
Kemp | Matt | 0.0868 | 0.0591 |
Rendon | Anthony | 0.0852 | 0.0639 |
Gonzalez | Adrian | 0.0848 | 0.059 |
Jones | Garrett | 0.0841 | 0.063 |
Pedroia | Dustin | 0.0837 | 0.0589 |
Abreu | Jose | 0.082 | 0.0661 |
Escobar | Yunel | 0.0819 | 0.0654 |
Longoria | Evan | 0.0815 | 0.0673 |
Cruz | Nelson | 0.0811 | 0.0625 |
Bruce | Jay | 0.0809 | 0.0643 |
Eaton | Adam | 0.0802 | 0.0615 |
Utley | Chase | 0.0798 | 0.069 |
Seager | Kyle | 0.0796 | 0.066 |
Aoki | Nori | 0.0795 | 0.0643 |
Walker | Neil | 0.0789 | 0.0706 |
Frazier | Todd | 0.0788 | 0.0634 |
Posey | Buster | 0.0777 | 0.0528 |
Ellsbury | Jacoby | 0.0773 | 0.0568 |
Brantley | Michael | 0.0769 | 0.0573 |
Span | Denard | 0.0752 | 0.0533 |
Freese | David | 0.0744 | 0.0612 |
Chisenhall | Lonnie | 0.0739 | 0.0625 |
Pence | Hunter | 0.0734 | 0.055 |
Gomez | Carlos | 0.0731 | 0.0721 |
Wright | David | 0.0717 | 0.055 |
Kendrick | Howie | 0.0715 | 0.0538 |
Gillaspie | Conor | 0.0711 | 0.0537 |
Calhoun | Kole | 0.071 | 0.0534 |
Desmond | Ian | 0.071 | 0.0587 |
Braun | Ryan | 0.0707 | 0.0581 |
Cabrera | Melky | 0.0695 | 0.0495 |
Pujols | Albert | 0.0691 | 0.052 |
Andrus | Elvis | 0.0681 | 0.0508 |
Butler | Billy | 0.068 | 0.052 |
Martin | Leonys | 0.0677 | 0.0508 |
Ozuna | Marcell | 0.067 | 0.048 |
Castro | Jason | 0.0665 | 0.0642 |
Brown | Domonic | 0.0664 | 0.0505 |
Bogaerts | Xander | 0.0659 | 0.0575 |
Hosmer | Eric | 0.064 | 0.0477 |
Mercer | Jordy | 0.0636 | 0.0506 |
Loney | James | 0.063 | 0.0464 |
Castellanos | Nick | 0.0622 | 0.0468 |
LeMahieu | DJ | 0.0621 | 0.0473 |
Morneau | Justin | 0.0618 | 0.0449 |
Castro | Starlin | 0.0615 | 0.0475 |
Navarro | Dioner | 0.0615 | 0.0429 |
Sandoval | Pablo | 0.0611 | 0.0456 |
Murphy | Daniel | 0.0607 | 0.0432 |
Marte | Starling | 0.0606 | 0.0651 |
McCann | Brian | 0.0595 | 0.0539 |
Ackley | Dustin | 0.0594 | 0.0481 |
Davis | Khris | 0.0583 | 0.0552 |
Reyes | Jose | 0.0582 | 0.0408 |
Infante | Omar | 0.0579 | 0.0428 |
Viciedo | Dayan | 0.0568 | 0.0492 |
Hamilton | Billy | 0.0565 | 0.042 |
Aybar | Erick | 0.0564 | 0.0429 |
Jeter | Derek | 0.0559 | 0.047 |
Simmons | Andrelton | 0.0557 | 0.0413 |
Byrd | Marlon | 0.0549 | 0.0484 |
Hill | Aaron | 0.0518 | 0.043 |
Hardy | JJ | 0.0512 | 0.0408 |
Segura | Jean | 0.0512 | 0.0432 |
Altuve | Jose | 0.051 | 0.0359 |
Blackmon | Charlie | 0.0483 | 0.0465 |
Dominguez | Matt | 0.0479 | 0.0417 |
Gordon | Dee | 0.0479 | 0.0371 |
Cozart | Zack | 0.0465 | 0.0464 |
Gomes | Yan | 0.0463 | 0.0343 |
Adams | Matt | 0.0462 | 0.0331 |
Hechavarria | Adeiny | 0.0457 | 0.0315 |
Rios | Alex | 0.0441 | 0.0304 |
Harrison | Josh | 0.0401 | 0.0313 |
Kinsler | Ian | 0.0401 | 0.0322 |
Ramirez | Aramis | 0.0395 | 0.0442 |
Hunter | Torii | 0.0392 | 0.0331 |
Johnson | Chris | 0.0378 | 0.0294 |
Escobar | Alcides | 0.0376 | 0.032 |
Ramirez | Alexei | 0.0366 | 0.0316 |
Perez | Salvador | 0.0363 | 0.0293 |
Jones | Adam | 0.0279 | 0.0298 |
Revere | Ben | 0.021 | 0.0185 |
So how do those numbers actually correlate?
That looks pretty good... but who are we, the old scouts from Moneyball? Let's do the numbers.
print("Correlation between BBPct and IBO:")
correlation <- cor(leaders$BBPct, leaders$IBO)
print(correlation)
[1] 0.9704839
correlation <- cor(leaders$BBPct, leaders$IBO)
print(correlation)
[1] 0.9704839
0.97 correlation. Yeah, that seems alright. So we can get a general sense of what IBO looks like (at least last year):
.090+ Among the league leaders
.065 Above average
.050 Middle of the pack
.040 Below average
.019 Ben Revere
EDIT: it occurs to me that quartiles might be a useful measure, and I figured out you can do it with a single command in R!
quantile(leaders$IBO)
[1] 0% 25% 50% 75% 100%
0.01850 0.04715 0.06150 0.08035 0.13410
0.01850 0.04715 0.06150 0.08035 0.13410
So that's nice, but can we use it to extrapolate walk rate?
Tune in next time!
* Ha! Double check on me when this gets up to BitBucket. I'm working on getting it ready to open source.
No comments:
Post a Comment