Summary
This experiment investigates oil paint drying medium. Central composite design to maximize gloss and minimize yellowing by tuning linseed oil ratio, drying medium percentage, and layer thickness.
The design varies 3 factors: linseed pct (%), ranging from 10 to 50, medium pct (%), ranging from 5 to 25, and thickness mm (mm), ranging from 0.5 to 3.0. The goal is to optimize 2 responses: gloss score (pts) (maximize) and yellowing de (dE) (minimize). Fixed conditions held constant across all runs include pigment = titanium_white, support = linen_canvas.
A Central Composite Design (CCD) was selected to fit a full quadratic response surface model, including curvature and interaction effects. With 3 factors this produces 22 runs including center points and axial (star) points that extend beyond the factorial range.
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 gloss score, the most influential factors were medium pct (51.0%), linseed pct (25.7%), thickness mm (23.3%). The best observed value was 7.4 (at linseed pct = 30, medium pct = 33.2574, thickness mm = 1.75).
For yellowing de, the most influential factors were medium pct (41.2%), thickness mm (30.4%), linseed pct (28.4%). The best observed value was 1.9 (at linseed pct = 30, medium pct = 15, thickness mm = 1.75).
Recommended Next Steps
- Run confirmation experiments at the predicted optimal settings to validate the model.
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
linseed_pct | 10 | 50 | % |
medium_pct | 5 | 25 | % |
thickness_mm | 0.5 | 3.0 | mm |
Fixed: pigment = titanium_white, support = linen_canvas
Responses
| Response | Direction | Unit |
gloss_score | ↑ maximize | pts |
yellowing_de | ↓ minimize | dE |
Configuration
{
"metadata": {
"name": "Oil Paint Drying Medium",
"description": "Central composite design to maximize gloss and minimize yellowing by tuning linseed oil ratio, drying medium percentage, and layer thickness"
},
"factors": [
{
"name": "linseed_pct",
"levels": [
"10",
"50"
],
"type": "continuous",
"unit": "%"
},
{
"name": "medium_pct",
"levels": [
"5",
"25"
],
"type": "continuous",
"unit": "%"
},
{
"name": "thickness_mm",
"levels": [
"0.5",
"3.0"
],
"type": "continuous",
"unit": "mm"
}
],
"fixed_factors": {
"pigment": "titanium_white",
"support": "linen_canvas"
},
"responses": [
{
"name": "gloss_score",
"optimize": "maximize",
"unit": "pts"
},
{
"name": "yellowing_de",
"optimize": "minimize",
"unit": "dE"
}
],
"settings": {
"operation": "central_composite",
"test_script": "use_cases/282_oil_paint_drying/sim.sh"
}
}
Experimental Matrix
The Central Composite Design produces 22 runs. Each row is one experiment with specific factor settings.
| Run | linseed_pct | medium_pct | thickness_mm |
| 1 | 30 | 15 | 1.75 |
| 2 | 50 | 5 | 3 |
| 3 | 10 | 25 | 0.5 |
| 4 | 30 | 33.2574 | 1.75 |
| 5 | 30 | 15 | 1.75 |
| 6 | -6.51484 | 15 | 1.75 |
| 7 | 30 | 15 | -0.532177 |
| 8 | 30 | 15 | 1.75 |
| 9 | 50 | 25 | 0.5 |
| 10 | 66.5148 | 15 | 1.75 |
| 11 | 30 | 15 | 1.75 |
| 12 | 30 | -3.25742 | 1.75 |
| 13 | 30 | 15 | 1.75 |
| 14 | 10 | 5 | 3 |
| 15 | 30 | 15 | 1.75 |
| 16 | 50 | 5 | 0.5 |
| 17 | 30 | 15 | 4.03218 |
| 18 | 50 | 25 | 3 |
| 19 | 30 | 15 | 1.75 |
| 20 | 10 | 5 | 0.5 |
| 21 | 10 | 25 | 3 |
| 22 | 30 | 15 | 1.75 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/282_oil_paint_drying/config.json
2
Generate the runner script
$ doe generate --config use_cases/282_oil_paint_drying/config.json \
--output use_cases/282_oil_paint_drying/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/282_oil_paint_drying/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/282_oil_paint_drying/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/282_oil_paint_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/282_oil_paint_drying/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/282_oil_paint_drying/config.json \
--output use_cases/282_oil_paint_drying/results/report.html
Features Exercised
| Feature | Value |
| Design type | central_composite |
| Factor types | continuous (all 3) |
| Arg style | double-dash |
| Responses | 2 (gloss_score ↑, yellowing_de ↓) |
| Total runs | 22 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: gloss_score
Top factors: medium_pct (51.0%), linseed_pct (25.7%), thickness_mm (23.3%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| linseed_pct | 4 | 1.5586 | 0.3896 | 1.609 | 0.2538 |
| medium_pct | 4 | 6.3361 | 1.5840 | 6.542 | 0.0094 |
| thickness_mm | 4 | 3.0461 | 0.7615 | 3.145 | 0.0708 |
| Lack | of | Fit | 2 | 3.2770 | 1.6385 |
| Pure | Error | 7 | 1.6950 | | |
| Error | 9 | 4.9720 | 0.2421 | | |
| Total | 21 | 15.9127 | 0.7577 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: yellowing_de
Top factors: medium_pct (41.2%), thickness_mm (30.4%), linseed_pct (28.4%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| linseed_pct | 4 | 3.0770 | 0.7692 | 0.249 | 0.9030 |
| medium_pct | 4 | 7.0245 | 1.7561 | 0.569 | 0.6918 |
| thickness_mm | 4 | 6.3261 | 1.5815 | 0.513 | 0.7287 |
| Lack | of | Fit | 2 | 4.8961 | 2.4480 |
| Pure | Error | 7 | 21.6000 | | |
| Error | 9 | 26.4961 | 3.0857 | | |
| Total | 21 | 42.9236 | 2.0440 | | |
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.
gloss score linseed pct vs medium pct
gloss score linseed pct vs thickness mm
gloss score medium pct vs thickness mm
yellowing de linseed pct vs medium pct
yellowing de linseed pct vs thickness mm
yellowing de medium pct vs thickness mm
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.7685
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
gloss_score |
1.5 |
|
6.50 0.7392 6.50 pts |
↑ |
yellowing_de |
1.0 |
|
2.70 0.8147 2.70 dE |
↓ |
Recommended Settings
| Factor | Value |
linseed_pct | -6.51484 % |
medium_pct | 15 % |
thickness_mm | 1.75 mm |
Source: from observed run #7
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
yellowing_de | 2.70 | 1.90 | +0.80 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #11 | 0.7189 | linseed_pct=30, medium_pct=15, thickness_mm=4.03218 |
| #19 | 0.7103 | linseed_pct=10, medium_pct=5, thickness_mm=0.5 |
Model Quality
| Response | R² | Type |
yellowing_de | 0.6105 | quadratic |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.7685
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
gloss_score 1.5 0.7392 6.50 pts ↑
yellowing_de 1.0 0.8147 2.70 dE ↓
Recommended settings:
linseed_pct = -6.51484 %
medium_pct = 15 %
thickness_mm = 1.75 mm
(from observed run #7)
Trade-off summary:
gloss_score: 6.50 (best observed: 7.40, sacrifice: +0.90)
yellowing_de: 2.70 (best observed: 1.90, sacrifice: +0.80)
Model quality:
gloss_score: R² = 0.4018 (linear)
yellowing_de: R² = 0.6105 (quadratic)
Top 3 observed runs by overall desirability:
1. Run #7 (D=0.7685): linseed_pct=-6.51484, medium_pct=15, thickness_mm=1.75
2. Run #11 (D=0.7189): linseed_pct=30, medium_pct=15, thickness_mm=4.03218
3. Run #19 (D=0.7103): linseed_pct=10, medium_pct=5, thickness_mm=0.5
Full Analysis Output
=== Main Effects: gloss_score ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
medium_pct 2.5750 0.1856 51.0%
linseed_pct 1.3000 0.1856 25.7%
thickness_mm 1.1750 0.1856 23.3%
=== ANOVA Table: gloss_score ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
linseed_pct 4 1.5586 0.3896 1.609 0.2538
medium_pct 4 6.3361 1.5840 6.542 0.0094
thickness_mm 4 3.0461 0.7615 3.145 0.0708
Lack of Fit 2 3.2770 1.6385 6.767 0.0231
Pure Error 7 1.6950 0.2421
Error 9 4.9720 0.2421
Total 21 15.9127 0.7577
=== Summary Statistics: gloss_score ===
linseed_pct:
Level N Mean Std Min Max
------------------------------------------------------------
-6.51484 1 6.5000 0.0000 6.5000 6.5000
10 4 5.4500 1.2342 4.2000 6.7000
30 12 5.6833 0.7732 3.6000 6.5000
50 4 6.0250 1.0340 4.9000 7.4000
66.5148 1 5.2000 0.0000 5.2000 5.2000
medium_pct:
Level N Mean Std Min Max
------------------------------------------------------------
-3.25742 1 6.0000 0.0000 6.0000 6.0000
15 12 5.8583 0.4926 4.9000 6.5000
25 4 5.3000 0.9345 4.2000 6.3000
33.2574 1 3.6000 0.0000 3.6000 3.6000
5 4 6.1750 1.1955 4.6000 7.4000
thickness_mm:
Level N Mean Std Min Max
------------------------------------------------------------
-0.532177 1 6.2000 0.0000 6.2000 6.2000
0.5 4 5.1500 0.8851 4.2000 6.0000
1.75 12 5.6583 0.8084 3.6000 6.5000
3 4 6.3250 1.0532 4.9000 7.4000
4.03218 1 5.8000 0.0000 5.8000 5.8000
=== Main Effects: yellowing_de ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
medium_pct 2.3000 0.3048 41.2%
thickness_mm 1.7000 0.3048 30.4%
linseed_pct 1.5833 0.3048 28.4%
=== ANOVA Table: yellowing_de ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
linseed_pct 4 3.0770 0.7692 0.249 0.9030
medium_pct 4 7.0245 1.7561 0.569 0.6918
thickness_mm 4 6.3261 1.5815 0.513 0.7287
Lack of Fit 2 4.8961 2.4480 0.793 0.4892
Pure Error 7 21.6000 3.0857
Error 9 26.4961 3.0857
Total 21 42.9236 2.0440
=== Summary Statistics: yellowing_de ===
linseed_pct:
Level N Mean Std Min Max
------------------------------------------------------------
-6.51484 1 2.7000 0.0000 2.7000 2.7000
10 4 3.5000 1.9131 2.0000 6.3000
30 12 3.6833 1.5385 1.9000 7.1000
50 4 3.3500 0.9713 2.8000 4.8000
66.5148 1 2.1000 0.0000 2.1000 2.1000
medium_pct:
Level N Mean Std Min Max
------------------------------------------------------------
-3.25742 1 4.4000 0.0000 4.4000 4.4000
15 12 3.5417 1.5448 1.9000 7.1000
25 4 2.7000 0.4761 2.0000 3.0000
33.2574 1 2.1000 0.0000 2.1000 2.1000
5 4 4.1500 1.7292 2.7000 6.3000
thickness_mm:
Level N Mean Std Min Max
------------------------------------------------------------
-0.532177 1 2.9000 0.0000 2.9000 2.9000
0.5 4 2.5750 0.3862 2.0000 2.8000
1.75 12 3.5750 1.6103 1.9000 7.1000
3 4 4.2750 1.5945 3.0000 6.3000
4.03218 1 3.2000 0.0000 3.2000 3.2000
Optimization Recommendations
=== Optimization: gloss_score ===
Direction: maximize
Best observed run: #9
linseed_pct = 30
medium_pct = 33.2574
thickness_mm = 1.75
Value: 7.4
RSM Model (linear, R² = 0.0444, Adj R² = -0.1149):
Coefficients:
intercept +5.7182
linseed_pct -0.1974
medium_pct +0.0165
thickness_mm -0.0943
RSM Model (quadratic, R² = 0.1656, Adj R² = -0.4601):
Coefficients:
intercept +5.8077
linseed_pct -0.1974
medium_pct +0.0165
thickness_mm -0.0943
linseed_pct*medium_pct -0.0500
linseed_pct*thickness_mm -0.4500
medium_pct*thickness_mm -0.0750
linseed_pct^2 -0.1097
medium_pct^2 -0.0197
thickness_mm^2 -0.0047
Curvature analysis:
linseed_pct coef=-0.1097 concave (has a maximum)
medium_pct coef=-0.0197 negligible curvature
thickness_mm coef=-0.0047 negligible curvature
Notable interactions:
linseed_pct*thickness_mm coef=-0.4500 (antagonistic)
Predicted optimum (from linear model, at observed points):
linseed_pct = -6.51484
medium_pct = 15
thickness_mm = 1.75
Predicted value: 6.0786
Surface optimum (via L-BFGS-B, linear model):
linseed_pct = 10
medium_pct = 25
thickness_mm = 0.5
Predicted value: 6.0264
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. medium_pct (effect: 3.2, contribution: 74.9%)
2. linseed_pct (effect: 0.6, contribution: 15.2%)
3. thickness_mm (effect: 0.4, contribution: 9.9%)
=== Optimization: yellowing_de ===
Direction: minimize
Best observed run: #20
linseed_pct = 30
medium_pct = 15
thickness_mm = 1.75
Value: 1.9
RSM Model (linear, R² = 0.1134, Adj R² = -0.0344):
Coefficients:
intercept +3.4727
linseed_pct -0.2837
medium_pct +0.0690
thickness_mm -0.4965
RSM Model (quadratic, R² = 0.2459, Adj R² = -0.3197):
Coefficients:
intercept +3.8030
linseed_pct -0.2837
medium_pct +0.0690
thickness_mm -0.4965
linseed_pct*medium_pct +0.4625
linseed_pct*thickness_mm +0.0875
medium_pct*thickness_mm +0.4625
linseed_pct^2 -0.2901
medium_pct^2 -0.0201
thickness_mm^2 -0.1851
Curvature analysis:
linseed_pct coef=-0.2901 concave (has a maximum)
thickness_mm coef=-0.1851 concave (has a maximum)
medium_pct coef=-0.0201 negligible curvature
Notable interactions:
medium_pct*thickness_mm coef=+0.4625 (synergistic)
linseed_pct*medium_pct coef=+0.4625 (synergistic)
Predicted optimum (from linear model, at observed points):
linseed_pct = 30
medium_pct = 15
thickness_mm = -0.532177
Predicted value: 4.3793
Surface optimum (via L-BFGS-B, linear model):
linseed_pct = 50
medium_pct = 5
thickness_mm = 3
Predicted value: 2.6235
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. medium_pct (effect: 2.8, contribution: 43.8%)
2. linseed_pct (effect: 1.8, contribution: 28.5%)
3. thickness_mm (effect: 1.8, contribution: 27.7%)