Blog post by Marco Altini This is the continuation of a series of posts in which we started analyzing HRV4Training users generated data to highlight interesting relationships between self-reported annotations, actual training data as acquired through the Strava integration & physiological data. As our long term goal is to push further our knowledge on complex relations between physiological data, lifestyle and performance by providing users with a clinical grade tool, and outsourcing data collection to thousand of us, we keep documenting our progress on user generated data science on this blog. In the past, we covered day to day acute changes in HRV following trainings of different intensities, showing consistent reductions in HRV (and small increases in HR) on days following more intense training. We then moved on to analyze the relationship between training load and physiological data, showing that typically higher training load is associated with reduced heart rate, but no differences in HRV. Finally, we started looking at performance, as defined by running pace, and showed higher HRV for runners able to perform better (faster pace) - regardless of training load. Recently, we launched a new feature - VO2max estimation - which uses anthropometrics (weight, height, age & gender) as well as training data (pace, sub-maximal heart rate, etc.) to estimate your cardiorespiratory fitness level - or VO2max. You can find additional comparisons and details on our algorithms at this link. As our dataset grows, and more people are linking HRV4Training to their actual training data, we thought an interesting analysis would be to investigate the relation between running performance and our estimated VO2max. A strong relation would mean that our estimate is indicative of running performance. This time, we will also be defining performance differently. It's been 6 months since we launched the Strava integration, and more and more users are racing and accumulating data related to their racing season. For example, a month ago I ran my half marathon PR, and coincidently more than 5 Strava friends ran similar events on the same day. I figured it might be a good time to incorporate this information in the analysis and look at 10K, half marathon (21K) and full marathon (42Km) times as proxies to performance. In particular, we will look at:
DatasetData are always messy when acquired in unconstrained free living settings. Here we did some basic cleaning to get to a trustworthy sample of users data. First, I included only entries related to running trainings acquired via Strava (this is not necessarily data acquired via the app, as most users use Garmin watches that automatically upload data to Strava - me included). Then I excluded all non-human speeds or anything above 6.5 m/s. Then I removed all heart rates above 220 bpm. This procedure left us with about 1100 users and 30 000 trainings. At this point I used the remaining of the data to compute user-specific summaries, such as average heart rate during all trainings, maximal heart rate based on recorded data, etc - for this procedure, I included only users with at least 12 trainings collected from Strava, which typically means a period between 2 and 4 weeks of minimum app usage. Anything less was discarded. Based on this data we also computed HR and HRV (rMSSD) per user (average scores), training load (km/week) and estimated VO2max as you can read it in the app. Finally, for each user we grouped trainings around 10Km, 21Km and 42Km, determined the fastest times per person (removing again crazy outliers) and therefore obtained our user performance data. After this procedure, we ended up with 563 users. Below you can see age, BMI & gender for the users included in this analysis: As you can see from the plot above, we have a broad age range, from early 20s to late 60s, with a rather normal distribution peaking around 40 years old. BMI is more skewed, as usual, with most of the data being between 20 and 25 kg/m^2 and a few outliers with much higher BMI. Below we can see users split by sport and gender. While only activities tagged as runs are part of this analysis, we can see that users running distances between 10Km to the marathon are split between different sports, mainly runners but also a fairly high amount of triathletes and cyclists. Let's move on to answer our questions. How many users ran either a 10K, half marathon or full marathon in the past 6 months?As mentioned above, we ended up with 563 users that ran at least one of the distances (521 users running a 10Km, 321 running a half marathon and 79 running a full marathon). This is a decent sample as we have discarded much data and collected only a few months of measurements. See below for a breakdown in which we show also how many times users ran each distance, for example there are users that ran 10km more than 50 times, while full marathons were mainly run once (see also the distribution of the number of runs per person on the histograms at the right end side): How fast did we run?We have a good amount of activities. From the list above, only the best (fastest) activities per user were selected as the user best performance over the three distances. We also split runners in three categories depending on their best times, for example, fast runners are defined as runners that can run a 10Km below 40 minutes or a half marathon below 1 hour and 30 minutes or a full marathon below 3 hours. Average runners get to 47 minute and 30 seconds for a 10Km and 1 hour and 45 for a half marathon and sub 4 hours for a marathon, while slow runners are the remaining ones. Longer distances were given priority, so if your 10 km run is above 40 minutes but your half marathon time is below 1 hour and 30 minutes, you are still considered a fast runner, mainly because you simply might not have raced a shorter distance over this period of time. Let's have a look at the times and categories for 10km, half and full marathons (click the figure to enlarge, as usual): We have the fastest 10Km in 33 minutes (average 10Km in 52 minutes), fastest half marathon in 1 hour and 20 minutes (average 21Km in 1 hour and 51) and fastest full marathon in 2 hours and 37 minutes (average marathon time of 3 hours and 42 minutes), for a total of 46 fast runners, 181 average runners and 181 slow runners as well. Times provide quite a broad range on which we can analyze our data. Can we use HRV4Training's estimated VO2max as a good marker of running performance?In order to understand if we can we use HRV4Training's estimated VO2max as a good marker of running performance we need to analyze the relation between estimated VO2max and the results above, in terms of 10Km, half marathon and full marathon times. Do higher VO2max scores in the app belong to faster runners? Before we start looking at the data, the usual VO2max disclaimer: obviously, there is more to running performance than VO2max. Also, this is an estimate, and like any other estimate there are errors, which can be limitations of our algorithms as well as issues with noisy data being received from the sensors we use during training. This is not a philosophical discussion about VO2max or other performance metrics for running, the aim of this post is very practical, as we try to determine if we have a strong relation between estimated VO2max and running performance at the population level, on a broad range of performance times and VO2max level, so that you can potentially use the estimated VO2max as a proxy to running performance, the higher the value, the faster you could run, with proper training. Another important note: while VO2max per se depends on many different aspects, some also being related to body composition as well as genetics (let alone motivation to do the test, etc.) - the flaws of true VO2max are not necessarily the flaws of estimated VO2max. For example, our estimate (and everyone else's as a matter of fact) is mainly based on anthropometrics and sub-maximal heart rate. As explained elsewhere, sub-maximal heart rate is key as a person that can keep heart rate lower (with respect to her/his maximal) during a certain effort, can perform better (faster pace) than a person that is already maxing out at the same running pace. This principle is very intuitive and is the main principle behind our estimate. The limitations are therefore more related to our ability to extract these parameters from noisy workouts (getting pace & sub-maximal heart rate while dealing with missing data, noisy data, different elevation gains, your wrist watch not getting good heart rate data, your chest strap battery being down, Strava re-interpolating running distance from Garmin workouts, etc.). There are of course also genetic factors and differences between people in how heart rate changes during exercise, maximal heart rate, etc. - but again, this does not mean that we can't generalize and provide useful information back to the individual, as the link between sub-maximal heart rate and performance is very strong at the population level. Enough with the explanations, let's look at the data. We'll start with our 10Km runners as this is our best dataset, given the larger sample size, which is very important considering the noisy data: We can see a clear relation between VO2max and running performance, with times in the order of 0.5-0.65 hours (translation: between 30 and 40 minutes), hardly getting VO2max scores below 55 ml/kg/min. On the contrary, VO2max estimates for runners close to the hour, are just above 40 ml/kg/min. Let's look at the same relation but for half marathon data. Here the sample size is slightly smaller, but we still have 260 people: The relation holds, with greater estimated VO2max being consistently associated with lower racing times. Finally, full marathon times: Here we have a smaller sample size of 61 runners, which makes sense considering that 1) less people run marathons 2) it takes time to prepare a marathon - these data were collected over a period of about 6 months only, and therefore we should be able to expand this analysis just by waiting a couple of months extra. Nonetheless, the relation between VO2max and running performance is still consistent. As a last plot, we can see the same relation for all users together but clustered by running category based on their times. Again, a clear link between performance and estimated VO2max on this dataset: That was all. We've analyzed data from about 500 HRV4Training users who ran distances between 10km and a full marathon in the past 6 months. We spent some time cleaning up our noisy dataset and showed that the app estimated VO2max is strongly associated with running performance. There is clearly still much variability in VO2max among the different categories we created (fast, average and slow runners), which can be due to both errors in the estimate or simply the data being noisy as well as simply the fact that there is more to running performance than VO2max (adjusted R^2 for a model predicting race time using VO2max only as predictor is 0.40 - pretty good considering that when we typically look at other parameters, such as resting HR or rMSSD, we don't get beyond an R^2 of 0.01 - yep, that little). We tried to be aggressive on filtering out users with odd data (included only users with at least 2 to 4 weeks of measurements, removed outliers, etc.) as we anyway had plenty of data (we started with a thousand users with actual workouts data and 30 000 trainings), and indeed the greater sample size with respect to standard studies did the rest, allowing us to highlight clear differences in estimated VO2max between running performance categories. Something interesting for the future, would be to see if the estimated VO2max tracks well within an individual with respect to performance, meaning: if you run multiple races over a year (or years) is VO2max estimated in the app correlated with your running performance? Basically moving this analysis from the group to the individual level. But that's a story for another post (and which requires more longitudinal data). I hope this post was useful in showing how user generated data is messy but insightful, as long as we design a tool with research in mind, and we are aware of the limitations of each step involved from sensing to transmitting data to trying to derive conclusions. VO2max estimation in HRV4Training
0 Comments
Your comment will be posted after it is approved.
Leave a Reply. |
Register to the mailing list
and try the HRV4Training app! |