← All Use Cases
🏠
Box-Behnken Design

Interior Paint Finish Quality

Box-Behnken design to maximize coverage and minimize drying time by tuning coat thickness, humidity, and paint dilution ratio

Summary

This experiment investigates interior paint finish quality. Box-Behnken design to maximize coverage and minimize drying time by tuning coat thickness, humidity, and paint dilution ratio.

The design varies 3 factors: coat mils (mils), ranging from 3 to 8, humidity pct (%), ranging from 30 to 70, and dilution pct (%), ranging from 0 to 15. The goal is to optimize 2 responses: coverage score (pts) (maximize) and dry time min (min) (minimize). Fixed conditions held constant across all runs include paint type = latex_eggshell, surface = drywall.

A Box-Behnken design was chosen because it efficiently fits quadratic models with 3 continuous factors while avoiding extreme corner combinations — requiring only 15 runs instead of the 8 needed for a full factorial at two levels.

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 coverage score, the most influential factors were coat mils (46.7%), dilution pct (28.9%), humidity pct (24.4%). The best observed value was 8.9 (at coat mils = 5.5, humidity pct = 70, dilution pct = 15).

For dry time min, the most influential factors were dilution pct (53.0%), humidity pct (24.0%), coat mils (23.0%). The best observed value was 26.0 (at coat mils = 8, humidity pct = 50, dilution pct = 0).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
coat_mils38mils
humidity_pct3070%
dilution_pct015%

Fixed: paint_type = latex_eggshell, surface = drywall

Responses

ResponseDirectionUnit
coverage_score↑ maximizepts
dry_time_min↓ minimizemin

Configuration

use_cases/137_paint_finish_quality/config.json
{ "metadata": { "name": "Interior Paint Finish Quality", "description": "Box-Behnken design to maximize coverage and minimize drying time by tuning coat thickness, humidity, and paint dilution ratio" }, "factors": [ { "name": "coat_mils", "levels": [ "3", "8" ], "type": "continuous", "unit": "mils" }, { "name": "humidity_pct", "levels": [ "30", "70" ], "type": "continuous", "unit": "%" }, { "name": "dilution_pct", "levels": [ "0", "15" ], "type": "continuous", "unit": "%" } ], "fixed_factors": { "paint_type": "latex_eggshell", "surface": "drywall" }, "responses": [ { "name": "coverage_score", "optimize": "maximize", "unit": "pts" }, { "name": "dry_time_min", "optimize": "minimize", "unit": "min" } ], "settings": { "operation": "box_behnken", "test_script": "use_cases/137_paint_finish_quality/sim.sh" } }

Experimental Matrix

The Box-Behnken Design produces 15 runs. Each row is one experiment with specific factor settings.

Runcoat_milshumidity_pctdilution_pct
15.5300
25.5507.5
385015
48500
55.5507.5
65.5507.5
735015
88307.5
95.53015
108707.5
113500
125.57015
133307.5
143707.5
155.5700

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/137_paint_finish_quality/config.json
2

Generate the runner script

Terminal
$ doe generate --config use_cases/137_paint_finish_quality/config.json \ --output use_cases/137_paint_finish_quality/results/run.sh --seed 42
3

Execute the experiments

Terminal
$ bash use_cases/137_paint_finish_quality/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/137_paint_finish_quality/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/137_paint_finish_quality/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/137_paint_finish_quality/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/137_paint_finish_quality/config.json \ --output use_cases/137_paint_finish_quality/results/report.html

Features Exercised

FeatureValue
Design typebox_behnken
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (coverage_score ↑, dry_time_min ↓)
Total runs15

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: coverage_score

Top factors: coat_mils (46.7%), dilution_pct (28.9%), humidity_pct (24.4%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
coat_mils27.16883.58441.2180.3454
humidity_pct22.05271.02630.3490.7158
dilution_pct23.14551.57280.5340.6056
LackofFit68.84371.4739
PureError25.8867
Error814.73032.9433
Total1427.09731.9355

Pareto Chart

Pareto chart for coverage_score

Main Effects Plot

Main effects plot for coverage_score

Normal Probability Plot of Effects

Normal probability plot for coverage_score

Half-Normal Plot of Effects

Half-normal plot for coverage_score

Model Diagnostics

Model diagnostics for coverage_score

Response: dry_time_min

Top factors: dilution_pct (53.0%), humidity_pct (24.0%), coat_mils (23.0%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
coat_mils261.326230.66310.1130.8942
humidity_pct288.576244.28810.1640.8517
dilution_pct2336.7548168.37740.6230.5605
LackofFit61453.6095242.2683
PureError2540.6667
Error81994.2762270.3333
Total142480.9333177.2095

Pareto Chart

Pareto chart for dry_time_min

Main Effects Plot

Main effects plot for dry_time_min

Normal Probability Plot of Effects

Normal probability plot for dry_time_min

Half-Normal Plot of Effects

Half-normal plot for dry_time_min

Model Diagnostics

Model diagnostics for dry_time_min

Response Surface Plots

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

coverage score coat mils vs dilution pct

RSM surface: coverage score coat mils vs dilution pct

coverage score coat mils vs humidity pct

RSM surface: coverage score coat mils vs humidity pct

coverage score humidity pct vs dilution pct

RSM surface: coverage score humidity pct vs dilution pct

dry time min coat mils vs dilution pct

RSM surface: dry time min coat mils vs dilution pct

dry time min coat mils vs humidity pct

RSM surface: dry time min coat mils vs humidity pct

dry time min humidity pct vs dilution pct

RSM surface: dry time min humidity pct vs dilution 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.8437

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
coverage_score 1.5
0.7998
8.10 0.7998 8.10 pts
dry_time_min 1.0
0.9141
28.00 0.9141 28.00 min

Recommended Settings

FactorValue
coat_mils5.5 mils
humidity_pct70 %
dilution_pct0 %

Source: from observed run #1

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
dry_time_min28.0026.00+2.00

Top 3 Runs by Desirability

RunDFactor Settings
#80.7261coat_mils=8, humidity_pct=70, dilution_pct=7.5
#40.7063coat_mils=3, humidity_pct=50, dilution_pct=0

Model Quality

ResponseType
dry_time_min0.6300linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.8437 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- coverage_score 1.5 0.7998 8.10 pts ↑ dry_time_min 1.0 0.9141 28.00 min ↓ Recommended settings: coat_mils = 5.5 mils humidity_pct = 70 % dilution_pct = 0 % (from observed run #1) Trade-off summary: coverage_score: 8.10 (best observed: 8.90, sacrifice: +0.80) dry_time_min: 28.00 (best observed: 26.00, sacrifice: +2.00) Model quality: coverage_score: R² = 0.0455 (linear) dry_time_min: R² = 0.6300 (linear) Top 3 observed runs by overall desirability: 1. Run #1 (D=0.8437): coat_mils=5.5, humidity_pct=70, dilution_pct=0 2. Run #8 (D=0.7261): coat_mils=8, humidity_pct=70, dilution_pct=7.5 3. Run #4 (D=0.7063): coat_mils=3, humidity_pct=50, dilution_pct=0

Full Analysis Output

doe analyze
=== Main Effects: coverage_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- coat_mils 1.6143 0.3592 46.7% dilution_pct 0.9964 0.3592 28.9% humidity_pct 0.8429 0.3592 24.4% === ANOVA Table: coverage_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- coat_mils 2 7.1688 3.5844 1.218 0.3454 humidity_pct 2 2.0527 1.0263 0.349 0.7158 dilution_pct 2 3.1455 1.5728 0.534 0.6056 Lack of Fit 6 8.8437 1.4739 0.501 0.7836 Pure Error 2 5.8867 2.9433 Error 8 14.7303 2.9433 Total 14 27.0973 1.9355 === Summary Statistics: coverage_score === coat_mils: Level N Mean Std Min Max ------------------------------------------------------------ 3 4 6.5000 1.5642 4.2000 7.7000 5.5 7 7.5143 1.1908 5.5000 8.9000 8 4 5.9000 1.1662 4.3000 7.1000 humidity_pct: Level N Mean Std Min Max ------------------------------------------------------------ 30 4 6.2000 2.2524 4.2000 8.2000 50 7 7.0429 1.0830 5.5000 8.9000 70 4 7.0250 0.9639 6.1000 8.0000 dilution_pct: Level N Mean Std Min Max ------------------------------------------------------------ 0 4 7.1500 0.7371 6.3000 8.1000 15 4 7.3250 0.9708 6.1000 8.2000 7.5 7 6.3286 1.8025 4.2000 8.9000 === Main Effects: dry_time_min === Factor Effect Std Error % Contribution -------------------------------------------------------------- dilution_pct 11.2857 3.4371 53.0% humidity_pct 5.1071 3.4371 24.0% coat_mils 4.8929 3.4371 23.0% === ANOVA Table: dry_time_min === Source DF SS MS F p-value ----------------------------------------------------------------------------- coat_mils 2 61.3262 30.6631 0.113 0.8942 humidity_pct 2 88.5762 44.2881 0.164 0.8517 dilution_pct 2 336.7548 168.3774 0.623 0.5605 Lack of Fit 6 1453.6095 242.2683 0.896 0.6128 Pure Error 2 540.6667 270.3333 Error 8 1994.2762 270.3333 Total 14 2480.9333 177.2095 === Summary Statistics: dry_time_min === coat_mils: Level N Mean Std Min Max ------------------------------------------------------------ 3 4 46.0000 4.2426 41.0000 50.0000 5.5 7 43.8571 16.6175 26.0000 71.0000 8 4 48.7500 15.3704 33.0000 69.0000 humidity_pct: Level N Mean Std Min Max ------------------------------------------------------------ 30 4 47.7500 18.1361 28.0000 71.0000 50 7 43.1429 10.6994 26.0000 57.0000 70 4 48.2500 15.4785 33.0000 69.0000 dilution_pct: Level N Mean Std Min Max ------------------------------------------------------------ 0 4 38.0000 9.3452 28.0000 49.0000 15 4 47.2500 16.5000 33.0000 71.0000 7.5 7 49.2857 13.3256 26.0000 69.0000

Optimization Recommendations

doe optimize
=== Optimization: coverage_score === Direction: maximize Best observed run: #4 coat_mils = 5.5 humidity_pct = 70 dilution_pct = 15 Value: 8.9 RSM Model (linear, R² = 0.4644, Adj R² = 0.3184): Coefficients: intercept +6.8133 coat_mils -0.1000 humidity_pct +0.2500 dilution_pct +1.2250 RSM Model (quadratic, R² = 0.7149, Adj R² = 0.2018): Coefficients: intercept +7.2000 coat_mils -0.1000 humidity_pct +0.2500 dilution_pct +1.2250 coat_mils*humidity_pct -0.0000 coat_mils*dilution_pct +0.6500 humidity_pct*dilution_pct +0.4500 coat_mils^2 +0.3750 humidity_pct^2 -0.9750 dilution_pct^2 -0.1250 Curvature analysis: humidity_pct coef=-0.9750 concave (has a maximum) coat_mils coef=+0.3750 convex (has a minimum) dilution_pct coef=-0.1250 concave (has a maximum) Notable interactions: coat_mils*dilution_pct coef=+0.6500 (synergistic) humidity_pct*dilution_pct coef=+0.4500 (synergistic) Predicted optimum (from linear model, at observed points): coat_mils = 5.5 humidity_pct = 70 dilution_pct = 15 Predicted value: 8.2883 Surface optimum (via L-BFGS-B, linear model): coat_mils = 3 humidity_pct = 70 dilution_pct = 15 Predicted value: 8.3883 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. dilution_pct (effect: 2.5, contribution: 57.7%) 2. humidity_pct (effect: 1.2, contribution: 29.3%) 3. coat_mils (effect: 0.6, contribution: 13.0%) === Optimization: dry_time_min === Direction: minimize Best observed run: #13 coat_mils = 8 humidity_pct = 50 dilution_pct = 0 Value: 26.0 RSM Model (linear, R² = 0.2313, Adj R² = 0.0216): Coefficients: intercept +45.7333 coat_mils -5.3750 humidity_pct +5.7500 dilution_pct -3.1250 RSM Model (quadratic, R² = 0.7993, Adj R² = 0.4380): Coefficients: intercept +46.6667 coat_mils -5.3750 humidity_pct +5.7500 dilution_pct -3.1250 coat_mils*humidity_pct -10.7500 coat_mils*dilution_pct +14.5000 humidity_pct*dilution_pct -0.7500 coat_mils^2 -1.8333 humidity_pct^2 +3.4167 dilution_pct^2 -3.3333 Curvature analysis: humidity_pct coef=+3.4167 convex (has a minimum) dilution_pct coef=-3.3333 concave (has a maximum) coat_mils coef=-1.8333 concave (has a maximum) Notable interactions: coat_mils*dilution_pct coef=+14.5000 (synergistic) coat_mils*humidity_pct coef=-10.7500 (antagonistic) humidity_pct*dilution_pct coef=-0.7500 (antagonistic) Predicted optimum (from quadratic model, at observed points): coat_mils = 3 humidity_pct = 70 dilution_pct = 7.5 Predicted value: 70.1250 Surface optimum (via L-BFGS-B, quadratic model): coat_mils = 3 humidity_pct = 30 dilution_pct = 15 Predicted value: 16.9167 Model quality: Good fit — general trends are captured, some noise remains. Factor importance: 1. humidity_pct (effect: 11.5, contribution: 39.9%) 2. coat_mils (effect: 10.8, contribution: 37.3%) 3. dilution_pct (effect: 6.6, contribution: 22.8%)
← All Use Cases Next: DIY Concrete Mix Design →