Forerunner 255 VO2 max? what's wrong?

My new (since 30th october) Forerunner 255 has very weird behaviour for V02max calculation. I started out from previous watch, a 645 with a VO2 max on 51 and with the new watch it has linearly sloped down for each day and training. Now it says 43 but continously dropping. With now correlation to what I experienc and real efforts. two weeks ago I set a PR on the half marathon and during that week VO2max dropped 3 points. Doesn't make sense.

  • I would guess that the main reason is your change of watch. 645 is an old watch and would have a different table for calculating Vo2max compared to the 255. Garmin smooths the Vo2max value, so you will only see gradual changes. 

    Looking back at my own data over the years, I noticed 2 jumps
    1) +2 increase due to change in firmware in Sep 2022 for the 745 
    2) -2 decrease due to change in watch in May 2023 from the 745 to the 955

    You might want import your data into Runalyze and check their effective Vo2max instead. At least they'll be using a consistent algorithm for all your data.

  • Garmin smooths the Vo2max value, so you will only see gradual changes. 

    You are right that Garmin VO2 Max is an average, but so is effective VO2 Max in runalyze. (The individual per-activity VO2 Max values in runalyze are not smoothed/averaged tho, unlike the per-activity VO2 Max for Garmin.)

    BTW there are ways to see unrounded Garmin VO2 Max (I know you weren't really talking about rounding)

    1) Graphically:

    - on the watch: Training Status > VO2 Max

    - in Connect: either the website or app

    All of the sources show granular points on the graph, although the numbers are rounded. In the past, Connect graphs only had rounded points.

    2) Connect website > VO2 Max > export to CSV

    This exports VO2 Max numerical data with 1 decimal place, although the frequency of data points is only like 1 per week or something

    3) Export FIT file from Connect website and open in fitfileviewer.com.

    Look at the user VO2 Max field. This is your "Connect VO2 Max" before the activity, with 2 decimal places.

    If you want to see your current VO2 Max, you might need to record a dummy activity and export that.

    There's also session VO2 Max, which is VO2 Max at the end of the activity. It's not quite the same as user VO2 Max / VO2 Max in Connect tho.

  • In the past I would have recommended using runalyze and looking at VO2 Max (file) (also with 2 decimals), but then I realized that runalyze shows session VO2 max [*], which is not exactly the same as the VO2 Max in Connect. (I wondered why the fractional values would sometimes apparently be different than what was visible on the watch's VO2 Max graph.)

    [*] for activities which don't contribute a VO2 max (like basketball), it shows user VO2 Max which sucks bc it's inconsistent and there's also no indication *which* VO2 max is being shown.

  • Yes.... I wouldn't do change my HR max in user profile data....  ;-)

    Honestly, I have still some doubts how VO2 max may change after workouts. If the watch estimates that I could go forward with better performances and then the HR max user's profile is increased, I would expect that my capability to use oxygen is higher so to increase also VO2 max, but as I said, my experience won't go in that direction. ;-(

  • If the watch estimates that I could go forward with better performances and then the HR max user's profile is increased, I would expect that my capability to use oxygen is higher so to increase also VO2 max

    Yeah I agree.

    but as I said, my experience won't go in that direction. ;-(

    It's not unambiguously clear from your data that this is what happened though. Yes you ran faster in the final activity but your average HR was also higher, so for all you know, it was judged as a worse performance. We can't know for sure because all we know that is that the FirstBeat algorithm assumes a linear relationship between pace and HR (compared to max HR), why don't know *what* that relationship is. We are also only seeing the average HR value - we don't know how changes in HR during the activity are handled by the algorithm, and we don't know if any data was excluded by the algorithm.

    It would be unambiguous, for example, that if you ran the same speed for a lower HR, that would be a better performance. Or if you ran a higher speed for the same HR.


    If you want to see a non-averaged per-activity VO2 Max, you can make an account at runalyze.com, a free site which syncs with your Connect account.

    It calculates its own VO2 Max based on pace and HR data. I *think* the algorithm is similar to what Garmin does, except that runalyze doesn't have the FirstBeat secret sauce of discarding bad data.

    You can look at the per-activity VO2 Max values in runalyze and see if at least runalyze thinks the final activity was better than the others. (Runalyze will *also* show "vo2 max (file)", but that's Garmin VO2 Max for the activity, and it still seems to be some sort of average, so you won't really be able to use it to compare runs.)


    There is also another way to tell how *Garmin* thinks your performance during your run affected your VO2 Max: performance condition. Performance Condition is actually defined as the % change in VO2 Max of your current performance during the activity with your VO2 Max (at the start of the run, I think).

    e.g.

    Performance condition of 0 = no change: your current performance is the same as your starting VO2 Max

    Performance condition of +1 = your current performance is 1% better than your starting VO2 Max

    Performance condition of -1 = your current performance is 1% worse than your starting VO2 Max

    So if you think that your VO2 Max should have improved due to a run, at the very least, the performance condition graph should be positive at some point during the run. It doesn't necessarily have to be positive at the end of the run tho, although ofc that helps.

    If your performance condition was 0 or negative for the entire run, then I would expect your VO2 Max to decrease.

    Anecdotally, I recently had a period of about 3 months where my VO2 Max was constantly improving (by small fractions) with every run. Accordingly, at the beginning of every run, I had a positive VO2 Max.

  • Here's my effective VO2 max from Runalyze in last period (month):

    Values from Runalyze are a bit lower than Garmin (actually Garmin says 45, Runalyze says 42,5), I guess it's because Garmin tells about VO2 max while Runalyze is Effective VO2 max?

    Effective VO2 max continued to decrease in the last days (Tue 13, Thu 15) despite I didn't run at all being sick at home. It's normal? I thought VO2 should be impacted only after a run data.

    So both Garmin and Runalyze are in agreement my VO2 max is decreasing, but my user's HR max is increased.

  • Since you use runalyze, like I said, you can use it to test your assertion that the final run out of the 9 you posted was actually a better performance than the others.

    Just like at the per-activity VO2 Max that runalyze calculates for each of the activities (*not* VO2 Max (file)). See whether the final activity's VO2 Max is higher or lower than the others.

    Effective VO2 max continued to decrease in the last days (Tue 13, Thu 15) despite I didn't run at all being sick at home. It's normal? I thought VO2 should be impacted only after a run data.

    Because effective VO2 max is a rolling average, it could change with the passage of time even if you don't run.

    Garmin's VO2 Max also appears to be some sort of rolling average.

    So both Garmin and Runalyze are in agreement my VO2 max is decreasing, but my user's HR max is increased.

    Like I said, an increase in HR max would only cause your VO2 max to increase if all other things were equal.

    All other things are not equal in this case. You had several runs of varying paces and heart rates. Time is passing, so even though you aren't running, older runs that were previously included in the rolling average are no longer taken into account.

    To make this very clear, imagine 2 twins Rob and Bob who are identical in every way, except Rob has an HR max of 190 and the Bob has an HR max of 200.

    Both Rob and Bob run 10k in 50:00 with an average HR of 150 (sub-maximal effort *). Even though their efforts appear to be identical, Bob's effort (150 / 200 = 75% max HR) was easier than Rob's (150 / 190 = ~79% max HR).

    As a matter of fact, all of their runs (improbably) have identical paces and heart rates.

    Bob's VO2 Max will be estimated as higher than Rob's by both Garmin and Runalyze, because Bob's extrapolated maximal effort will be faster than Rob's. During a maximal effort (e.g. 10k race), Bob will be able to push his HR higher than Bob, and therefore Bob's 10k race result should be faster than Rob's. 

    My only point was that max HR is the key physiological parameter for Garmin's VO2 Max estimation algorithm. Again if you manually made a huge change to your max HR (e.g. changing it from 162 to 192), I would expect that to have a dramatic effect on your estimated VO2 Max. It would mean that Garmin would estimate a much faster maximal effort than you can actually run (assuming that your max HR is really 162 and not 192), which means it would overestimate your VO2Max to a high degree.

    [*] for a 10k race, a maximal effort would probably be an average HR of around 90-95% of max HR

  • So both Garmin and Runalyze are in agreement my VO2 max is decreasing, but my user's HR max is increased.

    To explain this more concisely, both Garmin and Runalyze apparently think that your decrease in performance (according to their algorithm) outweighs the increase in max HR.

    Additionally, I think the increase in max HR should only apply to future runs. It won't be retroactively applied to past data. (Tbf I'm not sure exactly how this would affect vo2max estimations in either Garmin or Runalyze. i.e. idk how long it would take for a small or large change in max HR to be reflected in the estimates.)

  • The last workout in Runalyze reported an effective VO2 max decrease to 41,2.