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
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
draw_weight_lbs | 30 | 50 | lbs |
arrow_spine | 400 | 700 | spine |
brace_height_in | 6 | 9 | in |
nock_height_mm | 0 | 6 | mm |
Fixed: bow_type = recurve, distance = 18m
Responses
| Response | Direction | Unit |
group_size_cm | ↓ minimize | cm |
vertical_drift_cm | ↓ minimize | cm |
Configuration
{
"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.
| Run | draw_weight_lbs | arrow_spine | brace_height_in | nock_height_mm |
| 1 | 30 | 700 | 9 | 6 |
| 2 | 50 | 400 | 6 | 6 |
| 3 | 30 | 700 | 6 | 6 |
| 4 | 30 | 700 | 9 | 0 |
| 5 | 50 | 700 | 9 | 0 |
| 6 | 50 | 400 | 9 | 0 |
| 7 | 50 | 700 | 6 | 0 |
| 8 | 50 | 400 | 6 | 0 |
| 9 | 30 | 400 | 6 | 6 |
| 10 | 30 | 400 | 9 | 0 |
| 11 | 50 | 700 | 6 | 6 |
| 12 | 50 | 700 | 9 | 6 |
| 13 | 30 | 700 | 6 | 0 |
| 14 | 50 | 400 | 9 | 6 |
| 15 | 30 | 400 | 6 | 0 |
| 16 | 30 | 400 | 9 | 6 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/214_archery_bow_tuning/config.json
2
Generate the runner script
$ 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
$ bash use_cases/214_archery_bow_tuning/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/214_archery_bow_tuning/config.json
5
Get optimization recommendations
$ 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.
$ doe optimize --config use_cases/214_archery_bow_tuning/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/214_archery_bow_tuning/config.json \
--output use_cases/214_archery_bow_tuning/results/report.html
Features Exercised
| Feature | Value |
| Design type | full_factorial |
| Factor types | continuous (all 4) |
| Arg style | double-dash |
| Responses | 2 (group_size_cm ↓, vertical_drift_cm ↓) |
| Total runs | 16 |
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
| Source | DF | SS | MS | F | p-value |
| 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 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: vertical_drift_cm
Top factors: brace_height_in (29.0%), nock_height_mm (27.1%), draw_weight_lbs (25.8%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| 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 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response Surface Plots
3D surfaces fitted with quadratic RSM. Red dots are observed data points.
group size cm arrow spine vs brace height in
group size cm arrow spine vs nock height mm
group size cm brace height in vs nock height mm
group size cm draw weight lbs vs arrow spine
group size cm draw weight lbs vs brace height in
group size cm draw weight lbs vs nock height mm
vertical drift cm arrow spine vs brace height in
vertical drift cm arrow spine vs nock height mm
vertical drift cm brace height in vs nock height mm
vertical drift cm draw weight lbs vs arrow spine
vertical drift cm draw weight lbs vs brace height in
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
| Response | Weight | Desirability | Predicted | Dir |
group_size_cm |
1.5 |
|
7.40 0.9545 7.40 cm |
↓ |
vertical_drift_cm |
1.0 |
|
2.80 0.5182 2.80 cm |
↓ |
Recommended Settings
| Factor | Value |
draw_weight_lbs | 30 lbs |
arrow_spine | 400 spine |
brace_height_in | 9 in |
nock_height_mm | 6 mm |
Source: from observed run #6
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
vertical_drift_cm | 2.80 | 0.40 | +2.40 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #8 | 0.7212 | draw_weight_lbs=50, arrow_spine=700, brace_height_in=9, nock_height_mm=6 |
| #5 | 0.5969 | draw_weight_lbs=30, arrow_spine=400, brace_height_in=6, nock_height_mm=0 |
Model Quality
| Response | R² | Type |
vertical_drift_cm | 0.0286 | linear |
Full Multi-Objective Output
============================================================
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
=== 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
=== 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%)