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

25In 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**.

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.
- For starters, pick the player with the highest value (over a typical replacement) who has
**low risk**. - For bench players, pick the player with the highest value (over a typical replacement) who has
**high risk**.

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

[…] Calculate Players’ Value Over Replacement […]

[…] This post describes a Shiny app that calculates custom fantasy football rankings and projections for your league. The app allows you to modify your league settings, and calculates robust averages (Hodges–Lehmann estimator) of projections across sources. The players are ranked by their “value over replacement”. For more info on how the projections were calculated, see here. For more info on how “value over replacement” was calculated, see here. […]

[…] also worth noting that, by definition, they also have considerable downside potential, as well, so they are best drafted later in the draft as a low risk, high reward […]

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!

[…] Value Over Replacement […]

[…] Value Over Replacement […]

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!

[…] Value Over Replacement […]

[…] of these QBs to draft. Who you should draft should be based on the players’ value (in order to compare players across positions) and how much dropoff there is in projected points to the later picks. For example, let’s […]

[…] Value Over Replacement […]

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

[…] Calculate players’ value over replacement […]