Introducing the 1RM Analysis Tab, Our Biggest Update Yet

RepOne Strength
The Next Dimension in Strength
7 min readMar 3, 2018

--

We’ve taken our time with analysis features in the OpenBarbell app for two main reasons.

First, there’s a lot of raw information OpenBarbell records during each set you do. We launched the app back in late 2016 as nothing but a remote display mirroring the data on the small screen on each OpenBarbell. Since then we’ve built in over 40 new metrics, the ability to store infinite rep data forever, export it via CSV for custom analysis, plus a whole suite of usability features like auto-reconnect and rest timers. We wanted to make sure our customers could extract all the sweet data nectar they paid good money to measure.

Second, there are A LOT of things you can learn from analyzing this information. So many that it’s kind of paralyzing to imagine which analysis features deserve to be built first. Around the time we shipped the first OpenBarbell V3’s we were putting the finishing touches on a visual redesign and a host of new Set Metrics, all the while knowing we were ready to switch gears and tackle this problem.

From day one we knew a 1RM analysis feature was high on our customers wish list. The research shows how promising a simple linear regression can be for maximal strength estimation, but the problem would be by no means straightforward. We knew it had to represent the data graphically and it had to make it easy to modify old workout data, both things that were also high on the customer wish list, and both things that would be highly involved and custom built for our app. The tipping point for us, when we decided we want to choose 1RM analysis as a feature, was when we learned just how difficult (and fun) this would be to do right.

Doing it right

Initially, we drew a lot of inspiration from a paper by Boris Jidovtseff on the linear relationship between load and velocity. It confidently demonstrated that linear projections on sub-maximal velocity data could be used to extrapolate to 1RM. This is an important observation to make, but doesn’t quite get us to practical implementation.

The equation above in figure two would likely be highly accurate on a database of all of our users in aggregate, but doesn’t quite work on an individual basis. For two athletes of equal strength, one 6'4" and the other 5'2", the equation would assume the same aggregate AV@1RM of 0.23 m/s for both athletes, which would likely estimate a 1RM that’s conservative for one athlete and ambitious for the other.

Additionally, we didn’t want our 1RM analysis to boss people around. Our customers diligently log great data every session, we shouldn’t have to constrain them to a specific protocol to complete our calculation. So what data do we include? At what point do we age out old data? Our database has literally thousands of different tags to differentiate sets of the same exercise name, how do we handle that?

Practical Application

After quite a bit of iteration we settled on a pretty simple implementation based on four key variables.

  1. Exercise

This one’s obvious, we can’t calculate a 1RM without knowing what exercise data to look at, so we simply offer a list of existing exercise names in a drop-down list.

2. Tags

Tags were interesting. Logically we knew some things needed to be specifically included and/or excluded. For example, you want to calculate only your squat sets when you were wearing a belt, but you want to exclude all sets done while wearing knee wraps. The first Include field makes sure every set calculated must have that specific tag, and the Exclude field makes sure none of the included fields have that specific tag.

3. Velocity @ 1RM

Having a variable velocity at 1RM is central to this entire calculation. For one reason or another, it isn’t entirely agreed upon in the literature that 1RM velocity is variable between athletes, but it’s something we see every day in practice and in our customers trends. We recommend starting with you or your athlete’s slowest rep velocity for that exercise in the specified date range, and reducing it only if you’re confident a maximal effort lift can be completed slower than that. Once you use this feature you’ll see how a difference in a few hundredths of a meter per second can impact the output of the analysis significantly.

4. Date Range

A customizeable date range is key for optimal calculation. Ideally we would use only the most recent data, as your current strength level can be quite different than what your training indicated even one week ago, but in some cases a longer duration analysis is pragmatic.

A second application of an adjustable date range is our single-session 1RM protocol. If you want a quick, perfectly recent 1RM estimation, simply do the following:

Visualization and Curation

As we mentioned above, a big reason we wanted to build this feature was to enable the first data visualizations in the OpenBarbell app, as well as the ability to easily curate your velocity history. When we started testing 1RM we realized just how much junk was in our workout history, so we made it effortless to make the necessary changes.

Left is a 1RM prediction for squat, right is the red erroneous data point.

After the fields listed above are specified, tap the calculate button for a visualization of your data. If you have enough lifting history, and you didn’t exclude too many data points with filtered tags, you should get something along the lines of what you see above. The R² can vary pretty significantly, in which case we recommend cleaning the data a bit and/or shortening the date range.

You’ll notice a red dot in the above graph. We took the liberty of excluding a few data points that we’re very confident are invalid or erroneous. In the example above, you’ll notice a curiously short ROM for a squat. We essentially averaged all of the squat ROMs in the analysis above and took everything outside of about 6 standard deviations and labeled it as invalid. That way, once spotted, you can go ahead and tap on the dot, modify the set data, and re-calculate to get a new view of your data.

If you don’t have enough data with the specified exercise and tags, or your data results in an R² that’s too low, you’ll see the following screens:

Left, too few data points. Right, enough data points but R² too low.

The image on the right has a pretty interesting issue. Although there’s enough data to produce a trendline, there’s an outlier we didn’t catch that’s throwing off the R². Simply tap the data point and, if it is indeed erroneous (and this one appears to be very much so) go ahead and remove the rep. If you have densely populated data points just pinch and zoom.

The Algorithm

This part isn’t super important, but worth illustrating to give our power users an idea of exactly what they’re interacting with. Our 1RM Analysis tab doesn’t do anything fancy with your data to calculate a number, it uses simple statistical principles and leaves the rest up to you, but it took a lot to get there. The algorithm consists of three main steps.

  1. Clean the data.

2. Sort out ‘bad’ data.

3. Sort used and unused ‘good’ data.

Bonus: RPE 1RM

I almost forgot to mention, we built an RPE 1RM calculator as well.

RPE 1RM is accessible via the Set Metrics card in the Settings tab, and you can customize its position. As you can see the results are a bit up and down, and we’re looking at ways we can use our data to improve these predictions. At the moment we’re basing it off of Mike Tuchscherer’s highly regarded RPE e1RM table. Any data scientists who want to dig into our data set to come up with something better, give us a shout!

That’s just about it for the new 1RM Analysis tab on the OpenBarbell app. We anticipate a few new bugs, miscategorized data points, goofy trendlines, etc. If you can catch any of those issues and send them to us please do so. If you have any suggestions for improving our algorithm we want to hear it! Now go update your OpenBarbell app and project some 1RMs.

--

--