Not everyone has a powermeter on all their bikes. During
winter time you probably ride a bike which is less expensive than your race
bike or you do some cyclo-X training without a powermeter. However, since we
all love to fill our PMC (Performance Manager Chart) to track our training load
we need TSS* (A.Coggan) for our rides. But because we don’t have a powermeter
on all our bikes we must have an alternative to derive our TSS.
There are some measures available in terms of training
strain like TRIMPS (Bannister, 1974) or RPE (Rate of Perceived Exertion) (Borg 1970,1998). However these measures do
not relate to TSS (and no wonder because TSS is based on power). There is also
a table from triathlete guru trainer Joe Friel (see Table below) in which he converts
from RPE/HRs to TSS. You can also use your own experience if you do the same
rides under same conditions which you registered before.
I decided to look at some of my own data to see
whether I could come to a reasonable estimate. I do not register RPE (something
I will start doing for next season) so I used some other data for some small
analyses to derive a TSS. I used TRIMPS, TRIMP zonal score and average HR which
are calculated per ride in Golden Cheetah (GC). I used average HR just as a
possible extra (explanatory) variable. I did not change the weights in the
zones in GC to calculate the TRIMP zonal score. The idea behind this zonal
score is that when you get into higher heart rate zones there is a higher
weight applied in the TRIMPS formula.
My objective was to see whether I could use the above
metrics (and which was best) to relate to actual TSS. I was also interested to
see how Joe Friels table matched with actual TSS. In this way I could determine
which metric (method) better related to TSS. This last exercise turned out to
be some more difficult than I expected. You can easily export your aggregate
ride metrics data from GC, but to calculate the estimated ‘Joe Friels’ TSS (from
now TSS_Friel). I had to export all my raw data files and append them. I used a
macro for this task which I found on the internet (http://sites.madrocketscientist.com/jerrybeaucaires-excelassistant/merge-functions/csvs-to-sheets),
because the problem is not appending (you could use a DOS statement for that),
but to include a ride name to be able to aggregate the data per ride after
derivering the TSS_Friel for each record.
I exported my metrics data (TRIMPS, etc.) and uploaded it to SAS. I cleaned the data w.r.tt files in which my HR monitor was off, rides with no powerdata (so no TSS to estimate), etc. I also had a few rides with TSS above 300. Since I do not do rides in winter times with TSS above 300 I excluded those data, because if I don’t do those rides it’s no use of trying to predict them. The calculated TSS_Friel were later merged to the GC aggregate file. Below some statistics w.r.t the rides.
I exported my metrics data (TRIMPS, etc.) and uploaded it to SAS. I cleaned the data w.r.tt files in which my HR monitor was off, rides with no powerdata (so no TSS to estimate), etc. I also had a few rides with TSS above 300. Since I do not do rides in winter times with TSS above 300 I excluded those data, because if I don’t do those rides it’s no use of trying to predict them. The calculated TSS_Friel were later merged to the GC aggregate file. Below some statistics w.r.t the rides.
Basically on average I do quite some rides of around
1.5 hours. My average HR is around 145 (OBLA HR is around 155) and most of the
time HR is between 138-150 (89%-97% of OBLA HR). In terms of TSS on average 111. Mind these
are just averages and as such does not say that much of how TSS is generated.
Below the Pearson correlations (all
significant p<0.01) between the metrics with TSS:
The spread of the error terms seems a little larger
for the TRIMPS model than for the TSS_Friel model, but both models show
heteroskedasticity. Again the Friel model just a tiny better. In terms of total
model error the judgement is 335 vs 376 in favor of TSS_Friel.
I also ran a model with the TRIMPS and average HR: R2
goes to 0.84 and error to 305. Statisticians would say “be parsimonious in
parameters’’, because now we have 3 + 3 + 1 intercept in the model. Since I
also want to keep it simple for myself I will agree on that one. In the figure below you see both model plotted in terms of
model predicted TSS and actual TSS. The left one is the TSS_Friel and the right
one TRIMPS.
On the whole the TSS_Friel table seems a good
alternative way to estimate my TSS when not riding on your ‘powermeterbike’. In
all fairness TRIMPS is not really (practically) that much worse. For my rides
(so for my ‘domain’’) I however will choose to use the TRIMPS. The reason is a
practical one. Because for the TSS_Friel I have to first export my ride and
convert on a record level with the Friel table. This is a bit too much work and
so if I impute the TRIMPS (which is automatically calculated in GC) in the equation
(which I put in Excel) I immediately have my estimatedTSS.
Of course TSS and TRIMPS won’t align and that’s not
strange because they are two different things. As you get in better form your
HR for producing the same wattage will go down (and vice versa for less form). Since
TRIMPS is based upon heart
rate is it also more variable due to extraneous influences like temperature,
stress, etc. It will also give you less "credit" for supramaximal
efforts (there is a ceiling effect due to maximal HR). This last remark,
however can be counteracted by placing more weighting on the zonal scores
(which I let on default in GC). TSS is based on power and as such more
responsive.
Hopefully it gives some inspiration for your own data
and this kind of estimate is good enough for you too. If you do not use have HR
data (anymore) try to use RPE scores and multiply those scores by the time of
your ride and see what the relation is with TSS. Maybe try some other data
transformations to tweak the relation with TSS. If you are a Strava Premium
Member try to use the Sufferscore to model. Maybe that gives an acceptable
result too.
*TSS is a registered trademark
from Trainingpeaks
No comments:
Post a Comment