# Win Your Snake Draft: Calculating "Value Over Replacement" using R

43In prior posts, I have demonstrated how to download, calculate, and compare fantasy football projections from ESPN, CBS, and NFL.com and how to calculate players’ risk levels. In this post, I will demonstrate how to win your snake draft so that your team is projected to score the most points.

## The Snake Draft

In a snake draft, unlike an auction draft, the team manager has an assigned pick slot, at which point some players will already have been drafted. As a result, a manager has a limited selection of players to choose from, but can choose any player within the remaining pool of players.

### How to Win Your Snake Draft

The goal is to pick the remaining players at each pick that maximize the team’s sum of projected points for the starting lineup, while minimizing the downside risk of the starters. This is a key point because you will only receive points for who is in your starting lineup for a given week. Having strong bench players does you no good if they stay on the bench. In other words, picking a second quarterback before picking your first wide receiver is not a good idea.

A Harvard study found that the best drafting style was one that: 1) considered a player’s projected points **relative** to that of a typical replacement player (rather than a player’s number of projected points in absolute terms), and 2) maximized this value for each position in the starting lineup before drafting bench players. I will refer to requirement 1 as **value-based drafting**, which relies on a metric known as **value over replacement player** (VORP). I will refer to requirement 2 as **starting lineup first**.

When drafting players, it makes sense to draft your offensive starters first before you draft any bench players. Moreover, depending on your league settings, it’s generally best to wait on Kickers and Defenses until later rounds because they have lower predictability and score fewer points, on average, than other positions (see here).

The premise of value-based drafting is that it’s not enough to consider how many points a player is projected to score, but also how many points a typical player at the same position will score. Assume players A and B are QBs and players C and D are RBs, and that player A is projected to score 300 points and player B (typical replacement) is projected to score 285, while player C is projected to score 200 points and player D (typical replacement) is projected to 100 points. In this example, you might be inclined to pick player A because he is projected to score the most points (300), but the best choice would be player C (200). Why? Because player C is projected to score 100 points more than the typical replacement, whereas player A is projected to score only 15 points more than the typical replacement. In other words, although player A is projected to score more absolute points than player C, player C has higher value (over a replacement). In the remainder of the post, I demonstrate how to calculate a player’s value or VORP.

### The R Script

The R script for value-based drafting is located at:

https://github.com/dadrivr/FantasyFootballAnalyticsR/blob/master/R%20Scripts/Calculations/Value%20Over%20Replacement.R

### Calculating Value

To calculate a player’s value, we must first calculate the typical or “baseline” replacement player at the same position. Common ways to determine who is the typical replacement at each position include: a) average starter, b) worst starter, c), the number of “man games” needed at each position over an entire season and d) the number of players drafted at each position up to a given point in the draft (e.g., pick 100 for a 10-team league and pick 120 for a 12-team league). I decided to determine the typical replacement as the player whose position rank is equal to the number of players at that position who are taken (on average) by pick 100. There are ways to estimate this with a formula, but I decided to use prior draft information from my league (because each league has different settings in terms of the number of teams, number of starting slots per team, etc.). Specifically, I’ve estimated that by pick 100, about 17 players will be QBs, 35 will be RBs, 35 will be WRs, and 13 will be TEs. To get a more robust estimate of the typical replacement player, I then averaged the number of points from this player at each position with the player of the same position who was ranked 1 above and 1 below the player:

The 6 players with the highest **projected points** from last year were:

1. Aaron Rodgers (372)

2. Tom Brady (346)

3. Drew Brees (327)

4. Cam Newton (320)

5. Matthew Stafford (313)

6. Arian Foster (306)

The 6 players with the highest **value** from last year were:

1. Arian Foster (178)

2. Ray Rice (157)

3. Aaron Rodgers (156)

4. LeSean McCoy (137)

5. Tom Brady (129)

6. Calvin Johnson (122)

The differences between the points rankings and value rankings suggest that points rankings over-value QBs. In other words, even if you don’t get one of the top scoring QBs, there are numerous other high scoring QBs just below the top tier. This is not the same as with the other positions, where there are fewer options at the top (see figures below). In other words, value rankings are better than points rankings when comparing players across positions.

The R script also includes a section where, on draft day, you can specify the names of players that have been drafted, and it will show you the remaining available players ranked by value:

drafted c("Arian Foster","Ray Rice") draftData[!(draftData$name %in% drafted),]

As was demonstrated in my prior post, though, it is also important to consider a player’s risk level. Specifically, you should pick starters with a low risk level, whereas you should pick bench players with a higher risk level. We can view these subgroups of players (starters versus sleepers) with the following R commands:

#Starters (low risk) draftData[!(draftData$name %in% drafted) & draftData$risk <=4,] #Sleepers (high risk) draftData[!(draftData$name %in% drafted) & draftData$risk >=6,]

### Conclusion

- Draft your offensive starting lineup first before drafting bench players. Save Kickers and Defenses for later rounds because they are less predictable and score fewer points.
- For starters, pick the player with the highest value (over a typical replacement) who has a
**low risk**and a**high floor**. Bench players only benefit your team if a starter gets injured or they outperform a starter. In a standard league, 1500 points would likely put you in the top 10% of teams. Your goal is thus to maximize your starting lineup’s projected points. - For bench players, pick the player with the highest value (over a typical replacement) who has a
**high ceiling**. That way, one or more of your bench players has a chance to outperform your starters or be a solid replacement if your starters get injured. You should be willing to accept a higher risk for bench players than for starters. - Give players more weight if they have either:

- a
**high dropoff**(the player is projected to score many more points than the next best players at the same position), or - a
**high ADP Difference score**(i.e., the player tends to be under-valued compared to ADP and you might be able to draft him in a later round).

The R script accompanying this post calculates players’ values and allows you to sort low- and high-risk players by value and to remove drafted (unavailable) players.

In subsequent posts, I will demonstrate how to win your auction draft by maximizing your team’s projected points and minimizing its downside risk.

SORRY! This was posted in the wrong blog post.

Thank you for putting this info together. When I run the below script, I come across and error. I wonder if you know why that is?

qb < - projections[projections$pos=="QB",][order(projections[projections$pos=="QB",]$overallRank),]

Error in order(projections[projections$pos == “QB”, ]$overallRank) :

argument 1 is not a vector

Thank you again!

Are you sure you loaded the data with the previous command (see below):

load(paste(getwd(),”/Data/Risk-2013.RData”, sep=””))

OR:

load(“INSERTPATHHERE/Risk-2013.RData”)

You can get the data here:

https://github.com/dadrivr/FantasyFootballAnalyticsR/blob/master/Data/Risk-2013.RData

Hope that helps!

-Isaac

does you have a script that can give me a list of players?

Yes, the R script is here:

https://github.com/dadrivr/FantasyFootballAnalyticsR/blob/master/R%20Scripts/Calculations/Value%20Over%20Replacement.R

Do you have a new link to the R – script, because the link to github doesn’t work.

All your posts are very interesting and informative.

Thanks.

Thanks, Kaleb. The script is located here: https://github.com/dadrivr/FantasyFootballAnalyticsR/blob/master/R%20Scripts/Calculations/Value%20Over%20Replacement.R

I had an interesting idea.

What if you did a mock draft where everyone else just followed the top player on the NFL site based on their projections, but you used the shiny app. Do multiple mock drafts so that you would have an example draft for using your app at every draft position. How would your projected points compare to the other teams, and which draft position was the most advantageous to use your app for?

Hey Kaleb, thanks for the interesting suggestion. Another way that might be more efficient would be to calculate, for each player, the difference between our ranking and their ADP. Those players who are ranked higher in our system than ADP might be worth targeting in the draft. What would think about that?

Hey Kaleb, just updated the apps to include an ADP difference score that calculates your custom rankings against the ADP of common sources (Yahoo, ESPN, etc.). That should give you an idea of which players are relatively over/under-rated by each source. Hope that helps!

This value stuff has been intriguing me lately so I decided to go back and calculate the value for the Top 30 players last year based on the custom scoring of my league. I’ve always thought of the league as QB value heavy and it seems like it might be with 5 of the Top 10 players being a QB. I know most experts say to wait on a QB but looking at this wouldn’t you say that taking a top QB in the first round is probably a safe bet? Other things I noticed: Jimmy Graham comes in at #7 (first rounder) and the two top Defenses last year crack the Top 30 (at #26 & #29). If similar VOR’s were calculated for this year would it be smart to take , say, the Seattle defense in the 3rd round as shown here? Your site has a ton of great information! I just wish I would’ve found it earlier–trying to soak it all up before my draft! Thanks for sharing all your great work.

Peyton Manning – 611

Drew Brees – 416

Jamaal Charles – 276

Philip Rivers – 249

LeSean McCoy – 248

Matt Forte – 215

Jimmy Graham – 190

Josh Gordon – 175

Matt Ryan – 173

Andy Dalton – 166

Calvin Johnson – 159

Knowshon Moreno – 157

A.J. Green – 156

Demaryius Thomas – 156

Antonio Brown – 151

Marshawn Lynch – 144

Matthew Stafford – 140

Brandon Marshall – 126

Alshon Jeffery – 125

Andre Johnson – 125

Eddie Lacy – 121

DeMarco Murray – 121

Adrian Peterson – 121

Dez Bryant – 119

Eric Decker – 118

Carolina – 115

Ben Roethlisberger – 114

DeSean Jackson – 108

Seattle – 108

Pierre Garcon – 105

Those numbers seem very high to be value-over-replacement calculations (e.g., Peyton Manning is projected to score 611 points more than a typical replacement). Assuming they are VORs, yes it might make sense to take QBs earlier than other positions. You also want to evaluate the dropoff in VOR at each position. For example, you might not want to take Seattle in the 3rd round if the Panthers and 49ers are right behind them. If there’s a big dropoff, however, it might make sense to take Seattle.

Yeah, I was thinking the same thing when I saw the numbers but maybe you can tell me if I did it right. There were 14 total QB’s taken in the first 100 picks of our draft. Then I averaged the total fantasy pts of the 13-15 picks. I then take that number and subtract it from each of the QB’s total fantasy pts for the year. For example, Manning scored 1020 total fantasy points last year and Brees 825 (this league gives big bonuses and 7pts a TD). The average total fantasy points from the 13-15 QB’s was 409 pts. That gives Manning a VOR of 611 and Brees 416. I did a quick calculation from the 2012 season as well and in the Top 10 VOR’s there were 6 QB’s with Brees and Manning leading the way again (354 and 345 VORs). Last year the league winner had Manning and the year before the winner had Brees. With this scoring setup it seems that if you don’t get a top QB it can be tough to win.

Real quick on the defenses: 7 were taken in the Top 100 and the Top 5 VOR’s I calculated were Carolina 115, Seattle 108, KC 83, Cincinnati 71, and SF 55.

Yea, it sounds like a QB-dominated league. I’d definitely get a top QB in that case. I updated the app to calculate dropoff values so you can help identify which players to select (based on which positions drop in value quickest). Cheers!

Hey, Isaac.

Thanks so much for this great (and interesting) tool. Are there any plans to implement bonus points as part of the criteria? (5 pts for QB if over 300 yards), (5 points for RB or WR over 100 yards)?

Thanks!

Hey Chris,

We’d need to find projections for these categories in order to include them (unless we were to assume that each player will have the same number of yards every game). Do you know any site that has projections for these bonus categories?

-Isaac

Very interesting site, but I do have a question. When determining VOR, why in a 12 player league would you look at the worst starter. In general, the VOR numbers which seem to be used seem far too high. Since I am trying to beat my competitors FF teams, shouldn’t I want to base my VOR on the average starter for the 12 teams I am playing against. As an estimate, in a 12 team league, why not assume the average starter is the number 6 ranked player? Maybe I’m missing something, but when looking a Luck or Rodgers, they are farther ahead of the 4th 5 and 6th QBs than the 1 and 2 RBs are ahead of the 11, 12, 13 running backs. In the first and second round, isn’t the dropoff to the next position critical in getting gains over fellow players?

Hey Dan,

We chose to use the number of players picked at each position, on average, within the top 100 picks for our VOR baseline values (similar to worst starter in a 10-team league). This has been shown to be one of the more accurate approaches: http://www.footballguys.com/05vbdrevisited.htm. As discussed in the article, there are many different approaches to determining VOR baseline values. Using the average starter, as you suggest, is a very defensible approach. Feel free to modify the VOR baseline values in the app to fit your league and your approach. Note that the dropoff is unrelated to VOR baseline values. VOR normalizes rankings *between* positions, but does not affect differences *within* positions. In other words, Luck and Rodgers are much higher than other QBs not because of VOR baseline values but rather because of great differences in terms of projected points.

Hope that clarifies!

-Isaac

I think I understand how the VOR normalizes positions, but with the early pick in the first round, it seems like the dropoff might be the better guide. Assuming Luck, Rodgers or the Gronk actually meet their projections, their projections are much above the players directly below them, while Antonio Brown may have a similar VOR, but there are about 11-13 other WRs before you get that sort of dropoff. One thing I am considering is using a the Base VOR as an estimate for the number of players taken at that position each snake of the draft. This way, it would give me an idea of not only the best pick this round, but who potentially could be available when the draft snakes back my way. Another thought is maybe the various players should be valued off the top projections and counted down. Just some thoughts, feel free to tell me if you disagree.

Yes, it’s a good idea to consider VOR, along with floor/ceiling, risk, dropoff, ADP diff, and positional needs. Emphasizing floor for starters and ceiling for bench players.

Tremendous work, really appreciate the effort you put in.

I am looking forward to my first fantasy football year and found your site through my research. Learned all the important things for my draft.

But I have a question: As I understood, the VOR does not include such things as dropoff, risk, floor… So you need to consider these for your self as you wrote above me.

Now if I look up in your Projections App (standard), I see these 2 players//VOR//Risk.

10.Arian Foster//91.17//4.29

11.Matt Forte//82.96//3.07

Based on VOR I should draft Foster because he will be a starter, but Fosters risk number is also higher. So now I am confused which one will be the better pick.

The question is not this specific case but how much value I give the single numbers if the VOR is not exactly the same.

Or should I simply pick my starters based on VOR except their VOR is nearly the same 1-3 points and the look up the other categories?

I hope you can answer my question. Keep up the good work!

Hi Westbrook,

Great question. Don’t have a clear answer for you because the short answer is (a) we don’t know how much weight to give each variable and (b) it depends on who you’ve drafted, what positions you need, what positions your competitors need, and who’s left. In terms of predicting which players are the safest starters, I’d focus on VOR, floor, and risk (also considering dropoff for positional scarcity). I don’t want my starters to have a high injury risk! For bench players, I’d place greater emphasis on ceiling.

Hope that helps,

Isaac

Thank You for your reply Isaac!

Now I have another question: By picking first starters then bench player, do you mean including Kicker and Defense? I am reading everywhere else to consider drafting Defense and Kicker in the last 2 rounds. Seahawks maybe something in the 11th like in your app.

What is your opinion on that?

Hope you can reply me again, if it doesnt bother you.

Hi Westbrook,

Yes, I updated the post above to discuss Kickers and Defenses.

Hope that clarifies,

Isaac

Just stumbled across this site this week. Really enjoyed reading through the articles. Drafting for VOR makes so much sense to me. In the past, I’ve always just used some generic list of rankings.

I have a question for you Isaac. Is there a way to determine who has the best value in terms of keepers.

Trying to decide who to keep between Julio Jones (2nd round), Arian Foster (also second round) or Lamar Miller (6th round). Because it’s a PPR league, I was leaning towards Julio Jones but Lamar Miller in the 6th round might have more value in that position.

Again thanks for all the info. Great site. Look forward to reading more in the future!

Hi Mike,

In addition to VOR, ceiling, and floor, I would consider age as well as risk (injury and uncertainty risk) when considering keepers.

Hope that helps!

-Isaac

Hi Isaac,

Love the site! My league I’m the commissioner of is switching from an auction draft back to a 10 team snake and 12 team the year after all with roster changes. As a math guy myself and not having the empirical data to reference, can you provide or link the formulas you allude to for calculating number of players drafter per position by pick 100 (or 120) under the Calculating Value section of this article? My league set up this year has IDPs as well.

Thanks for all the work in this site, I try to visit everyday and I can’t wait for football to start!

Zephan

Hi Zephan,

Not sure what formulas you’re referring to. If you want to know different strategies for selecting a typical baseline player for purposes of calculating VOR, see here:

http://www.footballguys.com/05vbdrevisited.htm

Alternatively, if you want to see how we calculate VOR given VOR baseline values, the R script is here:

https://github.com/dadrivr/FantasyFootballAnalyticsR/blob/master/R%20Scripts/Calculations/Value%20Over%20Replacement.R

Hope that helps!

-Isaac

Hi Isaac,

Great tool you’ve built. How would I best customize to account for unique starting rosters (i.e. I’m in a 14-team league that starts 2qbs, 2 rb, 3wr, 1te).

thanks

Adriano, the main thing you can do is to change the VOR baseline to match your roster requirements. When you click “Change Data Settings” you can select the positions you want to include in the projections and set the VOR Baseline. I’d suggest that you start with a “Worst Starter” approach which in your case would be to set QB baseline at 28, RB at 28, WR at 42 and TE at 14. This should give you an indication of what the rankings would be for your league.

Hope that helps

Dennis

Hey Isaac,

Great site. I really enjoy reading it. I’m wondering what your thoughts are on valuing players in a league with a flex position. I’m in a PPR league where you start 1QB 2RB 2WR 1TE 2Flex(RB/WR/TE) DEF and K. I tend to think that all players who are flex eligible should be ranked together (meaning their VOR should be calculated using the same baseline) instead of by their individual position. Would like to know your thoughts on valuing players who are flex eligible.

Thanks.

Hey Vic,

Yes, flex positions can be grouped for purposes of VOR. There’s not an easy way to do this within the app apart from creating separate columns for the VOR of every different type of flex position (players should still be drafted based on basic VOR when drafting a player for their individual position). We can add this to our to-do list. In the meantime, you could alter the baseline values to reflect the values from flex leagues.

Thanks,

Isaac

Just found the site and can’t get enough of it. Have always wondered if % difference is better than than absolute difference when comparing VORP?

QB A – 300

Baseline QB – 200

TE C – 200

Baseline TE – 100

Both have VORP of 100, but TE is 100% gain over baseline compared to 50% for QB. Or better to think about 33% drop for QB compared to 50% drop?

Hi Mike,

Interesting question. Let’s assume 1 QB (400) and 1 RB (300) both have projected points 100% above the typical replacement at their position (200 and 150, respectively). All things being equal (including positional scarcity—which is decidedly not equal across positions), it’d be preferable to have the QB because he is projected to score 200 more points than the typical QB replacement whereas the RB is only projected to score 150 points above the typical RB replacement. What matters in your lineup is how many absolute points each player scores—we simply compare these absolute points to a baseline to meaningfully compare across different positions with different typical values. Thus, it makes sense to consider absolute differences in this context. But, obviously, it’s also important to consider other factors such as dropoff (i.e., positional scarcity), risk, etc.

Hope that helps,

Isaac

Hi Isaac,

I’m loving your site…amazing work you’ve done here. I’ve recently started learning R and I’m new to fantasy football, so I’ll be around often.

I have a question about how exactly you calculate VOR within your app. For example, using the current default data, the VOR Baseline for QB’s is set at 11. Matthew Stafford is the 11th ranked QB using this data but he has a VOR of -1.92. Shouldn’t his VOR be 0 since he is the 11th ranked player? What am i missing here? (Sorry if I missed the answer…I went through the article, comments, and all the links but couldn’t see what I missed)

Thanks!

After analyzing the data, it looks like you have used the average of the points for the 10th, 11th, and 12th players as your VOR baseline. (i.e. included the player above and the player below the “true” baseline, then averaged it out). Is that correct?

Thanks again, in advance.

Hi Kevin,

That is correct. We average the player before and after for a more robust estimate of typical replacement.

Hope that helps,

Isaac

Thanks!

Hi Isaac,

I recently commented to see if you had any tool that can calculate a dynamic VOR value during the course of a draft; I know this is on your slate for next season. I am trying to figure out a simple way to estimate this so I can manually calculate somewhat accurate VOR values after round 1.

Lets say I’m in a 12 team league (2 RB, 3WR) and I have my VOR baselines at 42 for RB and 48 for WR. If i draft a RB in round 1, how would I want to shift the baseline RB for VOR calculation? I suppose I could shift from 42 to 30 since there are 12 teams and I already have 1 RB? But RB2 is still a starter so this may be too drastic…

Let me know if you have any helpful thoughts or suggestions that can further help me out this draft season. Thanks for all the other tools/analysis provided, excellent work.

Hi Paul,

See section 6 of the following article for how to calculate a dynamic VOR:

http://footballguys.com/05vbdrevisited.htm

Hope that helps,

Isaac

Thanks, Isaac. This could potentially help, though I wonder how they came up with these multipliers. Also, the flex position complicates this process.

Hi all & Isaac,

First off, this is incredible. I’ve used it for a number of my more standard format leagues, and it’s been a game changer. I have a question about a different type league..

I play in an 8 team league (I know, I know), that plays 2 QBs, 2 RBs, 3 WRs, 1 TE…is there a way to change my inputs to more accurately estimate the value of QBs in this format.

Thanks,

-Matt

Hi Matt,

Yes, you can alter the VOR Baseline values. You could use how many QBs are drafted within the first 100 picks, or base it on worst starter—i.e., 16 (8 teams X 2 QBs).

Hope that helps,

Isaac