← All Use Cases
Full Factorial Design

Archery Bow Tuning

Full factorial of draw weight, arrow spine, brace height, and nocking point height to maximize grouping tightness and minimize vertical drift

Summary

This experiment investigates archery bow tuning. Full factorial of draw weight, arrow spine, brace height, and nocking point height to maximize grouping tightness and minimize vertical drift.

The design varies 4 factors: draw weight lbs (lbs), ranging from 30 to 50, arrow spine (spine), ranging from 400 to 700, brace height in (in), ranging from 6 to 9, and nock height mm (mm), ranging from 0 to 6. The goal is to optimize 2 responses: group size cm (cm) (minimize) and vertical drift cm (cm) (minimize). Fixed conditions held constant across all runs include bow type = recurve, distance = 18m.

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 group size cm, the most influential factors were arrow spine (50.0%), brace height in (26.9%), draw weight lbs (18.6%). The best observed value was 7.4 (at draw weight lbs = 50, arrow spine = 700, brace height in = 9).

For vertical drift cm, the most influential factors were brace height in (29.0%), nock height mm (27.1%), draw weight lbs (25.8%). The best observed value was 0.4 (at draw weight lbs = 50, arrow spine = 400, brace height in = 9).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
draw_weight_lbs3050lbs
arrow_spine400700spine
brace_height_in69in
nock_height_mm06mm

Fixed: bow_type = recurve, distance = 18m

Responses

ResponseDirectionUnit
group_size_cm↓ minimizecm
vertical_drift_cm↓ minimizecm

Configuration

use_cases/214_archery_bow_tuning/config.json
{ "metadata": { "name": "Archery Bow Tuning", "description": "Full factorial of draw weight, arrow spine, brace height, and nocking point height to maximize grouping tightness and minimize vertical drift" }, "factors": [ { "name": "draw_weight_lbs", "levels": [ "30", "50" ], "type": "continuous", "unit": "lbs" }, { "name": "arrow_spine", "levels": [ "400", "700" ], "type": "continuous", "unit": "spine" }, { "name": "brace_height_in", "levels": [ "6", "9" ], "type": "continuous", "unit": "in" }, { "name": "nock_height_mm", "levels": [ "0", "6" ], "type": "continuous", "unit": "mm" } ], "fixed_factors": { "bow_type": "recurve", "distance": "18m" }, "responses": [ { "name": "group_size_cm", "optimize": "minimize", "unit": "cm" }, { "name": "vertical_drift_cm", "optimize": "minimize", "unit": "cm" } ], "settings": { "operation": "full_factorial", "test_script": "use_cases/214_archery_bow_tuning/sim.sh" } }

Experimental Matrix

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

Rundraw_weight_lbsarrow_spinebrace_height_innock_height_mm
13070096
25040066
33070066
43070090
55070090
65040090
75070060
85040060
93040066
103040090
115070066
125070096
133070060
145040096
153040060
163040096

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/214_archery_bow_tuning/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/214_archery_bow_tuning/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/214_archery_bow_tuning/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/214_archery_bow_tuning/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/214_archery_bow_tuning/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/214_archery_bow_tuning/config.json \ --output use_cases/214_archery_bow_tuning/results/report.html

Features Exercised

FeatureValue
Design typefull_factorial
Factor typescontinuous (all 4)
Arg styledouble-dash
Responses2 (group_size_cm ↓, vertical_drift_cm ↓)
Total runs16

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: group_size_cm

Top factors: arrow_spine (50.0%), brace_height_in (26.9%), draw_weight_lbs (18.6%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
draw_weight_lbs11.26561.26562.3370.1869
arrow_spine19.15069.150616.8950.0093
brace_height_in12.64062.64064.8750.0783
nock_height_mm10.07560.07560.1400.7240
draw_weight_lbs*arrow_spine10.68060.68061.2570.3132
draw_weight_lbs*brace_height_in12.97562.97565.4940.0661
draw_weight_lbs*nock_height_mm10.05060.05060.0930.7721
arrow_spine*brace_height_in13.51563.51566.4910.0514
arrow_spine*nock_height_mm10.39060.39060.7210.4345
brace_height_in*nock_height_mm10.52560.52560.9700.3698
Error52.70810.5416
Total1523.97941.5986

Pareto Chart

Pareto chart for group_size_cm

Main Effects Plot

Main effects plot for group_size_cm

Normal Probability Plot of Effects

Normal probability plot for group_size_cm

Half-Normal Plot of Effects

Half-normal plot for group_size_cm

Model Diagnostics

Model diagnostics for group_size_cm

Response: vertical_drift_cm

Top factors: brace_height_in (29.0%), nock_height_mm (27.1%), draw_weight_lbs (25.8%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
draw_weight_lbs18.12258.12253.5010.1202
arrow_spine14.00004.00001.7240.2462
brace_height_in110.240010.24004.4140.0897
nock_height_mm19.00009.00003.8790.1060
draw_weight_lbs*arrow_spine10.00250.00250.0010.9751
draw_weight_lbs*brace_height_in10.56250.56250.2420.6433
draw_weight_lbs*nock_height_mm10.00250.00250.0010.9751
arrow_spine*brace_height_in11.00001.00000.4310.5405
arrow_spine*nock_height_mm10.16000.16000.0690.8033
brace_height_in*nock_height_mm10.01000.01000.0040.9502
Error511.60002.3200
Total1544.70002.9800

Pareto Chart

Pareto chart for vertical_drift_cm

Main Effects Plot

Main effects plot for vertical_drift_cm

Normal Probability Plot of Effects

Normal probability plot for vertical_drift_cm

Half-Normal Plot of Effects

Half-normal plot for vertical_drift_cm

Model Diagnostics

Model diagnostics for vertical_drift_cm

Response Surface Plots

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

group size cm arrow spine vs brace height in

RSM surface: group size cm arrow spine vs brace height in

group size cm arrow spine vs nock height mm

RSM surface: group size cm arrow spine vs nock height mm

group size cm brace height in vs nock height mm

RSM surface: group size cm brace height in vs nock height mm

group size cm draw weight lbs vs arrow spine

RSM surface: group size cm draw weight lbs vs arrow spine

group size cm draw weight lbs vs brace height in

RSM surface: group size cm draw weight lbs vs brace height in

group size cm draw weight lbs vs nock height mm

RSM surface: group size cm draw weight lbs vs nock height mm

vertical drift cm arrow spine vs brace height in

RSM surface: vertical drift cm arrow spine vs brace height in

vertical drift cm arrow spine vs nock height mm

RSM surface: vertical drift cm arrow spine vs nock height mm

vertical drift cm brace height in vs nock height mm

RSM surface: vertical drift cm brace height in vs nock height mm

vertical drift cm draw weight lbs vs arrow spine

RSM surface: vertical drift cm draw weight lbs vs arrow spine

vertical drift cm draw weight lbs vs brace height in

RSM surface: vertical drift cm draw weight lbs vs brace height in

vertical drift cm draw weight lbs vs nock height mm

RSM surface: vertical drift cm draw weight lbs vs nock height mm

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.7476

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
group_size_cm 1.5
0.9545
7.40 0.9545 7.40 cm
vertical_drift_cm 1.0
0.5182
2.80 0.5182 2.80 cm

Recommended Settings

FactorValue
draw_weight_lbs30 lbs
arrow_spine400 spine
brace_height_in9 in
nock_height_mm6 mm

Source: from observed run #6

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
vertical_drift_cm2.800.40+2.40

Top 3 Runs by Desirability

RunDFactor Settings
#80.7212draw_weight_lbs=50, arrow_spine=700, brace_height_in=9, nock_height_mm=6
#50.5969draw_weight_lbs=30, arrow_spine=400, brace_height_in=6, nock_height_mm=0

Model Quality

ResponseType
vertical_drift_cm0.0286linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.7476 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- group_size_cm 1.5 0.9545 7.40 cm ↓ vertical_drift_cm 1.0 0.5182 2.80 cm ↓ Recommended settings: draw_weight_lbs = 30 lbs arrow_spine = 400 spine brace_height_in = 9 in nock_height_mm = 6 mm (from observed run #6) Trade-off summary: group_size_cm: 7.40 (best observed: 7.40, sacrifice: +0.00) vertical_drift_cm: 2.80 (best observed: 0.40, sacrifice: +2.40) Model quality: group_size_cm: R² = 0.3085 (linear) vertical_drift_cm: R² = 0.0286 (linear) Top 3 observed runs by overall desirability: 1. Run #6 (D=0.7476): draw_weight_lbs=30, arrow_spine=400, brace_height_in=9, nock_height_mm=6 2. Run #8 (D=0.7212): draw_weight_lbs=50, arrow_spine=700, brace_height_in=9, nock_height_mm=6 3. Run #5 (D=0.5969): draw_weight_lbs=30, arrow_spine=400, brace_height_in=6, nock_height_mm=0

Full Analysis Output

doe analyze
=== Main Effects: group_size_cm === Factor Effect Std Error % Contribution -------------------------------------------------------------- arrow_spine 1.5125 0.3161 50.0% brace_height_in -0.8125 0.3161 26.9% draw_weight_lbs -0.5625 0.3161 18.6% nock_height_mm -0.1375 0.3161 4.5% === ANOVA Table: group_size_cm === Source DF SS MS F p-value ----------------------------------------------------------------------------- draw_weight_lbs 1 1.2656 1.2656 2.337 0.1869 arrow_spine 1 9.1506 9.1506 16.895 0.0093 brace_height_in 1 2.6406 2.6406 4.875 0.0783 nock_height_mm 1 0.0756 0.0756 0.140 0.7240 draw_weight_lbs*arrow_spine 1 0.6806 0.6806 1.257 0.3132 draw_weight_lbs*brace_height_in 1 2.9756 2.9756 5.494 0.0661 draw_weight_lbs*nock_height_mm 1 0.0506 0.0506 0.093 0.7721 arrow_spine*brace_height_in 1 3.5156 3.5156 6.491 0.0514 arrow_spine*nock_height_mm 1 0.3906 0.3906 0.721 0.4345 brace_height_in*nock_height_mm 1 0.5256 0.5256 0.970 0.3698 Error 5 2.7081 0.5416 Total 15 23.9794 1.5986 === Interaction Effects: group_size_cm === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ arrow_spine brace_height_in 0.9375 31.2% draw_weight_lbs brace_height_in 0.8625 28.8% draw_weight_lbs arrow_spine -0.4125 13.8% brace_height_in nock_height_mm -0.3625 12.1% arrow_spine nock_height_mm 0.3125 10.4% draw_weight_lbs nock_height_mm -0.1125 3.8% === Summary Statistics: group_size_cm === draw_weight_lbs: Level N Mean Std Min Max ------------------------------------------------------------ 30 8 9.9375 1.4667 7.6000 11.4000 50 8 9.3750 1.0457 7.4000 10.8000 arrow_spine: Level N Mean Std Min Max ------------------------------------------------------------ 400 8 8.9000 1.1588 7.4000 10.5000 700 8 10.4125 0.8806 8.8000 11.4000 brace_height_in: Level N Mean Std Min Max ------------------------------------------------------------ 6 8 10.0625 0.9694 8.8000 11.4000 9 8 9.2500 1.4521 7.4000 11.0000 nock_height_mm: Level N Mean Std Min Max ------------------------------------------------------------ 0 8 9.7250 1.1961 7.6000 11.3000 6 8 9.5875 1.4086 7.4000 11.4000 === Main Effects: vertical_drift_cm === Factor Effect Std Error % Contribution -------------------------------------------------------------- brace_height_in -1.6000 0.4316 29.0% nock_height_mm -1.5000 0.4316 27.1% draw_weight_lbs -1.4250 0.4316 25.8% arrow_spine -1.0000 0.4316 18.1% === ANOVA Table: vertical_drift_cm === Source DF SS MS F p-value ----------------------------------------------------------------------------- draw_weight_lbs 1 8.1225 8.1225 3.501 0.1202 arrow_spine 1 4.0000 4.0000 1.724 0.2462 brace_height_in 1 10.2400 10.2400 4.414 0.0897 nock_height_mm 1 9.0000 9.0000 3.879 0.1060 draw_weight_lbs*arrow_spine 1 0.0025 0.0025 0.001 0.9751 draw_weight_lbs*brace_height_in 1 0.5625 0.5625 0.242 0.6433 draw_weight_lbs*nock_height_mm 1 0.0025 0.0025 0.001 0.9751 arrow_spine*brace_height_in 1 1.0000 1.0000 0.431 0.5405 arrow_spine*nock_height_mm 1 0.1600 0.1600 0.069 0.8033 brace_height_in*nock_height_mm 1 0.0100 0.0100 0.004 0.9502 Error 5 11.6000 2.3200 Total 15 44.7000 2.9800 === Interaction Effects: vertical_drift_cm === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ arrow_spine brace_height_in -0.5000 42.6% draw_weight_lbs brace_height_in -0.3750 31.9% arrow_spine nock_height_mm -0.2000 17.0% brace_height_in nock_height_mm -0.0500 4.3% draw_weight_lbs arrow_spine -0.0250 2.1% draw_weight_lbs nock_height_mm -0.0250 2.1% === Summary Statistics: vertical_drift_cm === draw_weight_lbs: Level N Mean Std Min Max ------------------------------------------------------------ 30 8 4.0125 1.4653 1.2000 5.4000 50 8 2.5875 1.7545 0.4000 5.4000 arrow_spine: Level N Mean Std Min Max ------------------------------------------------------------ 400 8 3.8000 1.3856 2.3000 5.4000 700 8 2.8000 1.9734 0.4000 5.4000 brace_height_in: Level N Mean Std Min Max ------------------------------------------------------------ 6 8 4.1000 1.3763 1.6000 5.4000 9 8 2.5000 1.7403 0.4000 5.4000 nock_height_mm: Level N Mean Std Min Max ------------------------------------------------------------ 0 8 4.0500 1.6484 0.9000 5.4000 6 8 2.5500 1.5437 0.4000 4.8000

Optimization Recommendations

doe optimize
=== Optimization: group_size_cm === Direction: minimize Best observed run: #6 draw_weight_lbs = 50 arrow_spine = 700 brace_height_in = 9 nock_height_mm = 6 Value: 7.4 RSM Model (linear, R² = 0.0435, Adj R² = -0.3044): Coefficients: intercept +9.6563 draw_weight_lbs +0.0938 arrow_spine -0.1562 brace_height_in +0.1438 nock_height_mm +0.1062 RSM Model (quadratic, R² = 0.4313, Adj R² = -7.5312): Coefficients: intercept +1.9313 draw_weight_lbs +0.0937 arrow_spine -0.1562 brace_height_in +0.1438 nock_height_mm +0.1062 draw_weight_lbs*arrow_spine -0.2437 draw_weight_lbs*brace_height_in -0.6187 draw_weight_lbs*nock_height_mm -0.0063 arrow_spine*brace_height_in -0.0937 arrow_spine*nock_height_mm -0.3563 brace_height_in*nock_height_mm -0.0563 draw_weight_lbs^2 +1.9313 arrow_spine^2 +1.9313 brace_height_in^2 +1.9313 nock_height_mm^2 +1.9313 Curvature analysis: brace_height_in coef=+1.9313 convex (has a minimum) nock_height_mm coef=+1.9313 convex (has a minimum) draw_weight_lbs coef=+1.9313 convex (has a minimum) arrow_spine coef=+1.9313 convex (has a minimum) Notable interactions: draw_weight_lbs*brace_height_in coef=-0.6187 (antagonistic) arrow_spine*nock_height_mm coef=-0.3563 (antagonistic) Predicted optimum (from linear model, at observed points): draw_weight_lbs = 50 arrow_spine = 400 brace_height_in = 9 nock_height_mm = 6 Predicted value: 10.1563 Surface optimum (via L-BFGS-B, linear model): draw_weight_lbs = 30 arrow_spine = 700 brace_height_in = 6 nock_height_mm = 0 Predicted value: 9.1563 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. arrow_spine (effect: -0.3, contribution: 31.2%) 2. brace_height_in (effect: 0.3, contribution: 28.8%) 3. nock_height_mm (effect: 0.2, contribution: 21.2%) 4. draw_weight_lbs (effect: 0.2, contribution: 18.7%) === Optimization: vertical_drift_cm === Direction: minimize Best observed run: #13 draw_weight_lbs = 50 arrow_spine = 400 brace_height_in = 9 nock_height_mm = 6 Value: 0.4 RSM Model (linear, R² = 0.1809, Adj R² = -0.1170): Coefficients: intercept +3.3000 draw_weight_lbs +0.0375 arrow_spine -0.1750 brace_height_in -0.6250 nock_height_mm +0.2875 RSM Model (quadratic, R² = 0.6833, Adj R² = -3.7500): Coefficients: intercept +0.6600 draw_weight_lbs +0.0375 arrow_spine -0.1750 brace_height_in -0.6250 nock_height_mm +0.2875 draw_weight_lbs*arrow_spine +0.4375 draw_weight_lbs*brace_height_in -0.1625 draw_weight_lbs*nock_height_mm -0.4750 arrow_spine*brace_height_in +0.9500 arrow_spine*nock_height_mm +0.2125 brace_height_in*nock_height_mm +0.1125 draw_weight_lbs^2 +0.6600 arrow_spine^2 +0.6600 brace_height_in^2 +0.6600 nock_height_mm^2 +0.6600 Curvature analysis: draw_weight_lbs coef=+0.6600 convex (has a minimum) arrow_spine coef=+0.6600 convex (has a minimum) brace_height_in coef=+0.6600 convex (has a minimum) nock_height_mm coef=+0.6600 convex (has a minimum) Notable interactions: arrow_spine*brace_height_in coef=+0.9500 (synergistic) draw_weight_lbs*nock_height_mm coef=-0.4750 (antagonistic) draw_weight_lbs*arrow_spine coef=+0.4375 (synergistic) Predicted optimum (from linear model, at observed points): draw_weight_lbs = 50 arrow_spine = 400 brace_height_in = 6 nock_height_mm = 6 Predicted value: 4.4250 Surface optimum (via L-BFGS-B, linear model): draw_weight_lbs = 30 arrow_spine = 700 brace_height_in = 9 nock_height_mm = 0 Predicted value: 2.1750 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. brace_height_in (effect: -1.2, contribution: 55.6%) 2. nock_height_mm (effect: 0.6, contribution: 25.6%) 3. arrow_spine (effect: -0.4, contribution: 15.6%) 4. draw_weight_lbs (effect: 0.1, contribution: 3.3%)
← All Use Cases All Use Cases →