Hundred-mile trail races are an intricate dance of variables, some you can control, but many more that you cannot. Javelina Jundred is no exception. Falling on “Jalloween” weekend (October 28-29 this year), the race consists of five laps of single track within McDowell Mountain Regional Park near Fountain Hills, Arizona. Each lap is roughly 20 miles, and across the five laps runners climb over 7,500 feet. Racers have a total of 30 hours to complete the course.
Javelina is historically a fast race. Across the 20 years of race data in our database, the average overall finish time is 25 hours and 30 minutes. Compare that to the Hardrock 100 Endurance Run, a course with four times the climbing, which has an overall average of 40:04:00 (57 percent longer than Javelina). More comparable to Javelina is Western States, which across 47 years of data has an average of 24:31:00 (a four percent difference). The line plot below displays the historical averages for these races since 2011. I mention these two races specifically because podium finishers for both Hardrock and Western States 2022 were at the Javelina start line. Given the history, we expected it to be fast.
Hundred Mile Finish Times – All Racers
The 2022 Javelina was a throwdown, to say the least. A total of 622 racers toed the start line, and 401 completed the full 100 miles within the cutoff (64.5 percent finish rate). The graph shows the distribution of 2022 Javelina finish times (all finishers regardless of gender). Each bar is a half-hour interval that counts the number of finishers in that time range (for example, the red line points to Dakota Jones’s time, the only one between 12:30:00 and 13:00:00). The dotted line indicates the overall average time of 24:51:02. Overall, 40.15 percent of racers finished in under 24 hours, and the remaining 59.85 percent between 24 and 30 hours.
Runners who sent us their watch data
We had 18 runners from the 2022 Javelina Jundred send us data from their watches (including one “Did Not Finish” or DNF). Sixteen of them appear in the figure below (one finisher’s data is incomplete, and three runners sent data after this article was written). I should note that 10 out of 16 of these runners were in the top 20, so it’s a faster group than the race overall.
Runner cadence reveals what they’re doing (stopping, power-hiking, and running)
Over 100 miles, each runner’s watch logs more than 50,000 observations. The graph below plots runners’ cadence over the span of the entire race. The height of each curve represents how much time was spent at a given cadence (“Density” translates to how often it happened), measured in strides per minute (SPM). It’s amazing to me how clear the distinction between the three curves is — there’s one for stopped time (far left), one for power-hiking or fast walk cadence (middle), and one for running cadence (far right). This plot would probably look different with more middle/back of pack runners — I’d expect the two left curves to be larger.
Pace Plots — Runners who sent us their watch data
One advantage of having data from individual racer’s watches is that it allows for a deeper understanding of what happened on race day. The plot below shows how each runner managed their pace throughout the full 100 miles (data for one DNF is included at the end for comparison). Each panel visualizes an individual runner’s split pace over the race as a moving average and are ordered by overall place (001 = Dakota Jones, 006 = Devon Yanko, etc.). The dotted line represents the overall average split pace for the race (measured over all official results). A few things stand out: you can pick out the elevation profile of the course from the pace profile (the little bumps in the curves), all runners (even the elites) slow down progressively over time, and lead runners are less variable in their pacing. With more data, you could average this all out to show what the most “typical” pacing pattern is.
Top 3 finishers were pretty close
The race for the top two over all spots was close. Jones kicked it into high gear after mile 90 and hammered out his fastest splits of the day.
Runner GPS data reveals how a race shakes out over time
This plot is a little complicated. The top panel represents the top three runners’ paces over time (zoomed in version of the top three panels of the squiggle plot above). The bottom panel shows how far ahead first place Jones was, versus second place Jonathan Rea and third place Arlen Glick at different points in the race. It’s not super obvious — there are some GPS inconsistencies between watches — but the race was very close through the first two laps, with Jones, Glick, and Rea within a few hundred meters of one another until Jones more definitively took the lead around mile 32. Rea noted on Strava that he caught up to and briefly passed Jones around mile 80, which we can see when the green line in the bottom panel drops between miles 70 and 80, and Rea surpassed Jones’ split pace at mile 80. But Jones’s surge still clinched the race.
Similarly, Yanko’s & Riley Brady’s watches tell a deeper story about what happened on race day (unfortunately Nicole Bitter didn’t run with a watch so we can’t include all podium finishers). Yanko ran incredibly consistent overall but began to lose a bit of steam in the second half. Enter Brady, who picked up the pace considerably after mile 50, even bucking the overall slowdown typically observed for runners between laps three to four, and closed the gap with Yanko through laps four and five. Pretty amazing.
Cool assessment and visualizations!
As a data scientist training for their first ultra, I appreciate what you’re bringing to the table here. Love it! Could you make your notebook/scripts public on a GitHub? Definitely don’t have to share the raw data, but I would love to see the patterns and libraries you use for parsing.gpx and .fit files.
Love it! An different way to see a race. As a numbers geek, this is the data that I look at after my own runs and races, and when my friends post stats online.
I’ve ran JJ100 six times. 4 finishes and 2 DNFs. My 2016 (temp’s reached 104) and 2019 finish times were 23:49:57 and 23:50:27. My lap splits we’re almost the same for both races. If you run smart and treat each loop as a separate “race” the results will reflect it. The one factor that isn’t illustrated is the 30 degree temperature swing JJ has on average every year. Historically this race has a 50ish percent finishing rate.
This is so cool 🙂