Aaron Judge and Cody Bellinger have had two of the most remarkable rookie seasons in modern memory. With Rhys Hoskins joining the party in August and hitting a ton of dingers as well, it’s worth delving into just how good these home run hitting rookies stack up historically.
The first thing we need to do is load the packages, the batting database, and add Judge and Bellinger to the dataframe.
Major League Baseball classifies rookies as players who have played in fewer than 45 games AND have not exceeded 130 at bats (batters) or 50 innings pitched (pitchers). To find each players rookie season, we’ll have to write an if statement based on these conditions. If a player has more than 45 games played or more than 130 at bats, that season will be there rookie season.
In order to apply the logical tests on numeric stats, we also have to coerce columns 6 through 22 to numeric instead of characters.
For ranking, we want to use dense_rank. If a player for some reason gets traded and plays for multiple teams, we want ties to be recorded in ranking and we also want the second year entry to be ranked as 2.
## # A tibble: 6 x 2
## playerID n
## <chr> <int>
## 1 anderbr01 2
## 2 barbeja01 2
## 3 bonilbo01 2
## 4 brownge01 2
## 5 burkeji01 2
## 6 canavji01 2
This brings up an interesting issue: what if a player had not played enough games to qualify as a rookie with one team (which we filtered out), but did play enough games overall in a season to qualify as a rookie? We need to go back and group by season and sum the stats prior to filtering.
To do this, we’ll have to remove the league and team information, which would conflict. Not that big of a deal since we can always go back to the original batting database to find that information. I’ll also add a name column to the data frame so we can actually tell who’s who.
## # A tibble: 6 x 20
## # Groups: playerID [6]
## playerID yearID stint G AB R H X2B X3B HR RBI
## <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 aardsda01 2006 1 45 2 0 0 0 0 0 0
## 2 aaronha01 1954 1 122 468 58 131 27 6 13 69
## 3 aaronto01 1962 1 141 334 54 77 20 2 8 38
## 4 aasedo01 1985 1 54 0 0 0 0 0 0 0
## 5 abadfe01 2014 1 69 0 0 0 0 0 0 0
## 6 abbated01 1903 1 136 489 61 111 18 5 1 46
## # ... with 9 more variables: SB <dbl>, CS <dbl>, BB <dbl>, SO <dbl>,
## # IBB <dbl>, HBP <dbl>, SH <dbl>, SF <dbl>, GIDP <dbl>
Now we’ve got the 18,914 rookie seasons that have occurred before year 2017 as well as the rookie years of Cody Bellinger, Aaron Judge, and Rhys Hoskins, who are all playing phenomenally well as rookies in 2017. All three are major power hitters (although Hoskins joined the party late, having only played 45 games so far in 2017). Let’s find the players with the highest number of home runs hit in their rookie season.
| Name | Year | Age | G | HR |
|---|---|---|---|---|
| Aaron Judge | 2017 | 25 | 155 | 52 |
| Mark McGwire | 1987 | 23 | 151 | 49 |
| Harmon Killebrew | 1959 | 23 | 153 | 42 |
| Cody Bellinger | 2017 | 22 | 132 | 39 |
| Wally Berger | 1930 | 24 | 151 | 38 |
| Frank Robinson | 1956 | 21 | 152 | 38 |
| Albert Pujols | 2001 | 21 | 161 | 37 |
| Al Rosen | 1950 | 26 | 155 | 37 |
| Jose Abreu | 2014 | 27 | 145 | 36 |
| Ron Kittle | 1983 | 25 | 145 | 35 |
| Mike Piazza | 1993 | 25 | 149 | 35 |
| Hank Sauer | 1948 | 31 | 145 | 35 |
| Hal Trosky | 1934 | 21 | 154 | 35 |
| Rudy York | 1937 | 24 | 104 | 35 |
| Ryan Braun | 2007 | 23 | 113 | 34 |
As we can see from the 10 best HR-hitting seasons by rookies, 2017 featured two of the best 10 seasons in Major League history. To factor in how good Rhys has been, we’ll compute some rate stats later on.
To give us some other useful comparative stats, let’s important WAR data from Baseball Reference.
There are a couple of cool stats that we can extract from the masterwar tbl. For those unfamiliar with sabermetrics, I’ll explain a couple of key concepts here:
WAR: Wins Above Replacement. The core concept WAR is attempting to measure is how much better than a player that would typically be available to replace a player. It compares the player in question to an average player, then compares the average player to a “replacement level” player. The sum of the two components gives us WAR.
The underlying system is based on calculating how the runs added or subtracted by a player during the course of a game contribute to the wins of a team. I won’t go too far into the weeds on how the stat is calculated, but a more advanced explanation of the calculation of WAR can be found here.
WAA: Wins Above Average. This is essentially just the first component of the WAR formula. It compares the number of wins added by the player to a league average player. Note: a league average player and a replacement level player are not the same thing; teams are willing to pay a lot of money to get an average player, while a replacement level player can essentially be picked up at a moments notice.
Some statisticians prefer WAA to WAR, because WAR rewards just showing up. When comparing great players, why compare to someone who could just barely make it out of Triple-A. They argue that, instead, we ought to compare the truly great players to the league-average player.
For position players (not pitchers): WAR = WAR_rep + WAA
oWAR and dWAR. This is the split between the offensive and defensive component of WAR. Note: These won’t add up to total WAR because the positional adjustment is double counted. Because certain positions on average are much worse at hitting (i.e. Shortstop and Catcher), a positional adjustment is applied so that, for example, a SS with an OPS of .800 is more valuable than a 1B with an OPS of .800. The positional adjustment is also applied to dWAR, but the positional adjustment is only counted once for total WAR.
oWAR = batting + positional_adjustment
dWAR = fielding + positional_adjustment
WAR = batting + fielding + positional_adjustment
Let’s start by examining the trajectory of their home runs over the course of the season.
This gives a pretty good visual representation of the hitting timeline for all three hitters. Bellinger got pretty close to challenging Judge at the beginning of September but just barely missed out on getting there. Hoskins is way behind both by virtue of being called up in August. Let’s see how the three rookies fared through their first 45 games (the exact number that Hoskins has played).
All pretty hot through their first 45 games, with all three averaging less than 3 games per homer. Although Hoskins had a substantial lead through his 32nd game and maintained the lead through game #45, he hasn’t hit a home run in a week and a half and seems to have plateaued at the end of the season.
Now let’s get into the real fun stuff. Comparing these rookies to some of the best rookie seasons of all time. First, we’ll compare them to the top 15 home run hitting seasons of all time (we’ll save Hoskins until we get into the rate stats, since his cumulative numbers aren’t on the level of the others).
Just based on slugging percentage and on base percentage, Judge appears leaps and bounds ahead of other rookies. He’s more than 20 points higher than the next highest rookie in OBP and only lower than two other rookies in terms of slugging percentage.
One thing I forgot to do was try and find some of the other “best” rookie seasons that might not have such high home run numbers because they didn’t play as many games. Let’s rank by HR/game to see if we missed any really special rookie seasons.
| Name | Age | HR | HR Rate |
|---|---|---|---|
| Gary Sanchez | 23 | 20 | 0.3773585 |
| Rhys Hoskins | 24 | 18 | 0.3600000 |
| Rudy York | 24 | 35 | 0.3365385 |
| Aaron Judge | 25 | 52 | 0.3354839 |
| Mark McGwire | 23 | 49 | 0.3245033 |
| Sam Horn | 23 | 14 | 0.3043478 |
| Ryan Braun | 23 | 34 | 0.3008850 |
| Cody Bellinger | 22 | 39 | 0.2954545 |
| Adam Dunn | 21 | 19 | 0.2878788 |
| Trevor Story | 23 | 27 | 0.2783505 |
Let’s try and generate a similar SLG vs. OBP plot for the top 25 rookie home run rates.
Judge is unbelievable when compared to the top 25 rookie seasons by Home Run rate. No one comes close to him in terms of On Base Percentage. Interestingly, his teammate, Gary Sanchez, has one of the three seasons with a higher slugging percentage than him.
Let’s return to the top 15 total HR seasons by rookies in Major League History and examine some of the sabermetrics.
| Name | WAR | WAR_off | WAR_def | Pos Adj |
|---|---|---|---|---|
| Jose Abreu | 5.52 | 7.07 | -1.56 | -0.495 |
| Cody Bellinger | 4.15 | 3.81 | 0.34 | -0.380 |
| Wally Berger | 4.19 | 4.19 | 0.00 | -0.260 |
| Ryan Braun | 2.00 | 5.05 | -3.05 | 0.070 |
| Aaron Judge | 8.08 | 7.49 | 0.60 | -0.285 |
| Harmon Killebrew | 4.22 | 5.12 | -0.90 | 0.125 |
Looks like we need to remove the Wally Berger season, as they were not tracking the necessary information to record defensive WAR in 1930.
Aaron Judge has had one of the best rookie seasons of all time and there’s no denying that, and almost certainly the best in terms of pure home run hitting. It might not be as good as the rookie season of the leaping trout, but it’s still pretty impressive.
Many argue (myself included) that Trout should have won the MVP for his rookie season performance and we can ask the same question about Judge: does he deserve to win AL MVP?
Let’s take a look at the top players in the American League in terms of Wins Above Replacement.
| Player | Games Played | WAR |
|---|---|---|
| Aaron Judge | 155 | 8.2 |
| Jose Altuve | 153 | 7.5 |
| Mike Trout | 114 | 6.9 |
| Jose Ramirez | 152 | 6.6 |
| Francisco Lindor | 159 | 5.9 |
| Mookie Betts | 153 | 5.3 |
The only players with WAR above 6 are Judge, Jose Altuve, Trout, and Jose Ramirez. Even though he played in 40 fewer games than the others, Trout still had 6.9 WAR which is incredible.
For the purposes of this exercise, let’s consider the top 4 the leading candidates for American League MVP and see how Judge stacks up. First, we’ll take a look at the WAR breakdown, using Baseball Reference’s WAR calculations instead of Fangraph’s which were used above.
Trout clearly has the most WAR per game by a longshot, although Judge still maintains a higher home run hitting pace. This comparison isn’t exactly fair to Altuve, though, who generates a lot of value from baserunning. The chart also doesn’t take into account Altuve’s batting average, which is significantly higher than the other candidates.
| Name | BsR | AVG | OBP | SLG | wOBA | wRC+ | WAR |
|---|---|---|---|---|---|---|---|
| Aaron Judge | 0.0 | 0.284 | 0.422 | 0.627 | 0.430 | 173 | 8.2 |
| Jose Altuve | 4.0 | 0.346 | 0.410 | 0.547 | 0.405 | 160 | 7.5 |
| Mike Trout | 4.0 | 0.306 | 0.442 | 0.629 | 0.437 | 181 | 6.9 |
| Jose Ramirez | -0.9 | 0.318 | 0.374 | 0.583 | 0.396 | 148 | 6.6 |
Even though Altuve’s average is much higher that statistic is much less significant than on-base percentage in quantifying a player’s ability to supply their team with baserunners. Judge had a higher OBP despite a much lower average and a much higher slugging percentage than Altuve (which we would expect).
BsR is one of the most comprehensive stats to measure base running, which measures the overall impact of baserunning ability relative to league average (where league average is zero). Even though Altuve had more stolen bases than any of the other candidates, his overall baserunning ability relative to league average is the same as Trout’s. To give perspective on the significance of a BsR of 4.0, 2 is considered Above Average, 6 is considered Great, and 8 is considered Excellent. The league leader in BsR is the Twins’ Byron Buxton with a BsR of 11.7 (the highest since the UBR component of BsR was introduced in 2002 is Mike Trout’s 14.1 in 2012). Also of note is that Judge’s baserunning ability is at league average, meaning he doesn’t really hurt his team out on the base paths.
wOBA is one of the most important statistics for capturing overall offensive contributions. On-base percentage can’t evaluate the value of different ways of getting on base, slugging percentage values a double as exactly twice as valuable as a single (which it really isn’t), and OPS assumes that one point of OBP is equivalent to one point of SLG. wOBA weights the different aspects of hitting into one metric based on their run value.
An average offensive player will have a wOBA around .320 (although this is not set in stone), with above average, great, and excellent players having a wOBA of .340, .370, and .400. Clearly all of the candidates are elite offensive players, but Trout and Judge far surpass the other two (again, the stat doesn’t take into account baserunning although Altuve is only a slightly above average baserunner). Since it is a rate statistic, Trout’s fewer games played are irrelevant, although his missed time does beg the question as to whether or not he would have sustained his elite wOBA throughout the year.
Weighted Runs Created Plus is also a rate statistic that is similar to wOBA except for the fact that it takes into account two additional things: the park a player plays in and the player’s performance relative to the league as a whole. If a player plays in a better hitter’s ballpark, it stands to reason that they ought to have a slightly higher wOBA than they would in a pitcher’s park. Furthermore, wRC+ is standardized based on the overall league performance, allowing us to compare players across different eras. A wRC+ of 100 always represents the league average, with anything above 160 being excellent. Trout again slightly edges Judge, and both players had the highest wRC+ in all of Major League Baseball.
Ultimately, Trout probably deserves the MVP award. He’s still the best player in baseball and it’s really not debatable. But the MVP award is about longevity and overall team success. Judge was able to sustain a season’s worth of success and help lead his team to the playoffs.