Summary
This experiment investigates leather tanning process. Full factorial of tanning agent concentration, soak time, pH, and fat liquor percentage to maximize softness and color uniformity.
The design varies 4 factors: tannin pct (%), ranging from 3 to 10, soak hrs (hrs), ranging from 4 to 24, ph (pH), ranging from 3 to 5, and fat liquor pct (%), ranging from 3 to 10. The goal is to optimize 2 responses: softness score (pts) (maximize) and color uniformity (pts) (maximize). Fixed conditions held constant across all runs include hide type = cowhide, method = vegetable.
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 softness score, the most influential factors were ph (54.0%), fat liquor pct (25.4%), tannin pct (11.1%). The best observed value was 8.3 (at tannin pct = 3, soak hrs = 4, ph = 5).
For color uniformity, the most influential factors were fat liquor pct (52.9%), soak hrs (21.0%), tannin pct (15.2%). The best observed value was 7.3 (at tannin pct = 10, soak hrs = 24, ph = 3).
Recommended Next Steps
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
tannin_pct | 3 | 10 | % |
soak_hrs | 4 | 24 | hrs |
ph | 3 | 5 | pH |
fat_liquor_pct | 3 | 10 | % |
Fixed: hide_type = cowhide, method = vegetable
Responses
| Response | Direction | Unit |
softness_score | ↑ maximize | pts |
color_uniformity | ↑ maximize | pts |
Configuration
{
"metadata": {
"name": "Leather Tanning Process",
"description": "Full factorial of tanning agent concentration, soak time, pH, and fat liquor percentage to maximize softness and color uniformity"
},
"factors": [
{
"name": "tannin_pct",
"levels": [
"3",
"10"
],
"type": "continuous",
"unit": "%"
},
{
"name": "soak_hrs",
"levels": [
"4",
"24"
],
"type": "continuous",
"unit": "hrs"
},
{
"name": "ph",
"levels": [
"3",
"5"
],
"type": "continuous",
"unit": "pH"
},
{
"name": "fat_liquor_pct",
"levels": [
"3",
"10"
],
"type": "continuous",
"unit": "%"
}
],
"fixed_factors": {
"hide_type": "cowhide",
"method": "vegetable"
},
"responses": [
{
"name": "softness_score",
"optimize": "maximize",
"unit": "pts"
},
{
"name": "color_uniformity",
"optimize": "maximize",
"unit": "pts"
}
],
"settings": {
"operation": "full_factorial",
"test_script": "use_cases/180_leather_tanning/sim.sh"
}
}
Experimental Matrix
The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.
| Run | tannin_pct | soak_hrs | ph | fat_liquor_pct |
| 1 | 3 | 24 | 5 | 10 |
| 2 | 10 | 4 | 3 | 10 |
| 3 | 3 | 24 | 3 | 10 |
| 4 | 3 | 24 | 5 | 3 |
| 5 | 10 | 24 | 5 | 3 |
| 6 | 10 | 4 | 5 | 3 |
| 7 | 10 | 24 | 3 | 3 |
| 8 | 10 | 4 | 3 | 3 |
| 9 | 3 | 4 | 3 | 10 |
| 10 | 3 | 4 | 5 | 3 |
| 11 | 10 | 24 | 3 | 10 |
| 12 | 10 | 24 | 5 | 10 |
| 13 | 3 | 24 | 3 | 3 |
| 14 | 10 | 4 | 5 | 10 |
| 15 | 3 | 4 | 3 | 3 |
| 16 | 3 | 4 | 5 | 10 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/180_leather_tanning/config.json
2
Generate the runner script
$ doe generate --config use_cases/180_leather_tanning/config.json \
--output use_cases/180_leather_tanning/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/180_leather_tanning/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/180_leather_tanning/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/180_leather_tanning/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/180_leather_tanning/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/180_leather_tanning/config.json \
--output use_cases/180_leather_tanning/results/report.html
Features Exercised
| Feature | Value |
| Design type | full_factorial |
| Factor types | continuous (all 4) |
| Arg style | double-dash |
| Responses | 2 (softness_score ↑, color_uniformity ↑) |
| Total runs | 16 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: softness_score
Top factors: ph (54.0%), fat_liquor_pct (25.4%), tannin_pct (11.1%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| tannin_pct | 1 | 0.1225 | 0.1225 | 0.071 | 0.8005 |
| soak_hrs | 1 | 0.0900 | 0.0900 | 0.052 | 0.8284 |
| ph | 1 | 2.8900 | 2.8900 | 1.675 | 0.2522 |
| fat_liquor_pct | 1 | 0.6400 | 0.6400 | 0.371 | 0.5691 |
| tannin_pct*soak_hrs | 1 | 13.6900 | 13.6900 | 7.934 | 0.0373 |
| tannin_pct*ph | 1 | 1.4400 | 1.4400 | 0.835 | 0.4029 |
| tannin_pct*fat_liquor_pct | 1 | 0.8100 | 0.8100 | 0.469 | 0.5237 |
| soak_hrs*ph | 1 | 0.9025 | 0.9025 | 0.523 | 0.5020 |
| soak_hrs*fat_liquor_pct | 1 | 1.8225 | 1.8225 | 1.056 | 0.3512 |
| ph*fat_liquor_pct | 1 | 0.5625 | 0.5625 | 0.326 | 0.5927 |
| Error | 5 | 8.6275 | 1.7255 | | |
| Total | 15 | 31.5975 | 2.1065 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: color_uniformity
Top factors: fat_liquor_pct (52.9%), soak_hrs (21.0%), tannin_pct (15.2%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| tannin_pct | 1 | 0.2756 | 0.2756 | 0.284 | 0.6169 |
| soak_hrs | 1 | 0.5256 | 0.5256 | 0.542 | 0.4948 |
| ph | 1 | 0.1406 | 0.1406 | 0.145 | 0.7191 |
| fat_liquor_pct | 1 | 3.3306 | 3.3306 | 3.431 | 0.1232 |
| tannin_pct*soak_hrs | 1 | 0.0056 | 0.0056 | 0.006 | 0.9423 |
| tannin_pct*ph | 1 | 0.0306 | 0.0306 | 0.032 | 0.8660 |
| tannin_pct*fat_liquor_pct | 1 | 0.0306 | 0.0306 | 0.032 | 0.8660 |
| soak_hrs*ph | 1 | 0.2256 | 0.2256 | 0.232 | 0.6501 |
| soak_hrs*fat_liquor_pct | 1 | 0.1406 | 0.1406 | 0.145 | 0.7191 |
| ph*fat_liquor_pct | 1 | 0.0156 | 0.0156 | 0.016 | 0.9040 |
| Error | 5 | 4.8531 | 0.9706 | | |
| Total | 15 | 9.5744 | 0.6383 | | |
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.
color uniformity ph vs fat liquor pct
color uniformity soak hrs vs fat liquor pct
color uniformity soak hrs vs ph
color uniformity tannin pct vs fat liquor pct
color uniformity tannin pct vs ph
color uniformity tannin pct vs soak hrs
softness score ph vs fat liquor pct
softness score soak hrs vs fat liquor pct
softness score soak hrs vs ph
softness score tannin pct vs fat liquor pct
softness score tannin pct vs ph
softness score tannin pct vs soak hrs
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.7777
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
softness_score |
1.5 |
|
6.50 0.6337 6.50 pts |
↑ |
color_uniformity |
1.5 |
|
7.30 0.9545 7.30 pts |
↑ |
Recommended Settings
| Factor | Value |
tannin_pct | 10 % |
soak_hrs | 24 hrs |
ph | 3 pH |
fat_liquor_pct | 10 % |
Source: from observed run #12
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
color_uniformity | 7.30 | 7.30 | +0.00 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #1 | 0.7406 | tannin_pct=10, soak_hrs=4, ph=3, fat_liquor_pct=10 |
| #11 | 0.7152 | tannin_pct=10, soak_hrs=4, ph=5, fat_liquor_pct=3 |
Model Quality
| Response | R² | Type |
color_uniformity | 0.1637 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.7777
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
softness_score 1.5 0.6337 6.50 pts ↑
color_uniformity 1.5 0.9545 7.30 pts ↑
Recommended settings:
tannin_pct = 10 %
soak_hrs = 24 hrs
ph = 3 pH
fat_liquor_pct = 10 %
(from observed run #12)
Trade-off summary:
softness_score: 6.50 (best observed: 8.30, sacrifice: +1.80)
color_uniformity: 7.30 (best observed: 7.30, sacrifice: +0.00)
Model quality:
softness_score: R² = 0.2475 (linear)
color_uniformity: R² = 0.1637 (linear)
Top 3 observed runs by overall desirability:
1. Run #12 (D=0.7777): tannin_pct=10, soak_hrs=24, ph=3, fat_liquor_pct=10
2. Run #1 (D=0.7406): tannin_pct=10, soak_hrs=4, ph=3, fat_liquor_pct=10
3. Run #11 (D=0.7152): tannin_pct=10, soak_hrs=4, ph=5, fat_liquor_pct=3
Full Analysis Output
=== Main Effects: softness_score ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
ph 0.8500 0.3628 54.0%
fat_liquor_pct -0.4000 0.3628 25.4%
tannin_pct 0.1750 0.3628 11.1%
soak_hrs -0.1500 0.3628 9.5%
=== ANOVA Table: softness_score ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
tannin_pct 1 0.1225 0.1225 0.071 0.8005
soak_hrs 1 0.0900 0.0900 0.052 0.8284
ph 1 2.8900 2.8900 1.675 0.2522
fat_liquor_pct 1 0.6400 0.6400 0.371 0.5691
tannin_pct*soak_hrs 1 13.6900 13.6900 7.934 0.0373
tannin_pct*ph 1 1.4400 1.4400 0.835 0.4029
tannin_pct*fat_liquor_pct 1 0.8100 0.8100 0.469 0.5237
soak_hrs*ph 1 0.9025 0.9025 0.523 0.5020
soak_hrs*fat_liquor_pct 1 1.8225 1.8225 1.056 0.3512
ph*fat_liquor_pct 1 0.5625 0.5625 0.326 0.5927
Error 5 8.6275 1.7255
Total 15 31.5975 2.1065
=== Interaction Effects: softness_score ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
tannin_pct soak_hrs -1.8500 41.8%
soak_hrs fat_liquor_pct 0.6750 15.3%
tannin_pct ph -0.6000 13.6%
soak_hrs ph -0.4750 10.7%
tannin_pct fat_liquor_pct 0.4500 10.2%
ph fat_liquor_pct -0.3750 8.5%
=== Summary Statistics: softness_score ===
tannin_pct:
Level N Mean Std Min Max
------------------------------------------------------------
10 8 5.6500 1.6222 3.2000 7.4000
3 8 5.8250 1.3657 3.9000 8.3000
soak_hrs:
Level N Mean Std Min Max
------------------------------------------------------------
24 8 5.8125 1.7406 3.2000 8.3000
4 8 5.6625 1.2130 3.9000 7.2000
ph:
Level N Mean Std Min Max
------------------------------------------------------------
3 8 5.3125 1.3346 3.2000 7.1000
5 8 6.1625 1.5231 3.9000 8.3000
fat_liquor_pct:
Level N Mean Std Min Max
------------------------------------------------------------
10 8 5.9375 1.8338 3.2000 8.3000
3 8 5.5375 1.0295 4.3000 7.2000
=== Main Effects: color_uniformity ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
fat_liquor_pct -0.9125 0.1997 52.9%
soak_hrs -0.3625 0.1997 21.0%
tannin_pct 0.2625 0.1997 15.2%
ph -0.1875 0.1997 10.9%
=== ANOVA Table: color_uniformity ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
tannin_pct 1 0.2756 0.2756 0.284 0.6169
soak_hrs 1 0.5256 0.5256 0.542 0.4948
ph 1 0.1406 0.1406 0.145 0.7191
fat_liquor_pct 1 3.3306 3.3306 3.431 0.1232
tannin_pct*soak_hrs 1 0.0056 0.0056 0.006 0.9423
tannin_pct*ph 1 0.0306 0.0306 0.032 0.8660
tannin_pct*fat_liquor_pct 1 0.0306 0.0306 0.032 0.8660
soak_hrs*ph 1 0.2256 0.2256 0.232 0.6501
soak_hrs*fat_liquor_pct 1 0.1406 0.1406 0.145 0.7191
ph*fat_liquor_pct 1 0.0156 0.0156 0.016 0.9040
Error 5 4.8531 0.9706
Total 15 9.5744 0.6383
=== Interaction Effects: color_uniformity ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
soak_hrs ph 0.2375 33.9%
soak_hrs fat_liquor_pct -0.1875 26.8%
tannin_pct ph -0.0875 12.5%
tannin_pct fat_liquor_pct 0.0875 12.5%
ph fat_liquor_pct -0.0625 8.9%
tannin_pct soak_hrs 0.0375 5.4%
=== Summary Statistics: color_uniformity ===
tannin_pct:
Level N Mean Std Min Max
------------------------------------------------------------
10 8 5.4000 0.8071 4.2000 6.4000
3 8 5.6625 0.8228 4.8000 7.3000
soak_hrs:
Level N Mean Std Min Max
------------------------------------------------------------
24 8 5.7125 0.8026 4.8000 7.3000
4 8 5.3500 0.8053 4.2000 6.5000
ph:
Level N Mean Std Min Max
------------------------------------------------------------
3 8 5.6250 0.9254 4.2000 7.3000
5 8 5.4375 0.7009 4.7000 6.5000
fat_liquor_pct:
Level N Mean Std Min Max
------------------------------------------------------------
10 8 5.9875 0.7680 5.2000 7.3000
3 8 5.0750 0.5497 4.2000 5.9000
Optimization Recommendations
=== Optimization: softness_score ===
Direction: maximize
Best observed run: #3
tannin_pct = 3
soak_hrs = 4
ph = 5
fat_liquor_pct = 3
Value: 8.3
RSM Model (linear, R² = 0.4132, Adj R² = 0.1998):
Coefficients:
intercept +5.7375
tannin_pct -0.8625
soak_hrs +0.2000
ph -0.0750
fat_liquor_pct +0.1625
RSM Model (quadratic, R² = 0.8105, Adj R² = -1.8424):
Coefficients:
intercept +1.1475
tannin_pct -0.8625
soak_hrs +0.2000
ph -0.0750
fat_liquor_pct +0.1625
tannin_pct*soak_hrs +0.0250
tannin_pct*ph -0.1000
tannin_pct*fat_liquor_pct +0.7375
soak_hrs*ph -0.0875
soak_hrs*fat_liquor_pct +0.4000
ph*fat_liquor_pct -0.2500
tannin_pct^2 +1.1475
soak_hrs^2 +1.1475
ph^2 +1.1475
fat_liquor_pct^2 +1.1475
Curvature analysis:
ph coef=+1.1475 convex (has a minimum)
tannin_pct coef=+1.1475 convex (has a minimum)
soak_hrs coef=+1.1475 convex (has a minimum)
fat_liquor_pct coef=+1.1475 convex (has a minimum)
Notable interactions:
tannin_pct*fat_liquor_pct coef=+0.7375 (synergistic)
soak_hrs*fat_liquor_pct coef=+0.4000 (synergistic)
Predicted optimum (from linear model, at observed points):
tannin_pct = 3
soak_hrs = 24
ph = 3
fat_liquor_pct = 10
Predicted value: 7.0375
Surface optimum (via L-BFGS-B, linear model):
tannin_pct = 3
soak_hrs = 24
ph = 3
fat_liquor_pct = 10
Predicted value: 7.0375
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. tannin_pct (effect: 1.7, contribution: 66.3%)
2. soak_hrs (effect: -0.4, contribution: 15.4%)
3. fat_liquor_pct (effect: -0.3, contribution: 12.5%)
4. ph (effect: -0.2, contribution: 5.8%)
=== Optimization: color_uniformity ===
Direction: maximize
Best observed run: #12
tannin_pct = 10
soak_hrs = 24
ph = 3
fat_liquor_pct = 10
Value: 7.3
RSM Model (linear, R² = 0.6781, Adj R² = 0.5611):
Coefficients:
intercept +5.5313
tannin_pct +0.0937
soak_hrs +0.2938
ph -0.4813
fat_liquor_pct -0.2813
RSM Model (quadratic, R² = 0.8655, Adj R² = -1.0181):
Coefficients:
intercept +1.1063
tannin_pct +0.0938
soak_hrs +0.2938
ph -0.4812
fat_liquor_pct -0.2812
tannin_pct*soak_hrs +0.2062
tannin_pct*ph +0.0313
tannin_pct*fat_liquor_pct +0.1813
soak_hrs*ph -0.1187
soak_hrs*fat_liquor_pct +0.0312
ph*fat_liquor_pct -0.1437
tannin_pct^2 +1.1063
soak_hrs^2 +1.1063
ph^2 +1.1063
fat_liquor_pct^2 +1.1063
Curvature analysis:
tannin_pct coef=+1.1063 convex (has a minimum)
soak_hrs coef=+1.1063 convex (has a minimum)
ph coef=+1.1063 convex (has a minimum)
fat_liquor_pct coef=+1.1063 convex (has a minimum)
Predicted optimum (from linear model, at observed points):
tannin_pct = 10
soak_hrs = 24
ph = 3
fat_liquor_pct = 3
Predicted value: 6.6813
Surface optimum (via L-BFGS-B, linear model):
tannin_pct = 10
soak_hrs = 24
ph = 3
fat_liquor_pct = 3
Predicted value: 6.6813
Model quality: Moderate fit — use predictions directionally, not precisely.
Factor importance:
1. ph (effect: -1.0, contribution: 41.8%)
2. soak_hrs (effect: -0.6, contribution: 25.5%)
3. fat_liquor_pct (effect: 0.6, contribution: 24.5%)
4. tannin_pct (effect: -0.2, contribution: 8.2%)