(Possibly Dumb) Question on RAPM Replacement Level / Priors

Home for all your discussion of basketball statistical analysis.
Post Reply
nbacouchside
Posts: 158
Joined: Sun Jul 14, 2013 4:58 am
Contact:

(Possibly Dumb) Question on RAPM Replacement Level / Priors

Post by nbacouchside »

My understanding is the "standard RAPM" prior is a +0.0 and the regression moves you further away from that as more evidence accumulates. The problem, as I understand it, is that for lower minute players, there's less evidence so they get compressed towards +0.0 which looks like "average". So I was wondering if it would make sense to do something like this: 1) run RAPM with a +0.0 prior (standard) and then 2) take the average for players under 500 minutes played (or some other standard, maybe based on whatever the cutoff is for minutes played amongst the bottom 1/3 of players in the league, essentially 11th to 15th men) to be the replacement level prior for the next iteration and (3) re-run and then do that again iteratively until the replacement level prior stabilized (I'm guessing at somewhere around a -4 or -5).

Does what I'm saying make sense? Would it work? Is it dumb? If so, why?
DSMok1
Posts: 1125
Joined: Thu Apr 14, 2011 11:18 pm
Location: Maine
Contact:

Re: (Possibly Dumb) Question on RAPM Replacement Level / Priors

Post by DSMok1 »

Yes, this would work.

The challenge is how to implement the shrinkage to a value that is non-zero. The ridge regression algorithms in the R or Python packages by definition shrink towards zero.

There are several ways to do priors; the methodology that I have worked with is to simply subtract out the prior of the 10 players on the court from The observed data, run the ridge regression, and then add the prior back to the results.

0 minutes players end up closer to -4 or -5 when that stabilizes.
Developer of Box Plus/Minus
APBRmetrics Forum Administrator
Twitter.com/DSMok1
J.E.
Posts: 853
Joined: Fri Apr 15, 2011 8:28 am

Re: (Possibly Dumb) Question on RAPM Replacement Level / Priors

Post by J.E. »

nbacouchside wrote: Wed Apr 08, 2026 2:24 pm My understanding is the "standard RAPM" prior is a +0.0 and the regression moves you further away from that as more evidence accumulates. The problem, as I understand it, is that for lower minute players, there's less evidence so they get compressed towards +0.0 which looks like "average". So I was wondering if it would make sense to do something like this: 1) run RAPM with a +0.0 prior (standard) and then 2) take the average for players under 500 minutes played (or some other standard, maybe based on whatever the cutoff is for minutes played amongst the bottom 1/3 of players in the league, essentially 11th to 15th men) to be the replacement level prior for the next iteration and (3) re-run and then do that again iteratively until the replacement level prior stabilized (I'm guessing at somewhere around a -4 or -5).

Does what I'm saying make sense? Would it work? Is it dumb? If so, why?
I do a version of this that might be a bit simpler(?)
I create several buckets {below 100 MP, 100-200 MP, .. 900 - 1,000 MP} and run one pass with only the bucket dummy activated if such a player is present (but not the player variable itself).
That should give you good priors depending on playing time. It's definitely worth splitting offense and defense here, as the offensive priors are going to be more negative. Mine start below -4
nbacouchside
Posts: 158
Joined: Sun Jul 14, 2013 4:58 am
Contact:

Re: (Possibly Dumb) Question on RAPM Replacement Level / Priors

Post by nbacouchside »

J.E. wrote: Fri Apr 10, 2026 1:32 pm
nbacouchside wrote: Wed Apr 08, 2026 2:24 pm My understanding is the "standard RAPM" prior is a +0.0 and the regression moves you further away from that as more evidence accumulates. The problem, as I understand it, is that for lower minute players, there's less evidence so they get compressed towards +0.0 which looks like "average". So I was wondering if it would make sense to do something like this: 1) run RAPM with a +0.0 prior (standard) and then 2) take the average for players under 500 minutes played (or some other standard, maybe based on whatever the cutoff is for minutes played amongst the bottom 1/3 of players in the league, essentially 11th to 15th men) to be the replacement level prior for the next iteration and (3) re-run and then do that again iteratively until the replacement level prior stabilized (I'm guessing at somewhere around a -4 or -5).

Does what I'm saying make sense? Would it work? Is it dumb? If so, why?
I do a version of this that might be a bit simpler(?)
I create several buckets {below 100 MP, 100-200 MP, .. 900 - 1,000 MP} and run one pass with only the bucket dummy activated if such a player is present (but not the player variable itself).
That should give you good priors depending on playing time. It's definitely worth splitting offense and defense here, as the offensive priors are going to be more negative. Mine start below -4
Thanks for the responses, Jerry and Daniel!
Post Reply