Introduction
This R Markdown document analyzes NCAA quarterback performance and pressure metrics for Week 4, combining them into an overall score to rank quarterbacks. The analysis involves data manipulation, scaling, and weighting of various metrics to create a comprehensive ranking.
Load Data
# Load NCAA Files
passing_stats = read.csv("C:/Users/nkatzman1/Downloads/R-Studio Data/NCAA_Full_Passing_Stats.csv")
passing_pressure = read.csv("C:/Users/nkatzman1/Downloads/R-Studio Data/NCAA_Full_Passing_Pressure.csv")
time_in_pocket = read.csv("C:/Users/nkatzman1/Downloads/R-Studio Data/NCAA_Full_Time_in_Pocket.csv")
Data Preparation
# Merge the datasets by 'player', 'player_id', and 'team_name'
NCAA_QB_df = merge(passing_stats, passing_pressure, by=c('player', 'player_id', 'team_name'))
Full_NCAA_QB_df = merge(NCAA_QB_df, time_in_pocket, by=c('player', 'player_id', 'team_name'))
# Filter quarterbacks with at least 80 passing attempts (throws)
Full_NCAA_QB_df = Full_NCAA_QB_df |>
filter(attempts >= 80)
# Ensure the relevant columns exist and handle any NA values
Full_NCAA_QB_df[is.na(Full_NCAA_QB_df)] = 0 # Replace NAs with 0s for calculations
Scaling QB Pressure Metrics
# Scale the pressure metrics individually to be out of 100
Full_NCAA_QB_df = Full_NCAA_QB_df |>
mutate(
scaled_sacks = 100 * (sacks - min(sacks)) / (max(sacks) - min(sacks)),
scaled_time_to_throw = 100 * (avg_time_to_throw.x - min(avg_time_to_throw.x)) /
(max(avg_time_to_throw.x) - min(avg_time_to_throw.x)),
scaled_scrambles = 100 * (scrambles - min(scrambles)) / (max(scrambles) - min(scrambles)),
scaled_hit_as_threw = 100 * (hit_as_threw - min(hit_as_threw)) / (max(hit_as_threw) - min(hit_as_threw))
)
Creating QB Pressure Score
# Create the scaled Pressure Score using the weights: sacks (30%), time to throw (30%), scrambles (30%), hit as thrown (10%)
Full_NCAA_QB_df = Full_NCAA_QB_df |>
mutate(pressure_score = (scaled_sacks * 0.30) +
(scaled_time_to_throw * 0.30) +
(scaled_scrambles * 0.30) +
(scaled_hit_as_threw * 0.10))
Scaling QB Performance Score
# Scale the performance metrics individually to be out of 100
Full_NCAA_QB_df = Full_NCAA_QB_df |>
mutate(
scaled_ypa = 100 * (ypa - min(ypa)) / (max(ypa) - min(ypa)),
scaled_touchdowns = 100 * (touchdowns - min(touchdowns)) / (max(touchdowns) - min(touchdowns)),
scaled_twp = 100 * (turnover_worthy_plays - min(turnover_worthy_plays)) /
(max(turnover_worthy_plays) - min(turnover_worthy_plays)),
scaled_btt = 100 * (big_time_throws - min(big_time_throws)) /
(max(big_time_throws) - min(big_time_throws)),
scaled_comp_percent = 100 * (accuracy_percent - min(accuracy_percent)) /
(max(accuracy_percent) - min(accuracy_percent))
)
Creating a QB Performance Score
# Calculate the scaled Performance Score with weights: YPA (20%), TDs (20%), TWP (20%), BTT (20%), Comp% (20%)
Full_NCAA_QB_df = Full_NCAA_QB_df |>
mutate(performance_score = (scaled_ypa * 0.20) +
(scaled_touchdowns * 0.20) -
(scaled_twp * 0.20) +
(scaled_btt * 0.20) +
(scaled_comp_percent * 0.20))
QB Score Calculation
# Combine the Performance and Pressure Score: We'll still weigh the performance more heavily using a 80/20 split
Full_NCAA_QB_df = Full_NCAA_QB_df |>
mutate(Overall_QB_Score = (performance_score * 0.8) + (pressure_score * 0.2))
Ranking and Display
# Rank quarterbacks by the final score
NCAA_QB_Rankings = Full_NCAA_QB_df %>%
arrange(desc(Overall_QB_Score)) %>%
select(player, team_name, Overall_QB_Score, performance_score, pressure_score)
# Display the top 10 quarterbacks
formatted_rankings = formattable(NCAA_QB_Rankings,
list(
Overall_QB_Score = color_tile("white", "green"),
performance_score = color_tile("white", "gold"),
pressure_score = color_tile("white", "red")
))
formatted_rankings
| player | team_name | Overall_QB_Score | performance_score | pressure_score |
|---|---|---|---|---|
| Cam Ward | MIAMI FL | 57.472018 | 64.2885116 | 30.206044 |
| Jaxson Dart | OLE MISS | 57.431966 | 64.3054109 | 29.938187 |
| Shedeur Sanders | COLORADO | 56.492454 | 53.1317081 | 69.935440 |
| Dillon Gabriel | OREGON | 41.040486 | 44.1457308 | 28.619505 |
| Diego Pavia | VANDERBILT | 39.513426 | 35.1898600 | 56.807692 |
| Luke Altmyer | ILLINOIS | 38.710332 | 36.5300854 | 47.431319 |
| Kurtis Rourke | INDIANA | 38.507009 | 41.8439257 | 25.159341 |
| Kaidon Salter | LIBERTY | 38.418700 | 35.3877289 | 50.542582 |
| Will Rogers | WASHINGTON | 38.217475 | 40.5857171 | 28.744505 |
| Cade Klubnik | CLEMSON | 37.767819 | 44.7114902 | 9.993132 |
| Eli Holstein | PITTSBURGH | 37.452363 | 29.6873628 | 68.512363 |
| Chandler Morris | N TEXAS | 37.365790 | 40.8655476 | 23.366758 |
| Garrett Nussmeier | LSU | 37.043665 | 42.4821226 | 15.289835 |
| Billy Edwards Jr. | MARYLAND | 36.837552 | 42.1726264 | 15.497253 |
| Brendan Sorsby | CINCINNATI | 35.244257 | 35.1737965 | 35.526099 |
| Blake Shapen | MISS STATE | 35.238532 | 30.5522859 | 53.983516 |
| John Mateer | WASH STATE | 34.417058 | 28.1030527 | 59.673077 |
| Josh Hoover | TCU | 34.372155 | 39.4720620 | 13.972527 |
| Anthony Colandrea | VIRGINIA | 33.551965 | 29.6535550 | 49.145604 |
| Haynes King | GA TECH | 33.373510 | 40.1097445 | 6.428571 |
| Emmett Brown | S JOSE ST | 33.144505 | 35.7438175 | 22.747253 |
| Dylan Raiola | NEBRASKA | 32.832863 | 33.9579740 | 28.332418 |
| Gio Lopez | S ALABAMA | 32.458080 | 30.1203341 | 41.809066 |
| Kyle McCord | SYRACUSE | 31.849099 | 32.4655631 | 29.383242 |
| Hank Bachmeier | WAKE | 31.626809 | 26.3257507 | 52.831044 |
| Nico Iamaleava | TENNESSEE | 31.490889 | 29.1850401 | 40.714286 |
| Seth Henigan | MEMPHIS | 30.845404 | 29.5519479 | 36.019231 |
| Owen McCown | UTSA | 30.823770 | 27.9129539 | 42.467033 |
| Darian Mensah | TULANE | 30.682675 | 25.1349373 | 52.873626 |
| Jordan McCloud | TEXAS ST | 30.660897 | 31.8917122 | 25.737637 |
| Fernando Mendoza | CAL | 30.056107 | 23.7541996 | 55.263736 |
| Behren Morton | TEXAS TECH | 30.043770 | 31.9812234 | 22.293956 |
| Ben Wooldridge | LA LAFAYET | 29.665688 | 31.6477009 | 21.737637 |
| Noah Fifita | ARIZONA | 29.300505 | 27.5030354 | 36.490385 |
| Max Brosmer | MINNESOTA | 28.707721 | 23.8973569 | 47.949176 |
| Maalik Murphy | DUKE | 28.501484 | 33.4633937 | 8.653846 |
| Mikey Keene | FRESNO ST | 28.084312 | 30.2427530 | 19.450549 |
| Devon Dampier | NEW MEXICO | 27.544134 | 25.7093576 | 34.883242 |
| Sam Leavitt | ARIZONA ST | 27.524233 | 19.5539869 | 59.405220 |
| Garrett Greene | W VIRGINIA | 27.231978 | 20.3267169 | 54.853022 |
| Miller Moss | USC | 27.035669 | 27.5445857 | 25.000000 |
| Alan Bowman | OKLA STATE | 26.494213 | 32.3141949 | 3.214286 |
| Carson Beck | GEORGIA | 25.579766 | 25.7367272 | 24.951923 |
| Nicholas Vattiato | MIDDLE TN | 25.481778 | 21.7612201 | 40.364011 |
| Brayden Schager | HAWAII | 25.185737 | 15.8836134 | 62.394231 |
| Jacob Zeno | UAB | 24.938233 | 21.6738213 | 37.995879 |
| Taylen Green | ARKANSAS | 24.802954 | 14.4580190 | 66.182692 |
| Jake Retzlaff | BYU | 24.695965 | 23.5499016 | 29.280220 |
| Cole Snyder | E MICHIGAN | 24.530212 | 17.6967621 | 51.864011 |
| DJ Uiagalelei | FLORIDA ST | 24.410566 | 15.9294160 | 58.335165 |
| Kirk Francis | TULSA | 24.362591 | 24.6376476 | 23.262363 |
| Keyone Jenkins | FIU | 23.744001 | 20.8149599 | 35.460165 |
| Ethan Hampton | N ILLINOIS | 23.557562 | 24.7848645 | 18.648352 |
| Taisun Phommachanh | UMASS | 22.935611 | 12.7265196 | 63.771978 |
| Brady Cook | MISSOURI | 22.562048 | 22.1654718 | 24.148352 |
| Kyron Drones | VA TECH | 22.552973 | 15.3182764 | 51.491758 |
| Christian Veilleux | GA STATE | 22.429330 | 25.4302068 | 10.425824 |
| Kadin Semonza | BALL ST | 22.187611 | 20.6359558 | 28.394231 |
| Gevani McCoy | OREGON ST | 21.455384 | 15.4452600 | 45.495879 |
| Jackson Arnold | OKLAHOMA | 21.091653 | 17.4943746 | 35.480769 |
| Skyler Locklear | UTEP | 20.778304 | 11.0693772 | 59.614011 |
| Rocco Becht | IOWA STATE | 20.741094 | 23.3405155 | 10.343407 |
| Byrum Brown | USF | 20.110299 | 8.7360879 | 65.607143 |
| Brendon Lewis | NEVADA | 20.013189 | 14.0755528 | 43.763736 |
| Tucker Gleason | TOLEDO | 19.671506 | 18.3819648 | 24.829670 |
| Avery Johnson | KANSAS ST | 19.640548 | 12.4088585 | 48.567308 |
| Tyler Huff | JVILLE ST | 18.953063 | 15.1817135 | 34.038462 |
| Joe Labas | C MICHIGAN | 18.838456 | 15.3931936 | 32.619505 |
| Joey Aguilar | APP STATE | 17.971392 | 15.7832645 | 26.723901 |
| Cam Fancher | FAU | 17.883678 | 2.4751332 | 79.517857 |
| Ben Finley | AKRON | 17.882652 | 12.4110077 | 39.769231 |
| CJ Ogbonna | BUFFALO | 17.845030 | 14.1043642 | 32.807692 |
| Brock Vandagriff | KENTUCKY | 17.671031 | 10.4775248 | 46.445055 |
| Ashton Daniels | STANFORD | 17.401155 | 9.8472541 | 47.616758 |
| Donovan Smith | HOUSTON | 16.254574 | 8.8927372 | 45.701923 |
| Cade McNamara | IOWA | 16.073445 | 14.0032072 | 24.354396 |
| Connor Bazelak | BOWL GREEN | 15.934723 | 15.5039116 | 17.657967 |
| JC French | GA SOUTHRN | 15.831425 | 11.0787728 | 34.842033 |
| Ethan Vasko | COAST CAR | 15.385651 | 14.0754701 | 20.626374 |
| Jake Garcia | E CAROLINA | 14.518583 | 8.0726799 | 40.302198 |
| Isaac Wilson | UTAH | 13.541008 | 7.5454215 | 37.523352 |
| Maddux Madsen | BOISE ST | 13.316086 | 13.3326078 | 13.250000 |
| Ethan Garbers | UCLA | 12.540223 | 2.5451276 | 52.520604 |
| Aidan Chiles | MICH STATE | 10.953191 | 2.8068740 | 43.538462 |
| Riley Leonard | NOTRE DAME | 10.719654 | 4.3944170 | 36.020604 |
| Brayden Fowler-Nicolosi | COLO STATE | 10.233701 | 3.4325800 | 37.438187 |
| Brett Gabbert | MIAMI OH | 10.138036 | 3.7302375 | 35.769231 |
| Jalon Daniels | KANSAS | 7.378948 | -0.6616171 | 39.541209 |
| Hunter Watson | SM HOUSTON | 6.793477 | -2.9954482 | 45.949176 |
| E.J. Warner | RICE | 6.790657 | 4.2846817 | 16.814560 |
| Devin Kargman | KENT STATE | 5.776451 | 1.5900687 | 22.521978 |
| Jaylen Raynor | ARK STATE | 3.605570 | -4.2502494 | 35.028846 |
| Evan Svoboda | WYOMING | 3.037471 | -6.0372960 | 39.336538 |
Conclusion: Cameron Ward, Jaxson Dart, and Shadeur Sanders have dominated the field. Ward just edged out Dart for the top spot, with Sanders thriving despite having the highest pressure grade in the model.
Ward and Dart delivered more conventional success, benefiting from solid offensive line play, while Sanders excelled even under constant pressure, showcasing remarkable resilience and adaptability.
Excited to share these insights into the top-performing QBs through Week 4 of the 2024 season!
Let me know what model you want to see next!