Pages

Saturday, April 19, 2014

2014 NBA Playoffs 1st Round Preview

jQuery UI Accordion - Default functionality This is my first attempt at building a simple model for estimating NBA playoff series.  The idea was inspired by colts18 on the APBR forums.  The model is based off of the xRAPM numbers on ESPN (where it's called "real plus minus"), which are supposedly the most predictive of the all-in-one metrics for NBA games.  I utilized my own minutes estimates for each series (subjectively based on regular season minutes, an increase  for each team's top players in the playoffs, and potential matchup adjustments I expect each coach to employ) to calculate each team's offensive and defensive rating (the league average points per possession is set to 104 by weighting each team's offensive/defensive rating by each team's pace).  Then, I assumed 100 possessions per game (which is most definitely not true) and a home court advantage of four points (divided evenly between offensive and defense, so 1 point per team per side of the ball) to calculate each team's Pythagorean win percentage at home and on the road, and used Bill James' Log 5 formula for estimating a matchup based on each team's win%.  Finally, assuming games are independent (which, again, is also not true), each permutation was considered to calculate a team's series win percentage.  All of the computation was done in R and the script I ran will be included as well.  I will then comment on any other subjective observations for each series.


Series Previews:

East: (1) Indiana vs. (8) Atlanta

Model Vegas*
Game 1 Probability IND: 76% / ATL: 24% IND: -370 / +285
Game 1 Spread IND: -8.1 / ATL: +8.1 IND: -7.5 (-115) / ATL: +7.5 (-105)
Series Probability IND: 81% / ATL: 19% IND: -650 / ATL: +425

Atlanta is nowhere near as bad as the mainstream media thinks, as they are significantly better than Charlotte (they just experienced a lot more injuries during the regular season that caused them to lose more games).  Atlanta also likely presents a lot of matchup issues for Indiana.  They had a lot of success in their regular season meetings by bringing Hibbert out onto three-point shooters like Antic, and Indiana experienced similar problems against Phoenix and Channing Frye in two games; similarly, Atlanta is not very dependent on shots at the rim as Teague, Millsap, and Louis Williams utilize floaters and essentially everyone else is a shooter, and that further neutralizes Hibbert's effectiveness.  In addition, my model does not adjust for season trends, so even though Indiana still looks decent over the entire year, they've been frighteningly bad for a while.  As a result, I would likely adjust my model significantly, by about two to three points each game, which would increase the Hawks' Game 1 Probability to 34% and their series probability to around 39%.  Given that without adjustments my model essentially agrees with Vegas and all of the adjustments are signficantly in Atlanta's favor, I'd feel relatively confident betting on Atlanta.

East: (2) Miami vs. (7) Charlotte

Model Vegas*
Game 1 Probability MIA: 89% / CHA: 11% MIA: -650 / CHA: +425
Game 1 Spread MIA: -16.0 / CHA: +16.0 MIA: -10 / CHA: +10
Series Probability MIA: 98% / CHA: 2% MIA: OFF / CHA: OFF

Charlotte is significantly worse than Miami in terms of talent, as Miami has four players (LeBron, Bosh, Andersen, Wade) with xRAPM values at or above Charlotte's highest player (Jefferson).  Jefferson, Walker, Henderson, and McRoberts will likely get their minutes (although it might not be a bad idea to play a better shooting and more mobile Toliver over McRoberts), but the question will be who defends LeBron.  Kidd-Gilchrist will probably get the first, second, and third opportunities, and while he's generally a good player, his lack of offense will be a killer against a roaming LeBron and he's just not strong enough to defend LeBron.  Personally, I would use Tolliver on LeBron as much as possible (as a Diaw/Bass facsimile) and just hand LeBron wide open jumpers, and I would ideally surround him and Jefferson with as many shooters as possible (three of Walker, Henderson, Neal, Douglas-Roberts).  Tolliver didn't play much near the end of the season, but my guess is that he'll play at least 20 mpg given just how few big wings the Bobcats have to defend LeBron.  Schematically, Charlotte has it's bigs (namely Jefferson) hang back on pick-and-rolls in a similar manner to Indiana, but Jefferson just isn't quick or big enough to challenge LeBron's drives when he gets a head of steam.  I would probably be wary of my model's estimates for enormous mismatches as it's unclear to me how well xRAPM performs at such extremes, but given that I believe this is a bad matchup for Charlotte, I would still be very confident betting on the Heat.

East: (3) Toronto vs. (6) Brooklyn

Model Vegas*
Game 1 Probability TOR: 58% / BKN: 42% TOR: -160 / BKN: +140
Game 1 Spread TOR: -2.5 / BKN: +2.5 TOR: -3.5 / BKN: +3.5
Series Probability TOR: 43% / BKN: 57% TOR: +115 / BKN: -135

There are a number of injury questions in this series, and it would help significantly if I could provide more confident minutes estimates for Amir Johnson, Garnett, and Deron Williams.  Ideally, the main bigs for Toronto should be Johnson and Patterson (Patterson is a much better player than Valanciunas), but there is no way this actually happens so I still estimated Valanciunas to average 25 mpg to Patterson's 20.  One matchup issue with this series is that Brooklyn's big perimeter players will have a significant advantage in the post (while isolation postups are generally inefficient plays and any increased efficiency in postups is often counteracted by an increased dependence on postups, this is a huge portion of Brooklyn's offense anyways so the size advantage is mostly positive); on the other end, the similarity in size between Brooklyn's bigs and their smalls will likely allow them to liberally switch Toronto's pick-and-rolls.  As a result, I would likely adjust the model's numbers slightly in the Nets' favor, by about one point each game, which would increase the Nets' Game 1 Probability to 46% and their series probability to around 65%.  Even given the Nets' name recognition perhaps inflating their price, I'd feel relatively confident betting on Brooklyn.

East: (4) Chicago vs. (5) Washington

Model Vegas*
Game 1 Probability CHI: 67% / WAS: 33% CHI: -200 / WAS: +170
Game 1 Spread CHI: -5.1 / WAS: +5.1 CHI: -5 (-105) / WAS: +5 (-115)
Series Probability CHI: 63% / WAS: 37% CHI: -210 / WAS: +175

This will be an interesting series because of the matchups between each team's strengths.  Wall's biggest skill is through attacking the rim off pick-and-rolls and finding teammates for open threes, but Chicago doesn't help much off of shooters, because their perimeter defenders (besides Augustin) are extremely good at staying attached to the ball handler and bothering them from behind with their length and their bigs are extremely good at containing the both the ball handler and the roller with their length and quickness.  Chicago always plays two true bigs and their bigs are usually either too big or too quick for opposing bigs to keep from the offensive glass, but two of Washington's best players are Gortat and Nene who might be the rare pair capable of matching up with Chicago's bigs.  Chicago needs Augustin on the floor as much as possible on offense, but there isn't really anyone for him to defend besides Webster.  The Bulls have essentially been playing a playoff rotation the entire season already,so in a sense, they've already reached their ceiling; Washington, on the other hand, has a clear top three of Wall, Gortat, and Nene, and minutes increases for the trio could make Washington better than they were in the regular season.  I've estimated Nene will play 28 mpg, but this series could depend on how healthy Nene is and how many minutes he can play.

West: (1) San Antonio vs. (8) Dallas

Model Vegas*
Game 1 Probability SAS: 79% / DAL: 21% SAS: -550 / DAL: +375
Game 1 Spread SAS: -9.7 / DAL: +9.7 SAS: -9 / DAL: +9
Series Probability SAS: 88% / DAL: 12% SAS: -900 / DAL: +550

It took Rick Carlisle the whole season, but he finally began giving Harris and Wright more minutes at the expense of Calderon and Dalembert.  Wright's biggest issue has been that he often gets pushed around in post defense and defensive rebounding, so Carlisle might still depend a lot on Dalembert against Duncan.  With Leonard playing the majority of the Spurs' SF minutes, it will be difficult for Calderon and Ellis to share the floor much, as one of them will have to guard Parker and Carlisle can't hide one of them on Leonard with Marion guarding Parker.  As a result, Harris, Carter, and Marion will likely split most of the two remaining perimeter spots around Ellis.  On the Spurs side, the minutes distribution won't matter much.  Their only two negative players during the regular season were Belinelli and Joseph, and Joseph likely will not play much during this series.  Personally, I've always been of the opinion that if a team doesn't have the athleticism to scare the Spurs off their threes on closeouts, the easiest way to compete is to maximize offense in their lineups and simply surrender pullup Parker 18-foot jumpers by not overhelping and hoping to just bother him with length from his on-ball defender, so it'll certainly be interesting to see how the Mavs do when/if they play their Harris/Crowder, Ellis, Carter, Nowitzki, Wright lineups.

West: (2) Oklahoma City vs. (7) Memphis

Model Vegas*
Game 1 Probability OKC: 69% / MEM: 31% OKC: -350 / MEM: +275
Game 1 Spread OKC: -6.2 / MEM: +6.2 OKC: -7 (-115) / MEM: +7 (-105)
Series Probability OKC: 68% / MEM: 32% OKC: -500 / MEM: +350

Calathes will likely not impact the series as much as some expect as he's been a negative player on the year and Prince/Lee are good enough ball handlers to not force Memphis to play Udrih too much.  The biggest variable in this series is Scott Brooks.  If he manages minutes correctly, Oklahoma City is a much bigger favorite.  Specifically, Perkins (and Adams) should not play much, and Durant should play PF whenever either Randolph or Gasol are out of the game.  Collison has historically defended Randolph extremely well (big surprise...) so his minutes should be maximized to the point that he fouls out every game.  Caron Butler should almost never play over Jackson, Sefolosha, Lamb, or Fisher (yes, even Fisher), especially given that none of Memphis' wings are big offensive creators.  In reality, I don't expect many (if any) of these things to happen, and as a result, Perkins, Adams, and Butler are estimated to average 20, 10, and 18 mpg respectively.  On the Grizzlies' side, either Allen or Prince should be on the floor anytime Durant is but ideally never together.  Anytime Gasol or Randolph are on the bench and Oklahoma City downsizes, Memphis should downsize as well instead of resorting to too much Koufos or any Ed Davis.  Overall, I have some confidence that Brooks will eventually realize the Thunder should play Durant at PF whenever they can, which means their series chances should likely be higher than 68%.  Still, I would bet on Memphis, especially early in the series.

West: (3) L.A. Clippers vs. (6) Golden State

Model Vegas*
Game 1 Probability LAC: 66% / GSW: 34% LAC: -330 / GSW: +265
Game 1 Spread LAC: -5.6 / GSW: 5.6 LAC: -7 / GSW: +7
Series Probability LAC: 62% / GSW: 38% LAC: -390 / GSW: +295

Along with the Rockets-Blazers, this is the matchup with the second largest discrepancy between my model and Vegas.  Ideally the Warriors would play four perimeter players almost all of the time (with Harrison Barnes and Draymond Green counting as perimeter players), but I don't have much confidence that Mark Jackson will do so, and as a result I split the difference and estimated that Lee, O'Neal, and Speights will average a combined 63 mpg.  On the Clippers' side, both Redick and Jamal Crawford are coming off injuries and it's unclear exactly how much they'll play, but luckily, most of the Clippers' rotation players outside of their top four (anyone other than Paul, Griffin, DeAndre Jordan, and Matt Barnes) are very similar in overall ability.  The Clippers love to go small in their backcourt (with two of Paul, Collison, and Crawford), which could be an issue defensively in the post against Thompson, Iguodala, and Harrison Barnes, but none of those three players are great postup players, and this could trick Mark Jackson and the Warriors into forcing isolations against mismatches instead of running their highly efficient motion pick-and-roll sets.  Overall, the Bogut injury likely doesn't hurt the Warriors as much as the public expects, which is why I would have significant confidence betting on the Warriors.

West: (4) Houston vs. (5) Portland

Model Vegas*
Game 1 Probability HOU: 72% / POR: 28% HOU: -230 / POR: +190
Game 1 Spread HOU: -6.9 / POR: +6.9 HOU: -5.5 / POR: +5.5
Series Probability HOU: 74% / POR: 26% HOU: -220 / POR: +180

There are a bunch of interesting matchups and playing time questions regarding this series.  First off, both Beverley and Howard have been injured recently, and Houston needs both to be healthy.  In Beverley's case, it's because he's by far their best option next to Harden, especially in a series against Lillard.  In Howard's case, it's not so much because he's a significantly better option than Asik but because the drop off after Howard and Asik is steep (although for this matchup specifically, Howard might have more of an impact because Lopez has had no success historically defending Howard, and it will be an issue if he gets into foul trouble given the limitations of the Blazers backup big men).  On the other side, Terrence Jones has had little success defending Aldridge.  Jones is an example of the type of player that many fans' eye tests judge incorrectly; in reality, his lack of defensive-help awareness and rim protection makes him just as poor of a defensive option as their actual small-ball power forward options like Casspi, and his still limited three-point shooting makes him a much worse offensive option.  During the last matchup, Houston was willing to let Aldridge postup one-on-one against any defender to limit three-point kickouts, even if the defender was someone like Casspi, Parsons, or Harden.  Howard has had success defending Aldridge's postups, but the tradeoff is that it keeps Howard away from the rim and limits his rim protection and Lopez is an extremely good offensive rebounder that could abuse any other matchup.  Personally, I would limit Jones' minutes in favor of small ball options like Garcia, Casspi, or Hamilton, and live with Aldridge postups or have Howard defend some of them.  If Aldridge is forced to settle for many two-point jumpers, Houston's three-point attack should be much more efficient.  This is especially true given that Portland might not have the personnel to deal with Houston's pick-and-roll.&nbsp Lopez likes to hang back on pick-and-rolls but he doesn't have the width of Hibbert or Bogut to bother drivers nor the lateral quickness to stay in front, and Harden is very skilled at either shooting the three or attacking the backpedaling big with his variety of change of direction moves.&nbsp Because of both the overall talent disparity and the matchup issues Houston offers Portland, I'd feel relatively confident betting on Houston.
*All Vegas numbers from Bovada


Potential future areas of improvements:

1) Determine a more systematic method for estimating minutes, potentially involving a combination of regular season averages, past playoff minutes/minutes increases, and minutes during the regular season series.
2) Research home court advantage.  The four points adjustment is currently based on a quick google search, and could be inaccurate.  Furthermore, home court advantage could affect matchups differently, depending on the relative team strengths.  Using a constant point differential adjustment means that closely matched teams are affected significantly more in terms of win percentage, and using a constant win percentage adjustment means that closely matched teams are affected significantly less in terms of point differential.  The most accurate adjustment could be something in between.
3) Use an actual estimate for number of possessions that would likely involve the average possessions per game for each team.  Obviously, the prediction should be somewhere in between the two teams' averages, but slower teams could affect pace more than faster teams or vice versa.  This is similar to the idea that batter/pitcher pace might not just be an arithmetic mean of each member's averages.
4) Examine the dependency of individual games of a series.  Conceptually, injuries/adjustments during one game should affect the subsequent games in the series.
5) Backtest how the model would have done in predicting prior playoffs.  This would likely require xRAPM numbers for regular seasons only (which might not exist if Jeremias Engelmann updates previous season numbers to include the playoffs).  Furthermore, a non-subjective minutes estimate would also be needed first, as any subjective estimate would be influenced by hindsight.
6) Attempt a similar endeavor for estimating regular season win% prior to the season that uses Monte Carlo simulations for each team's entire schedule.


List of minutes estimates and xRAPM ratings:

Show/Hide


     Spurs:

player minutes orpm drpm rpm onet dnet net
Boris Diaw 22 0.55 1.45 2.00 0.25 0.66 0.92
Cory Joseph 5 -0.83 -3.38 -4.21 -0.09 -0.35 -0.44
Danny Green 25 0.68 2.61 3.29 0.35 1.36 1.71
Kawhi Leonard 38 0.58 1.84 2.42 0.46 1.46 1.92
Manu Ginobili 30 4.66 -0.11 4.55 2.91 -0.07 2.84
Marco Belinelli 15 1.03 -2.94 -1.91 0.32 -0.92 -0.60
Matt Bonner 5 2.05 0.37 2.42 0.21 0.04 0.25
Patty Mills 10 2.70 0.50 3.20 0.56 0.10 0.67
Tiago Splitter 20 -0.92 4.59 3.67 -0.38 1.91 1.53
Tim Duncan 35 -0.10 5.37 5.27 -0.07 3.92 3.84
Tony Parker 35 3.16 -0.07 3.09 2.30 -0.05 2.25

     Mavericks:
player minutes orpm drpm rpm onet dnet net
Brandan Wright 22 1.74 -0.48 1.26 0.80 -0.22 0.58
DeJuan Blair 5 -2.21 0.11 -2.10 -0.23 0.01 -0.22
Devin Harris 30 1.92 -0.38 1.54 1.20 -0.24 0.96
Dirk Nowitzki 38 4.48 2.01 6.49 3.55 1.59 5.14
Jae Crowder 10 -0.05 1.75 1.70 -0.01 0.36 0.35
Jose Calderon 18 1.43 -3.67 -2.24 0.54 -1.38 -0.84
Monta Ellis 42 3.10 -1.34 1.76 2.71 -1.17 1.54
Samuel Dalembert 15 -3.51 3.08 -0.43 -1.10 0.96 -0.13
Shawn Marion 30 -1.79 0.68 -1.11 -1.12 0.43 -0.69
Vince Carter 30 1.98 2.04 4.02 1.24 1.28 2.51

     Thunder:
player minutes orpm drpm rpm onet dnet net
Caron Butler 18 -0.75 -3.61 -4.36 -0.28 -1.35 -1.64
Derek Fisher 22 -1.14 2.00 0.86 -0.52 0.92 0.39
Jeremy Lamb 5 -0.49 -0.79 -1.28 -0.05 -0.08 -0.13
Kendrick Perkins 20 -7.12 2.73 -4.39 -2.97 1.14 -1.83
Kevin Durant 45 6.36 0.17 6.53 5.96 0.16 6.12
Nick Collison 18 2.75 3.40 6.15 1.03 1.28 2.31
Reggie Jackson 20 0.81 0.50 1.31 0.34 0.21 0.55
Russell Westbrook 35 4.30 0.19 4.49 3.14 0.14 3.27
Serge Ibaka 32 0.88 3.03 3.91 0.59 2.02 2.61
Steven Adams 10 -2.68 -0.93 -3.61 -0.56 -0.19 -0.75
Thabo Sefolosha 15 -1.14 2.29 1.15 -0.36 0.72 0.36

     Grizzlies:
player minutes orpm drpm rpm onet dnet net
Beno Udrih 5 0.38 -1.61 -1.23 0.04 -0.17 -0.13
Courtney Lee 25 0.42 -0.52 -0.10 0.22 -0.27 -0.05
James Johnson 10 -1.94 0.55 -1.39 -0.40 0.11 -0.29
Kosta Koufos 10 -1.75 2.63 0.88 -0.36 0.55 0.18
Marc Gasol 40 -1.53 5.39 3.86 -1.28 4.49 3.22
Mike Conley 42 4.43 0.45 4.88 3.88 0.39 4.27
Mike Miller 20 1.84 -3.10 -1.26 0.77 -1.29 -0.53
Tayshaun Prince 23 -1.51 0.21 -1.30 -0.72 0.10 -0.62
Tony Allen 25 -0.64 2.91 2.27 -0.33 1.52 1.18
Zach Randolph 40 1.45 0.74 2.19 1.21 0.62 1.83

     Clippers:
player minutes orpm drpm rpm onet dnet net
Blake Griffin 42 2.58 1.88 4.46 2.26 1.65 3.90
Chris Paul 40 5.44 1.84 7.28 4.53 1.53 6.07
Danny Granger 5 0.30 0.70 1.00 0.03 0.07 0.10
Darren Collison 15 1.48 -3.00 -1.52 0.46 -0.94 -0.48
DeAndre Jordan 36 0.68 3.60 4.28 0.51 2.70 3.21
Glen Davis 10 -3.08 2.00 -1.08 -0.64 0.42 -0.23
Hedo Turkoglu 5 -0.96 0.24 -0.72 -0.10 0.03 -0.08
J.J. Redick 22 2.98 -2.96 0.02 1.37 -1.36 0.01
Jamal Crawford 25 1.55 -2.31 -0.76 0.81 -1.20 -0.40
Jared Dudley 10 -0.76 0.24 -0.52 -0.16 0.05 -0.11
Matt Barnes 30 2.14 0.58 2.72 1.34 0.36 1.70

     Warriors:
player minutes orpm drpm rpm onet dnet net
Andre Iguodala 36 1.94 5.01 6.95 1.46 3.76 5.21
David Lee 35 -0.12 1.17 1.05 -0.09 0.85 0.77
Draymond Green 27 -0.89 3.98 3.09 -0.50 2.24 1.74
Harrison Barnes 20 -2.73 -0.28 -3.01 -1.14 -0.12 -1.25
Jermaine O'Neal 20 -3.47 2.44 -1.03 -1.45 1.02 -0.43
Jordan Crawford 3 -0.29 -2.48 -2.77 -0.02 -0.16 -0.17
Klay Thompson 40 2.61 -0.03 2.58 2.18 -0.03 2.15
Marreese Speights 8 -5.00 -0.65 -5.65 -0.83 -0.11 -0.94
Stephen Curry 42 6.41 -0.38 6.03 5.61 -0.33 5.28
Steve Blake 9 -1.23 -0.16 -1.39 -0.23 -0.03 -0.26

     Rockets:
player minutes orpm drpm rpm onet dnet net
Chandler Parsons 40 1.35 0.58 1.93 1.13 0.48 1.61
Donatas Motiejunas 10 -1.35 0.46 -0.89 -0.28 0.10 -0.19
Dwight Howard 36 -0.72 5.14 4.42 -0.54 3.86 3.32
Francisco Garcia 10 -2.50 0.44 -2.06 -0.52 0.09 -0.43
James Harden 40 5.90 -2.73 3.17 4.92 -2.28 2.64
Jeremy Lin 22 0.04 0.19 0.23 0.02 0.09 0.11
Jordan Hamilton 5 -1.79 -1.21 -3.00 -0.19 -0.13 -0.31
Omer Asik 11 -2.34 4.99 2.65 -0.54 1.14 0.61
Omri Casspi 15 -2.61 0.25 -2.36 -0.82 0.08 -0.74
Patrick Beverley 35 3.21 1.54 4.75 2.34 1.12 3.46
Terrence Jones 16 0.42 -2.07 -1.65 0.14 -0.69 -0.55

     Blazers:
player minutes orpm drpm rpm onet dnet net
C.J. McCollum 5 0.03 -0.66 -0.63 0.00 -0.07 -0.07
Damian Lillard 40 4.31 -2.03 2.28 3.59 -1.69 1.90
Dorell Wright 10 -0.86 -0.94 -1.80 -0.18 -0.20 -0.38
LaMarcus Aldridge 40 1.73 3.17 4.90 1.44 2.64 4.08
Meyers Leonard 5 -4.22 -0.98 -5.20 -0.44 -0.10 -0.54
Mo Williams 25 0.28 -2.66 -2.38 0.15 -1.39 -1.24
Nicolas Batum 40 1.47 -1.19 0.28 1.23 -0.99 0.23
Robin Lopez 35 -0.29 3.38 3.09 -0.21 2.46 2.25
Thomas Robinson 2 -2.37 -2.03 -4.40 -0.10 -0.08 -0.18
Wesley Matthews 38 1.54 -0.89 0.65 1.22 -0.70 0.51

     Pacers:
player minutes orpm drpm rpm onet dnet net
C.J. Watson 20 0.39 -0.40 -0.01 0.16 -0.17 0.00
David West 35 0.98 2.33 3.31 0.71 1.70 2.41
Evan Turner 16 -1.14 -1.12 -2.26 -0.38 -0.37 -0.75
George Hill 35 2.00 0.60 2.60 1.46 0.44 1.90
Ian Mahinmi 18 -4.85 4.05 -0.80 -1.82 1.52 -0.30
Lance Stephenson 36 0.79 -0.04 0.75 0.59 -0.03 0.56
Luis Scola 12 -3.27 0.76 -2.51 -0.82 0.19 -0.63
Paul George 40 0.03 2.49 2.52 0.03 2.08 2.10
Roy Hibbert 28 -0.94 3.68 2.74 -0.55 2.15 1.60

     Hawks:
player minutes orpm drpm rpm onet dnet net
Cartier Martin 7 -2.33 -0.52 -2.85 -0.34 -0.08 -0.42
DeMarre Carroll 38 1.37 1.96 3.33 1.08 1.55 2.64
Elton Brand 12 -2.82 1.92 -0.90 -0.71 0.48 -0.23
Jeff Teague 35 0.08 -0.79 -0.71 0.06 -0.58 -0.52
Kyle Korver 36 2.46 0.50 2.96 1.85 0.38 2.22
Louis Williams 18 1.75 -3.72 -1.97 0.66 -1.40 -0.74
Mike Muscala 6 -3.27 -1.35 -4.62 -0.41 -0.17 -0.58
Mike Scott 15 -2.00 -2.65 -4.65 -0.63 -0.83 -1.45
Paul Millsap 40 0.20 2.00 2.20 0.17 1.67 1.83
Pero Antic 20 -1.21 1.70 0.49 -0.50 0.71 0.20
Shelvin Mack 13 0.51 -1.16 -0.65 0.14 -0.31 -0.18

     Heat:
player minutes orpm drpm rpm onet dnet net
Chris Andersen 18 0.42 3.99 4.41 0.16 1.50 1.65
Chris Bosh 38 0.29 3.70 3.99 0.23 2.93 3.16
Dwyane Wade 32 1.23 0.87 2.10 0.82 0.58 1.40
LeBron James 40 8.72 -0.16 8.56 7.27 -0.13 7.13
Mario Chalmers 35 0.54 1.03 1.57 0.39 0.75 1.14
Michael Beasley 2 -2.94 -2.89 -5.83 -0.12 -0.12 -0.24
Norris Cole 12 -1.60 -1.87 -3.47 -0.40 -0.47 -0.87
Rashard Lewis 8 -2.34 -0.72 -3.06 -0.39 -0.12 -0.51
Ray Allen 20 2.03 -2.77 -0.74 0.85 -1.15 -0.31
Shane Battier 17 -0.29 1.36 1.07 -0.10 0.48 0.38
Toney Douglas 6 0.25 -1.62 -1.37 0.03 -0.20 -0.17
Udonis Haslem 12 -4.21 1.60 -2.61 -1.05 0.40 -0.65

     Bobcats:
player minutes orpm drpm rpm onet dnet net
Al Jefferson 38 1.15 1.00 2.15 0.91 0.79 1.70
Anthony Tolliver 22 -0.16 2.29 2.13 -0.07 1.05 0.98
Bismack Biyombo 5 -3.82 -0.29 -4.11 -0.40 -0.03 -0.43
Chris Douglas-Roberts 13 -0.77 0.20 -0.57 -0.21 0.05 -0.15
Cody Zeller 10 -2.95 1.09 -1.86 -0.61 0.23 -0.39
Gary Neal 17 0.64 -4.65 -4.01 0.23 -1.65 -1.42
Gerald Henderson 35 -1.54 -0.89 -2.43 -1.12 -0.65 -1.77
Josh McRoberts 32 -0.17 0.46 0.29 -0.11 0.31 0.19
Kemba Walker 38 0.76 0.86 1.62 0.60 0.68 1.28
Luke Ridnour 5 -1.24 -2.73 -3.97 -0.13 -0.28 -0.41
Michael Kidd-Gilchrist 25 -0.77 1.84 1.07 -0.40 0.96 0.56

     Raptors:
player minutes orpm drpm rpm onet dnet net
Amir Johnson 27 1.75 3.42 5.17 0.98 1.92 2.91
Chuck Hayes 5 -1.71 2.26 0.55 -0.18 0.24 0.06
DeMar DeRozan 40 0.39 -0.48 -0.09 0.33 -0.40 -0.08
Greivis Vasquez 18 1.31 -0.82 0.49 0.49 -0.31 0.18
John Salmons 15 -1.45 0.07 -1.38 -0.45 0.02 -0.43
Jonas Valanciunas 25 -2.00 -0.11 -2.11 -1.04 -0.06 -1.10
Kyle Lowry 38 3.76 0.05 3.81 2.98 0.04 3.02
Nando de Colo 5 -1.69 -1.36 -3.05 -0.18 -0.14 -0.32
Patrick Patterson 20 0.31 0.90 1.21 0.13 0.38 0.50
Steve Novak 5 2.07 -0.44 1.63 0.22 -0.05 0.17
Terrence Ross 30 0.75 -2.09 -1.34 0.47 -1.31 -0.84
Tyler Hansbrough 12 -2.97 -0.04 -3.01 -0.74 -0.01 -0.75

     Nets:
player minutes orpm drpm rpm onet dnet net
Alan Anderson 7 -0.88 -1.64 -2.52 -0.13 -0.24 -0.37
Andray Blatche 5 -0.54 -0.04 -0.58 -0.06 0.00 -0.06
Andrei Kirilenko 25 -0.72 1.16 0.44 -0.38 0.60 0.23
Deron Williams 35 4.69 -1.86 2.83 3.42 -1.36 2.06
Joe Johnson 38 3.39 -1.08 2.31 2.68 -0.86 1.83
Jorge Gutierrez 2 -2.11 -1.27 -3.38 -0.09 -0.05 -0.14
Kevin Garnett 25 -2.86 6.57 3.71 -1.49 3.42 1.93
Marcus Thornton 15 -0.12 -1.96 -2.08 -0.04 -0.61 -0.65
Mason Plumlee 18 -0.90 -1.34 -2.24 -0.34 -0.50 -0.84
Mirza Teletovic 15 -0.28 -2.16 -2.44 -0.09 -0.68 -0.76
Paul Pierce 30 -0.62 3.14 2.52 -0.39 1.96 1.58
Shaun Livingston 25 -0.18 0.27 0.09 -0.09 0.14 0.05

     Bulls:
player minutes orpm drpm rpm onet dnet net
Carlos Boozer 25 -4.09 -0.04 -4.13 -2.13 -0.02 -2.15
D.J. Augustin 28 -0.06 -4.02 -4.08 -0.04 -2.35 -2.38
Jimmy Butler 40 0.93 1.37 2.30 0.78 1.14 1.92
Joakim Noah 42 0.68 3.88 4.56 0.60 3.40 3.99
Kirk Hinrich 30 -1.58 1.31 -0.27 -0.99 0.82 -0.17
Mike Dunleavy 35 1.42 2.07 3.49 1.04 1.51 2.54
Nazr Mohammed 5 -4.95 1.64 -3.31 -0.52 0.17 -0.34
Taj Gibson 32 0.43 3.57 4.00 0.29 2.38 2.67
Tony Snell 3 -3.95 -1.66 -5.61 -0.25 -0.10 -0.35

     Wizards:
player minutes orpm drpm rpm onet dnet net
Al Harrington 6 -0.29 0.22 -0.07 -0.04 0.03 -0.01
Andre Miller 10 1.80 0.12 1.92 0.38 0.03 0.40
Bradley Beal 37 -0.86 -0.08 -0.94 -0.66 -0.06 -0.72
Drew Gooden 8 -0.97 -2.19 -3.16 -0.16 -0.37 -0.53
John Wall 42 2.54 -0.46 2.08 2.22 -0.40 1.82
Marcin Gortat 36 -0.16 3.85 3.69 -0.12 2.89 2.77
Martell Webster 20 2.19 -2.87 -0.68 0.91 -1.20 -0.28
Nene Hilario 28 -1.65 4.39 2.74 -0.96 2.56 1.60
Trevor Ariza 37 -0.26 0.94 0.68 -0.20 0.72 0.52
Trevor Booker 16 -0.12 -2.77 -2.89 -0.04 -0.92 -0.96


R Script:

Show/Hide


library(XML)
library(RCurl)
v.pages <- 1:11            #change if increase in number of pages on http://espn.go.com/nba/statistics/rpm/_/page/1/sort/RPM

v.column.names <- c("player","team","orpm","drpm","rpm")
v.teams.home <- c("sas","okc","lac","hou","ind","mia","tor","chi")
v.teams.away <- c("dal","mem","gsw","por","atl","cha","bkn","was")
v.teams <- c("sas","dal","okc","mem","lac","gsw","hou","por","ind","atl","mia","cha","tor","bkn","chi","was")

hca <- 4                    #difference between neutral court and home court; this is total hca adjustment, not the adjustment for each team
avg_eff <- 104            #average league points per 100 possessions

df.rpm <- data.frame(player=character(0),team=character(0),orpm=numeric(0),drpm=numeric(0),rpm=numeric(0))

for(page in v.pages)
{
    v.url.rpm <- paste("http://espn.go.com/nba/statistics/rpm/_/page/",page,"/sort/RPM",sep="")
    table <- readHTMLTable(v.url.rpm)[[1]]
    table <- table[as.character((table[,2]))!="NAME",]
    table2 <- cbind(as.data.frame(matrix(unlist(strsplit(as.character(table[,2]),", ")),ncol=2,byrow=TRUE),stringsAsFactors=FALSE)[,1], as.data.frame(matrix(unlist(table[,3]),ncol=1,byrow=TRUE),stringsAsFactors=FALSE), as.data.frame(matrix(unlist(table[,6]),ncol=1,byrow=TRUE),stringsAsFactors=FALSE),as.data.frame(matrix(unlist(table[,7]),ncol=1,byrow=TRUE),stringsAsFactors=FALSE),as.data.frame(matrix(unlist(table[,8]),ncol=1,byrow=TRUE),stringsAsFactors=FALSE))
    table2[,3] <- as.numeric(table2[,3])
    table2[,4] <- as.numeric(table2[,4])
    table2[,5] <- as.numeric(table2[,5])
    colnames(table2) <- v.column.names
    df.rpm <- rbind(df.rpm,table2)
}

#minutes distributions and individual xrapm:
df.sas.r1 <- data.frame(player=c("Tony Parker","Tim Duncan","Kawhi Leonard","Marco Belinelli","Boris Diaw","Danny Green","Manu Ginobili","Tiago Splitter","Patty Mills","Cory Joseph","Matt Bonner"),minutes=c(35,35,38,15,22,25,30,20,10,5,5))
df.sas.r1 <- merge(df.sas.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.dal.r1 <- data.frame(player=c("Monta Ellis","Dirk Nowitzki","Shawn Marion","Jose Calderon","Vince Carter","Devin Harris","Samuel Dalembert","Brandan Wright","Jae Crowder","DeJuan Blair"),minutes=c(42,38,30,18,30,30,15,22,10,5))
df.dal.r1 <- merge(df.dal.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.okc.r1 <- data.frame(player=c("Kevin Durant","Serge Ibaka","Russell Westbrook","Reggie Jackson","Caron Butler","Thabo Sefolosha","Jeremy Lamb","Kendrick Perkins","Derek Fisher","Nick Collison","Steven Adams"),minutes=c(45,32,35,20,18,15,5,20,22,18,10))
df.okc.r1 <- merge(df.okc.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.mem.r1 <- data.frame(player=c("Zach Randolph","Mike Conley","Marc Gasol","Courtney Lee","Tayshaun Prince","Tony Allen","Mike Miller","James Johnson","Kosta Koufos","Beno Udrih"),minutes=c(40,42,40,25,23,25,20,10,10,5))
df.mem.r1 <- merge(df.mem.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.lac.r1 <- data.frame(player=c("Blake Griffin","DeAndre Jordan","Chris Paul","Jamal Crawford","J.J. Redick","Matt Barnes","Darren Collison","Jared Dudley","Danny Granger","Glen Davis","Hedo Turkoglu"),minutes=c(42,36,40,25,22,30,15,10,5,10,5))
df.lac.r1 <- merge(df.lac.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.gsw.r1 <- data.frame(player=c("Stephen Curry","Klay Thompson","David Lee","Andre Iguodala","Harrison Barnes","Draymond Green","Steve Blake","Jermaine O'Neal","Marreese Speights","Jordan Crawford"),minutes=c(42,40,35,36,20,27,9,20,8,3))
df.gsw.r1 <- merge(df.gsw.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.hou.r1 <- data.frame(player=c("James Harden","Chandler Parsons","Dwight Howard","Patrick Beverley","Jeremy Lin","Terrence Jones","Omer Asik","Francisco Garcia","Omri Casspi","Donatas Motiejunas","Jordan Hamilton"),minutes=c(40,40,36,35,22,16,11,10,15,10,5))
df.hou.r1 <- merge(df.hou.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.por.r1 <- data.frame(player=c("LaMarcus Aldridge","Nicolas Batum","Damian Lillard","Wesley Matthews","Robin Lopez","Mo Williams","Dorell Wright","C.J. McCollum","Thomas Robinson","Meyers Leonard"),minutes=c(40,40,40,38,35,25,10,5,2,5))
df.por.r1 <- merge(df.por.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.ind.r1 <- data.frame(player=c("Paul George","Lance Stephenson","George Hill","David West","Roy Hibbert","Evan Turner","C.J. Watson","Luis Scola","Ian Mahinmi"),minutes=c(40,36,35,35,28,16,20,12,18))
df.ind.r1 <- merge(df.ind.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.atl.r1 <- data.frame(player=c("Kyle Korver","Paul Millsap","Jeff Teague","DeMarre Carroll","Louis Williams","Shelvin Mack","Elton Brand","Pero Antic","Mike Scott","Cartier Martin","Mike Muscala"),minutes=c(36,40,35,38,18,13,12,20,15,7,6))
df.atl.r1 <- merge(df.atl.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.mia.r1 <- data.frame(player=c("LeBron James","Dwyane Wade","Chris Bosh","Mario Chalmers","Ray Allen","Norris Cole","Shane Battier","Chris Andersen","Rashard Lewis","Toney Douglas","Michael Beasley","Udonis Haslem"),minutes=c(40,32,38,35,20,12,17,18,8,6,2,12))
df.mia.r1 <- merge(df.mia.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.cha.r1 <- data.frame(player=c("Kemba Walker","Al Jefferson","Gerald Henderson","Josh McRoberts","Michael Kidd-Gilchrist","Gary Neal","Chris Douglas-Roberts","Anthony Tolliver","Cody Zeller","Luke Ridnour","Bismack Biyombo"),minutes=c(38,38,35,32,25,17,13,22,10,5,5))
df.cha.r1 <- merge(df.cha.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.tor.r1 <- data.frame(player=c("DeMar DeRozan","Kyle Lowry","Amir Johnson","Jonas Valanciunas","Terrence Ross","Patrick Patterson","Greivis Vasquez","John Salmons","Tyler Hansbrough","Chuck Hayes","Nando de Colo", "Steve Novak"),minutes=c(40,38,27,25,30,20,18,15,12,5,5,5))
df.tor.r1 <- merge(df.tor.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.bkn.r1 <- data.frame(player=c("Joe Johnson","Deron Williams","Paul Pierce","Shaun Livingston","Marcus Thornton","Alan Anderson","Andray Blatche","Kevin Garnett","Mirza Teletovic","Andrei Kirilenko","Mason Plumlee","Jorge Gutierrez"),minutes=c(38,35,30,25,15,7,5,25,15,25,18,2))
df.bkn.r1 <- merge(df.bkn.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.chi.r1 <- data.frame(player=c("Jimmy Butler","Joakim Noah","Mike Dunleavy","D.J. Augustin","Kirk Hinrich","Taj Gibson","Carlos Boozer","Tony Snell","Nazr Mohammed"),minutes=c(40,42,35,28,30,32,25,3,5))
df.chi.r1 <- merge(df.chi.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)
df.was.r1 <- data.frame(player=c("John Wall","Trevor Ariza","Bradley Beal","Marcin Gortat","Nene Hilario","Martell Webster","Trevor Booker","Drew Gooden","Al Harrington","Andre Miller"),minutes=c(42,37,37,36,28,20,16,8,6,10))
df.was.r1 <- merge(df.was.r1, df.rpm[,c(1,3,4,5)], by="player", all.x=TRUE)

df.sas.r1$onet <- df.sas.r1$minutes * df.sas.r1$orpm / 48
df.dal.r1$onet <- df.dal.r1$minutes * df.dal.r1$orpm / 48
df.okc.r1$onet <- df.okc.r1$minutes * df.okc.r1$orpm / 48
df.mem.r1$onet <- df.mem.r1$minutes * df.mem.r1$orpm / 48
df.lac.r1$onet <- df.lac.r1$minutes * df.lac.r1$orpm / 48
df.gsw.r1$onet <- df.gsw.r1$minutes * df.gsw.r1$orpm / 48
df.hou.r1$onet <- df.hou.r1$minutes * df.hou.r1$orpm / 48
df.por.r1$onet <- df.por.r1$minutes * df.por.r1$orpm / 48
df.ind.r1$onet <- df.ind.r1$minutes * df.ind.r1$orpm / 48
df.atl.r1$onet <- df.atl.r1$minutes * df.atl.r1$orpm / 48
df.mia.r1$onet <- df.mia.r1$minutes * df.mia.r1$orpm / 48
df.cha.r1$onet <- df.cha.r1$minutes * df.cha.r1$orpm / 48
df.tor.r1$onet <- df.tor.r1$minutes * df.tor.r1$orpm / 48
df.bkn.r1$onet <- df.bkn.r1$minutes * df.bkn.r1$orpm / 48
df.chi.r1$onet <- df.chi.r1$minutes * df.chi.r1$orpm / 48
df.was.r1$onet <- df.was.r1$minutes * df.was.r1$orpm / 48

df.sas.r1$dnet <- df.sas.r1$minutes * df.sas.r1$drpm / 48
df.dal.r1$dnet <- df.dal.r1$minutes * df.dal.r1$drpm / 48
df.okc.r1$dnet <- df.okc.r1$minutes * df.okc.r1$drpm / 48
df.mem.r1$dnet <- df.mem.r1$minutes * df.mem.r1$drpm / 48
df.lac.r1$dnet <- df.lac.r1$minutes * df.lac.r1$drpm / 48
df.gsw.r1$dnet <- df.gsw.r1$minutes * df.gsw.r1$drpm / 48
df.hou.r1$dnet <- df.hou.r1$minutes * df.hou.r1$drpm / 48
df.por.r1$dnet <- df.por.r1$minutes * df.por.r1$drpm / 48
df.ind.r1$dnet <- df.ind.r1$minutes * df.ind.r1$drpm / 48
df.atl.r1$dnet <- df.atl.r1$minutes * df.atl.r1$drpm / 48
df.mia.r1$dnet <- df.mia.r1$minutes * df.mia.r1$drpm / 48
df.cha.r1$dnet <- df.cha.r1$minutes * df.cha.r1$drpm / 48
df.tor.r1$dnet <- df.tor.r1$minutes * df.tor.r1$drpm / 48
df.bkn.r1$dnet <- df.bkn.r1$minutes * df.bkn.r1$drpm / 48
df.chi.r1$dnet <- df.chi.r1$minutes * df.chi.r1$drpm / 48
df.was.r1$dnet <- df.was.r1$minutes * df.was.r1$drpm / 48

df.sas.r1$net <- df.sas.r1$minutes * df.sas.r1$rpm / 48
df.dal.r1$net <- df.dal.r1$minutes * df.dal.r1$rpm / 48
df.okc.r1$net <- df.okc.r1$minutes * df.okc.r1$rpm / 48
df.mem.r1$net <- df.mem.r1$minutes * df.mem.r1$rpm / 48
df.lac.r1$net <- df.lac.r1$minutes * df.lac.r1$rpm / 48
df.gsw.r1$net <- df.gsw.r1$minutes * df.gsw.r1$rpm / 48
df.hou.r1$net <- df.hou.r1$minutes * df.hou.r1$rpm / 48
df.por.r1$net <- df.por.r1$minutes * df.por.r1$rpm / 48
df.ind.r1$net <- df.ind.r1$minutes * df.ind.r1$rpm / 48
df.atl.r1$net <- df.atl.r1$minutes * df.atl.r1$rpm / 48
df.mia.r1$net <- df.mia.r1$minutes * df.mia.r1$rpm / 48
df.cha.r1$net <- df.cha.r1$minutes * df.cha.r1$rpm / 48
df.tor.r1$net <- df.tor.r1$minutes * df.tor.r1$rpm / 48
df.bkn.r1$net <- df.bkn.r1$minutes * df.bkn.r1$rpm / 48
df.chi.r1$net <- df.chi.r1$minutes * df.chi.r1$rpm / 48
df.was.r1$net <- df.was.r1$minutes * df.was.r1$rpm / 48

#team-level xrapm
df.all.r1 <- data.frame(team=v.teams)
df.all.r1$onet <- as.vector(t(data.frame(sas=sum(df.sas.r1$onet),dal=sum(df.dal.r1$onet),okc=sum(df.okc.r1$onet),mem=sum(df.mem.r1$onet),lac=sum(df.lac.r1$onet),gsw=sum(df.gsw.r1$onet),hou=sum(df.hou.r1$onet),por=sum(df.por.r1$onet),ind=sum(df.ind.r1$onet),atl=sum(df.atl.r1$onet),mia=sum(df.mia.r1$onet),cha=sum(df.cha.r1$onet),tor=sum(df.tor.r1$onet),bkn=sum(df.bkn.r1$onet),chi=sum(df.chi.r1$onet),was=sum(df.was.r1$onet))))
df.all.r1$dnet <- as.vector(t(data.frame(sas=sum(df.sas.r1$dnet),dal=sum(df.dal.r1$dnet),okc=sum(df.okc.r1$dnet),mem=sum(df.mem.r1$dnet),lac=sum(df.lac.r1$dnet),gsw=sum(df.gsw.r1$dnet),hou=sum(df.hou.r1$dnet),por=sum(df.por.r1$dnet),ind=sum(df.ind.r1$dnet),atl=sum(df.atl.r1$dnet),mia=sum(df.mia.r1$dnet),cha=sum(df.cha.r1$dnet),tor=sum(df.tor.r1$dnet),bkn=sum(df.bkn.r1$dnet),chi=sum(df.chi.r1$dnet),was=sum(df.was.r1$dnet))))
df.all.r1$net <- as.vector(t(data.frame(sas=sum(df.sas.r1$net),dal=sum(df.dal.r1$net),okc=sum(df.okc.r1$net),mem=sum(df.mem.r1$net),lac=sum(df.lac.r1$net),gsw=sum(df.gsw.r1$net),hou=sum(df.hou.r1$net),por=sum(df.por.r1$net),ind=sum(df.ind.r1$net),atl=sum(df.atl.r1$net),mia=sum(df.mia.r1$net),cha=sum(df.cha.r1$net),tor=sum(df.tor.r1$net),bkn=sum(df.bkn.r1$net),chi=sum(df.chi.r1$net),was=sum(df.was.r1$net))))
df.all.r1$home_perc <- (avg_eff+df.all.r1$onet+hca/4)^14/((avg_eff+df.all.r1$onet+hca/4)^14+(avg_eff-df.all.r1$dnet-hca/4)^14)
df.all.r1$away_perc <- (avg_eff+df.all.r1$onet-hca/4)^14/((avg_eff+df.all.r1$onet-hca/4)^14+(avg_eff-df.all.r1$dnet+hca/4)^14)

#specific round 1 matchups
df.r1.matchups.1 <- data.frame(team=v.teams.home, opponent=v.teams.away, stringsAsFactors = FALSE)
df.r1.matchups.1$team_home_perc <- merge(data.frame(team=df.r1.matchups.1$team),df.all.r1[,c(1,5)], by="team", all.x=TRUE, sort=FALSE)[,2]
df.r1.matchups.1$team_away_perc <- merge(data.frame(team=df.r1.matchups.1$team),df.all.r1[,c(1,6)], by="team", all.x=TRUE, sort=FALSE)[,2]
df.r1.matchups.1$opponent_home_perc <- merge(data.frame(team=df.r1.matchups.1$opponent),df.all.r1[,c(1,5)], by="team", all.x=TRUE, sort=FALSE)[,2]
df.r1.matchups.1$opponent_away_perc <- merge(data.frame(team=df.r1.matchups.1$opponent),df.all.r1[,c(1,6)], by="team", all.x=TRUE, sort=FALSE)[,2]
df.r1.matchups.1$team_matchup_home_perc <- (df.r1.matchups.1$team_home_perc - (df.r1.matchups.1$team_home_perc*df.r1.matchups.1$opponent_away_perc))/(df.r1.matchups.1$team_home_perc + df.r1.matchups.1$opponent_away_perc - (2*df.r1.matchups.1$team_home_perc*df.r1.matchups.1$opponent_away_perc))
df.r1.matchups.1$team_matchup_away_perc <- (df.r1.matchups.1$team_away_perc - (df.r1.matchups.1$team_away_perc*df.r1.matchups.1$opponent_home_perc))/(df.r1.matchups.1$team_away_perc + df.r1.matchups.1$opponent_home_perc - (2*df.r1.matchups.1$team_away_perc*df.r1.matchups.1$opponent_home_perc))
df.r1.matchups.1$series_perc <- df.r1.matchups.1$team_matchup_home_perc^4 + 4*df.r1.matchups.1$team_matchup_home_perc^3*(1-df.r1.matchups.1$team_matchup_home_perc)*(1-(1-df.r1.matchups.1$team_matchup_away_perc)^3) + 6*df.r1.matchups.1$team_matchup_home_perc^2*(1-df.r1.matchups.1$team_matchup_home_perc)^2*((3*df.r1.matchups.1$team_matchup_away_perc^2*(1-df.r1.matchups.1$team_matchup_away_perc))+df.r1.matchups.1$team_matchup_away_perc^3)+4*
df.r1.matchups.1$team_matchup_home_perc*(1-df.r1.matchups.1$team_matchup_home_perc)^3*df.r1.matchups.1$team_matchup_away_perc^3
df.r1.matchups.2 <- df.r1.matchups.1[,c(2,1)]
colnames(df.r1.matchups.2) <- c("team","opponent")
df.r1.matchups.2$team_home_perc <- df.r1.matchups.1$opponent_home_perc
df.r1.matchups.2$team_away_perc <- df.r1.matchups.1$opponent_away_perc
df.r1.matchups.2$opponent_home_perc <- df.r1.matchups.1$team_home_perc
df.r1.matchups.2$opponent_away_perc <- df.r1.matchups.1$team_away_perc
df.r1.matchups.2$team_matchup_home_perc <- 1-df.r1.matchups.1$team_matchup_away_perc
df.r1.matchups.2$team_matchup_away_perc <- 1-df.r1.matchups.1$team_matchup_home_perc
df.r1.matchups.2$series_perc <- 1-df.r1.matchups.1$series_perc
df.r1.matchups <- rbind(df.r1.matchups.1,df.r1.matchups.2)
df.r1.matchups <- df.r1.matchups[order(df.r1.matchups$series_perc, decreasing=TRUE),]



#print results
df.r1.matchups
df.all.r1[order(df.all.r1$net,decreasing=TRUE),c(1:4)]
df.sas.r1
df.dal.r1
df.okc.r1
df.mem.r1
df.lac.r1
df.gsw.r1
df.hou.r1
df.por.r1
df.ind.r1
df.atl.r1
df.mia.r1
df.cha.r1
df.tor.r1
df.bkn.r1
df.chi.r1
df.was.r1

18 comments:

  1. Game 1 Bets:
    ATL +7.5 (Adj Model: ATL +4, Game Result: ATL -8, Confidence: 3.5, Bet Result: 15.5)
    MIA -10 (Adj Model: MIA -13, Game Result: MIA -11, Confidence: 3, Bet Result: 1)
    BKN +3.5 (Adj Model: BKN +1.5, Game Result: BKN -7, Confidence: 2, Bet Result: 10.5)
    MEM +7 (Adj Model: MEM +6, Game Result: MEM +14, Confidence: 1, Bet Result: -7)
    GSW +7 (Adj Model: GSW +5.5, Game Result: GSW -4, Confidence: 1.5, Bet Result: 11)
    HOU -5.5 (Adj Model: HOU -7.5, Game Result: HOU +2, Confidence: 1.5, Bet Result: -7.5)

    ReplyDelete
  2. Observations:
    ATL/IND
    -Matchup issues might be even bigger than expected
    -Hibbert's minutes probably should be adjusted further down as Vogel appears ready to go to better matchups
    -Teague shouldn't be expected to shoot this well going forward so I'm not sure Hawks should be favorite going forward, but I would probably further adjust my model towards Atlanta another point or so
    MIA/CHA
    -I stupidly expected Tolliver would get a lot of minutes based on my own preferences
    -If Miami continues to give so many minutes to non-offensive-creators like Allen and James Jones, Charlotte might be able to get away with smaller lineups. Not clear who this helps more though.
    -Even in a decent game from Charlotte, Miami still ultimately covered. Gives me more confidence in my model's results
    TOR/BKN
    -Amir Johnson doesn't look healthy as he played only 21 minutes. Does not bode well for Toronto
    -Brooklyn's defense was very effective. Lowry pick-and-roll largely ineffective at creating open threes, despite his 8 assists
    -I would probably adjust my model towards Brooklyn by another point or so
    CHI/WAS
    -Nene played 35 minutes and looked great. Adjusting his minutes towards the other starters bodes well for Washington
    -Not sure anything else about this matchup was surprising as Chicago's offense is sometimes just this bad.
    -Simply adjusting some of Harrington, Gooden, and Booker's minutes to give Nene an extra 8 minutes lowers Chicago's neutral court advantage from 0.9 points to 0.4 points.

    ReplyDelete
  3. SAS/DAL
    -Dallas unexpectedly switched a lot of pick-and-rolls. This limited the help responsibility for defenders guarding three-point shooters and likely contributed significantly the Spurs' offensive inefficiency.
    -Loved how few minutes Calderon, Dalembert, and Marion got and how many minutes Harris, Carter, Wright, and Crowder got. This was the one matchup in which my aggressive minutes adjustments were true in Game 1.
    -Popovich did adjust his halftime offensive approach to include more Duncan postups and Ginobili pick-and-rolls against the switching Dallas defense, so I never want to count out Popovich. However, Dallas was surprisingly successful defensively, and really only lost this game due to offensive inefficiency from Ellis and Nowitzki and I expect the two of them to bounce back. As a result, I still would adjust my model towards Dallas by a point or so.
    OKC/MEM
    -I wasn't too concerned about Memphis' horrendous first half, as they seemed to get some of their normal shots on offense and simply missed them, and I was actually looking forward to the public perhaps overreacting and pushing the OKC line up.
    -The one bad sign for Memphis was Brooks' surprising early decision to take advantage of Durant at PF as much as possible. While the minutes for Perkins and Adams were similar to what I predicted, I expected it might take a while for this to happen.
    LAC/GSW
    -Very surprised by how little Barnes played. Doc Rivers definitely loved his two-pg look in the regular season but I didn't expect it to continue in this series. It certainly got them into trouble in Game 1 due to the Thompson postups and it was exacerbated by Big Baby's incomprehensible tendencies to help whe nhe shouldn't have.
    -The Lee at Center lineup was even more successful offensively than I expected. The Bogut and four perimeter players lineup is probably still the best Warriors lineup, but while Bogut is a very good passer, he's just so much less effective on rolls to the basket. Golden State effectively used the other big as a release valve when the Clippers trapped Curry pick-and-rolls to then hit the screener (Lee) on rolls.
    -Golden State still exhibited a frustrating tendency for iso-posts when up late, but the isos certainly seemed less frequent early in the game.
    -Given the better offensive play calling from the Warriors and the issues presented by the Curry pick-and-roll (even though the Clippers will definitely adjust their coverage going forward), I would adjust my model towards Golden State by another point or so.
    HOU/POR
    -Terrence Jones predictably had no chance defending Aldridge. Portland smartly ran a lot of pick-and-rolls with Harden's man as the screener. Stotts correctly realized that a sample size of two is way too small to be predictive and continued to Hack-a-Howard despite Howard making his first two tries.
    -Both teams switched liberally, which is probably smart given how efficient both offenses are at seeking threes.
    -While Houston led the league in offensive free throws per game by a large margin, Portland doesn't foul much defensively.
    -The Hack-a-Howard strategy makes it awfully difficult for Houston to cover large spreads as it prolongs games and gives the defense an alternative to Houston's normally efficient offense.
    -I would adjust my model towards Portland by a point or so.

    ReplyDelete
  4. Vegas Game 2 lines for 4/21:
    OKC -7 / MEM +7
    OKC -330 / MEM +265

    LAC -7.5 / GSW +7.5
    LAC -420 / GSW +310

    I was going to post theoretical Game 2 bets as well, but it appears that there is significant anti-correlation between games that Vegas already adjusts for. For example, Clippers and Raptors are larger favorites in Game 2 (by 0.5 points and 1 point respectively) than in Game 1 despite looking worse than expected. I would still bet Memphis and Warriors for the 4/21 games anyways, but I'm just not sure how much to adjust for anti-correlation in determining my confidence in the bets.

    ReplyDelete
  5. Vegas Game 2 lines for 4/22:
    IND -7.5 / ATL +7.5
    IND -380 / ATL +290

    TOR -4.5 (-115) / BKN +4.5 (-105)
    TOR -190 / BKN +165

    CHI -5.5 / WAS +5.5
    CHI -240 / WAS +200

    Similarly, I would still bet Atlanta and Brooklyn and abstain from Bulls-Wiz.

    ReplyDelete
  6. Vegas Game 2 lines for 4/23:
    MIA -10.5 (-105) / CHA +10.5 (-115)
    MIA OFF / CHA OFF

    SAS -7.5 / DAL +7.5
    SAS -360 / DAL +280

    HOU -7 (-115) / POR +7 (-105)
    HOU -300 / POR +250

    Betting based off of Game 1 lines (because I have no idea how to adjust for the anticorrelation between games), I would still abstain from the Spurs Mavs game, even after adjusting my model towards Dallas. After adjusting my model towards Portland slightly, I can no longer bet on Houston given how large the spread is at home for them and my worry that Hack-a-Howard will prolong games and narrow margins of victory for Houston. I would still bet Miami even after the slight increase in the spread, (which, in effect, is probably bigger due to the anticorrelation effect).

    ReplyDelete
  7. IND -3 / ATL +3
    IND OFF/ ATL OFF

    OKC -3 / MEM +3
    OKC OFF/ MEM OFF

    LAC -3 (-105) / GSW +3 (-115)
    LAC -150 / GSW +130

    Nothing about the Game 2's in the first two series would cause me concern. There has been some indication that there was more variety in player movement (/screening) from the Pacers, but they had the same screening conversion issues that they've had for a while. They simply made their jumpers and Atlanta missed theirs. Memphis also limited Prince's minutes in favor of Allen's (given that Allen plays Durant significantly better), so if anything, I'd adjust my prediction towards Memphis.

    The Clippers blowout doesn't mean much in the grand scheme of things, but they trapped the Curry PNR much better with Griffin on the floor instead of Big Baby. Curry did have more success in the third quarter splitting the traps, but that strategy is somewhat concerning given Curry's turnover issues and the Clippers' fast breaking ability.

    Still, I would continue betting Atlanta, Memphis, and Golden State

    ReplyDelete
  8. Vegas Game 3 lines for 4/25:

    TOR +5 (-115) / BKN -5 (-105)
    TOR +170 / BKN -200

    CHI +2.5 / WAS -2.5
    CHI +130 / WAS -150

    HOU +2 / POR -2
    HOU +130 / POR -150

    I haven't watched as much of the Raptors-Nets series as I'd have liked (no NBATV subscription), so the following comments may be based off of a limited sample size. I "hate" on Valanciunas a lot, but he might be necessary to prevent Brooklyn from liberally switching every PNR (which is a way to force teams away from PNR and into isolations, and even then, Brooklyn shouldn't be afraid of switching the Valanciunas PNR). If this becomes an isolation battle, Brooklyn has an enormous advantage because they simply have much better isolation players and they have bigger mismatches. Toronto's wings are simply too small (or too limited offensively to get playing time) to guard Joe Johnson. Zach Lowe mentioned potentially having Amir guard JJ and a wing guard Pierce, but as much as I respect Amir's lateral quickness and defensive awareness (or, simply, his game in general), I'd be wary of having bigs guard the ball handler on PNRs because they have no experience fighting through screens. Toronto also doesn't really have the same switching options other teams in the playoffs do, because Valanciunas is too slow and Lowry is probably still too small. Brooklyn -5 at home is similar to Brooklyn +3.5 on the road (if we assume a HCA of 4 points and there's no added effect of a series being tied 1-1 as there is for a series being 1-0), so I would still be comfortable betting Brooklyn.

    Although the other two series are at similar stages (teams down 0-2 on the road) with similar point spreads both in Game 1 and in Game 3, I feel differently about them. Yes, Nene has played more than I expected and even better than I expected (and the ability of both of Washington's bigs to hit PNR jumpers is huge against Chicago, given that an open long-two is actually a good shot against them), but looking beyond the actual score, nothing has been especially surprising. Many of Washington's adjustments for Chicago have solutions. Chicago's defensive issues (not that there are many) have mostly been Augustin-related, and if he's going to be forced off the ball by Ariza as he was in Game 2, then there's no reason for him to play over someone like Dunleavy who can provide the same floor spacing without the same defensive issues (or either Hinrich or Butler could be subbed out instead as there are diminishing marginal returns for on-ball skills, even defensive on-ball skills). They could mix up their PNR coverage a little by having the bigs play the ball handler more aggressively, which could also in turn force live ball turnovers that add significant value for a team that has trouble scoring in the half court. I have enough confidence in Thibs to make those necessary adjustments (and any ones I haven't identified) before Game 3. Given the desperation factor should definitely be greater for Chicago (my admission of the existence of such a factor is based on the fact that home teams that lost Game 1 actually saw bigger point spreads in Game 2), it looks to me like the market has moved in Washington's favor more than I believe it should have. After abstaining from the first two games of this series, I would bet Chicago.

    ReplyDelete
  9. cont.

    Houston's case is different because I actually expect them to make incorrect adjustments (/overreact to Game 1 and 2 trends) and they already began doing so in Game 2. Terrence Jones cannot guard Aldridge whatsoever (where "guard" is defined as keeping Aldridge away from 60-70% shots in the paint), so they mostly resorted to the Asik-Howard combo with Asik on Aldridge. This was likely partly because Howard exerted too much effort from the postups on offense to defend Aldridge himself and partly because he was in foul trouble, and neither should be an excuse. If Howard isn't defending Aldridge in this series, he's adding very limited value late in games beyond defensive rebounding (which, admittedly, is important against Lopez), because Portland doesn't drive often enough to the rim for his rim protection to matter and Houston veers away from his postups on offense in crunch time. If Howard fouls out in the fourth quarter, it's not a big deal, as Asik is Howard's equivalent on defense (and on offense, actually, if we're only talking about actual offensive impact and not offensive ability, because Houston on average wastes too many possession utilizing Howard's post game "strength"). I maintain that Houston should go small so that they gain much more offensively from the floor spacing than from whatever rebounding they lose against Lopez, but I have absolutely no confidence McHale will do so. Furthermore, Aldridge's hot streak on his turnaround jumpers (which are essentially unchallengeable by one defender) likely will cause Houston to overreact and start sending double teams, which is the worst overreaction to a small sample size possible (I'm sure the front office understands that Aldridge turnarounds are still better shots for the defense than open threes created from doubling but I don't know how much impact they have on the coaching staff). This would seem to indicate that I would bet Portland, but given that I really have no idea how many "desperation" points a team should get when down 0-2 in a series needing to win at least two of three on the road, I would have to abstain from this game.

    ReplyDelete
  10. Vegas Game 3/4 lines for 4/26:
    IND -3 / ATL +3
    IND -150 / ATL +130

    SAS -4 / DAL +4
    SAS -175 / DAL +155

    MIA -5 / CHA +5
    MIA -210 / CHA +175

    OKC -3.5 (-105) / MEM +3.5 (-115)
    OKC -165 / MEM +145

    Not much to say about the two 1-8 matchups or Memphis-OKC except that all underdogs seeds have shown significant matchup/strategic problems for the favorites seeds (the shooting for Atlanta, the switching for Dallas, and Tony Allen for Memphis), and yet Vegas does not seem to have corrected for it enough. I would bet Atlanta, Dallas, and Memphis.

    In Miami's case, I don't see systematic reasons that Charlotte has been playing much better than expected. Part of it might be that Miami has motivation problems for large point spreads, so they might be able to cover smaller point spreads on the road more easily than larger spreads at home. Even accounting for the fact that this is probably the game with the largest discrepancy in "desperation" (merely a guess), I would still bet Miami.

    ReplyDelete
  11. Vegas Game 4 lines for 4/27:
    CHI +2 / WAS -2
    CHI OFF / WAS OFF

    LAC -2 (-105) / GSW +2 (-115)
    LAC OFF / GSW OFF

    TOR +4 / BKN -4
    TOR +155 / BKN -175

    HOU +2.5 / POR -2.5
    HOU OFF / POR OFF

    I'm as big of a Nene fan as anyone, and even adjusting for the anti-correlation effect (judging from Houston-Portland, it should be worth maybe 0.5 points), I don't think the line adjusted enough. As a result, I'd still bet Chicago.

    Draymond Green is by far Golden State's best "big" in this series, and rumors are that he might start Game 4 and thus play more minutes. O'Neal has been largely horrible in this series outside of a stretch in Game 1, and given that I've been betting Golden State this entire series, I would continue betting Golden State.

    Not much has changed about the other two series so I would still bet Brooklyn and abstain from Portland-Houston.

    ReplyDelete
  12. Vegas Game 4/5 lines for 4/28:
    MIA -8.5 / CHA +8.5
    MIA -420 / CHA +310

    IND -6.5 / ATL +6.5
    IND -320 / ATL +260

    SAS -4.5 / DAL +4.5
    SAS -210 / DAL +175

    I have no idea in which direction a line should be adjusted when a team is up 3-0, and Al Jefferson's status for the game is a likely reason why the line is so high for Miami on the road. While Jefferson is indeed the foundation of the Bobcats, he's just not as good as most people think. Miami -8.5 on the road is equivalent to Miami -14.5 to -16.5 at home, which is essentially what my model predicted for Game 1. Sure, the potential for no Jefferson makes the Bobcats worse, but there's enough uncertainty in the variables I don't know (namely, the 3-0 factor) for me to abstain.

    Indiana won its last game and San Antonio lost its last game, but I'm more optimistic about San Antonio. The Spurs adjusted to Dallas' strategy to switch almost all Parker PNRs by using more Ginobili PNRs, and switching is much more dangerous against him because he can hit threes. Game 3 was a lot about Dallas players, including non-shooters like Ellis and Marion, simply hitting a bunch of jumpers. I am as optimistic about the Spurs now as I have been at any point since before the series, and given that the Spurs are only giving an additional 0.5 points compared to Game 3 despite losing that game and now being down 2-1, I would bet San Antonio.

    Yes, Indiana finally limited Hibbert's minutes given the matchup issues, but I still don't see any evidence of a significantly better team. I would hypothesize that the line for Game 5 of a 2-2 series should normally be very similar to that of Game 1 of that series, and given that the line moved only 1 point in Atlanta's favor, I would still bet Atlanta.

    ReplyDelete
  13. Vegas Game 5 lines for 4/29:
    CHI -3.5 / WAS +3.5
    CHI -160 / WAS +140

    OKC -7 (-115) / MEM +7 (-105)
    OKC -350 / MEM +275

    LAC -7 (-105) / GSW +7 (-115)
    LAC -310 / GSW +255

    Vegas has definitely reacted to Washington's blowout win in Game 4, but so have I. Many of Chicago's Game 4 issues involve Washginton aggressively overplaying a lot of Chicago's offensive actions (which was part of the reason for Gibson's big night) leading also to fast breaks. Chicago has had a disturbing inability to score without Augustin given that their bigs can't overpower Washington's bigs either on postups or offensive rebounds, and Augustin has had a disturbing inability to defend anyone. As a result, Washington should now be the favorite on a neutral court. However, I have no idea how big of a boost Chicago should get from being down 3-1, so I would have to abstain from this game.

    The other two matchups both have the same spreads as their Game 1 spreads, and I'm more confident about the underdogs now than I was before. As a reuslt, I would still bet Memphis and Golden State.

    ReplyDelete
  14. Vegas Game 5 lines for 4/30:
    SAS -6 (-115) / DAL +6 (-105)
    SAS -290 / DAL +245

    TOR -3 / BKN +3
    TOR -155 / BKN +135

    HOU -5 (-105) / POR +5 (-115)
    HOU -230 / POR +190

    I would still bet San Antonio and Brooklyn. I would be tempted to bet Houston given they've been maxing shooting recently (with Beverley, Daniels, and Parsons around Harden and Howard), but Beverley's flu bug worries me. There's enough uncertainty for me surrounding this game (including Houston's desperation factor down 3-1) that I would abstain.

    ReplyDelete
  15. Vegas Game 6 lines for 5/1:
    IND +1.5 (-115) / ATL -1.5 (-105)
    IND OFF / ATL OFF

    OKC -3 (-105) / MEM +3 (-115)
    OKC OFF/ MEM OFF

    LAC -1 / GSW +1
    LAC OFF / GSW OFF

    I would still bet Memphis and Golden State, but I would abstain from Atlanta.

    ReplyDelete
  16. Vegas Game 6 lines for 5/2:
    TOR +4.5 (-115) / BKN -4.5 (-105)
    TOR +170 / BKN -200

    SAS -3.5 (-105) / DAL +3.5 (-115)
    SAS -160 / DAL +140

    HOU +4 (-115) / POR -4 (-105)
    HOU +160 / POR -180

    I would still bet Brooklyn and abstain from the other two games.

    ReplyDelete
  17. Vegas Game 7 lines for 5/3:
    IND -6 (-115) / ATL +6 (-105)
    IND -290 / ATL +245

    OKC -9 (-115) / MEM +9 (-105)
    OKC -600 / MEM +400

    LAC -7 (-115) / GSW +7 (-105)
    LAC -350 / GSW +275

    I would usually take a Zach Randolph suspension as a even more reason to bet on Memphis given that he's their fourth best player but perceived as their first or second best player, and this is especially true in this series given that he's been totally ineffective offensively. However, a Randolph absence isn't the only problem. Conley has a hamstring strain and Allen has a migraine. This was a very top heavy team to begin with (with the top defined as Gasol and Conley in most cases and Allen as well in this series), so I just can't justify betting Memphis here with the line at only -9.

    I would still bet Atlanta and Golden State however.

    ReplyDelete
  18. Vegas Game 6 lines for 5/4:
    TOR -2.5 / BKN +2.5
    TOR -130 / BKN +110

    SAS -6.5 / DAL +6.5
    SAS -310 / DAL +255

    I would still bet Brooklyn and abstain from Spurs-Mavs.

    ReplyDelete