Feb 17 2009

Basketball on Paper’s Skill Curves

Recent discussion about Basketball on Paper’s skill curves inspired me to use Dean’s formulas to reproduce these curves. The formulas are a bit daunting at first glance, but thankfully they’re really not that bad once you’ve got the data to work with. For the curious reader, most of the formulas came from Appendix 1 of Basketball on Paper.

The Curves

As an initial test of the formulas, I have created skill curves using this season’s data for Kobe Bryant and LeBron James.

Kobe’s Curve:

LeBron’s Curve:

The Code

I used R to perform all of the calculations, so to see how these curves were created, download the skill_curves.zip archive.

Inside of this archive you will find an offense.R file along with some CSV data for Kobe and LeBron. On line 81 of this file is where you can switch between Kobe and LeBron by using the prefix “lebron” or “kobe”.


I’m pretty sure this is where the data for creating these curves comes from. How Dean actually grouped the data for fitting lines is up for debate. I simply used R’s scatter.smooth function.

Also, please send along any improvements or errors you might find in the code.


As Neil suggested, here are the images with % Team Possessions Used as the x-axis and Offensive Rating as the y-axis. These definitely make more intuitive sense.

Kobe’s Curve:

LeBron’s Curve:

To replicate these results, change scatter.smooth(ortgs,pused) to scatter.smooth(pused,ortgs) in offense.R.

If you enjoyed this post, use RSS to get notified of new posts.

4 Comments on this post


  1. Neil Paine said:

    Great work, Ryan. One thing, though: could you flip the x- and y- axes around (i.e., %Poss is X and ORtg is Y)? Dean once said that they should be that way in BoP, but because of a publisher’s error they ended up being the other way around in the book. I only mention it because it makes more sense to have the independent variable be %Poss (since it’s largely by choice, whether the player’s or his coach’s) and the dependent variable be ORtg. I think the graphs would intuitively be easier to interpret that way.

    February 17th, 2009 at 12:03 pm
  2. Ryan said:

    Yeah that is definitely the way to go. I just wanted to try and mimic what was in the book. I’ll update the code and graphics tonight.

    February 17th, 2009 at 12:16 pm
  3. edkupfer said:

    Nice work.

    February 17th, 2009 at 7:11 pm
  4. Ryan said:

    Thanks Ed. I’ve updated the graphics with Neil’s suggestion.

    February 17th, 2009 at 10:23 pm