The goal of STM
is to provide the readers of the Strength Training Manual a list of functions to help them re-create set and rep schemes as well as to create their own in reproducible and open-source environment.
You can install the released version (once released) of STM
from CRAN with:
install.packages("STM")
And the development version from GitHub with:
# install.packages("devtools")
devtools::install_github("mladenjovanovic/STM")
This is a quick example, more are coming….
Strength Training Manual comes with two progression table implemented in RIR_increment
and perc_drop
functions, although there are fixed variants (and you can easily make your own).
To visualize these progression tables, we need to write a simple plot function:
require(tidyverse)
require(ggstance)
require(STM)
plot_progression_table <- function(progression_table = RIR_increment) {
progression_tbl <- generate_progression_table(
progression_table = progression_table)
progression_tbl <- progression_tbl %>%
mutate(
volume = factor(
volume,
levels = c("intensive", "normal", "extensive")
),
type = factor(
type,
levels = c("grinding", "ballistic")
),
reps = factor(reps),
step = factor(step),
perc_1RM = signif(perc_1RM * 100, 2),
adjustment = signif(adjustment, 2)
)
gg_perc_1RM <- ggplot(progression_tbl, aes(x = step, y = reps)) +
theme_linedraw() +
#geom_tile(fill = "transparent", color = "black") +
geom_text(aes(label = perc_1RM)) +
facet_grid(type~volume) +
scale_y_discrete(limits = rev(levels(progression_tbl$reps))) +
theme(
legend.position = "none",
axis.title = element_blank(),
#axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
) +
xlab(NULL) +
ylab(NULL) +
ggtitle("%1RM")
gg_adj <- ggplot(progression_tbl, aes(x = step, y = reps)) +
theme_linedraw() +
#geom_tile(fill = "transparent", color = "black") +
geom_text(aes(label = adjustment)) +
facet_grid(type~volume) +
scale_y_discrete(limits = rev(levels(progression_tbl$reps))) +
theme(
legend.position = "none",
axis.title = element_blank(),
#axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
) +
xlab(NULL) +
ylab(NULL) +
ggtitle("Adjustment", "RIR Increment or Percent Drop")
list(
`%1RM` = gg_perc_1RM,
`Adjustment` = gg_adj
)
}
Here is the table of the RIR_increment
:
plot_progression_table(RIR_increment)$`%1RM`
And table of the perc_drop
:
plot_progression_table(perc_drop)$`%1RM`
Strength Training Manual comes with more than 2,000 set and rep schemes. STM
package allows re-creation of those schemes, but also creation of custom ones.
To make these schemes more visual, we need to write a plotting function.
# Plot scheme function
plot_scheme <- function(scheme, label_size = 3) {
# Reorganize the data
scheme <- scheme %>%
group_by(index) %>%
mutate(
set = row_number(),
adjustment = signif(adjustment, 2),
perc_1RM = signif(perc_1RM * 100, 2),
index = paste0("Week ", index)
) %>%
rename(
Reps = reps,
Adjustment = adjustment,
`%1RM` = perc_1RM
) %>%
pivot_longer(cols = c("Reps", "Adjustment", "%1RM"), names_to = "param") %>%
mutate(
param = factor(param, levels = c("Reps", "Adjustment", "%1RM")),
hjust = ifelse(value < 0, -0.5, 1.5))
# Plot
ggplot(scheme, aes(x = value, y = set, fill = param)) +
theme_linedraw() +
geom_barh(stat = "identity") +
geom_text(aes(label = value, hjust = hjust), size = label_size) +
facet_grid(index ~ param, scales = "free_x") +
scale_y_reverse() +
theme(
legend.position = "none",
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
) +
scale_fill_brewer(palette = "Accent") +
xlab(NULL) +
ylab(NULL)
}
Here is an example for the Wave Set and Rep Scheme
# Wave set and rep scheme
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 = RIR_increment,
progression_table_control = list(volume = "extensive")
)
plot_scheme(scheme)
Example of Set Accumulation Wave Scheme
scheme <- scheme_wave(
reps = c(10, 8, 6),
# Needed to remove default scheme_wave adjustment
adjustment = 0,
vertical_planning = vertical_set_accumulation,
vertical_planning_control = list(accumulate_rep = c(1, 2, 3)),
# Custom progression table
progression_table = perc_drop_fixed_5,
progression_table_control = list(volume = "extensive"))
plot_scheme(scheme, label_size = 2.5)