| Title: | Strength Training Manual R-Language Functions |
| Version: | 0.1.7 |
| Description: | Strength training prescription using percent-based approach requires numerous computations and assumptions. 'STMr' package allow users to estimate individual reps-max relationships, implement various progression tables, and create numerous set and rep schemes. The 'STMr' package is originally created as a tool to help writing Jovanović M. (2020) Strength Training Manual <ISBN:979-8604459898>. |
| License: | MIT + file LICENSE |
| Encoding: | UTF-8 |
| LazyData: | true |
| RoxygenNote: | 7.3.3 |
| URL: | https://mladenjovanovic.github.io/STMr/ |
| BugReports: | https://github.com/mladenjovanovic/STMr/issues |
| Imports: | dplyr, ggfittext, ggplot2, magrittr, minpack.lm, nlme, quantreg, stats, tidyr |
| Suggests: | testthat (≥ 3.0.0) |
| Depends: | R (≥ 2.10) |
| Config/testthat/edition: | 3 |
| NeedsCompilation: | no |
| Packaged: | 2026-01-21 23:23:20 UTC; mladenjovanovic |
| Author: | Mladen Jovanović [aut, cre] |
| Maintainer: | Mladen Jovanović <coach.mladen.jovanovic@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-01-21 23:40:02 UTC |
Pipe operator
Description
See magrittr::%>% for details.
Usage
lhs %>% rhs
Arguments
lhs |
A value or the magrittr placeholder. |
rhs |
A function call using the magrittr semantics. |
Value
The result of calling rhs(lhs).
Method for adding set and rep schemes
Description
Method for adding set and rep schemes
Usage
## S3 method for class 'STMr_scheme'
lhs + rhs
Arguments
lhs |
|
rhs |
|
Value
STMr_scheme object
Examples
scheme1 <- scheme_wave()
warmup_scheme <- scheme_perc_1RM()
plot(warmup_scheme + scheme1)
Reps to failure testing of 12 athletes
Description
A dataset containing reps to failure testing for 12 athletes using 70, 80, and 90% of 1RM
Usage
RTF_testing
Format
A data frame with 36 rows and 6 variables:
- Athlete
Name of the athlete; ID
- 1RM
Maximum weight the athlete can lift correctly for a single rep
- Target %1RM
%1RM we want to use for testing; 70, 80, or 90%
- Target Weight
Estimated weight to be lifted
- Real Weight
Weight that is estimated to be lifted, but rounded to closest 2.5
- Real %1RM
Recalculated %1RM after rounding the weight
- nRM
Reps-to-failure (RTF), or the number of maximum repetitions (nRM) performed
Family of functions to adjust %1RM
Description
Family of functions to adjust %1RM
Usage
adj_perc_1RM_RIR(
reps,
adjustment = 0,
mfactor = 1,
max_perc_1RM_func = max_perc_1RM_epley,
...
)
adj_perc_1RM_DI(
reps,
adjustment = 0,
mfactor = 1,
max_perc_1RM_func = max_perc_1RM_epley,
...
)
adj_perc_1RM_rel_int(
reps,
adjustment = 1,
mfactor = 1,
max_perc_1RM_func = max_perc_1RM_epley,
...
)
adj_perc_1RM_perc_MR(
reps,
adjustment = 1,
mfactor = 1,
max_perc_1RM_func = max_perc_1RM_epley,
...
)
Arguments
reps |
Numeric vector. Number of repetition to be performed |
adjustment |
Numeric vector. Adjustment to be implemented |
mfactor |
Numeric vector. Default is 1 (i.e., no adjustment).
Use |
max_perc_1RM_func |
Max %1RM function to be used. Default is |
... |
Forwarded to |
Value
Numeric vector. Predicted perc 1RM
Functions
-
adj_perc_1RM_RIR(): Adjust max %1RM using the Reps In Reserve (RIR) approach -
adj_perc_1RM_DI(): Adjust max %1RM using the Deducted Intensity (DI) approach. This approach simple deductsadjustmentfrom estimated %1RM -
adj_perc_1RM_rel_int(): Adjust max perc 1RM using the Relative Intensity (RelInt) approach. This approach simple multiplies estimated perc 1RM withadjustment -
adj_perc_1RM_perc_MR(): Adjust max perc 1RM using the %Max Reps (%MR) approach. This approach simple divides target reps withadjustment
Examples
# ------------------------------------------
# Adjustment using Reps In Reserve (RIR)
adj_perc_1RM_RIR(5)
# Use ballistic adjustment (this implies doing half the reps)
adj_perc_1RM_RIR(5, mfactor = 2)
# Use 2 reps in reserve
adj_perc_1RM_RIR(5, adjustment = 2)
# Use Linear model
adj_perc_1RM_RIR(5, max_perc_1RM_func = max_perc_1RM_linear, adjustment = 2)
# Use Modifed Epley's equation with a custom parameter values
adj_perc_1RM_RIR(
5,
max_perc_1RM_func = max_perc_1RM_modified_epley,
adjustment = 2,
kmod = 0.06
)
# ------------------------------------------
# Adjustment using Deducted Intensity (DI)
adj_perc_1RM_DI(5)
# Use ballistic adjustment (this implies doing half the reps)
adj_perc_1RM_DI(5, mfactor = 2)
# Use 10 perc deducted intensity
adj_perc_1RM_DI(5, adjustment = -0.1)
# Use Linear model
adj_perc_1RM_DI(5, max_perc_1RM_func = max_perc_1RM_linear, adjustment = -0.1)
# Use Modifed Epley's equation with a custom parameter values
adj_perc_1RM_DI(
5,
max_perc_1RM_func = max_perc_1RM_modified_epley,
adjustment = -0.1,
kmod = 0.06
)
# ------------------------------------------
# Adjustment using Relative Intensity (RelInt)
adj_perc_1RM_rel_int(5)
# Use ballistic adjustment (this implies doing half the reps)
adj_perc_1RM_rel_int(5, mfactor = 2)
# Use 90 perc relative intensity
adj_perc_1RM_rel_int(5, adjustment = 0.9)
# Use Linear model
adj_perc_1RM_rel_int(5, max_perc_1RM_func = max_perc_1RM_linear, adjustment = 0.9)
# Use Modifed Epley's equation with a custom parameter values
adj_perc_1RM_rel_int(
5,
max_perc_1RM_func = max_perc_1RM_modified_epley,
adjustment = 0.9,
kmod = 0.06
)
# ------------------------------------------
# Adjustment using % max reps (%MR)
adj_perc_1RM_perc_MR(5)
# Use ballistic adjustment (this implies doing half the reps)
adj_perc_1RM_perc_MR(5, mfactor = 2)
# Use 70 perc max reps
adj_perc_1RM_perc_MR(5, adjustment = 0.7)
# Use Linear model
adj_perc_1RM_perc_MR(5, max_perc_1RM_func = max_perc_1RM_linear, adjustment = 0.7)
# Use Modifed Epley's equation with a custom parameter values
adj_perc_1RM_perc_MR(
5,
max_perc_1RM_func = max_perc_1RM_modified_epley,
adjustment = 0.7,
kmod = 0.06
)
Family of functions to adjust number of repetition
Description
These functions are reverse version of the adj_perc_1RM
family of functions. Use these when you want to estimate number of
repetitions to be used when using the known %1RM and level of
adjustment
Usage
adj_reps_RIR(
perc_1RM,
adjustment = 0,
mfactor = 1,
max_reps_func = max_reps_epley,
...
)
adj_reps_DI(
perc_1RM,
adjustment = 1,
mfactor = 1,
max_reps_func = max_reps_epley,
...
)
adj_reps_rel_int(
perc_1RM,
adjustment = 1,
mfactor = 1,
max_reps_func = max_reps_epley,
...
)
adj_reps_perc_MR(
perc_1RM,
adjustment = 1,
mfactor = 1,
max_reps_func = max_reps_epley,
...
)
Arguments
perc_1RM |
Numeric vector. %1RM used (use 0.5 for 50%, 0.9 for 90%) |
adjustment |
Numeric vector. Adjustment to be implemented |
mfactor |
Numeric vector. Default is 1 (i.e., no adjustment).
Use |
max_reps_func |
Max reps function to be used. Default is |
... |
Forwarded to |
Value
Numeric vector. Predicted number of repetitions to be performed
Functions
-
adj_reps_RIR(): Adjust number of repetitions using the Reps In Reserve (RIR) approach -
adj_reps_DI(): Adjust number of repetitions using the Deducted Intensity (DI) approach -
adj_reps_rel_int(): Adjust number of repetitions using the Relative Intensity (RelInt) approach -
adj_reps_perc_MR(): Adjust number of repetitions using the % max reps (%MR) approach
Examples
# ------------------------------------------
# Adjustment using Reps In Reserve (RIR)
adj_reps_RIR(0.75)
# Use ballistic adjustment (this implies doing half the reps)
adj_reps_RIR(0.75, mfactor = 2)
# Use 2 reps in reserve
adj_reps_RIR(0.75, adjustment = 2)
# Use Linear model
adj_reps_RIR(0.75, max_reps_func = max_reps_linear, adjustment = 2)
# Use Modifed Epley's equation with a custom parameter values
adj_reps_RIR(
0.75,
max_reps_func = max_reps_modified_epley,
adjustment = 2,
kmod = 0.06
)
# ------------------------------------------
# Adjustment using Deducted Intensity (DI)
adj_reps_DI(0.75)
# Use ballistic adjustment (this implies doing half the reps)
adj_reps_DI(0.75, mfactor = 2)
# Use 10% deducted intensity
adj_reps_DI(0.75, adjustment = -0.1)
# Use Linear model
adj_reps_DI(0.75, max_reps_func = max_reps_linear, adjustment = -0.1)
# Use Modifed Epley's equation with a custom parameter values
adj_reps_DI(
0.75,
max_reps_func = max_reps_modified_epley,
adjustment = -0.1,
kmod = 0.06
)
# ------------------------------------------
# Adjustment using Relative Intensity (RelInt)
adj_reps_rel_int(0.75)
# Use ballistic adjustment (this implies doing half the reps)
adj_reps_rel_int(0.75, mfactor = 2)
# Use 85% relative intensity
adj_reps_rel_int(0.75, adjustment = 0.85)
# Use Linear model
adj_reps_rel_int(0.75, max_reps_func = max_reps_linear, adjustment = 0.85)
# Use Modifed Epley's equation with a custom parameter values
adj_reps_rel_int(
0.75,
max_reps_func = max_reps_modified_epley,
adjustment = 0.85,
kmod = 0.06
)
# ------------------------------------------
# Adjustment using % max reps (%MR)
adj_reps_perc_MR(0.75)
# Use ballistic adjustment (this implies doing half the reps)
adj_reps_perc_MR(0.75, mfactor = 2)
# Use 85% of max reps
adj_reps_perc_MR(0.75, adjustment = 0.85)
# Use Linear model
adj_reps_perc_MR(0.75, max_reps_func = max_reps_linear, adjustment = 0.85)
# Use Modifed Epley's equation with a custom parameter values
adj_reps_perc_MR(
0.75,
max_reps_func = max_reps_modified_epley,
adjustment = 0.85,
kmod = 0.06
)
Create Example
Description
This function create simple example using progression_table
Usage
create_example(
progression_table,
reps = c(3, 5, 10),
volume = c("intensive", "normal", "extensive"),
type = c("grinding", "ballistic"),
...
)
Arguments
progression_table |
Progression table function |
reps |
Numeric vector. Default is |
volume |
Character vector. Default is |
type |
Character vector. Type of max rep table. Options are grinding (Default), ballistic, and conservative |
... |
Extra arguments forwarded to |
Value
Data frame with the following structure
- type
Type of the set and rep scheme
- reps
Number of reps performed
- volume
Volume type of the set and rep scheme
- Step 1
First progression step %1RM
- Step 2
Second progression step %1RM
- Step 3
Third progression step %1RM
- Step 4
Fourth progression step %1RM
- Step 2-1 Diff
Difference in %1RM between second and first progression step
- Step 3-2 Diff
Difference in %1RM between third and second progression step
- Step 4-3 Diff
Difference in %1RM between fourth and third progression step
Examples
create_example(progression_RIR)
# Create example using specific reps-max table and k value
create_example(
progression_RIR,
max_perc_1RM_func = max_perc_1RM_modified_epley,
kmod = 0.0388
)
Estimate relationship between reps and %1RM (or weight)
Description
By default, target variable is the reps performed, while the predictors is the perc_1RM or
weight. To reverse this, use the reverse = TRUE argument
Usage
estimate_k_generic(
perc_1RM,
reps,
eRIR = 0,
k = 0.0333,
reverse = FALSE,
weighted = "none",
...
)
estimate_k_generic_1RM(
weight,
reps,
eRIR = 0,
k = 0.0333,
reverse = FALSE,
weighted = "none",
...
)
estimate_k(perc_1RM, reps, eRIR = 0, reverse = FALSE, weighted = "none", ...)
estimate_k_1RM(weight, reps, eRIR = 0, reverse = FALSE, weighted = "none", ...)
estimate_kmod(
perc_1RM,
reps,
eRIR = 0,
reverse = FALSE,
weighted = "none",
...
)
estimate_kmod_1RM(
weight,
reps,
eRIR = 0,
reverse = FALSE,
weighted = "none",
...
)
estimate_klin(
perc_1RM,
reps,
eRIR = 0,
reverse = FALSE,
weighted = "none",
...
)
estimate_klin_1RM(
weight,
reps,
eRIR = 0,
reverse = FALSE,
weighted = "none",
...
)
get_predicted_1RM_from_k_model(model)
Arguments
perc_1RM |
%1RM |
reps |
Number of repetitions done |
eRIR |
Subjective estimation of reps-in-reserve (eRIR) |
k |
Value for the generic Epley's equation, which is by default equal to 0.0333 |
reverse |
Logical, default is |
weighted |
What weighting should be used for the non-linear regression? Default is "none". Other options include: "reps" (for 1/reps weighting), "load" (for using weight or %1RM), "eRIR" (for 1/(eRIR+1) weighting), "reps x load", "reps x eRIR", "load x eRIR", and "reps x load x eRIR" |
... |
Forwarded to |
weight |
Weight used |
model |
Object returned from the |
Value
nlsLM object
Functions
-
estimate_k_generic(): Provides the model with generickparameter -
estimate_k_generic_1RM(): Provides the model with generickparameter, as well as estimated1RM. This is a novel estimation function that uses the absolute weights. -
estimate_k(): Estimate the parameterkin the Epley's equation -
estimate_k_1RM(): Estimate the parameterkin the Epley's equation, as well as1RM. This is a novel estimation function that uses the absolute weights. -
estimate_kmod(): Estimate the parameterkmodin the modified Epley's equation -
estimate_kmod_1RM(): Estimate the parameterkmodin the modified Epley's equation, as well as1RM. This is a novel estimation function that uses the absolute weights -
estimate_klin(): Estimate the parameterklinusing the Linear/Brzycki model -
estimate_klin_1RM(): Estimate the parameterklinin the Linear/Brzycki equation, as well as1RM. This is a novel estimation function that uses the absolute weights -
get_predicted_1RM_from_k_model(): Estimate the 1RM fromestimate_k_1RMfunctionThe problem with Epley's estimation model (implemented in
estimate_k_1RMfunction) is that it predicts the 1RM when nRM = 0. Thus, the estimated parameter in the model produced by theestimate_k_1RMfunction is not 1RM, but 0RM. This function calculates the weight at nRM = 1 for both the normal and reverse model. See Examples for code
Examples
# ---------------------------------------------------------
# Generic Epley's model
m1 <- estimate_k_generic(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Generic Epley's model that also estimates 1RM
m1 <- estimate_k_generic_1RM(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Epley's model
m1 <- estimate_k(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Epley's model that also estimates 1RM
m1 <- estimate_k_1RM(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Modified Epley's model
m1 <- estimate_kmod(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Modified Epley's model that also estimates 1RM
m1 <- estimate_kmod_1RM(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Linear/Brzycki model
m1 <- estimate_klin(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Linear/Brzycki model thal also estimates 1RM
m1 <- estimate_klin_1RM(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Estimating 1RM from Epley's model
m1 <- estimate_k_1RM(150 * c(0.9, 0.8, 0.7), c(3, 6, 12))
m2 <- estimate_k_1RM(150 * c(0.9, 0.8, 0.7), c(3, 6, 12), reverse = TRUE)
# Estimated 0RM values from both model
c(coef(m1)[[1]], coef(m2)[[1]])
# But these are not 1RMs!!!
# Using the "reverse" model, where nRM is the predictor (in this case m2)
# makes it easier to predict 1RM
predict(m2, newdata = data.frame(nRM = 1))
# But for the normal model it involve reversing the formula
# To spare you from the math pain, use this
get_predicted_1RM_from_k_model(m1)
# It also works for the "reverse" model
get_predicted_1RM_from_k_model(m2)
Estimate relationship between reps and weight using the non-linear mixed-effects regression
Description
These functions provide estimated 1RM and parameter values using the mixed-effect regression. By default,
target variable is the reps performed, while the predictor is the perc_1RM or
weight. To reverse this, use the reverse = TRUE argument
Usage
estimate_k_mixed(athlete, perc_1RM, reps, eRIR = 0, reverse = FALSE, ...)
estimate_k_generic_1RM_mixed(
athlete,
weight,
reps,
eRIR = 0,
k = 0.0333,
reverse = FALSE,
random = zeroRM ~ 1,
...
)
estimate_k_1RM_mixed(
athlete,
weight,
reps,
eRIR = 0,
reverse = FALSE,
random = k + zeroRM ~ 1,
...
)
estimate_kmod_mixed(athlete, perc_1RM, reps, eRIR = 0, reverse = FALSE, ...)
estimate_kmod_1RM_mixed(
athlete,
weight,
reps,
eRIR = 0,
reverse = FALSE,
random = kmod + oneRM ~ 1,
...
)
estimate_klin_mixed(athlete, perc_1RM, reps, eRIR = 0, reverse = FALSE, ...)
estimate_klin_1RM_mixed(
athlete,
weight,
reps,
eRIR = 0,
reverse = FALSE,
random = klin + oneRM ~ 1,
...
)
Arguments
athlete |
Athlete identifier |
perc_1RM |
%1RM |
reps |
Number of repetitions done |
eRIR |
Subjective estimation of reps-in-reserve (eRIR) |
reverse |
Logical, default is |
... |
Forwarded to |
weight |
Weight used |
k |
Value for the generic Epley's equation, which is by default equal to 0.0333 |
random |
Random parameter forwarded to |
Value
nlme object
Functions
-
estimate_k_mixed(): Estimate the parameterkin the Epley's equation -
estimate_k_generic_1RM_mixed(): Provides the model with generickparameter, as well as estimated1RM. This is a novel estimation function that uses the absolute weights -
estimate_k_1RM_mixed(): Estimate the parameterkin the Epley's equation, as well as1RM. This is a novel estimation function that uses the absolute weights -
estimate_kmod_mixed(): Estimate the parameterkmodin the Modified Epley's equation -
estimate_kmod_1RM_mixed(): Estimate the parameterkmodin the Modified Epley's equation, as well as1RM. This is a novel estimation function that uses the absolute weights -
estimate_klin_mixed(): Estimate the parameterklinin the Linear/Brzycki's equation -
estimate_klin_1RM_mixed(): Estimate the parameterklinin the Linear/Brzycki equation, as well as1RM. This is a novel estimation function that uses the absolute weights
Examples
# ---------------------------------------------------------
# Epley's model
m1 <- estimate_k_mixed(
athlete = RTF_testing$Athlete,
perc_1RM = RTF_testing$`Real %1RM`,
reps = RTF_testing$nRM
)
coef(m1)
# ---------------------------------------------------------
# Generic Epley's model that also estimates 1RM
m1 <- estimate_k_generic_1RM_mixed(
athlete = RTF_testing$Athlete,
weight = RTF_testing$`Real Weight`,
reps = RTF_testing$nRM
)
coef(m1)
# ---------------------------------------------------------
# Epley's model that also estimates 1RM
m1 <- estimate_k_1RM_mixed(
athlete = RTF_testing$Athlete,
weight = RTF_testing$`Real Weight`,
reps = RTF_testing$nRM
)
coef(m1)
# ---------------------------------------------------------
# Modifed Epley's model
m1 <- estimate_kmod_mixed(
athlete = RTF_testing$Athlete,
perc_1RM = RTF_testing$`Real %1RM`,
reps = RTF_testing$nRM
)
coef(m1)
# ---------------------------------------------------------
# Modified Epley's model that also estimates 1RM
m1 <- estimate_kmod_1RM_mixed(
athlete = RTF_testing$Athlete,
weight = RTF_testing$`Real Weight`,
reps = RTF_testing$nRM
)
coef(m1)
# ---------------------------------------------------------
# Linear/Brzycki model
m1 <- estimate_klin_mixed(
athlete = RTF_testing$Athlete,
perc_1RM = RTF_testing$`Real %1RM`,
reps = RTF_testing$nRM
)
coef(m1)
# ---------------------------------------------------------
# Linear/Brzycki model that also estimates 1RM
m1 <- estimate_klin_1RM_mixed(
athlete = RTF_testing$Athlete,
weight = RTF_testing$`Real Weight`,
reps = RTF_testing$nRM
)
coef(m1)
Estimate relationship between reps and weight using the non-linear quantile regression
Description
These functions provide estimate 1RM and parameter values using the quantile regression. By default,
target variable is the reps performed, while the predictors is the perc_1RM or
weight. To reverse this, use the reverse = TRUE argument
Usage
estimate_k_quantile(
perc_1RM,
reps,
eRIR = 0,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
estimate_k_generic_1RM_quantile(
weight,
reps,
eRIR = 0,
k = 0.0333,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
estimate_k_1RM_quantile(
weight,
reps,
eRIR = 0,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
estimate_kmod_quantile(
perc_1RM,
reps,
eRIR = 0,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
estimate_kmod_1RM_quantile(
weight,
reps,
eRIR = 0,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
estimate_klin_quantile(
perc_1RM,
reps,
eRIR = 0,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
estimate_klin_1RM_quantile(
weight,
reps,
eRIR = 0,
tau = 0.5,
reverse = FALSE,
control = quantreg::nlrq.control(maxiter = 10^4, InitialStepSize = 0),
...
)
Arguments
perc_1RM |
%1RM |
reps |
Number of repetitions done |
eRIR |
Subjective estimation of reps-in-reserve (eRIR) |
tau |
Vector of quantiles to be estimated. Default is 0.5 |
reverse |
Logical, default is |
control |
Control object for the |
... |
Forwarded to |
weight |
Weight used |
k |
Value for the generic Epley's equation, which is by default equal to 0.0333 |
Value
nlrq object
Functions
-
estimate_k_quantile(): Estimate the parameterkin the Epley's equation -
estimate_k_generic_1RM_quantile(): Provides the model with generickparameter, as well as estimated1RM. This is a novel estimation function that uses the absolute weights -
estimate_k_1RM_quantile(): Estimate the parameterkin the Epley's equation, as well as1RM. This is a novel estimation function that uses the absolute weights -
estimate_kmod_quantile(): Estimate the parameterkmodin the modified Epley's equation -
estimate_kmod_1RM_quantile(): Estimate the parameterkmodin the modified Epley's equation, as well as1RM. This is a novel estimation function that uses the absolute weights -
estimate_klin_quantile(): Estimate the parameterklinin the Linear/Brzycki equation -
estimate_klin_1RM_quantile(): Estimate the parameterklinin the Linear/Brzycki equation, as well as1RM. This is a novel estimation function that uses the absolute weights
Examples
# ---------------------------------------------------------
# Epley's model
m1 <- estimate_k_quantile(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Epley's model that also estimates 1RM
m1 <- estimate_k_generic_1RM_quantile(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Epley's model that also estimates 1RM
m1 <- estimate_k_1RM_quantile(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Modified Epley's model
m1 <- estimate_kmod_quantile(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Modified Epley's model that also estimates 1RM
m1 <- estimate_kmod_1RM_quantile(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Linear/Brzycki model
m1 <- estimate_klin_quantile(
perc_1RM = c(0.7, 0.8, 0.9),
reps = c(10, 5, 3)
)
coef(m1)
# ---------------------------------------------------------
# Linear/Brzycki model thal also estimates 1RM
m1 <- estimate_klin_1RM_quantile(
weight = c(70, 110, 140),
reps = c(10, 5, 3)
)
coef(m1)
Estimate the rolling profile and 1RM
Description
Estimate the rolling profile and 1RM
Usage
estimate_rolling_1RM(
weight,
reps,
eRIR = 0,
day_index,
window = 14,
estimate_function = estimate_k_1RM,
...
)
Arguments
weight |
Weight used |
reps |
Number of repetitions done |
eRIR |
Subjective estimation of reps-in-reserve (eRIR) |
day_index |
Day index used to estimate rolling window |
window |
Width of the rolling window. Default is 14 |
estimate_function |
Estimation function to be used. Default is
|
... |
Forwarded to |
Value
Data frame with day index and coefficients returned by the estimate_function function
Examples
estimate_rolling_1RM(
weight = strength_training_log$weight,
reps = strength_training_log$reps,
eRIR = strength_training_log$eRIR,
day_index = strength_training_log$day,
window = 10,
estimate_function = estimate_k_1RM_quantile,
tau = 0.9
)
Family of functions to create progression tables
Description
Family of functions to create progression tables
Usage
generate_progression_table(
progression_table,
type = c("grinding", "ballistic", "conservative"),
volume = c("intensive", "normal", "extensive"),
reps = 1:5,
step = seq(-3, 0, 1),
...
)
progression_DI(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
step_increment = -0.025,
volume_increment = step_increment,
...
)
progression_RIR(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
step_increment = 1,
volume_increment = step_increment,
...
)
progression_RIR_increment(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
...
)
progression_perc_MR(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
step_increment = -0.1,
volume_increment = -0.2,
...
)
progression_perc_MR_variable(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
...
)
progression_perc_drop(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
...
)
progression_rel_int(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
step_increment = -0.05,
volume_increment = -0.075,
...
)
progression_variable_DI(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
rep_1_step_increment = -0.02,
rep_12_step_increment = -0.04,
rep_1_volume_increment = -0.02,
rep_12_volume_increment = -0.04,
...
)
progression_variable_RIR(
reps,
step = 0,
volume = "normal",
adjustment = 0,
type = "grinding",
mfactor = NULL,
rep_1_step_increment = 1,
rep_12_step_increment = 2,
rep_1_volume_increment = 1,
rep_12_volume_increment = 2,
...
)
Arguments
progression_table |
Progression table function to use |
type |
Character vector. Type of max rep table. Options are grinding (Default), ballistic, and conservative. |
volume |
Character vector: 'intensive', 'normal' (Default), or 'extensive' |
reps |
Numeric vector. Number of repetition to be performed |
step |
Numeric vector. Progression step. Default is 0. Use negative numbers (i.e., -1, -2) |
... |
Extra arguments forwarded to |
adjustment |
Numeric vector. Additional post adjustment applied to sets. Default is none (value depends on the method). |
mfactor |
Numeric vector. Factor to adjust max rep table. Used instead of |
step_increment, volume_increment |
Numeric vector. Used to adjust specific progression methods |
rep_1_step_increment |
Numeric vector. Default 1 |
rep_12_step_increment |
Numeric vector. Default 2 |
rep_1_volume_increment |
Numeric vector. Default 1 |
rep_12_volume_increment |
Numeric vector. Default 2 |
Value
List with two elements: adjustment and perc_1RM
Functions
-
generate_progression_table(): Generates progression tables -
progression_DI(): Deducted Intensity progression table. This simplest progression table simply deducts intensity to progress. Adjust this deducted by using thedeductionparameter (default is equal to -0.025) -
progression_RIR(): Constant RIR Increment progression table. This variant have constant RIR increment across reps from phases to phases and RIR difference between extensive, normal, and intensive schemes. Usestep_incrementandvolume_incrementparameters to utilize needed increments -
progression_RIR_increment(): RIR Increment progression table (see Strength Training Manual) -
progression_perc_MR(): Constant %MR Step progression table. This variant have constant %MR increment across reps from phases to phases and %MR difference between extensive, normal, and intensive schemes. Usestep_incrementandvolume_incrementparameters to utilize needed increments -
progression_perc_MR_variable(): Variable %MR Step progression table -
progression_perc_drop(): Perc Drop progression table (see Strength Training Manual) -
progression_rel_int(): Relative Intensity progression table. Usestep_incrementandvolume_incrementparameters to utilize needed increments -
progression_variable_DI(): Variable Deducted Intensity progression table. This function allows you to generate variable Deducted Intensity table, with adjustments linearly increasing for both step progressions as well volume increment based on the reps done. -
progression_variable_RIR(): Variable RIR progression table. This function allows you to generate variable RIR progression table, with adjustments linearly increasing for both step progressions as well volume increment based on the reps done.
References
Jovanović M. 2020. Strength Training Manual: The Agile Periodization Approach. Independently published.
Examples
generate_progression_table(progression_RIR)
generate_progression_table(
progression_RIR,
type = "grinding",
volume = "normal",
step_increment = 2
)
# Create progression table using specific reps-max table and k value
generate_progression_table(
progression_RIR,
max_perc_1RM_func = max_perc_1RM_modified_epley,
kmod = 0.0388
)
# ------------------------------------------
# Progression Deducted Intensity
progression_DI(10, step = seq(-3, 0, 1))
progression_DI(10, step = seq(-3, 0, 1), volume = "extensive")
progression_DI(5, step = seq(-3, 0, 1), type = "ballistic", step_increment = -0.05)
progression_DI(
5,
step = seq(-3, 0, 1),
type = "ballistic",
step_increment = -0.05,
volume_increment = -0.1
)
# Generate progression table
generate_progression_table(progression_DI, type = "grinding", volume = "normal")
# Use different reps-max model
generate_progression_table(
progression_DI,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# ------------------------------------------
# Progression RIR Constant
progression_RIR(10, step = seq(-3, 0, 1))
progression_RIR(10, step = seq(-3, 0, 1), volume = "extensive")
progression_RIR(5, step = seq(-3, 0, 1), type = "ballistic", step_increment = 2)
progression_RIR(
5,
step = seq(-3, 0, 1),
type = "ballistic",
step_increment = 3
)
# Generate progression table
generate_progression_table(progression_RIR, type = "grinding", volume = "normal")
# Use different reps-max model
generate_progression_table(
progression_RIR,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# Plot progression table
plot_progression_table(progression_RIR)
plot_progression_table(progression_RIR, "adjustment")
# ------------------------------------------
# Progression RIR Increment
progression_RIR_increment(10, step = seq(-3, 0, 1))
progression_RIR_increment(10, step = seq(-3, 0, 1), volume = "extensive")
progression_RIR_increment(5, step = seq(-3, 0, 1), type = "ballistic")
# Generate progression table
generate_progression_table(progression_RIR_increment, type = "grinding", volume = "normal")
# Use different reps-max model
generate_progression_table(
progression_RIR_increment,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# ------------------------------------------
# Progression %MR Step Const
progression_perc_MR(10, step = seq(-3, 0, 1))
progression_perc_MR(10, step = seq(-3, 0, 1), volume = "extensive")
progression_perc_MR(5, step = seq(-3, 0, 1), type = "ballistic", step_increment = -0.2)
progression_perc_MR(
5,
step = seq(-3, 0, 1),
type = "ballistic",
step_increment = -0.15,
volume_increment = -0.25
)
# Generate progression table
generate_progression_table(progression_perc_MR, type = "grinding", volume = "normal")
# Use different reps-max model
generate_progression_table(
progression_perc_MR,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# ------------------------------------------
# Progression %MR Step Variable
progression_perc_MR_variable(10, step = seq(-3, 0, 1))
progression_perc_MR_variable(10, step = seq(-3, 0, 1), volume = "extensive")
progression_perc_MR_variable(5, step = seq(-3, 0, 1), type = "ballistic")
# Generate progression table
generate_progression_table(progression_perc_MR_variable, type = "grinding", volume = "normal")
# Use different reps-max model
generate_progression_table(
progression_perc_MR_variable,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# ------------------------------------------
# Progression Perc Drop
progression_perc_drop(10, step = seq(-3, 0, 1))
progression_perc_drop(10, step = seq(-3, 0, 1), volume = "extensive")
progression_perc_drop(5, step = seq(-3, 0, 1), type = "ballistic")
# Generate progression table
generate_progression_table(progression_perc_drop, type = "grinding", volume = "normal")
# Use different reps-max model
generate_progression_table(
progression_perc_drop,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# ------------------------------------------
# Progression Relative Intensity
progression_rel_int(10, step = seq(-3, 0, 1))
progression_rel_int(10, step = seq(-3, 0, 1), volume = "extensive")
progression_rel_int(5, step = seq(-3, 0, 1), type = "ballistic")
# Generate progression table
generate_progression_table(progression_rel_int, type = "grinding", volume = "normal")
generate_progression_table(progression_rel_int, step_increment = -0.1, volume_increment = 0.15)
# Use different reps-max model
generate_progression_table(
progression_rel_int,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# ------------------------------------------
# Progression Variable Deducted Intensity
progression_variable_DI(10, step = seq(-3, 0, 1))
progression_variable_DI(10, step = seq(-3, 0, 1), volume = "extensive")
progression_variable_DI(5, step = seq(-3, 0, 1), type = "ballistic")
progression_variable_DI(
5,
step = seq(-3, 0, 1),
type = "grinding",
rep_1_step_increment = -0.02,
rep_12_step_increment = -0.04,
rep_1_volume_increment = -0.02,
rep_12_volume_increment = -0.04
)
# Generate progression table
generate_progression_table(
progression_variable_DI,
type = "grinding",
volume = "normal"
)
# Use different reps-max model
generate_progression_table(
progression_variable_DI,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# Recreate "progression_perc_drop()" for grinding
setequal(
generate_progression_table(
progression_variable_DI,
type = "grinding",
rep_1_step_increment = -0.025,
rep_12_step_increment = -0.05,
rep_1_volume_increment = -0.025,
rep_12_volume_increment = -0.05
),
generate_progression_table(
progression_perc_drop,
type = "grinding"
)
)
# ------------------------------------------
# Progression Variable RIR
progression_variable_RIR(10, step = seq(-3, 0, 1))
progression_variable_RIR(10, step = seq(-3, 0, 1), volume = "extensive")
progression_variable_RIR(5, step = seq(-3, 0, 1), type = "ballistic")
progression_variable_RIR(
5,
step = seq(-3, 0, 1),
type = "grinding",
rep_1_step_increment = 1,
rep_12_step_increment = 2,
rep_1_volume_increment = 2,
rep_12_volume_increment = 4
)
# Generate progression table
generate_progression_table(
progression_variable_DI,
type = "grinding",
volume = "normal"
)
# Use different reps-max model
generate_progression_table(
progression_variable_RIR,
type = "grinding",
volume = "normal",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
# Recreate "progression_RIR_increment()" for grinding
setequal(
generate_progression_table(
progression_variable_RIR,
type = "grinding",
rep_1_step_increment = 1,
rep_12_step_increment = 2,
rep_1_volume_increment = 1,
rep_12_volume_increment = 3
),
generate_progression_table(
progression_RIR_increment,
type = "grinding"
)
)
Get %1RM
Description
Function get_perc_1RM represent a wrapper function
Usage
get_perc_1RM(reps, method = "RIR", model = "epley", ...)
Arguments
reps |
Numeric vector. Number of repetition to be performed |
method |
Character vector. Default is "RIR". Other options are "DI", "RelInt", "%MR" |
model |
Character vector. Default is "epley". Other options are "modified epley", "linear" |
... |
Forwarded to selected |
Value
Numeric vector. Predicted %1RM
Examples
get_perc_1RM(5)
# # Use ballistic adjustment (this implies doing half the reps)
get_perc_1RM(5, mfactor = 2)
# Use perc MR adjustment method
get_perc_1RM(5, "%MR", adjustment = 0.8)
# Use linear model with use defined klin values
get_perc_1RM(5, "%MR", model = "linear", adjustment = 0.8, klin = 36)
Get Reps
Description
Function get_reps represent a wrapper function. This function is the
reverse version of the get_perc_1RM function. Use it when
you want to estimate number of repetitions to be used when using the
known %1RM and level of adjustment
Usage
get_reps(perc_1RM, method = "RIR", model = "epley", ...)
Arguments
perc_1RM |
Numeric vector. %1RM used (use 0.5 for 50 perc, 0.9 for 90 perc) |
method |
Character vector. Default is "RIR". Other options are "DI", "RelInt", "%MR" |
model |
Character vector. Default is "epley". Other options are "modified epley", "linear" |
... |
Forwarded to selected |
Value
Numeric vector Predicted repetitions
Examples
get_reps(0.75)
# # Use ballistic adjustment (this implies doing half the reps)
get_reps(0.75, mfactor = 2)
# Use %MR adjustment method
get_reps(0.75, "%MR", adjustment = 0.8)
# Use linear model with use defined klin values
get_reps(0.75, "%MR", model = "linear", adjustment = 0.8, klin = 36)
Family of functions to estimate max %1RM
Description
Family of functions to estimate max %1RM
Usage
max_perc_1RM_epley(reps, k = 0.0333)
max_perc_1RM_modified_epley(reps, kmod = 0.0353)
max_perc_1RM_linear(reps, klin = 33)
Arguments
reps |
Numeric vector. Number of repetition to be performed |
k |
User defined |
kmod |
User defined |
klin |
User defined |
Value
Numeric vector. Predicted %1RM
Functions
-
max_perc_1RM_epley(): Estimate max %1RM using the Epley's equation -
max_perc_1RM_modified_epley(): Estimate max %1RM using the Modified Epley's equation -
max_perc_1RM_linear(): Estimate max %1RM using the Linear (or Brzycki's) equation
Examples
# ------------------------------------------
# Epley equation
max_perc_1RM_epley(1:10)
max_perc_1RM_epley(1:10, k = 0.04)
# ------------------------------------------
# Modified Epley equation
max_perc_1RM_modified_epley(1:10)
max_perc_1RM_modified_epley(1:10, kmod = 0.05)
# ------------------------------------------
# Linear/Brzycki equation
max_perc_1RM_linear(1:10)
max_perc_1RM_linear(1:10, klin = 36)
Family of functions to estimate max number of repetition (nRM)
Description
Family of functions to estimate max number of repetition (nRM)
Usage
max_reps_epley(perc_1RM, k = 0.0333)
max_reps_modified_epley(perc_1RM, kmod = 0.0353)
max_reps_linear(perc_1RM, klin = 33)
Arguments
perc_1RM |
Numeric vector. % 1RM used (use 0.5 for 50 %, 0.9 for 90 %) |
k |
User defined |
kmod |
User defined |
klin |
User defined |
Value
Numeric vector. Predicted maximal number of repetitions (nRM)
Functions
-
max_reps_epley(): Estimate max number of repetition (nRM) using the Epley's equation -
max_reps_modified_epley(): Estimate max number of repetition (nRM) using the Modified Epley's equation -
max_reps_linear(): Estimate max number of repetition (nRM) using the Linear/Brzycki's equation
Examples
# ------------------------------------------
# Epley equation
max_reps_epley(0.85)
max_reps_epley(c(0.75, 0.85), k = 0.04)
# ------------------------------------------
# Modified Epley equation
max_reps_modified_epley(0.85)
max_reps_modified_epley(c(0.75, 0.85), kmod = 0.05)
# ------------------------------------------
# Linear/Brzycki's equation
max_reps_linear(0.85)
max_reps_linear(c(0.75, 0.85), klin = 36)
Plotting of the Release
Description
Function for creating ggplot2 plot of the Release STMr_release object
Usage
## S3 method for class 'STMr_release'
plot(x, font_size = 14, load_1RM_agg_func = max, ...)
Arguments
x |
|
font_size |
Numeric. Default is 14 |
load_1RM_agg_func |
Function to aggregate step |
... |
Forwarded to |
Value
ggplot2 object
Examples
scheme1 <- scheme_step(vertical_planning = vertical_constant)
scheme2 <- scheme_step(vertical_planning = vertical_linear)
scheme3 <- scheme_step(vertical_planning = vertical_undulating)
release_df <- release(
scheme1, scheme2, scheme3,
additive_1RM_adjustment = 2.5
)
plot(release_df)
Plotting of the Set and Reps Scheme
Description
Functions for creating ggplot2 plot of the Set and Reps Scheme
Usage
## S3 method for class 'STMr_scheme'
plot(x, type = "bar", font_size = 14, perc_str = "%", ...)
Arguments
x |
|
type |
Type of plot. Options are "bar" (default), "vertical", and "fraction" |
font_size |
Numeric. Default is 14 |
perc_str |
Percent string. Default is "%". Use "" to have more space on graph |
... |
Forwarded to |
Value
ggplot2 object
Examples
scheme <- scheme_wave(
reps = c(10, 8, 6, 10, 8, 6),
# Adjusting sets to use lower %1RM (RIR Inc method used, so RIR adjusted)
adjustment = c(4, 2, 0, 6, 4, 2),
vertical_planning = vertical_linear,
vertical_planning_control = list(reps_change = c(0, -2, -4)),
progression_table = progression_RIR_increment,
progression_table_control = list(volume = "extensive")
)
plot(scheme)
plot(scheme, type = "vertical")
plot(scheme, type = "fraction")
Plotting of the Progression Table
Description
Function for creating ggplot2 plot of the Progression Table
Usage
plot_progression_table(
progression_table,
plot = "%1RM",
signif_digits = 3,
multiplier = 1,
font_size = 14,
...
)
Arguments
progression_table |
Function for creating progression table |
plot |
Character string. Options include "%1RM" (default) and "adjustment" |
signif_digits |
Rounding numbers for plotting. Default is 3 |
multiplier |
Factor to multiply the adjustment. Useful when converting to percentage. Default is 1 |
font_size |
Numeric. Default is 14 |
... |
Forwarded to the |
Value
ggplot2 object
Examples
plot_progression_table(progression_RIR_increment, "%1RM", reps = 1:5)
plot_progression_table(progression_RIR_increment, "adjustment", reps = 1:5)
# Create progression pot by using specific reps-max table and klin value
plot_progression_table(
progression_RIR,
reps = 1:5,
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
Plotting of the Set and Reps Scheme
Description
Functions for creating ggplot2 plot of the Set and Reps Scheme
Usage
plot_scheme(scheme, font_size = 8, perc_str = "%")
Arguments
scheme |
Data Frame create by one of the package functions. See examples |
font_size |
Numeric. Default is 8 |
perc_str |
Percent string. Default is "%". Use "" to have more space on graph |
Value
ggplot2 object
Examples
scheme <- scheme_wave(
reps = c(10, 8, 6, 10, 8, 6),
# Adjusting sets to use lower %1RM (RIR Inc method used, so RIR adjusted)
adjustment = c(4, 2, 0, 6, 4, 2),
vertical_planning = vertical_linear,
vertical_planning_control = list(reps_change = c(0, -2, -4)),
progression_table = progression_RIR_increment,
progression_table_control = list(volume = "extensive")
)
plot_scheme(scheme)
Plotting of the Vertical Planning
Description
Function for creating ggplot2 plot of the Vertical Planning function
Usage
plot_vertical(vertical_plan, reps = c(5, 5, 5), font_size = 14, ...)
Arguments
vertical_plan |
Vertical Plan function |
reps |
Numeric vector |
font_size |
Numeric. Default is 14 |
... |
Forwarded to |
Examples
plot_vertical(vertical_block_undulating, reps = c(8, 6, 4))
Create a Release period
Description
Release combines multiple schemes together with prescription_1RM,
additive_1RM_adjustment, and multiplicative_1RM_adjustment
parameters to calculate working weight, load_1RM, and
buffer
Usage
release(
...,
prescription_1RM = 100,
additive_1RM_adjustment = 2.5,
multiplicative_1RM_adjustment = 1,
rounding = 2.5,
max_perc_1RM_func = max_perc_1RM_epley
)
Arguments
... |
|
prescription_1RM |
Initial prescription planning 1RM to calculate weight Default is 100 |
additive_1RM_adjustment |
Additive 1RM adjustment across phases. Default is 2.5 |
multiplicative_1RM_adjustment |
multiplicative 1RM adjustment across phases. Default is 1 (i.e., no adjustment) |
rounding |
Rounding for the calculated weight. Default is 2.5 |
max_perc_1RM_func |
Max Perc 1RM function to use when calculating
|
Value
STMr_relase data frame
Examples
scheme1 <- scheme_step(vertical_planning = vertical_constant)
scheme2 <- scheme_step(vertical_planning = vertical_linear)
scheme3 <- scheme_step(vertical_planning = vertical_undulating)
release_df <- release(
scheme1, scheme2, scheme3,
additive_1RM_adjustment = 2.5
)
plot(release_df)
Set and Rep Schemes
Description
Set and Rep Schemes
Usage
scheme_generic(
reps,
adjustment,
vertical_planning,
vertical_planning_control = list(),
progression_table,
progression_table_control = list()
)
scheme_wave(
reps = c(10, 8, 6),
adjustment = -rev((seq_along(reps) - 1) * 5)/100,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_plateau(
reps = c(5, 5, 5),
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_step(
reps = c(5, 5, 5),
adjustment = -rev((seq_along(reps) - 1) * 10)/100,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "intensive")
)
scheme_step_reverse(
reps = c(5, 5, 5),
adjustment = -((seq_along(reps) - 1) * 10)/100,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "intensive")
)
scheme_wave_descending(
reps = c(6, 8, 10),
adjustment = -rev((seq_along(reps) - 1) * 5)/100,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_light_heavy(
reps = c(10, 5, 10, 5),
adjustment = c(-0.1, 0)[(seq_along(reps)%%2) + 1],
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_pyramid(
reps = c(12, 10, 8, 10, 12),
adjustment = 0,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "extensive")
)
scheme_pyramid_reverse(
reps = c(8, 10, 12, 10, 8),
adjustment = 0,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "extensive")
)
scheme_rep_acc(
reps = c(10, 10, 10),
adjustment = 0,
vertical_planning_control = list(step = rep(0, 4)),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_ladder(
reps = c(3, 5, 10),
adjustment = 0,
vertical_planning = vertical_constant,
vertical_planning_control = list(),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_manual(
index = NULL,
step,
sets = 1,
reps,
adjustment = 0,
perc_1RM = NULL,
progression_table = progression_perc_drop,
progression_table_control = list(volume = "normal")
)
scheme_perc_1RM(reps = c(5, 5, 5), perc_1RM = c(0.4, 0.5, 0.6), n_steps = 4)
Arguments
reps |
Numeric vector indicating reps prescription |
adjustment |
Numeric vector indicating adjustments. Forwarded to |
vertical_planning |
Vertical planning function. Default is |
vertical_planning_control |
Arguments forwarded to the |
progression_table |
Progression table function. Default is |
progression_table_control |
Arguments forwarded to the |
index |
Numeric vector. If not provided, index will be
create using sequence of |
step |
Numeric vector |
sets |
Numeric vector. Used to replicate reps and adjustments |
perc_1RM |
Numeric vector of user provided 1RM percentage |
n_steps |
How many progression steps to generate? Default is 4 |
Value
Data frame with the following columns: reps, index, step,
adjustment, and perc_1RM.
Functions
-
scheme_generic(): Generic set and rep scheme.scheme_genericis called in all other set and rep schemes - only the default parameters differ to make easier and quicker schemes writing and groupings -
scheme_wave(): Wave set and rep scheme -
scheme_plateau(): Plateau set and rep scheme -
scheme_step(): Step set and rep scheme -
scheme_step_reverse(): Reverse Step set and rep scheme -
scheme_wave_descending(): Descending Wave set and rep scheme -
scheme_light_heavy(): Light-Heavy set and rep scheme. Please note that theadjustmentcolumn in the output will be wrong, hence set toNA -
scheme_pyramid(): Pyramid set and rep scheme -
scheme_pyramid_reverse(): Reverse Pyramid set and rep scheme -
scheme_rep_acc(): Rep Accumulation set and rep scheme -
scheme_ladder(): Ladder set and rep scheme. Please note that theadjustmentcolumn in the output will be wrong, hence set toNA -
scheme_manual(): Manual set and rep scheme -
scheme_perc_1RM(): Manual %1RM set and rep scheme
Examples
scheme_generic(
reps = c(8, 6, 4, 8, 6, 4),
# Adjusting using lower %1RM (RIR Increment method used)
adjustment = c(4, 2, 0, 6, 4, 2),
vertical_planning = vertical_linear,
vertical_planning_control = list(reps_change = c(0, -2, -4)),
progression_table = progression_RIR_increment,
progression_table_control = list(volume = "extensive")
)
# Wave set and rep schemes
# --------------------------
scheme_wave()
scheme_wave(
reps = c(8, 6, 4, 8, 6, 4),
# Second wave with higher intensity
adjustment = c(-0.25, -0.15, 0.05, -0.2, -0.1, 0),
vertical_planning = vertical_block,
progression_table = progression_perc_drop,
progression_table_control = list(type = "ballistic")
)
# Adjusted second wave
# and using 3 steps progression
scheme_wave(
reps = c(8, 6, 4, 8, 6, 4),
# Adjusting using lower %1RM (progression_perc_drop method used)
adjustment = c(0, 0, 0, -0.1, -0.1, -0.1),
vertical_planning = vertical_linear,
vertical_planning_control = list(reps_change = c(0, -2, -4)),
progression_table = progression_perc_drop,
progression_table_control = list(volume = "extensive")
)
# Adjusted using RIR inc
# This time we adjust first wave as well, first two sets easier
scheme <- scheme_wave(
reps = c(8, 6, 4, 8, 6, 4),
# Adjusting using lower %1RM (RIR Increment method used)
adjustment = c(4, 2, 0, 6, 4, 2),
vertical_planning = vertical_linear,
vertical_planning_control = list(reps_change = c(0, -2, -4)),
progression_table = progression_RIR_increment,
progression_table_control = list(volume = "extensive")
)
plot(scheme)
# Plateau set and rep schemes
# --------------------------
scheme_plateau()
scheme <- scheme_plateau(
reps = c(3, 3, 3),
progression_table_control = list(type = "ballistic")
)
plot(scheme)
# Step set and rep schemes
# --------------------------
scheme_step()
scheme <- scheme_step(
reps = c(2, 2, 2),
adjustment = c(-0.1, -0.05, 0),
vertical_planning = vertical_linear_reverse,
progression_table_control = list(type = "ballistic")
)
plot(scheme)
# Reverse Step set and rep schemes
#- -------------------------
scheme <- scheme_step_reverse()
plot(scheme)
# Descending Wave set and rep schemes
# --------------------------
scheme <- scheme_wave_descending()
plot(scheme)
# Light-Heavy set and rep schemes
# --------------------------
scheme <- scheme_light_heavy()
plot(scheme)
# Pyramid set and rep schemes
# --------------------------
scheme <- scheme_pyramid()
plot(scheme)
# Reverse Pyramid set and rep schemes
# --------------------------
scheme <- scheme_pyramid_reverse()
plot(scheme)
# Rep Accumulation set and rep schemes
# --------------------------
scheme_rep_acc()
# Generate Wave scheme with rep accumulation vertical progression
# This functions doesn't allow you to use different vertical planning
# options
scheme <- scheme_rep_acc(reps = c(10, 8, 6), adjustment = c(-0.1, -0.05, 0))
plot(scheme)
# Other options is to use `.vertical_rep_accumulation.post()` and
# apply it after
# The default vertical progression is `vertical_const()`
scheme <- scheme_wave(reps = c(10, 8, 6), adjustment = c(-0.1, -0.05, 0))
.vertical_rep_accumulation.post(scheme)
# We can also create "undulating" rep decrements
.vertical_rep_accumulation.post(
scheme,
rep_decrement = c(-3, -1, -2, 0)
)
# `scheme_rep_acc` will not allow you to generate `scheme_ladder()`
# and `scheme_scheme_light_heavy()`
# You must use `.vertical_rep_accumulation.post()` to do so
scheme <- scheme_ladder()
scheme <- .vertical_rep_accumulation.post(scheme)
plot(scheme)
# Please note that reps < 1 are removed. If you do not want this,
# use `remove_reps = FALSE` parameter
scheme <- scheme_ladder()
scheme <- .vertical_rep_accumulation.post(scheme, remove_reps = FALSE)
plot(scheme)
# Ladder set and rep schemes
# --------------------------
scheme <- scheme_ladder()
plot(scheme)
# Manual set and rep schemes
# --------------------------
scheme_df <- data.frame(
index = 1, # Use this just as an example
step = c(-3, -2, -1, 0),
# Sets are just an easy way to repeat reps and adjustment
sets = c(5, 4, 3, 2),
reps = c(5, 4, 3, 2),
adjustment = 0
)
# Step index is estimated to be sequences of steps
# If you want specific indexes, use it as an argument (see next example)
scheme <- scheme_manual(
step = scheme_df$step,
sets = scheme_df$sets,
reps = scheme_df$reps,
adjustment = scheme_df$adjustment
)
plot(scheme)
# Here we are going to provide our own index
scheme <- scheme_manual(
index = scheme_df$index,
step = scheme_df$step,
sets = scheme_df$sets,
reps = scheme_df$reps,
adjustment = scheme_df$adjustment
)
plot(scheme)
# More complicated example
scheme_df <- data.frame(
step = c(-3, -3, -3, -3, -2, -2, -2, -1, -1, 0),
sets = 1,
reps = c(5, 5, 5, 5, 3, 2, 1, 2, 1, 1),
adjustment = c(0, -0.05, -0.1, -0.15, -0.1, -0.05, 0, -0.1, 0, 0)
)
scheme_df
scheme <- scheme_manual(
step = scheme_df$step,
sets = scheme_df$sets,
reps = scheme_df$reps,
adjustment = scheme_df$adjustment,
# Select another progression table
progression_table = progression_DI,
# Extra parameters for the progression table
progression_table_control = list(
volume = "extensive",
type = "ballistic",
max_perc_1RM_func = max_perc_1RM_linear,
klin = 36
)
)
plot(scheme)
# Provide %1RM manually
scheme_df <- data.frame(
index = rep(c(1, 2, 3, 4), each = 3),
reps = rep(c(5, 5, 5), 4),
perc_1RM = rep(c(0.4, 0.5, 0.6), 4)
)
warmup_scheme <- scheme_manual(
index = scheme_df$index,
reps = scheme_df$reps,
perc_1RM = scheme_df$perc_1RM
)
plot(warmup_scheme)
# Manual %1RM set and rep schemes
# --------------------------
warmup_scheme <- scheme_perc_1RM(
reps = c(10, 8, 6),
perc_1RM = c(0.4, 0.5, 0.6),
n_steps = 3
)
plot(warmup_scheme)
Format to significant digits and pad to equal string width
Description
Format to significant digits and pad to equal string width
Usage
sig_pad(x, sig = 3L, na = NA_character_)
Arguments
x |
Numeric vector. |
sig |
Integer >= 1. Significant digits. |
na |
Character to use for NA values. |
Value
Character vector with equal nchar (non-NA values), left-padded with spaces.
Strength Training Log
Description
A dataset containing strength training log for a single athlete. Strength training program
involves doing two strength training sessions, over 12 week (4 phases of 3 weeks each).
Session A involves linear wave-loading pattern starting with 2x12/10/8 reps and reaching 2x8/6/4 reps.
Session B involves constant wave-loading pattern using 2x3/2/1. This dataset contains weight
being used, as well as estimated reps-in-reserve (eRIR), which represent subjective rating
of the proximity to failure
Usage
strength_training_log
Format
A data frame with 144 rows and 8 variables:
- phase
Phase index number. Numeric from 1 to 4
- week
Week index number (within phase). Numeric from 1 to 3
- day
Day (total) index number. Numeric from 1 to 3
- session
Name of the session. Can be "Session A" or "Session B"
- set
Set index number. Numeric from 1 to 6
- weight
Weight in kg being used
- reps
Number of reps being done
- eRIR
Estimated reps-in-reserve
Vertical Planning Functions
Description
Functions for creating vertical planning (progressions)
Usage
vertical_planning(reps, reps_change = NULL, step = NULL)
vertical_constant(reps, n_steps = 4)
vertical_linear(reps, reps_change = c(0, -1, -2, -3))
vertical_linear_reverse(reps, reps_change = c(0, 1, 2, 3))
vertical_block(reps, step = c(-2, -1, 0, -3))
vertical_block_variant(reps, step = c(-2, -1, -3, 0))
vertical_rep_accumulation(
reps,
reps_change = c(-3, -2, -1, 0),
step = c(0, 0, 0, 0)
)
vertical_set_accumulation(
reps,
step = c(-2, -2, -2, -2),
reps_change = rep(0, length(step)),
accumulate_set = length(reps),
set_increment = 1,
sequence = TRUE
)
vertical_set_accumulation_reverse(
reps,
step = c(-3, -2, -1, 0),
reps_change = rep(0, length(step)),
accumulate_set = length(reps),
set_increment = 1,
sequence = TRUE
)
vertical_undulating(reps, reps_change = c(0, -2, -1, -3))
vertical_undulating_reverse(reps, reps_change = c(0, 2, 1, 3))
vertical_block_undulating(
reps,
reps_change = c(0, -2, -1, -3),
step = c(-2, -1, -3, 0)
)
vertical_volume_intensity(reps, reps_change = c(0, 0, -3, -3))
.vertical_rep_accumulation.post(
scheme,
rep_decrement = c(-3, -2, -1, 0),
remove_reps = TRUE
)
Arguments
reps |
Numeric vector indicating reps prescription |
reps_change |
Change in |
step |
Numeric vector indicating progression steps (i.e. -3, -2, -1, 0) |
n_steps |
Number of progression steps. Default is 4 |
accumulate_set |
Which set (position in |
set_increment |
How many sets to increase each step? Default is 1 |
sequence |
Should the sequence of accumulated sets be repeated, or individual sets? |
scheme |
Scheme generated by |
rep_decrement |
Rep decrements across progression step |
remove_reps |
Should < 1 reps be removed? |
Value
Data frame with reps, index, and step columns
Functions
-
vertical_planning(): Generic Vertical Planning -
vertical_constant(): Constants Vertical Planning -
vertical_linear(): Linear Vertical Planning -
vertical_linear_reverse(): Reverse Linear Vertical Planning -
vertical_block(): Block Vertical Planning -
vertical_block_variant(): Block Variant Vertical Planning -
vertical_rep_accumulation(): Rep Accumulation Vertical Planning -
vertical_set_accumulation(): Set Accumulation Vertical Planning -
vertical_set_accumulation_reverse(): Set Accumulation Reverse Vertical Planning -
vertical_undulating(): Undulating Vertical Planning -
vertical_undulating_reverse(): Undulating Vertical Planning -
vertical_block_undulating(): Block Undulating Vertical Planning -
vertical_volume_intensity(): Volume-Intensity Vertical Planning -
.vertical_rep_accumulation.post(): Rep Accumulation Vertical Planning POST treatment This functions is to be applied AFTER scheme is generated. Other options is to usescheme_rep_accfunction, that is flexible enough to generate most options, except for thescheme_ladderandscheme_light_heavy. Please note that theadjustmentcolumn in the output will be wrong, hence set toNA
Examples
# Generic vertical planning function
# ----------------------------------
# Constant
vertical_planning(reps = c(3, 2, 1), step = c(-3, -2, -1, 0))
# Linear
vertical_planning(reps = c(5, 5, 5, 5, 5), reps_change = c(0, -1, -2))
# Reverse Linear
vertical_planning(reps = c(5, 5, 5, 5, 5), reps_change = c(0, 1, 2))
# Block
vertical_planning(reps = c(5, 5, 5, 5, 5), step = c(-2, -1, 0, -3))
# Block variant
vertical_planning(reps = c(5, 5, 5, 5, 5), step = c(-2, -1, -3, 0))
# Undulating
vertical_planning(reps = c(12, 10, 8), reps_change = c(0, -4, -2, -6))
# Undulating + Block variant
vertical_planning(
reps = c(12, 10, 8),
reps_change = c(0, -4, -2, -6),
step = c(-2, -1, -3, 0)
)
# Rep accumulation
# If used with `scheme_generic()` (or any other `scheme_`) it will provide wrong set and rep scheme.
# Use `scheme_rep_acc()` instead, or apply `.vertical_rep_accumulation.post()`
# function AFTER generating the scheme
vertical_planning(
reps = c(10, 8, 6),
reps_change = c(-3, -2, -1, 0),
step = c(0, 0, 0, 0)
)
# Constant
# ----------------------------------
vertical_constant(c(5, 5, 5), 4)
vertical_constant(c(3, 2, 1), 2)
plot_vertical(vertical_constant)
# Linear
# ----------------------------------
vertical_linear(c(10, 8, 6), c(0, -2, -4))
vertical_linear(c(5, 5, 5), c(0, -1, -2, -3))
plot_vertical(vertical_linear)
# Reverse Linear
# ----------------------------------
vertical_linear_reverse(c(6, 4, 2), c(0, 1, 2))
vertical_linear_reverse(c(5, 5, 5))
plot_vertical(vertical_linear_reverse)
# Block
# ----------------------------------
vertical_block(c(6, 4, 2))
plot_vertical(vertical_block)
# Block Variant
# ----------------------------------
vertical_block_variant(c(6, 4, 2))
plot_vertical(vertical_block_variant)
# Rep Accumulation
# ----------------------------------
# If used with `scheme_generic()` (or any other `scheme_`) it will provide wrong set and rep scheme.
# Use `scheme_rep_acc()` instead, or apply `.vertical_rep_accumulation.post()`
# function AFTER generating the scheme
vertical_rep_accumulation(c(10, 8, 6))
plot_vertical(vertical_rep_accumulation)
# Set Accumulation
# ----------------------------------
# Default is accumulation of the last set
vertical_set_accumulation(c(3, 2, 1))
# We can have whole sequence being repeated
vertical_set_accumulation(c(3, 2, 1), accumulate_set = 1:3)
# Or we can have accumulation of the individual sets
vertical_set_accumulation(c(3, 2, 1), accumulate_set = 1:3, sequence = FALSE)
# We can also have two or more sequences
vertical_set_accumulation(c(10, 8, 6, 4, 2, 1), accumulate_set = c(1:2, 5:6))
# And also repeat the individual sets
vertical_set_accumulation(
c(10, 8, 6, 4, 2, 1),
accumulate_set = c(1:2, 5:6),
sequence = FALSE
)
plot_vertical(vertical_set_accumulation)
# Reverse Set Accumulation
# ----------------------------------
# Default is accumulation of the last set
vertical_set_accumulation_reverse(c(3, 2, 1))
# We can have whole sequence being repeated
vertical_set_accumulation_reverse(c(3, 2, 1), accumulate_set = 1:3)
# Or we can have accumulation of the individual sets
vertical_set_accumulation_reverse(c(3, 2, 1), accumulate_set = 1:3, sequence = FALSE)
# We can also have two or more sequences
vertical_set_accumulation_reverse(c(10, 8, 6, 4, 2, 1), accumulate_set = c(1:2, 5:6))
# And also repeat the individual sets
vertical_set_accumulation_reverse(
c(10, 8, 6, 4, 2, 1),
accumulate_set = c(1:2, 5:6),
sequence = FALSE
)
plot_vertical(vertical_set_accumulation_reverse)
# Undulating
# ----------------------------------
vertical_undulating(c(8, 6, 4))
# Reverse Undulating
# ----------------------------------
vertical_undulating_reverse(c(8, 6, 4))
# Block Undulating
# ----------------------------------
# This is a combination of Block Variant (undulation in the steps) and
# Undulating (undulation in reps)
vertical_block_undulating(c(8, 6, 4))
# Volume-Intensity
# ----------------------------------
vertical_volume_intensity(c(6, 6, 6))
# Rep Accumulation
# --------------------------
scheme_rep_acc()
# Generate Wave scheme with rep accumulation vertical progression
# This functions doesn't allow you to use different vertical planning
# options
scheme <- scheme_rep_acc(reps = c(10, 8, 6), adjustment = c(-0.1, -0.05, 0))
plot(scheme)
# Other options is to use `.vertical_rep_accumulation.post()` and
# apply it after
# The default vertical progression is `vertical_const()`
scheme <- scheme_wave(reps = c(10, 8, 6), adjustment = c(-0.1, -0.05, 0))
.vertical_rep_accumulation.post(scheme)
# We can also create "undulating" rep decrements
.vertical_rep_accumulation.post(
scheme,
rep_decrement = c(-3, -1, -2, 0)
)
# `scheme_rep_acc` will not allow you to generate `scheme_ladder()`
# and `scheme_scheme_light_heavy()`
# You must use `.vertical_rep_accumulation.post()` to do so
scheme <- scheme_ladder()
scheme <- .vertical_rep_accumulation.post(scheme)
plot(scheme)
# Please note that reps < 1 are removed. If you do not want this,
# use `remove_reps = FALSE` parameter
scheme <- scheme_ladder()
scheme <- .vertical_rep_accumulation.post(scheme, remove_reps = FALSE)
plot(scheme)