← All Use Cases
🏋
Full Factorial Design

Strength Training Program

Full factorial of sets, reps, rest period, and training frequency to maximize strength gain and minimize fatigue score

Summary

This experiment investigates strength training program. Full factorial of sets, reps, rest period, and training frequency to maximize strength gain and minimize fatigue score.

The design varies 4 factors: sets (sets), ranging from 3 to 6, reps (reps), ranging from 3 to 12, rest sec (sec), ranging from 60 to 180, and freq per week (days/wk), ranging from 2 to 5. The goal is to optimize 2 responses: strength gain (%) (maximize) and fatigue score (pts) (minimize). Fixed conditions held constant across all runs include exercise = barbell_squat, trainee level = intermediate.

A full factorial design was used to explore all 16 possible combinations of the 4 factors at two levels. This guarantees that every main effect and interaction can be estimated independently, at the cost of a larger experiment (16 runs).

Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.

Key Findings

For strength gain, the most influential factors were sets (76.2%), reps (10.2%), freq per week (10.2%). The best observed value was 14.1 (at sets = 6, reps = 12, rest sec = 60).

For fatigue score, the most influential factors were sets (70.8%), reps (19.0%), freq per week (6.7%). The best observed value was 1.0 (at sets = 3, reps = 12, rest sec = 60).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
sets36sets
reps312reps
rest_sec60180sec
freq_per_week25days/wk

Fixed: exercise = barbell_squat, trainee_level = intermediate

Responses

ResponseDirectionUnit
strength_gain↑ maximize%
fatigue_score↓ minimizepts

Configuration

use_cases/109_strength_training/config.json
{ "metadata": { "name": "Strength Training Program", "description": "Full factorial of sets, reps, rest period, and training frequency to maximize strength gain and minimize fatigue score" }, "factors": [ { "name": "sets", "levels": [ "3", "6" ], "type": "continuous", "unit": "sets" }, { "name": "reps", "levels": [ "3", "12" ], "type": "continuous", "unit": "reps" }, { "name": "rest_sec", "levels": [ "60", "180" ], "type": "continuous", "unit": "sec" }, { "name": "freq_per_week", "levels": [ "2", "5" ], "type": "continuous", "unit": "days/wk" } ], "fixed_factors": { "exercise": "barbell_squat", "trainee_level": "intermediate" }, "responses": [ { "name": "strength_gain", "optimize": "maximize", "unit": "%" }, { "name": "fatigue_score", "optimize": "minimize", "unit": "pts" } ], "settings": { "operation": "full_factorial", "test_script": "use_cases/109_strength_training/sim.sh" } }

Experimental Matrix

The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.

Runsetsrepsrest_secfreq_per_week
13121805
263605
3312605
43121802
56121802
6631802
7612602
863602
933605
10331802
11612605
126121805
13312602
14631805
1533602
16331805

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/109_strength_training/config.json
2

Generate the runner script

Terminal
$ doe generate --config use_cases/109_strength_training/config.json \ --output use_cases/109_strength_training/results/run.sh --seed 42
3

Execute the experiments

Terminal
$ bash use_cases/109_strength_training/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/109_strength_training/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/109_strength_training/config.json
6

Multi-objective optimization

With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.

Terminal
$ doe optimize --config use_cases/109_strength_training/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/109_strength_training/config.json \ --output use_cases/109_strength_training/results/report.html

Features Exercised

FeatureValue
Design typefull_factorial
Factor typescontinuous (all 4)
Arg styledouble-dash
Responses2 (strength_gain ↑, fatigue_score ↓)
Total runs16

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: strength_gain

Top factors: sets (76.2%), reps (10.2%), freq_per_week (10.2%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
sets131.360031.36001.9280.2236
reps10.56250.56250.0350.8598
rest_sec10.06250.06250.0040.9530
freq_per_week10.56250.56250.0350.8598
sets*reps13.42253.42250.2100.6657
sets*rest_sec16.50256.50250.4000.5550
sets*freq_per_week11.82251.82250.1120.7514
reps*rest_sec11.69001.69000.1040.7602
reps*freq_per_week132.490032.49001.9980.2167
rest_sec*freq_per_week10.25000.25000.0150.9062
Error581.315016.2630
Total15160.040010.6693

Pareto Chart

Pareto chart for strength_gain

Main Effects Plot

Main effects plot for strength_gain

Normal Probability Plot of Effects

Normal probability plot for strength_gain

Half-Normal Plot of Effects

Half-normal plot for strength_gain

Model Diagnostics

Model diagnostics for strength_gain

Response: fatigue_score

Top factors: sets (70.8%), reps (19.0%), freq_per_week (6.7%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
sets147.610047.61009.5250.0273
reps13.42253.42250.6850.4457
rest_sec10.12250.12250.0250.8817
freq_per_week10.42250.42250.0850.7829
sets*reps13.61003.61000.7220.4342
sets*rest_sec10.49000.49000.0980.7668
sets*freq_per_week14.00004.00000.8000.4120
reps*rest_sec10.30250.30250.0610.8155
reps*freq_per_week10.42250.42250.0850.7829
rest_sec*freq_per_week10.02250.02250.0050.9491
Error524.99254.9985
Total1585.41755.6945

Pareto Chart

Pareto chart for fatigue_score

Main Effects Plot

Main effects plot for fatigue_score

Normal Probability Plot of Effects

Normal probability plot for fatigue_score

Half-Normal Plot of Effects

Half-normal plot for fatigue_score

Model Diagnostics

Model diagnostics for fatigue_score

Response Surface Plots

3D surfaces fitted with quadratic RSM. Red dots are observed data points.

fatigue score reps vs freq per week

RSM surface: fatigue score reps vs freq per week

fatigue score reps vs rest sec

RSM surface: fatigue score reps vs rest sec

fatigue score rest sec vs freq per week

RSM surface: fatigue score rest sec vs freq per week

fatigue score sets vs freq per week

RSM surface: fatigue score sets vs freq per week

fatigue score sets vs reps

RSM surface: fatigue score sets vs reps

fatigue score sets vs rest sec

RSM surface: fatigue score sets vs rest sec

strength gain reps vs freq per week

RSM surface: strength gain reps vs freq per week

strength gain reps vs rest sec

RSM surface: strength gain reps vs rest sec

strength gain rest sec vs freq per week

RSM surface: strength gain rest sec vs freq per week

strength gain sets vs freq per week

RSM surface: strength gain sets vs freq per week

strength gain sets vs reps

RSM surface: strength gain sets vs reps

strength gain sets vs rest sec

RSM surface: strength gain sets vs rest sec

Multi-Objective Optimization

When responses compete, Derringer–Suich desirability finds the best compromise. Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.

Overall Desirability
D = 0.7250

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
strength_gain 1.5
0.6803
10.60 0.6803 10.60 %
fatigue_score 1.0
0.7978
2.50 0.7978 2.50 pts

Recommended Settings

FactorValue
sets3 sets
reps3 reps
rest_sec60 sec
freq_per_week5 days/wk

Source: from observed run #6

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
fatigue_score2.501.00+1.50

Top 3 Runs by Desirability

RunDFactor Settings
#140.6746sets=6, reps=3, rest_sec=180, freq_per_week=2
#160.6260sets=3, reps=12, rest_sec=60, freq_per_week=5

Model Quality

ResponseType
fatigue_score0.2121linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.7250 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- strength_gain 1.5 0.6803 10.60 % ↑ fatigue_score 1.0 0.7978 2.50 pts ↓ Recommended settings: sets = 3 sets reps = 3 reps rest_sec = 60 sec freq_per_week = 5 days/wk (from observed run #6) Trade-off summary: strength_gain: 10.60 (best observed: 14.10, sacrifice: +3.50) fatigue_score: 2.50 (best observed: 1.00, sacrifice: +1.50) Model quality: strength_gain: R² = 0.3361 (linear) fatigue_score: R² = 0.2121 (linear) Top 3 observed runs by overall desirability: 1. Run #6 (D=0.7250): sets=3, reps=3, rest_sec=60, freq_per_week=5 2. Run #14 (D=0.6746): sets=6, reps=3, rest_sec=180, freq_per_week=2 3. Run #16 (D=0.6260): sets=3, reps=12, rest_sec=60, freq_per_week=5

Full Analysis Output

doe analyze
=== Main Effects: strength_gain === Factor Effect Std Error % Contribution -------------------------------------------------------------- sets -2.8000 0.8166 76.2% reps -0.3750 0.8166 10.2% freq_per_week 0.3750 0.8166 10.2% rest_sec 0.1250 0.8166 3.4% === ANOVA Table: strength_gain === Source DF SS MS F p-value ----------------------------------------------------------------------------- sets 1 31.3600 31.3600 1.928 0.2236 reps 1 0.5625 0.5625 0.035 0.8598 rest_sec 1 0.0625 0.0625 0.004 0.9530 freq_per_week 1 0.5625 0.5625 0.035 0.8598 sets*reps 1 3.4225 3.4225 0.210 0.6657 sets*rest_sec 1 6.5025 6.5025 0.400 0.5550 sets*freq_per_week 1 1.8225 1.8225 0.112 0.7514 reps*rest_sec 1 1.6900 1.6900 0.104 0.7602 reps*freq_per_week 1 32.4900 32.4900 1.998 0.2167 rest_sec*freq_per_week 1 0.2500 0.2500 0.015 0.9062 Error 5 81.3150 16.2630 Total 15 160.0400 10.6693 === Interaction Effects: strength_gain === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ reps freq_per_week -2.8500 43.0% sets rest_sec -1.2750 19.2% sets reps 0.9250 14.0% sets freq_per_week -0.6750 10.2% reps rest_sec -0.6500 9.8% rest_sec freq_per_week 0.2500 3.8% === Summary Statistics: strength_gain === sets: Level N Mean Std Min Max ------------------------------------------------------------ 3 8 9.2000 3.3381 4.6000 14.1000 6 8 6.4000 2.6907 2.5000 10.6000 reps: Level N Mean Std Min Max ------------------------------------------------------------ 12 8 7.9875 3.7296 2.5000 14.1000 3 8 7.6125 2.9787 4.2000 12.5000 rest_sec: Level N Mean Std Min Max ------------------------------------------------------------ 180 8 7.7375 2.8685 2.5000 11.2000 60 8 7.8625 3.8243 4.2000 14.1000 freq_per_week: Level N Mean Std Min Max ------------------------------------------------------------ 2 8 7.6125 3.4873 2.5000 12.5000 5 8 7.9875 3.2590 4.3000 14.1000 === Main Effects: fatigue_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- sets -3.4500 0.5966 70.8% reps -0.9250 0.5966 19.0% freq_per_week -0.3250 0.5966 6.7% rest_sec -0.1750 0.5966 3.6% === ANOVA Table: fatigue_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- sets 1 47.6100 47.6100 9.525 0.0273 reps 1 3.4225 3.4225 0.685 0.4457 rest_sec 1 0.1225 0.1225 0.025 0.8817 freq_per_week 1 0.4225 0.4225 0.085 0.7829 sets*reps 1 3.6100 3.6100 0.722 0.4342 sets*rest_sec 1 0.4900 0.4900 0.098 0.7668 sets*freq_per_week 1 4.0000 4.0000 0.800 0.4120 reps*rest_sec 1 0.3025 0.3025 0.061 0.8155 reps*freq_per_week 1 0.4225 0.4225 0.085 0.7829 rest_sec*freq_per_week 1 0.0225 0.0225 0.005 0.9491 Error 5 24.9925 4.9985 Total 15 85.4175 5.6945 === Interaction Effects: fatigue_score === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ sets freq_per_week 1.0000 33.6% sets reps 0.9500 31.9% sets rest_sec 0.3500 11.8% reps freq_per_week 0.3250 10.9% reps rest_sec 0.2750 9.2% rest_sec freq_per_week 0.0750 2.5% === Summary Statistics: fatigue_score === sets: Level N Mean Std Min Max ------------------------------------------------------------ 3 8 6.4625 1.9376 4.1000 9.7000 6 8 3.0125 1.2833 1.0000 4.7000 reps: Level N Mean Std Min Max ------------------------------------------------------------ 12 8 5.2000 2.7800 1.0000 9.7000 3 8 4.2750 1.9962 1.9000 8.3000 rest_sec: Level N Mean Std Min Max ------------------------------------------------------------ 180 8 4.8250 2.7551 1.0000 9.7000 60 8 4.6500 2.1434 1.9000 8.3000 freq_per_week: Level N Mean Std Min Max ------------------------------------------------------------ 2 8 4.9000 2.8641 1.9000 9.7000 5 8 4.5750 1.9848 1.0000 7.5000

Optimization Recommendations

doe optimize
=== Optimization: strength_gain === Direction: maximize Best observed run: #14 sets = 6 reps = 12 rest_sec = 60 freq_per_week = 2 Value: 14.1 RSM Model (linear, R² = 0.2001, Adj R² = -0.0908): Coefficients: intercept +7.8000 sets -0.2750 reps -0.9125 rest_sec -0.7875 freq_per_week -0.6875 RSM Model (quadratic, R² = 0.4241, Adj R² = -7.6392): Coefficients: intercept +1.5600 sets -0.2750 reps -0.9125 rest_sec -0.7875 freq_per_week -0.6875 sets*reps -0.2375 sets*rest_sec -0.6625 sets*freq_per_week -0.7375 reps*rest_sec +0.6750 reps*freq_per_week -0.8000 rest_sec*freq_per_week +0.3250 sets^2 +1.5600 reps^2 +1.5600 rest_sec^2 +1.5600 freq_per_week^2 +1.5600 Curvature analysis: sets coef=+1.5600 convex (has a minimum) reps coef=+1.5600 convex (has a minimum) rest_sec coef=+1.5600 convex (has a minimum) freq_per_week coef=+1.5600 convex (has a minimum) Notable interactions: reps*freq_per_week coef=-0.8000 (antagonistic) sets*freq_per_week coef=-0.7375 (antagonistic) reps*rest_sec coef=+0.6750 (synergistic) sets*rest_sec coef=-0.6625 (antagonistic) rest_sec*freq_per_week coef=+0.3250 (synergistic) Predicted optimum (from linear model, at observed points): sets = 3 reps = 3 rest_sec = 60 freq_per_week = 2 Predicted value: 10.4625 Surface optimum (via L-BFGS-B, linear model): sets = 3 reps = 3 rest_sec = 60 freq_per_week = 2 Predicted value: 10.4625 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. reps (effect: 1.8, contribution: 34.3%) 2. rest_sec (effect: 1.6, contribution: 29.6%) 3. freq_per_week (effect: -1.4, contribution: 25.8%) 4. sets (effect: -0.5, contribution: 10.3%) === Optimization: fatigue_score === Direction: minimize Best observed run: #10 sets = 3 reps = 12 rest_sec = 60 freq_per_week = 5 Value: 1.0 RSM Model (linear, R² = 0.4137, Adj R² = 0.2005): Coefficients: intercept +4.7375 sets +0.9125 reps -1.1125 rest_sec +0.2750 freq_per_week +0.2500 RSM Model (quadratic, R² = 0.6912, Adj R² = -3.6321): Coefficients: intercept +0.9475 sets +0.9125 reps -1.1125 rest_sec +0.2750 freq_per_week +0.2500 sets*reps +0.1875 sets*rest_sec -0.0500 sets*freq_per_week -0.7500 reps*rest_sec +0.1750 reps*freq_per_week -0.8250 rest_sec*freq_per_week +0.4125 sets^2 +0.9475 reps^2 +0.9475 rest_sec^2 +0.9475 freq_per_week^2 +0.9475 Curvature analysis: freq_per_week coef=+0.9475 convex (has a minimum) sets coef=+0.9475 convex (has a minimum) reps coef=+0.9475 convex (has a minimum) rest_sec coef=+0.9475 convex (has a minimum) Notable interactions: reps*freq_per_week coef=-0.8250 (antagonistic) sets*freq_per_week coef=-0.7500 (antagonistic) rest_sec*freq_per_week coef=+0.4125 (synergistic) Predicted optimum (from linear model, at observed points): sets = 6 reps = 3 rest_sec = 180 freq_per_week = 5 Predicted value: 7.2875 Surface optimum (via L-BFGS-B, linear model): sets = 3 reps = 12 rest_sec = 60 freq_per_week = 2 Predicted value: 2.1875 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. reps (effect: 2.2, contribution: 43.6%) 2. sets (effect: 1.8, contribution: 35.8%) 3. rest_sec (effect: -0.5, contribution: 10.8%) 4. freq_per_week (effect: 0.5, contribution: 9.8%)
← Previous: Running Training Plan Next: Meditation Routine Effectiveness →