Summary
This experiment investigates wool felting process. Fractional factorial screening of water temperature, agitation time, soap concentration, fiber blend, and compression cycles for shrinkage control and density.
The design varies 5 factors: water temp c (C), ranging from 40 to 80, agitation min (min), ranging from 5 to 30, soap ml L (mL/L), ranging from 1 to 10, merino pct (%), ranging from 50 to 100, and compressions (cycles), ranging from 10 to 50. The goal is to optimize 2 responses: shrinkage pct (%) (minimize) and density score (pts) (maximize). Fixed conditions held constant across all runs include technique = wet_felting, thickness = medium.
A fractional factorial design reduces the number of runs from 32 to 8 by deliberately confounding higher-order interactions. This is ideal for screening — identifying which of the 5 factors matter most before investing in a full study.
Key Findings
For shrinkage pct, the most influential factors were water temp c (32.5%), soap ml L (25.8%), compressions (19.2%). The best observed value was 9.0 (at water temp c = 80, agitation min = 5, soap ml L = 1).
For density score, the most influential factors were water temp c (34.5%), soap ml L (30.9%), merino pct (16.6%). The best observed value was 8.5 (at water temp c = 40, agitation min = 5, soap ml L = 10).
Recommended Next Steps
- Follow up with a response surface design (CCD or Box-Behnken) on the top 3–4 factors to model curvature and find the true optimum.
- Consider whether any fixed factors should be varied in a future study.
- The screening results can guide factor reduction — drop factors contributing less than 5% and re-run with a smaller, more focused design.
Experimental Setup
Factors
| Factor | Low | High | Unit |
water_temp_c | 40 | 80 | C |
agitation_min | 5 | 30 | min |
soap_ml_L | 1 | 10 | mL/L |
merino_pct | 50 | 100 | % |
compressions | 10 | 50 | cycles |
Fixed: technique = wet_felting, thickness = medium
Responses
| Response | Direction | Unit |
shrinkage_pct | ↓ minimize | % |
density_score | ↑ maximize | pts |
Configuration
{
"metadata": {
"name": "Wool Felting Process",
"description": "Fractional factorial screening of water temperature, agitation time, soap concentration, fiber blend, and compression cycles for shrinkage control and density"
},
"factors": [
{
"name": "water_temp_c",
"levels": [
"40",
"80"
],
"type": "continuous",
"unit": "C"
},
{
"name": "agitation_min",
"levels": [
"5",
"30"
],
"type": "continuous",
"unit": "min"
},
{
"name": "soap_ml_L",
"levels": [
"1",
"10"
],
"type": "continuous",
"unit": "mL/L"
},
{
"name": "merino_pct",
"levels": [
"50",
"100"
],
"type": "continuous",
"unit": "%"
},
{
"name": "compressions",
"levels": [
"10",
"50"
],
"type": "continuous",
"unit": "cycles"
}
],
"fixed_factors": {
"technique": "wet_felting",
"thickness": "medium"
},
"responses": [
{
"name": "shrinkage_pct",
"optimize": "minimize",
"unit": "%"
},
{
"name": "density_score",
"optimize": "maximize",
"unit": "pts"
}
],
"settings": {
"operation": "fractional_factorial",
"test_script": "use_cases/184_wool_felting/sim.sh"
}
}
Experimental Matrix
The Fractional Factorial Design produces 8 runs. Each row is one experiment with specific factor settings.
| Run | water_temp_c | agitation_min | soap_ml_L | merino_pct | compressions |
| 1 | 40 | 30 | 10 | 50 | 10 |
| 2 | 80 | 5 | 1 | 50 | 10 |
| 3 | 80 | 30 | 1 | 100 | 10 |
| 4 | 80 | 30 | 10 | 100 | 50 |
| 5 | 40 | 30 | 1 | 50 | 50 |
| 6 | 80 | 5 | 10 | 50 | 50 |
| 7 | 40 | 5 | 1 | 100 | 50 |
| 8 | 40 | 5 | 10 | 100 | 10 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/184_wool_felting/config.json
2
Generate the runner script
$ doe generate --config use_cases/184_wool_felting/config.json \
--output use_cases/184_wool_felting/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/184_wool_felting/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/184_wool_felting/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/184_wool_felting/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/184_wool_felting/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/184_wool_felting/config.json \
--output use_cases/184_wool_felting/results/report.html
Features Exercised
| Feature | Value |
| Design type | fractional_factorial |
| Factor types | continuous (all 5) |
| Arg style | double-dash |
| Responses | 2 (shrinkage_pct ↓, density_score ↑) |
| Total runs | 8 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: shrinkage_pct
Top factors: water_temp_c (32.5%), soap_ml_L (25.8%), compressions (19.2%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| water_temp_c | 1 | 300.1250 | 300.1250 | 2.561 | 0.1704 |
| agitation_min | 1 | 10.1250 | 10.1250 | 0.086 | 0.7806 |
| soap_ml_L | 1 | 190.1250 | 190.1250 | 1.622 | 0.2588 |
| merino_pct | 1 | 78.1250 | 78.1250 | 0.667 | 0.4513 |
| compressions | 1 | 105.1250 | 105.1250 | 0.897 | 0.3871 |
| water_temp_c*agitation_min | 1 | 78.1250 | 78.1250 | 0.667 | 0.4513 |
| water_temp_c*soap_ml_L | 1 | 105.1250 | 105.1250 | 0.897 | 0.3871 |
| water_temp_c*merino_pct | 1 | 10.1250 | 10.1250 | 0.086 | 0.7806 |
| water_temp_c*compressions | 1 | 190.1250 | 190.1250 | 1.622 | 0.2588 |
| agitation_min*soap_ml_L | 1 | 15.1250 | 15.1250 | 0.129 | 0.7341 |
| agitation_min*merino_pct | 1 | 300.1250 | 300.1250 | 2.561 | 0.1704 |
| agitation_min*compressions | 1 | 78.1250 | 78.1250 | 0.667 | 0.4513 |
| soap_ml_L*merino_pct | 1 | 78.1250 | 78.1250 | 0.667 | 0.4513 |
| soap_ml_L*compressions | 1 | 300.1250 | 300.1250 | 2.561 | 0.1704 |
| merino_pct*compressions | 1 | 15.1250 | 15.1250 | 0.129 | 0.7341 |
| Error | (Lenth | PSE) | 5 | 585.9375 | 117.1875 |
| Total | 7 | 776.8750 | 110.9821 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: density_score
Top factors: water_temp_c (34.5%), soap_ml_L (30.9%), merino_pct (16.6%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| water_temp_c | 1 | 7.4113 | 7.4113 | 3.216 | 0.1329 |
| agitation_min | 1 | 0.0613 | 0.0613 | 0.027 | 0.8769 |
| soap_ml_L | 1 | 5.9512 | 5.9512 | 2.583 | 0.1690 |
| merino_pct | 1 | 1.7113 | 1.7113 | 0.743 | 0.4282 |
| compressions | 1 | 1.3612 | 1.3612 | 0.591 | 0.4769 |
| water_temp_c*agitation_min | 1 | 1.7112 | 1.7112 | 0.743 | 0.4282 |
| water_temp_c*soap_ml_L | 1 | 1.3612 | 1.3612 | 0.591 | 0.4769 |
| water_temp_c*merino_pct | 1 | 0.0612 | 0.0612 | 0.027 | 0.8769 |
| water_temp_c*compressions | 1 | 5.9512 | 5.9512 | 2.583 | 0.1690 |
| agitation_min*soap_ml_L | 1 | 0.5513 | 0.5513 | 0.239 | 0.6455 |
| agitation_min*merino_pct | 1 | 7.4112 | 7.4112 | 3.216 | 0.1329 |
| agitation_min*compressions | 1 | 2.5313 | 2.5313 | 1.098 | 0.3426 |
| soap_ml_L*merino_pct | 1 | 2.5313 | 2.5313 | 1.098 | 0.3426 |
| soap_ml_L*compressions | 1 | 7.4113 | 7.4113 | 3.216 | 0.1329 |
| merino_pct*compressions | 1 | 0.5513 | 0.5513 | 0.239 | 0.6455 |
| Error | (Lenth | PSE) | 5 | 11.5219 | 2.3044 |
| Total | 7 | 19.5787 | 2.7970 | | |
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.
density score agitation min vs compressions
density score agitation min vs merino pct
density score agitation min vs soap ml L
density score merino pct vs compressions
density score soap ml L vs compressions
density score soap ml L vs merino pct
density score water temp c vs agitation min
density score water temp c vs compressions
density score water temp c vs merino pct
density score water temp c vs soap ml L
shrinkage pct agitation min vs compressions
shrinkage pct agitation min vs merino pct
shrinkage pct agitation min vs soap ml L
shrinkage pct merino pct vs compressions
shrinkage pct soap ml L vs compressions
shrinkage pct soap ml L vs merino pct
shrinkage pct water temp c vs agitation min
shrinkage pct water temp c vs compressions
shrinkage pct water temp c vs merino pct
shrinkage pct water temp c vs soap ml L
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.5199
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
shrinkage_pct |
1.0 |
|
27.16 0.4386 27.16 % |
↓ |
density_score |
1.5 |
|
6.41 0.5823 6.41 pts |
↑ |
Recommended Settings
| Factor | Value |
water_temp_c | 69.17 C |
agitation_min | 25.93 min |
soap_ml_L | 9.328 mL/L |
merino_pct | 99.31 % |
compressions | 16.25 cycles |
Source: from RSM model prediction
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
density_score | 6.41 | 8.50 | +2.09 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #6 | 0.4761 | water_temp_c=40, agitation_min=5, soap_ml_L=10, merino_pct=100, compressions=10 |
| #5 | 0.4585 | water_temp_c=40, agitation_min=5, soap_ml_L=1, merino_pct=100, compressions=50 |
Model Quality
| Response | R² | Type |
density_score | 0.5749 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.5199
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
shrinkage_pct 1.0 0.4386 27.16 % ↓
density_score 1.5 0.5823 6.41 pts ↑
Recommended settings:
water_temp_c = 69.17 C
agitation_min = 25.93 min
soap_ml_L = 9.328 mL/L
merino_pct = 99.31 %
compressions = 16.25 cycles
(from RSM model prediction)
Trade-off summary:
shrinkage_pct: 27.16 (best observed: 9.00, sacrifice: +18.16)
density_score: 6.41 (best observed: 8.50, sacrifice: +2.09)
Model quality:
shrinkage_pct: R² = 0.5775 (linear)
density_score: R² = 0.5749 (linear)
Top 3 observed runs by overall desirability:
1. Run #3 (D=0.4787): water_temp_c=40, agitation_min=30, soap_ml_L=10, merino_pct=50, compressions=10
2. Run #6 (D=0.4761): water_temp_c=40, agitation_min=5, soap_ml_L=10, merino_pct=100, compressions=10
3. Run #5 (D=0.4585): water_temp_c=40, agitation_min=5, soap_ml_L=1, merino_pct=100, compressions=50
Full Analysis Output
=== Main Effects: shrinkage_pct ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
water_temp_c -12.2500 3.7246 32.5%
soap_ml_L -9.7500 3.7246 25.8%
compressions 7.2500 3.7246 19.2%
merino_pct 6.2500 3.7246 16.6%
agitation_min 2.2500 3.7246 6.0%
=== ANOVA Table: shrinkage_pct ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
water_temp_c 1 300.1250 300.1250 2.561 0.1704
agitation_min 1 10.1250 10.1250 0.086 0.7806
soap_ml_L 1 190.1250 190.1250 1.622 0.2588
merino_pct 1 78.1250 78.1250 0.667 0.4513
compressions 1 105.1250 105.1250 0.897 0.3871
water_temp_c*agitation_min 1 78.1250 78.1250 0.667 0.4513
water_temp_c*soap_ml_L 1 105.1250 105.1250 0.897 0.3871
water_temp_c*merino_pct 1 10.1250 10.1250 0.086 0.7806
water_temp_c*compressions 1 190.1250 190.1250 1.622 0.2588
agitation_min*soap_ml_L 1 15.1250 15.1250 0.129 0.7341
agitation_min*merino_pct 1 300.1250 300.1250 2.561 0.1704
agitation_min*compressions 1 78.1250 78.1250 0.667 0.4513
soap_ml_L*merino_pct 1 78.1250 78.1250 0.667 0.4513
soap_ml_L*compressions 1 300.1250 300.1250 2.561 0.1704
merino_pct*compressions 1 15.1250 15.1250 0.129 0.7341
Error (Lenth PSE) 5 585.9375 117.1875
Total 7 776.8750 110.9821
Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design)
=== Interaction Effects: shrinkage_pct ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
agitation_min merino_pct -12.2500 18.0%
soap_ml_L compressions -12.2500 18.0%
water_temp_c compressions -9.7500 14.3%
water_temp_c soap_ml_L 7.2500 10.7%
water_temp_c agitation_min 6.2500 9.2%
agitation_min compressions -6.2500 9.2%
soap_ml_L merino_pct -6.2500 9.2%
agitation_min soap_ml_L 2.7500 4.0%
merino_pct compressions 2.7500 4.0%
water_temp_c merino_pct 2.2500 3.3%
=== Summary Statistics: shrinkage_pct ===
water_temp_c:
Level N Mean Std Min Max
------------------------------------------------------------
40 4 26.0000 11.3431 15.0000 41.0000
80 4 13.7500 5.5000 9.0000 21.0000
agitation_min:
Level N Mean Std Min Max
------------------------------------------------------------
30 4 18.7500 15.0638 9.0000 41.0000
5 4 21.0000 5.3541 15.0000 28.0000
soap_ml_L:
Level N Mean Std Min Max
------------------------------------------------------------
1 4 24.7500 13.3760 9.0000 41.0000
10 4 15.0000 4.0825 10.0000 20.0000
merino_pct:
Level N Mean Std Min Max
------------------------------------------------------------
100 4 16.7500 8.9954 9.0000 28.0000
50 4 23.0000 12.3288 15.0000 41.0000
compressions:
Level N Mean Std Min Max
------------------------------------------------------------
10 4 16.2500 5.5000 9.0000 21.0000
50 4 23.5000 13.9164 10.0000 41.0000
=== Main Effects: density_score ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
water_temp_c -1.9250 0.5913 34.5%
soap_ml_L -1.7250 0.5913 30.9%
merino_pct 0.9250 0.5913 16.6%
compressions 0.8250 0.5913 14.8%
agitation_min 0.1750 0.5913 3.1%
=== ANOVA Table: density_score ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
water_temp_c 1 7.4113 7.4113 3.216 0.1329
agitation_min 1 0.0613 0.0613 0.027 0.8769
soap_ml_L 1 5.9512 5.9512 2.583 0.1690
merino_pct 1 1.7113 1.7113 0.743 0.4282
compressions 1 1.3612 1.3612 0.591 0.4769
water_temp_c*agitation_min 1 1.7112 1.7112 0.743 0.4282
water_temp_c*soap_ml_L 1 1.3612 1.3612 0.591 0.4769
water_temp_c*merino_pct 1 0.0612 0.0612 0.027 0.8769
water_temp_c*compressions 1 5.9512 5.9512 2.583 0.1690
agitation_min*soap_ml_L 1 0.5513 0.5513 0.239 0.6455
agitation_min*merino_pct 1 7.4112 7.4112 3.216 0.1329
agitation_min*compressions 1 2.5313 2.5313 1.098 0.3426
soap_ml_L*merino_pct 1 2.5313 2.5313 1.098 0.3426
soap_ml_L*compressions 1 7.4113 7.4113 3.216 0.1329
merino_pct*compressions 1 0.5513 0.5513 0.239 0.6455
Error (Lenth PSE) 5 11.5219 2.3044
Total 7 19.5787 2.7970
Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design)
=== Interaction Effects: density_score ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
agitation_min merino_pct -1.9250 17.8%
soap_ml_L compressions -1.9250 17.8%
water_temp_c compressions -1.7250 16.0%
agitation_min compressions -1.1250 10.4%
soap_ml_L merino_pct -1.1250 10.4%
water_temp_c agitation_min 0.9250 8.6%
water_temp_c soap_ml_L 0.8250 7.6%
agitation_min soap_ml_L 0.5250 4.9%
merino_pct compressions 0.5250 4.9%
water_temp_c merino_pct 0.1750 1.6%
=== Summary Statistics: density_score ===
water_temp_c:
Level N Mean Std Min Max
------------------------------------------------------------
40 4 6.0250 1.8062 4.3000 8.5000
80 4 4.1000 0.8907 3.4000 5.4000
agitation_min:
Level N Mean Std Min Max
------------------------------------------------------------
30 4 4.9750 2.3796 3.4000 8.5000
5 4 5.1500 0.9183 3.9000 6.1000
soap_ml_L:
Level N Mean Std Min Max
------------------------------------------------------------
1 4 5.9250 1.9906 3.7000 8.5000
10 4 4.2000 0.7616 3.4000 5.2000
merino_pct:
Level N Mean Std Min Max
------------------------------------------------------------
100 4 4.6000 1.2728 3.4000 6.1000
50 4 5.5250 2.0823 3.9000 8.5000
compressions:
Level N Mean Std Min Max
------------------------------------------------------------
10 4 4.6500 0.7937 3.7000 5.4000
50 4 5.4750 2.3329 3.4000 8.5000
Optimization Recommendations
=== Optimization: shrinkage_pct ===
Direction: minimize
Best observed run: #8
water_temp_c = 80
agitation_min = 5
soap_ml_L = 1
merino_pct = 50
compressions = 10
Value: 9.0
RSM Model (linear, R² = 0.5620, Adj R² = -0.5329):
Coefficients:
intercept +19.8750
water_temp_c -0.3750
agitation_min -3.3750
soap_ml_L +4.8750
merino_pct +4.3750
compressions -0.3750
Predicted optimum (from linear model, at observed points):
water_temp_c = 40
agitation_min = 5
soap_ml_L = 10
merino_pct = 100
compressions = 10
Predicted value: 33.2500
Surface optimum (via L-BFGS-B, linear model):
water_temp_c = 80
agitation_min = 30
soap_ml_L = 1
merino_pct = 50
compressions = 50
Predicted value: 6.5000
Model quality: Moderate fit — use predictions directionally, not precisely.
Factor importance:
1. soap_ml_L (effect: 9.8, contribution: 36.4%)
2. merino_pct (effect: -8.8, contribution: 32.7%)
3. agitation_min (effect: 6.8, contribution: 25.2%)
4. water_temp_c (effect: -0.8, contribution: 2.8%)
5. compressions (effect: -0.8, contribution: 2.8%)
=== Optimization: density_score ===
Direction: maximize
Best observed run: #4
water_temp_c = 40
agitation_min = 5
soap_ml_L = 10
merino_pct = 100
compressions = 10
Value: 8.5
RSM Model (linear, R² = 0.5274, Adj R² = -0.6540):
Coefficients:
intercept +5.0625
water_temp_c +0.0375
agitation_min -0.4875
soap_ml_L +0.7375
merino_pct +0.6875
compressions -0.1875
Predicted optimum (from linear model, at observed points):
water_temp_c = 40
agitation_min = 5
soap_ml_L = 10
merino_pct = 100
compressions = 10
Predicted value: 7.1250
Surface optimum (via L-BFGS-B, linear model):
water_temp_c = 80
agitation_min = 5
soap_ml_L = 10
merino_pct = 100
compressions = 10
Predicted value: 7.2000
Model quality: Moderate fit — use predictions directionally, not precisely.
Factor importance:
1. soap_ml_L (effect: 1.5, contribution: 34.5%)
2. merino_pct (effect: -1.4, contribution: 32.2%)
3. agitation_min (effect: 1.0, contribution: 22.8%)
4. compressions (effect: -0.4, contribution: 8.8%)
5. water_temp_c (effect: 0.1, contribution: 1.8%)