← All Use Cases
🪓
Full Factorial Design

Wood Finish Drying Conditions

Full factorial of temperature, humidity, air circulation, and coat thickness to minimize drying time and maximize film hardness

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

Experimental Setup

Factors

FactorLowHighUnit
temp_c1530C
humidity_pct3070%
air_flowoffon
coat_mils26mils

Fixed: finish_type = polyurethane, wood = cherry

Responses

ResponseDirectionUnit
dry_time_hrs↓ minimizehrs
hardness_h↑ maximizeH_pencil

Configuration

use_cases/201_wood_finish_drying/config.json
{ "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.

Runtemp_chumidity_pctair_flowcoat_mils
11570on6
23030off6
31570off6
41570on2
53070on2
63030on2
73070off2
83030off2
91530off6
101530on2
113070off6
123070on6
131570off2
143030on6
151530off2
161530on6

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/201_wood_finish_drying/config.json
2

Generate the runner script

Terminal
$ 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

Terminal
$ bash use_cases/201_wood_finish_drying/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/201_wood_finish_drying/config.json
5

Get optimization recommendations

Terminal
$ 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.

Terminal
$ doe optimize --config use_cases/201_wood_finish_drying/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/201_wood_finish_drying/config.json \ --output use_cases/201_wood_finish_drying/results/report.html

Features Exercised

FeatureValue
Design typefull_factorial
Factor typescontinuous (3), categorical (1)
Arg styledouble-dash
Responses2 (dry_time_hrs ↓, hardness_h ↑)
Total runs16

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

SourceDFSSMSFp-value
SourceDFSSMSFp-value
temp_c10.02250.02250.0040.9513
humidity_pct12.40252.40250.4400.5364
air_flow12.40252.40250.4400.5364
coat_mils10.56250.56250.1030.7612
temp_c*humidity_pct10.00250.00250.0000.9838
temp_c*air_flow10.00250.00250.0000.9838
temp_c*coat_mils18.70258.70251.5940.2624
humidity_pct*air_flow14.62254.62250.8470.3997
humidity_pct*coat_mils12.72252.72250.4990.5116
air_flow*coat_mils13.42253.42250.6270.4643
Error527.29255.4585
Total1552.15753.4772

Pareto Chart

Pareto chart for dry_time_hrs

Main Effects Plot

Main effects plot for dry_time_hrs

Normal Probability Plot of Effects

Normal probability plot for dry_time_hrs

Half-Normal Plot of Effects

Half-normal plot for dry_time_hrs

Model Diagnostics

Model diagnostics for dry_time_hrs

Response: hardness_h

Top factors: humidity_pct (44.0%), air_flow (36.9%), coat_mils (15.5%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
temp_c10.00560.00560.0080.9342
humidity_pct10.85560.85561.1460.3333
air_flow10.60060.60060.8040.4109
coat_mils10.10560.10560.1410.7223
temp_c*humidity_pct10.07560.07560.1010.7632
temp_c*air_flow10.45560.45560.6100.4700
temp_c*coat_mils11.05061.05061.4070.2888
humidity_pct*air_flow10.85560.85561.1460.3333
humidity_pct*coat_mils10.68060.68060.9120.3835
air_flow*coat_mils10.76560.76561.0250.3577
Error53.73310.7466
Total159.18440.6123

Pareto Chart

Pareto chart for hardness_h

Main Effects Plot

Main effects plot for hardness_h

Normal Probability Plot of Effects

Normal probability plot for hardness_h

Half-Normal Plot of Effects

Half-normal plot for hardness_h

Model Diagnostics

Model diagnostics for hardness_h

Response Surface Plots

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

dry time hrs humidity pct vs coat mils

RSM surface: dry time hrs humidity pct vs coat mils

dry time hrs temp c vs coat mils

RSM surface: dry time hrs temp c vs coat mils

dry time hrs temp c vs humidity pct

RSM surface: dry time hrs temp c vs humidity pct

hardness h humidity pct vs coat mils

RSM surface: hardness h humidity pct vs coat mils

hardness h temp c vs coat mils

RSM surface: hardness h temp c vs coat mils

hardness h temp c vs humidity pct

RSM surface: 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

ResponseWeightDesirabilityPredictedDir
dry_time_hrs 1.0
0.9545
1.10 0.9545 1.10 hrs
hardness_h 1.5
0.9545
7.30 0.9545 7.30 H_pencil

Recommended Settings

FactorValue
temp_c15 C
humidity_pct70 %
air_flowon
coat_mils2 mils

Source: from observed run #6

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
hardness_h7.307.30+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#80.8596temp_c=30, humidity_pct=30, air_flow=on, coat_mils=6
#50.7446temp_c=30, humidity_pct=70, air_flow=off, coat_mils=2

Model Quality

ResponseType
hardness_h0.2654linear

Full Multi-Objective Output

doe optimize --multi
============================================================ 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

doe analyze
=== 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

doe optimize
=== 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%)
← Previous: Table Saw Cut Quality Next: Mortise & Tenon Fit →