Statistical Plus/Minus
Statistical Plus/Minus is an estimate of the player’s contribution to the team’s point differential per 100 possessions, using his boxscore stats as inputs.
Formula Last updated:7/18/2014
Adjust all per-36 minute rates to a pace factor of 100.0 before plugging into formula.
Formula 1979-80 to present (3-point era)
Call:
lm(formula = plus_minus ~ mpg + p36 + tsa36 + tsasq + tpa36 +
fta36 + ast36 + orb36 + drb36 + stl36 + blk36 + tov36 + pf36 +
versatility + usgast, weights = minutes)
Weighted Residuals: Min 1Q Median 3Q Max -536.41 -59.98 13.52 58.81 852.80 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -6.132419 0.573255 -10.698 < 2e-16 *** mpg 0.092111 0.007581 12.151 < 2e-16 *** p36 0.542085 0.042788 12.669 < 2e-16 *** tsa36 -1.085230 0.072533 -14.962 < 2e-16 *** tsasq 0.011201 0.002087 5.366 8.73e-08 *** tpa36 0.234685 0.024500 9.579 < 2e-16 *** fta36 0.157581 0.038441 4.099 4.26e-05 *** ast36 -0.255205 0.102324 -2.494 0.01269 * orb36 0.177641 0.063510 2.797 0.00519 ** drb36 -0.147541 0.047883 -3.081 0.00208 ** stl36 1.248259 0.095722 13.040 < 2e-16 *** blk36 0.779884 0.064435 12.103 < 2e-16 *** tov36 -1.355019 0.095769 -14.149 < 2e-16 *** pf36 0.217562 0.051005 4.266 2.06e-05 *** versatility 1.201469 0.086572 13.878 < 2e-16 *** usgast 0.013780 0.004836 2.849 0.00441 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 125.5 on 2739 degrees of freedom Multiple R-squared: 0.607, Adjusted R-squared: 0.6048
F-statistic: 282 on 15 and 2739 DF, p-value: < 2.2e-16
Formula 1976-77 to 1978-79
Call:
lm(formula = plus_minus ~ mpg + p36 + tsa36 + tsasq + ast36 +
trb36 + stl36 + blk36 + tov36 + pf36 + versatility + usgast,
weights = minutes)
Weighted Residuals: Min 1Q Median 3Q Max -544.48 -59.44 13.80 61.52 838.63 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -4.841329 0.566249 -8.550 < 2e-16 *** mpg 0.084138 0.007649 10.999 < 2e-16 *** p36 0.695031 0.036349 19.121 < 2e-16 *** tsa36 -1.173899 0.069078 -16.994 < 2e-16 *** tsasq 0.010736 0.002077 5.168 2.53e-07 *** ast36 -0.369669 0.103152 -3.584 0.000345 *** trb36 -0.094913 0.030240 -3.139 0.001715 ** stl36 1.405904 0.095231 14.763 < 2e-16 *** blk36 0.720455 0.064989 11.086 < 2e-16 *** tov36 -1.354858 0.089508 -15.137 < 2e-16 *** pf36 0.178026 0.051015 3.490 0.000491 *** versatility 1.121073 0.083169 13.479 < 2e-16 *** usgast 0.019676 0.004843 4.063 4.98e-05 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 127.6 on 2742 degrees of freedom Multiple R-squared: 0.5937, Adjusted R-squared: 0.5919 F-statistic: 333.8 on 12 and 2742 DF, p-value: < 2.2e-16
After computing the raw versions above, adjust such that 5 * the minute-weighted average of a team’s individual ratings equal the team’s efficiency differential. This is done by adding/subtracting the one-fifth the difference between actual and predicted differential for the team to each player’s rating.
Update: 6/11/2011
Adjust all per-36 minute rates to a pace factor of 91.6251806668734 before plugging into formula.
Offense
Call: lm(formula = oapm ~ pts36 + tsa36 + tsa36sq + 3pa36 + ast36 + orb36 + tov36 + mpg) Residuals: Min 1Q Median 3Q Max -5.0117 -1.1945 0.0144 1.1642 7.1628 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -6.873115 1.209980 -5.680 2.55e-08 *** pts36 1.134918 0.106126 10.694 < 2e-16 *** tsa36 -1.053041 0.192856 -5.460 8.27e-08 *** tsa36sq 0.009919 0.005783 1.715 0.08708 . 3pa36 0.287426 0.066216 4.341 1.79e-05 *** ast36 0.790446 0.080954 9.764 < 2e-16 *** orb36 0.626947 0.144910 4.326 1.91e-05 *** tov36 -1.519798 0.252819 -6.011 4.08e-09 *** mpg 0.047345 0.016239 2.915 0.00375 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.873 on 409 degrees of freedom Multiple R-squared: 0.6476, Adjusted R-squared: 0.6407 F-statistic: 93.95 on 8 and 409 DF, p-value: < 2.2e-16
Defense
Call: lm(formula = dapm ~ tsa36 + orb36 + drb36 + stl36 + blk36 + pf36 + mpg) Residuals: Min 1Q Median 3Q Max -6.55889 -1.19094 -0.04867 1.22791 7.68363 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -5.57999 0.94753 -5.889 8.10e-09 *** tsa36 -0.17041 0.03976 -4.286 2.27e-05 *** orb36 -0.36938 0.18803 -1.964 0.05015 . drb36 0.55435 0.11836 4.684 3.84e-06 *** stl36 2.23664 0.29189 7.663 1.33e-13 *** blk36 0.68844 0.20863 3.300 0.00105 ** pf36 0.40582 0.16024 2.533 0.01169 * mpg 0.06387 0.02059 3.102 0.00205 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.13 on 410 degrees of freedom Multiple R-squared: 0.2984, Adjusted R-squared: 0.2864 F-statistic: 24.91 on 7 and 410 DF, p-value: < 2.2e-16
Regression was run on all players with 1250 minutes from 2005-06 to 2008-09. You can read more about statistical +/- here.
A variant using Dean Oliver’s stats from Basketball on Paper can be calculated by constructing a lineup featuring the player and 4 average teammates. Each teammate will have a defensive rating equal to the league average; a Poss% equal to 100 minus the player’s Poss%, divided by 4; and an offensive rating equal to the league’s rating plus (20 – Teammate%Poss) * Tradeoff. “Tradeoff” is determined for a given league by: LgRtg * (1.296 / 107.5). (See this post for an explanation.) To compute raw offensive/defensive SPM, subtract the league’s offensive rating from the player’s “lineup offensive rating” and subtract his “lineup defensive rating” from the league’s offensive rating. Force these to fit team offensive/defensive performance by calculating the team adjustment necessary to make 5 * the minute-weighted average of player ratings equal the team’s actual ratings.
Another variant using only minutes per game, the team’s defensive rating, and Dean Oliver’s individual offensive rating, possession %, & defensive rating (the latter 3 metrics being measured relative to average):
(Formula updated 07-27-2011)
Offensive SPM
Call: lm(formula = oapm ~ pctpos + drtg + pctpos*mpg + pctpos*ortg) Residuals: Min 1Q Median 3Q Max -5.3544 -1.1935 -0.0937 1.2127 7.7508 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.2569641 0.1447163 8.686 < 2e-16 *** pctpos -1.0157628 0.0872534 -11.642 < 2e-16 *** drtg -0.1395714 0.0287818 -4.849 1.76e-06 *** pctpos*mpg 0.0035557 0.0008362 4.252 2.62e-05 *** pctpos*ortg 0.0112577 0.0008497 13.248 < 2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.962 on 413 degrees of freedom Multiple R-squared: 0.6094, Adjusted R-squared: 0.6057 F-statistic: 161.1 on 4 and 413 DF, p-value: < 2.2e-16
Defensive SPM
Call: lm(formula = dapm ~ 0 + ortg + pctpos + drtg + tmdef + pctpos*mpg) Residuals: Min 1Q Median 3Q Max -6.843 -1.265 -0.010 1.376 7.988 Coefficients: Estimate Std. Error t value Pr(>|t|) ortg -0.0447284 0.0163167 -2.741 0.006386 ** pctpos -0.1892379 0.0453301 -4.175 3.64e-05 *** drtg 0.4941729 0.0428933 11.521 < 2e-16 *** tmdef -0.1730666 0.0602370 -2.873 0.004274 ** pctpos*mpg 0.0028354 0.0008074 3.512 0.000494 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.036 on 413 degrees of freedom Multiple R-squared: 0.3558, Adjusted R-squared: 0.348 F-statistic: 45.62 on 5 and 413 DF, p-value: < 2.2e-16
“Old SPM”
An older version of the formula, created on 11/22/2010.
Adjust all per-36 minute rates to a pace factor of 91.6251806668734 before plugging into formula.
Offense
Call: lm(formula = oapm ~ pts36 + tsa36 + tsa36sq + 3pa36 + ast36 + orb36 + tov36 + stl36 + blk36 + mpg) Residuals: Min 1Q Median 3Q Max -5.23379 -1.20433 0.05485 1.13443 7.02662 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -7.27339 1.25692 -5.787 1.43e-08 *** pts36 1.17389 0.10589 11.086 < 2e-16 *** tsa36 -1.10678 0.19265 -5.745 1.80e-08 *** tsa36sq 0.01010 0.00578 1.747 0.08145 . 3pa36 0.27568 0.06561 4.202 3.26e-05 *** ast36 0.70050 0.08452 8.289 1.68e-15 *** orb36 0.72753 0.15149 4.802 2.21e-06 *** tov36 -1.45687 0.25292 -5.760 1.66e-08 *** stl36 0.64889 0.27146 2.390 0.01729 * blk36 -0.34008 0.17834 -1.907 0.05724 . mpg 0.05023 0.01622 3.097 0.00209 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.853 on 407 degrees of freedom Multiple R-squared: 0.6569, Adjusted R-squared: 0.6485 F-statistic: 77.93 on 10 and 407 DF, p-value: < 2.2e-16
Defense
Call: lm(formula = dapm ~ tsa36 + orb36 + drb36 + stl36 + blk36 + pf36 + mpg) Residuals: Min 1Q Median 3Q Max -6.55889 -1.19094 -0.04867 1.22791 7.68363 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -5.57999 0.94753 -5.889 8.10e-09 *** tsa36 -0.17041 0.03976 -4.286 2.27e-05 *** orb36 -0.36938 0.18803 -1.964 0.05015 . drb36 0.55435 0.11836 4.684 3.84e-06 *** stl36 2.23664 0.29189 7.663 1.33e-13 *** blk36 0.68844 0.20863 3.300 0.00105 ** pf36 0.40582 0.16024 2.533 0.01169 * mpg 0.06387 0.02059 3.102 0.00205 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.13 on 410 degrees of freedom Multiple R-squared: 0.2984, Adjusted R-squared: 0.2864 F-statistic: 24.91 on 7 and 410 DF, p-value: < 2.2e-16
So are you guys using regular season 2014-2015, lifetime states, playoffs stats or a combo.
Kind of important to know?
It just uses regular-season stats from the season in question as inputs… For instance, a player’s 2014-15 SPM is based on his regular-season rates from 2014-15 only.
I’ve been following the links to this site through 538.com. As I try to follow the methodology, I asK: What does “usgast” represent?
It’s just pace-adjusted usage (plays used, or FGA + 0.44 * FTA + TOV) per 36 minutes times pace-adjusted assists per 36 minutes.
Also, versatility is the cube root of pts/36 * reb/36 *ast/36.