Contextualizing the Pirates’ Minor League Hitting Numbers

How do Kevin Kramer’s numbers stack up when regressed with BABIP and park factors? Photo by Aaron Doster/USA Today Sports
When it comes to minor league players, FanGraphs does a solid job of providing standard and advanced stats. Visit their Minor League Leaders page, and you’ll find pages of hitting numbers for players at every level of the minors.
Unfortunately, while the numbers are easy enough to find, they’re not as easy to draw conclusions from. These days, we’re used to numbers being contextualized: adjustments for season and for park and everything in between. When it comes to minor leaguers, though, the numbers are served about as raw as a sashimi tuna roll.
For example, if you look at the advanced tab, you’ll find that Kevin Kramer posted a wRC+ of 141, good enough for third among qualified AAA players and ahead of Christin Stewart, who last season was ranked the Detroit Tigers’ number three prospect by FanGraphs. Not bad, right?
Well, let’s take a closer look and see how those numbers hold up.
Park Adjustment
The first adjustment we need to make is for park factor. (If you’re unfamiliar with park factors, FanGraphs has a good explanation.) Simply put, park factors are a way to adjust a hitter’s performance for the stadium in which they played. The calculation is simple, based purely on runs scored at home and runs scored on the road.
After pulling that data from MiLB’s website (not an easy task), I was able to come up with park factors for AAA and AA teams. (Note: for purposes of this post, we’ll stick to the International and Eastern Leagues, since that is where the Pirates AAA and AA affiliates play.)
International League
TEAM | TM | Raw PF | PF |
Durham Bulls | TBR | 0.96 | 0.98 |
Indianapolis Indians | PIT | 0.91 | 0.96 |
Lehigh Valley IronPigs | PHI | 1.08 | 1.04 |
Columbus Clippers | CLE | 1.02 | 1.01 |
Norfolk Tides | BAL | 0.91 | 0.96 |
Louisville Bats | CIN | 0.93 | 0.96 |
Gwinnett Stripers | ATL | 1.07 | 1.04 |
Scranton/Wilkes-Barre RailRiders | NYY | 1.00 | 1.00 |
Buffalo Bisons | TOR | 1.02 | 1.01 |
Toledo Mud Hens | DET | 0.95 | 0.97 |
Syracuse Chiefs | WSN | 0.99 | 0.99 |
Pawtucket Red Sox | BOS | 1.00 | 1.00 |
Charlotte Knights | CHW | 1.12 | 1.06 |
Rochester Red Wings | MIN | 1.00 | 1.00 |
Eastern League
TEAM | TM | Raw PF | PF |
New Hampshire Fisher Cats | TOR | 0.98 | 0.99 |
Akron RubberDucks | CLE | 0.87 | 0.93 |
Bowie Baysox | BAL | 1.04 | 1.02 |
Erie SeaWolves | DET | 1.04 | 1.02 |
Harrisburg Senators | WSN | 1.00 | 1.00 |
Portland Sea Dogs | BOS | 0.99 | 0.99 |
Altoona Curve | PIT | 0.92 | 0.96 |
Reading Fightin Phils | PHI | 1.07 | 1.03 |
Binghamton Rumble Ponies | NYM | 0.95 | 0.97 |
Trenton Thunder | NYY | 0.97 | 0.99 |
Hartford Yard Goats | COL | 1.09 | 1.05 |
Richmond Flying Squirrels | SFG | 0.87 | 0.93 |
The raw single-season park factor is the first number. Since this is only one year of data, however, and because these things are prone to variance, I’ve also regressed 50% back to the mean of 1.00. I’ll be using the regressed numbers for all calculations.
Now, with park factor taken into account, we can adjust the wRC+ numbers. Here are the numbers for all Pirates AAA hitters with at least 200 plate appearances last season. The adjusted wRC+ is on the right.
I must note here that there’s some slight discrepancies between my original wRC+ numbers and FanGraphs’ numbers. Since they don’t publish their Minor League weights, I used their standard numbers and used an estimate based on a linear model to estimate the wOBA scale.
Name | PA | wRC+ | PF wRC+ |
Kevin Kramer | 527 | 142 | 147 |
Kevin Newman | 477 | 116 | 120 |
Pablo Reyes | 398 | 118 | 122 |
Jordan Luplow | 357 | 136 | 140 |
Jose Osuna | 342 | 146 | 150 |
Christopher Bostick | 327 | 122 | 127 |
Eric Wood | 308 | 130 | 134 |
Ryan Lavarnway | 303 | 146 | 150 |
Max Moroff | 297 | 110 | 114 |
Wyatt Mathisen | 282 | 109 | 114 |
Jacob Stallings | 278 | 110 | 114 |
Erich Weiss | 236 | 91 | 96 |
Jason Martin | 234 | 62 | 67 |
Jerrick Suiter | 219 | 68 | 73 |
Good news! Kramer’s numbers look even better now. Giddy-up.
Now for AA hitters:
Name | PA | wRC+ | PF wRC+ |
Cole Tucker | 589 | 95 | 99 |
Will Craig | 549 | 112 | 116 |
Ke’Bryan Hayes | 508 | 131 | 135 |
Stephen Alemais | 463 | 94 | 98 |
Logan Hill | 444 | 95 | 99 |
Jordan George | 392 | 100 | 104 |
Bryan Reynolds | 383 | 128 | 132 |
Christian Kelley | 347 | 89 | 93 |
Jason Martin | 289 | 150 | 155 |
Bralin Jackson | 219 | 49 | 53 |
The Ke’Bryan Hayes numbers are particularly encouraging.
Luck Adjustment
Let’s take our evaluation one step further. Here, again, are the AAA and AA numbers, but this time with one additional column: batting average on balls in play (BABIP).
Name | PA | wRC+ | PF wRC+ | BABIP |
Kevin Kramer | 527 | 142 | 147 | 0.392 |
Kevin Newman | 477 | 116 | 120 | 0.333 |
Pablo Reyes | 398 | 118 | 122 | 0.338 |
Jordan Luplow | 357 | 136 | 140 | 0.336 |
Jose Osuna | 342 | 146 | 150 | 0.353 |
Christopher Bostick | 327 | 122 | 127 | 0.367 |
Eric Wood | 308 | 130 | 134 | 0.335 |
Ryan Lavarnway | 303 | 146 | 150 | 0.338 |
Max Moroff | 297 | 110 | 114 | 0.270 |
Wyatt Mathisen | 282 | 109 | 114 | 0.285 |
Jacob Stallings | 278 | 110 | 114 | 0.343 |
Erich Weiss | 236 | 91 | 96 | 0.289 |
Jason Martin | 234 | 62 | 67 | 0.261 |
Jerrick Suiter | 219 | 68 | 73 | 0.303 |
And AA:
Name | PA | wRC+ | PF wRC+ | BABIP |
Cole Tucker | 589 | 95 | 99 | 0.310 |
Will Craig | 549 | 112 | 116 | 0.288 |
Ke’Bryan Hayes | 508 | 131 | 135 | 0.344 |
Stephen Alemais | 463 | 94 | 98 | 0.326 |
Logan Hill | 444 | 95 | 99 | 0.293 |
Jordan George | 392 | 100 | 104 | 0.293 |
Bryan Reynolds | 383 | 128 | 132 | 0.362 |
Christian Kelley | 347 | 89 | 93 | 0.270 |
Jason Martin | 289 | 150 | 155 | 0.396 |
Bralin Jackson | 219 | 49 | 53 | 0.291 |
As you can see, BABIP has a rather large influence on the wRC+ outcome. In fact, Kramer nearly hit .400 on balls in play last season! That likely plays a big part in his 142 wRC+.
So what happens to those numbers when we adjust for some measure of “luck”? By adjusting a player’s hits based on league-average BABIP, we can see just how much luck has inflated the raw numbers.
Last season, league-average BABIP in the Major Leagues was .296. In the International League, the average BABIP was .309, while average for the Eastern League was .307. It makes sense that those numbers would be higher for lower levels of baseball given defense and pitching talent discrepancies, though it’s hard to say why the AA level actually produced a lower BABIP number.
Now, after adjusting a player’s singles, doubles, and triples so that their BABIP falls in line with the league average, while maintaining the same ratio, we can recalculate wOBA, wRAA, and, of course, wRC+.
AAA Adjusted wRC+
Name | PA | wRC+ | PF wRC+ | LUCK wRC+ |
Kevin Kramer | 527 | 142 | 147 | 107 |
Kevin Newman | 477 | 116 | 120 | 104 |
Pablo Reyes | 398 | 118 | 122 | 107 |
Jordan Luplow | 357 | 136 | 140 | 125 |
Jose Osuna | 342 | 146 | 150 | 128 |
Christopher Bostick | 327 | 122 | 127 | 97 |
Eric Wood | 308 | 130 | 134 | 120 |
Ryan Lavarnway | 303 | 146 | 150 | 136 |
Max Moroff | 297 | 110 | 114 | 129 |
Wyatt Mathisen | 282 | 109 | 114 | 126 |
Jacob Stallings | 278 | 110 | 114 | 97 |
Erich Weiss | 236 | 91 | 96 | 105 |
Jason Martin | 234 | 62 | 67 | 92 |
Jerrick Suiter | 219 | 68 | 73 | 71 |
The luck-adjusted numbers for Kramer now look much more pedestrian. (In case you were wondering, Christin Stewart’s adjusted wRC+ is 147 after adjusting for park and BABIP luck.)
AA Adjusted wRC+
Name | PA | wRC+ | PF wRC+ | wRC+ |
Cole Tucker | 589 | 95 | 99 | 95 |
Will Craig | 549 | 112 | 116 | 125 |
Ke’Bryan Hayes | 508 | 131 | 135 | 116 |
Stephen Alemais | 463 | 94 | 98 | 89 |
Logan Hill | 444 | 95 | 99 | 108 |
Jordan George | 392 | 100 | 104 | 112 |
Bryan Reynolds | 383 | 128 | 132 | 108 |
Christian Kelley | 347 | 89 | 93 | 112 |
Jason Martin | 289 | 150 | 155 | 117 |
Bralin Jackson | 219 | 49 | 53 | 61 |
The Hayes numbers look less impressive now, but they offer a brighter outlook for Will Craig. Of course, it’s also worth noting in those comparisons that Craig is two years Hayes’ senior.
In short, while there is plenty of good data out there on baseball prospects, it’s always important to remember just how these numbers look when put into a wider context. A player’s park, as well as their luck, can play a large part in how good or bad they look. And while, over time, player’s may prove higher BABIP numbers are due more to skill than luck, it’s still worth keeping in mind when evaluating prospects.
This is awesome. I love what TPOP is doing to put some value/context towards MiLB statistics. I’ve always just casually brushed them off and devoted my time to scouting reports & scouting traits for prospects.
I do have one question. You mentioned that Will Craig is 2 years Hayes’ senior. Did you consider or have you considered factoring in age in relation to the average age for a league? That’s something I LOOK at, but haven’t necessarily attempted to quantify.
Not to speak for Brandon, but in Stat Scout Line I do account for age-relative-to-PROSPECT-level. So a prospect should be 20-21 in Low A, add a year for each level up. Not based on the average age of a player in that league, because there’s plenty of 23-24 year olds rolling around Low A that are not prospects and drag the average down.
Good stuff and I appreciate the first stab at trying to contextualize the Minor League numbers.
However the fact that Max Moroff gets such a large increase in his LuckwRC+ compared to his PFwRC+ just because his BABIP is so low compared to the league average tells me there’s room for future tweaking.
Perhaps there needs to be a graduated scale when it comes to the BABIP adjustment.
I agree, that ?s the next logical step. I used league average for a quick calculation, but for players with more history (like Moroff) it would make more sense to move that regression number closer to their career number.
Isn ?t BABIP very specific to each player, with meaningful variation from the mean? If so, seems like adjusting everyone using the same BABIP will dramatically discount production of guys that routinely have higher BABIPs, presumably because of their batter ball profile?
Yes and no. There can be deviations from the mean, but it can take a while before a player ?s ?true ? BABIP can be identified. For minor leaguers, most of which have only played a few seasons, it ?s hard to say with any real certainty what their true BABIP should be, so I used the league average as an approximation. Maybe Kramer ends up being a guy whose skill at the plate presents itself in a BABIP above the average, but for now, I think league average works as an approximation (in any event, I doubt he carries a .390 for his entire time in AAA).
Hope this makes sense.
Interesting.
If I am reading this correctly, then our top 2 hitters at Indy last year were: wait for it KC: Jose Osuna and Ryan Lavarnway. Osuna has been bashed on this site, and Lavarnway was left to sail into the sunset (or is it out to the sunset?). Yes, Lavarnway was an older player, however I would argue that he was/is a better choice then Stallings. And Osuna, who has followed the path the Pirates have asked him to follow (from pitcher to first base to outfield to third base) has found himself blocked by every new toy that Huntington acquires (Bell/Moran/Kang/Chisenhall/Cabrera)even though he is better defensively than Bell/Moran/Cabrera at their respective positions. And it has been shown that Osuna hits better the more he plays, yet he has not gotten that chance to do so.
It seems to me that we have a potentially good major league player that is just going to waste.
Lavarnway is 31. He’s a career .208/.268/.326 hitter in the Majors. His wRC+ is 59. It’s established that he’s not good. I would have liked him as depth at AAA, but he wanted to explore other options in a vain attempt to reach the Majors.
Osuna is 26. He’s a career .231/.263/.417 hitter in the Majors. His wRC+ is 77.
Both of these guys are the textbook definition of Quad-A players – good in Triple, can’t translate in the Majors.