Summary
This experiment investigates wood finish drying conditions. Full factorial of temperature, humidity, air circulation, and coat thickness to minimize drying time and maximize film hardness.
The design varies 4 factors: temp c (C), ranging from 15 to 30, humidity pct (%), ranging from 30 to 70, air flow, ranging from off to on, and coat mils (mils), ranging from 2 to 6. The goal is to optimize 2 responses: dry time hrs (hrs) (minimize) and hardness h (H_pencil) (maximize). Fixed conditions held constant across all runs include finish type = polyurethane, wood = cherry.
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 dry time hrs, the most influential factors were humidity pct (38.7%), air flow (38.7%), coat mils (18.8%). The best observed value was 1.1 (at temp c = 15, humidity pct = 30, air flow = on).
For hardness h, the most influential factors were humidity pct (44.0%), air flow (36.9%), coat mils (15.5%). The best observed value was 7.3 (at temp c = 15, humidity pct = 30, air flow = on).
Recommended Next Steps
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
temp_c | 15 | 30 | C |
humidity_pct | 30 | 70 | % |
air_flow | off | on | |
coat_mils | 2 | 6 | mils |
Fixed: finish_type = polyurethane, wood = cherry
Responses
| Response | Direction | Unit |
dry_time_hrs | ↓ minimize | hrs |
hardness_h | ↑ maximize | H_pencil |
Configuration
{
"metadata": {
"name": "Wood Finish Drying Conditions",
"description": "Full factorial of temperature, humidity, air circulation, and coat thickness to minimize drying time and maximize film hardness"
},
"factors": [
{
"name": "temp_c",
"levels": [
"15",
"30"
],
"type": "continuous",
"unit": "C"
},
{
"name": "humidity_pct",
"levels": [
"30",
"70"
],
"type": "continuous",
"unit": "%"
},
{
"name": "air_flow",
"levels": [
"off",
"on"
],
"type": "categorical",
"unit": ""
},
{
"name": "coat_mils",
"levels": [
"2",
"6"
],
"type": "continuous",
"unit": "mils"
}
],
"fixed_factors": {
"finish_type": "polyurethane",
"wood": "cherry"
},
"responses": [
{
"name": "dry_time_hrs",
"optimize": "minimize",
"unit": "hrs"
},
{
"name": "hardness_h",
"optimize": "maximize",
"unit": "H_pencil"
}
],
"settings": {
"operation": "full_factorial",
"test_script": "use_cases/201_wood_finish_drying/sim.sh"
}
}
Experimental Matrix
The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.
| Run | temp_c | humidity_pct | air_flow | coat_mils |
| 1 | 15 | 70 | on | 6 |
| 2 | 30 | 30 | off | 6 |
| 3 | 15 | 70 | off | 6 |
| 4 | 15 | 70 | on | 2 |
| 5 | 30 | 70 | on | 2 |
| 6 | 30 | 30 | on | 2 |
| 7 | 30 | 70 | off | 2 |
| 8 | 30 | 30 | off | 2 |
| 9 | 15 | 30 | off | 6 |
| 10 | 15 | 30 | on | 2 |
| 11 | 30 | 70 | off | 6 |
| 12 | 30 | 70 | on | 6 |
| 13 | 15 | 70 | off | 2 |
| 14 | 30 | 30 | on | 6 |
| 15 | 15 | 30 | off | 2 |
| 16 | 15 | 30 | on | 6 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/201_wood_finish_drying/config.json
2
Generate the runner script
$ doe generate --config use_cases/201_wood_finish_drying/config.json \
--output use_cases/201_wood_finish_drying/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/201_wood_finish_drying/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/201_wood_finish_drying/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/201_wood_finish_drying/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/201_wood_finish_drying/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/201_wood_finish_drying/config.json \
--output use_cases/201_wood_finish_drying/results/report.html
Features Exercised
| Feature | Value |
| Design type | full_factorial |
| Factor types | continuous (3), categorical (1) |
| Arg style | double-dash |
| Responses | 2 (dry_time_hrs ↓, hardness_h ↑) |
| Total runs | 16 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: dry_time_hrs
Top factors: humidity_pct (38.7%), air_flow (38.7%), coat_mils (18.8%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| temp_c | 1 | 0.0225 | 0.0225 | 0.004 | 0.9513 |
| humidity_pct | 1 | 2.4025 | 2.4025 | 0.440 | 0.5364 |
| air_flow | 1 | 2.4025 | 2.4025 | 0.440 | 0.5364 |
| coat_mils | 1 | 0.5625 | 0.5625 | 0.103 | 0.7612 |
| temp_c*humidity_pct | 1 | 0.0025 | 0.0025 | 0.000 | 0.9838 |
| temp_c*air_flow | 1 | 0.0025 | 0.0025 | 0.000 | 0.9838 |
| temp_c*coat_mils | 1 | 8.7025 | 8.7025 | 1.594 | 0.2624 |
| humidity_pct*air_flow | 1 | 4.6225 | 4.6225 | 0.847 | 0.3997 |
| humidity_pct*coat_mils | 1 | 2.7225 | 2.7225 | 0.499 | 0.5116 |
| air_flow*coat_mils | 1 | 3.4225 | 3.4225 | 0.627 | 0.4643 |
| Error | 5 | 27.2925 | 5.4585 | | |
| Total | 15 | 52.1575 | 3.4772 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: hardness_h
Top factors: humidity_pct (44.0%), air_flow (36.9%), coat_mils (15.5%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| temp_c | 1 | 0.0056 | 0.0056 | 0.008 | 0.9342 |
| humidity_pct | 1 | 0.8556 | 0.8556 | 1.146 | 0.3333 |
| air_flow | 1 | 0.6006 | 0.6006 | 0.804 | 0.4109 |
| coat_mils | 1 | 0.1056 | 0.1056 | 0.141 | 0.7223 |
| temp_c*humidity_pct | 1 | 0.0756 | 0.0756 | 0.101 | 0.7632 |
| temp_c*air_flow | 1 | 0.4556 | 0.4556 | 0.610 | 0.4700 |
| temp_c*coat_mils | 1 | 1.0506 | 1.0506 | 1.407 | 0.2888 |
| humidity_pct*air_flow | 1 | 0.8556 | 0.8556 | 1.146 | 0.3333 |
| humidity_pct*coat_mils | 1 | 0.6806 | 0.6806 | 0.912 | 0.3835 |
| air_flow*coat_mils | 1 | 0.7656 | 0.7656 | 1.025 | 0.3577 |
| Error | 5 | 3.7331 | 0.7466 | | |
| Total | 15 | 9.1844 | 0.6123 | | |
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.
dry time hrs humidity pct vs coat mils
dry time hrs temp c vs coat mils
dry time hrs temp c vs humidity pct
hardness h humidity pct vs coat mils
hardness h temp c vs coat mils
hardness h temp c vs humidity pct
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.9545
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
dry_time_hrs |
1.0 |
|
1.10 0.9545 1.10 hrs |
↓ |
hardness_h |
1.5 |
|
7.30 0.9545 7.30 H_pencil |
↑ |
Recommended Settings
| Factor | Value |
temp_c | 15 C |
humidity_pct | 70 % |
air_flow | on |
coat_mils | 2 mils |
Source: from observed run #6
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
hardness_h | 7.30 | 7.30 | +0.00 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #8 | 0.8596 | temp_c=30, humidity_pct=30, air_flow=on, coat_mils=6 |
| #5 | 0.7446 | temp_c=30, humidity_pct=70, air_flow=off, coat_mils=2 |
Model Quality
| Response | R² | Type |
hardness_h | 0.2654 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.9545
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
dry_time_hrs 1.0 0.9545 1.10 hrs ↓
hardness_h 1.5 0.9545 7.30 H_pencil ↑
Recommended settings:
temp_c = 15 C
humidity_pct = 70 %
air_flow = on
coat_mils = 2 mils
(from observed run #6)
Trade-off summary:
dry_time_hrs: 1.10 (best observed: 1.10, sacrifice: +0.00)
hardness_h: 7.30 (best observed: 7.30, sacrifice: +0.00)
Model quality:
dry_time_hrs: R² = 0.3949 (linear)
hardness_h: R² = 0.2654 (linear)
Top 3 observed runs by overall desirability:
1. Run #6 (D=0.9545): temp_c=15, humidity_pct=70, air_flow=on, coat_mils=2
2. Run #8 (D=0.8596): temp_c=30, humidity_pct=30, air_flow=on, coat_mils=6
3. Run #5 (D=0.7446): temp_c=30, humidity_pct=70, air_flow=off, coat_mils=2
Full Analysis Output
=== Main Effects: dry_time_hrs ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
humidity_pct 0.7750 0.4662 38.7%
air_flow -0.7750 0.4662 38.7%
coat_mils -0.3750 0.4662 18.8%
temp_c -0.0750 0.4662 3.8%
=== ANOVA Table: dry_time_hrs ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
temp_c 1 0.0225 0.0225 0.004 0.9513
humidity_pct 1 2.4025 2.4025 0.440 0.5364
air_flow 1 2.4025 2.4025 0.440 0.5364
coat_mils 1 0.5625 0.5625 0.103 0.7612
temp_c*humidity_pct 1 0.0025 0.0025 0.000 0.9838
temp_c*air_flow 1 0.0025 0.0025 0.000 0.9838
temp_c*coat_mils 1 8.7025 8.7025 1.594 0.2624
humidity_pct*air_flow 1 4.6225 4.6225 0.847 0.3997
humidity_pct*coat_mils 1 2.7225 2.7225 0.499 0.5116
air_flow*coat_mils 1 3.4225 3.4225 0.627 0.4643
Error 5 27.2925 5.4585
Total 15 52.1575 3.4772
=== Interaction Effects: dry_time_hrs ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
temp_c coat_mils -1.4750 33.9%
humidity_pct air_flow -1.0750 24.7%
air_flow coat_mils -0.9250 21.3%
humidity_pct coat_mils 0.8250 19.0%
temp_c humidity_pct 0.0250 0.6%
temp_c air_flow -0.0250 0.6%
=== Summary Statistics: dry_time_hrs ===
temp_c:
Level N Mean Std Min Max
------------------------------------------------------------
15 8 4.3250 1.2221 2.4000 5.9000
30 8 4.2500 2.4401 1.1000 8.0000
humidity_pct:
Level N Mean Std Min Max
------------------------------------------------------------
30 8 3.9000 1.5194 1.9000 6.7000
70 8 4.6750 2.1907 1.1000 8.0000
air_flow:
Level N Mean Std Min Max
------------------------------------------------------------
off 8 4.6750 1.7169 2.3000 8.0000
on 8 3.9000 2.0396 1.1000 6.7000
coat_mils:
Level N Mean Std Min Max
------------------------------------------------------------
2 8 4.4750 1.4907 2.4000 6.7000
6 8 4.1000 2.2690 1.1000 8.0000
=== Main Effects: hardness_h ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
humidity_pct -0.4625 0.1956 44.0%
air_flow 0.3875 0.1956 36.9%
coat_mils 0.1625 0.1956 15.5%
temp_c -0.0375 0.1956 3.6%
=== ANOVA Table: hardness_h ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
temp_c 1 0.0056 0.0056 0.008 0.9342
humidity_pct 1 0.8556 0.8556 1.146 0.3333
air_flow 1 0.6006 0.6006 0.804 0.4109
coat_mils 1 0.1056 0.1056 0.141 0.7223
temp_c*humidity_pct 1 0.0756 0.0756 0.101 0.7632
temp_c*air_flow 1 0.4556 0.4556 0.610 0.4700
temp_c*coat_mils 1 1.0506 1.0506 1.407 0.2888
humidity_pct*air_flow 1 0.8556 0.8556 1.146 0.3333
humidity_pct*coat_mils 1 0.6806 0.6806 0.912 0.3835
air_flow*coat_mils 1 0.7656 0.7656 1.025 0.3577
Error 5 3.7331 0.7466
Total 15 9.1844 0.6123
=== Interaction Effects: hardness_h ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
temp_c coat_mils 0.5125 22.3%
humidity_pct air_flow 0.4625 20.1%
air_flow coat_mils 0.4375 19.0%
humidity_pct coat_mils -0.4125 17.9%
temp_c air_flow 0.3375 14.7%
temp_c humidity_pct 0.1375 6.0%
=== Summary Statistics: hardness_h ===
temp_c:
Level N Mean Std Min Max
------------------------------------------------------------
15 8 5.9000 0.5503 5.0000 6.5000
30 8 5.8625 1.0042 4.2000 7.3000
humidity_pct:
Level N Mean Std Min Max
------------------------------------------------------------
30 8 6.1125 0.5592 5.1000 7.0000
70 8 5.6500 0.9366 4.2000 7.3000
air_flow:
Level N Mean Std Min Max
------------------------------------------------------------
off 8 5.6875 0.7160 4.2000 6.5000
on 8 6.0750 0.8447 5.0000 7.3000
coat_mils:
Level N Mean Std Min Max
------------------------------------------------------------
2 8 5.8000 0.5155 5.1000 6.5000
6 8 5.9625 1.0155 4.2000 7.3000
Optimization Recommendations
=== Optimization: dry_time_hrs ===
Direction: minimize
Best observed run: #6
temp_c = 15
humidity_pct = 30
air_flow = on
coat_mils = 6
Value: 1.1
RSM Model (linear, R² = 0.3306, Adj R² = 0.0872):
Coefficients:
intercept +4.2875
temp_c -0.0375
humidity_pct +0.5000
air_flow -0.7750
coat_mils +0.4750
RSM Model (quadratic, R² = 0.5299, Adj R² = -6.0510):
Coefficients:
intercept +0.8575
temp_c -0.0375
humidity_pct +0.5000
air_flow -0.7750
coat_mils +0.4750
temp_c*humidity_pct -0.4250
temp_c*air_flow -0.1500
temp_c*coat_mils -0.3500
humidity_pct*air_flow +0.5125
humidity_pct*coat_mils -0.1625
air_flow*coat_mils -0.1875
temp_c^2 +0.8575
humidity_pct^2 +0.8575
air_flow^2 +0.8575
coat_mils^2 +0.8575
Curvature analysis:
humidity_pct coef=+0.8575 convex (has a minimum)
temp_c coef=+0.8575 convex (has a minimum)
air_flow coef=+0.8575 convex (has a minimum)
coat_mils coef=+0.8575 convex (has a minimum)
Notable interactions:
humidity_pct*air_flow coef=+0.5125 (synergistic)
temp_c*humidity_pct coef=-0.4250 (antagonistic)
temp_c*coat_mils coef=-0.3500 (antagonistic)
Predicted optimum (from linear model, at observed points):
temp_c = 15
humidity_pct = 70
air_flow = off
coat_mils = 6
Predicted value: 6.0750
Surface optimum (via L-BFGS-B, linear model):
temp_c = 30
humidity_pct = 30
air_flow = on
coat_mils = 2
Predicted value: 2.5000
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. air_flow (effect: -1.5, contribution: 43.4%)
2. humidity_pct (effect: 1.0, contribution: 28.0%)
3. coat_mils (effect: 1.0, contribution: 26.6%)
4. temp_c (effect: -0.1, contribution: 2.1%)
=== Optimization: hardness_h ===
Direction: maximize
Best observed run: #6
temp_c = 15
humidity_pct = 30
air_flow = on
coat_mils = 6
Value: 7.3
RSM Model (linear, R² = 0.3699, Adj R² = 0.1408):
Coefficients:
intercept +5.8813
temp_c +0.0938
humidity_pct -0.1938
air_flow +0.3812
coat_mils -0.1437
RSM Model (quadratic, R² = 0.5500, Adj R² = -5.7503):
Coefficients:
intercept +1.1763
temp_c +0.0938
humidity_pct -0.1937
air_flow +0.3813
coat_mils -0.1437
temp_c*humidity_pct +0.2188
temp_c*air_flow +0.0938
temp_c*coat_mils +0.1437
humidity_pct*air_flow -0.1188
humidity_pct*coat_mils -0.0937
air_flow*coat_mils +0.0563
temp_c^2 +1.1763
humidity_pct^2 +1.1763
air_flow^2 +1.1763
coat_mils^2 +1.1763
Curvature analysis:
temp_c coef=+1.1763 convex (has a minimum)
air_flow coef=+1.1763 convex (has a minimum)
humidity_pct coef=+1.1763 convex (has a minimum)
coat_mils coef=+1.1763 convex (has a minimum)
Predicted optimum (from linear model, at observed points):
temp_c = 30
humidity_pct = 30
air_flow = on
coat_mils = 2
Predicted value: 6.6938
Surface optimum (via L-BFGS-B, linear model):
temp_c = 30
humidity_pct = 30
air_flow = on
coat_mils = 2
Predicted value: 6.6938
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. air_flow (effect: 0.8, contribution: 46.9%)
2. humidity_pct (effect: -0.4, contribution: 23.8%)
3. coat_mils (effect: -0.3, contribution: 17.7%)
4. temp_c (effect: 0.2, contribution: 11.5%)