← All Use Cases
🪓
Fractional Factorial Design

Sandpaper Grit Progression

Fractional factorial screening of starting grit, grit steps, sanding pressure, passes per grit, and dust extraction for surface finish and time efficiency

Summary

This experiment investigates sandpaper grit progression. Fractional factorial screening of starting grit, grit steps, sanding pressure, passes per grit, and dust extraction for surface finish and time efficiency.

The design varies 5 factors: start grit (grit), ranging from 60 to 120, grit steps (steps), ranging from 2 to 5, pressure kg (kg), ranging from 0.5 to 3.0, passes (passes), ranging from 3 to 10, and dust extract (bool), ranging from 0 to 1. The goal is to optimize 2 responses: finish score (pts) (maximize) and time min (min) (minimize). Fixed conditions held constant across all runs include wood = walnut, final grit = 220.

A fractional factorial design reduces the number of runs from 32 to 8 by deliberately confounding higher-order interactions. This is ideal for screening — identifying which of the 5 factors matter most before investing in a full study.

Key Findings

For finish score, the most influential factors were dust extract (43.5%), passes (22.4%), pressure kg (15.3%). The best observed value was 7.6 (at start grit = 60, grit steps = 2, pressure kg = 3.0).

For time min, the most influential factors were grit steps (38.8%), dust extract (36.7%), pressure kg (16.3%). The best observed value was 2.0 (at start grit = 60, grit steps = 5, pressure kg = 0.5).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
start_grit60120grit
grit_steps25steps
pressure_kg0.53.0kg
passes310passes
dust_extract01bool

Fixed: wood = walnut, final_grit = 220

Responses

ResponseDirectionUnit
finish_score↑ maximizepts
time_min↓ minimizemin

Configuration

use_cases/205_sandpaper_progression/config.json
{ "metadata": { "name": "Sandpaper Grit Progression", "description": "Fractional factorial screening of starting grit, grit steps, sanding pressure, passes per grit, and dust extraction for surface finish and time efficiency" }, "factors": [ { "name": "start_grit", "levels": [ "60", "120" ], "type": "continuous", "unit": "grit" }, { "name": "grit_steps", "levels": [ "2", "5" ], "type": "continuous", "unit": "steps" }, { "name": "pressure_kg", "levels": [ "0.5", "3.0" ], "type": "continuous", "unit": "kg" }, { "name": "passes", "levels": [ "3", "10" ], "type": "continuous", "unit": "passes" }, { "name": "dust_extract", "levels": [ "0", "1" ], "type": "continuous", "unit": "bool" } ], "fixed_factors": { "wood": "walnut", "final_grit": "220" }, "responses": [ { "name": "finish_score", "optimize": "maximize", "unit": "pts" }, { "name": "time_min", "optimize": "minimize", "unit": "min" } ], "settings": { "operation": "fractional_factorial", "test_script": "use_cases/205_sandpaper_progression/sim.sh" } }

Experimental Matrix

The Fractional Factorial Design produces 8 runs. Each row is one experiment with specific factor settings.

Runstart_gritgrit_stepspressure_kgpassesdust_extract
16053.030
212020.530
312050.5100
412053.0101
56050.531
612023.031
76020.5101
86023.0100

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/205_sandpaper_progression/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/205_sandpaper_progression/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/205_sandpaper_progression/config.json
5

Get optimization recommendations

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

Generate the HTML report

Terminal
$ doe report --config use_cases/205_sandpaper_progression/config.json \ --output use_cases/205_sandpaper_progression/results/report.html

Features Exercised

FeatureValue
Design typefractional_factorial
Factor typescontinuous (all 5)
Arg styledouble-dash
Responses2 (finish_score ↑, time_min ↓)
Total runs8

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: finish_score

Top factors: dust_extract (43.5%), passes (22.4%), pressure_kg (15.3%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
start_grit10.24500.24500.1930.6785
grit_steps10.40500.40500.3200.5963
pressure_kg10.84500.84500.6670.4513
passes11.80501.80501.4240.2863
dust_extract16.84506.84505.4000.0677
start_grit*grit_steps11.80501.80501.4240.2863
start_grit*pressure_kg16.84506.84505.4000.0677
start_grit*passes10.40500.40500.3200.5963
start_grit*dust_extract10.84500.84500.6670.4513
grit_steps*pressure_kg13.12503.12502.4650.1772
grit_steps*passes10.24500.24500.1930.6785
grit_steps*dust_extract11.44501.44501.1400.3345
pressure_kg*passes11.44501.44501.1400.3345
pressure_kg*dust_extract10.24500.24500.1930.6785
passes*dust_extract13.12503.12502.4650.1772
Error(LenthPSE)56.33751.2675
Total714.71502.1021

Pareto Chart

Pareto chart for finish_score

Main Effects Plot

Main effects plot for finish_score

Normal Probability Plot of Effects

Normal probability plot for finish_score

Half-Normal Plot of Effects

Half-normal plot for finish_score

Model Diagnostics

Model diagnostics for finish_score

Response: time_min

Top factors: grit_steps (38.8%), dust_extract (36.7%), pressure_kg (16.3%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
start_grit10.50000.50000.1670.7000
grit_steps1180.5000180.500060.1670.0006
pressure_kg132.000032.000010.6670.0223
passes14.50004.50001.5000.2752
dust_extract1162.0000162.000054.0000.0007
start_grit*grit_steps14.50004.50001.5000.2752
start_grit*pressure_kg1162.0000162.000054.0000.0007
start_grit*passes1180.5000180.500060.1670.0006
start_grit*dust_extract132.000032.000010.6670.0223
grit_steps*pressure_kg12.00002.00000.6670.4513
grit_steps*passes10.50000.50000.1670.7000
grit_steps*dust_extract1128.0000128.000042.6670.0013
pressure_kg*passes1128.0000128.000042.6670.0013
pressure_kg*dust_extract10.50000.50000.1670.7000
passes*dust_extract12.00002.00000.6670.4513
Error(LenthPSE)515.00003.0000
Total7509.500072.7857

Pareto Chart

Pareto chart for time_min

Main Effects Plot

Main effects plot for time_min

Normal Probability Plot of Effects

Normal probability plot for time_min

Half-Normal Plot of Effects

Half-normal plot for time_min

Model Diagnostics

Model diagnostics for time_min

Response Surface Plots

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

finish score grit steps vs dust extract

RSM surface: finish score grit steps vs dust extract

finish score grit steps vs passes

RSM surface: finish score grit steps vs passes

finish score grit steps vs pressure kg

RSM surface: finish score grit steps vs pressure kg

finish score passes vs dust extract

RSM surface: finish score passes vs dust extract

finish score pressure kg vs dust extract

RSM surface: finish score pressure kg vs dust extract

finish score pressure kg vs passes

RSM surface: finish score pressure kg vs passes

finish score start grit vs dust extract

RSM surface: finish score start grit vs dust extract

finish score start grit vs grit steps

RSM surface: finish score start grit vs grit steps

finish score start grit vs passes

RSM surface: finish score start grit vs passes

finish score start grit vs pressure kg

RSM surface: finish score start grit vs pressure kg

time min grit steps vs dust extract

RSM surface: time min grit steps vs dust extract

time min grit steps vs passes

RSM surface: time min grit steps vs passes

time min grit steps vs pressure kg

RSM surface: time min grit steps vs pressure kg

time min passes vs dust extract

RSM surface: time min passes vs dust extract

time min pressure kg vs dust extract

RSM surface: time min pressure kg vs dust extract

time min pressure kg vs passes

RSM surface: time min pressure kg vs passes

time min start grit vs dust extract

RSM surface: time min start grit vs dust extract

time min start grit vs grit steps

RSM surface: time min start grit vs grit steps

time min start grit vs passes

RSM surface: time min start grit vs passes

time min start grit vs pressure kg

RSM surface: time min start grit vs pressure kg

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.7200

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
finish_score 1.5
0.7545
6.59 0.7545 6.59 pts
time_min 1.0
0.6711
8.86 0.6711 8.86 min

Recommended Settings

FactorValue
start_grit75.62 grit
grit_steps5 steps
pressure_kg2.822 kg
passes9.972 passes
dust_extract0.9599 bool

Source: from RSM model prediction

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
time_min8.862.00+6.86

Top 3 Runs by Desirability

RunDFactor Settings
#10.6490start_grit=120, grit_steps=5, pressure_kg=0.5, passes=10, dust_extract=0
#70.6476start_grit=120, grit_steps=5, pressure_kg=3.0, passes=10, dust_extract=1

Model Quality

ResponseType
time_min0.6104linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.7200 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- finish_score 1.5 0.7545 6.59 pts ↑ time_min 1.0 0.6711 8.86 min ↓ Recommended settings: start_grit = 75.62 grit grit_steps = 5 steps pressure_kg = 2.822 kg passes = 9.972 passes dust_extract = 0.9599 bool (from RSM model prediction) Trade-off summary: finish_score: 6.59 (best observed: 7.60, sacrifice: +1.01) time_min: 8.86 (best observed: 2.00, sacrifice: +6.86) Model quality: finish_score: R² = 0.4563 (linear) time_min: R² = 0.6104 (linear) Top 3 observed runs by overall desirability: 1. Run #5 (D=0.6805): start_grit=60, grit_steps=5, pressure_kg=3.0, passes=3, dust_extract=0 2. Run #1 (D=0.6490): start_grit=120, grit_steps=5, pressure_kg=0.5, passes=10, dust_extract=0 3. Run #7 (D=0.6476): start_grit=120, grit_steps=5, pressure_kg=3.0, passes=10, dust_extract=1

Full Analysis Output

doe analyze
=== Main Effects: finish_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- dust_extract -1.8500 0.5126 43.5% passes -0.9500 0.5126 22.4% pressure_kg -0.6500 0.5126 15.3% grit_steps -0.4500 0.5126 10.6% start_grit -0.3500 0.5126 8.2% === ANOVA Table: finish_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- start_grit 1 0.2450 0.2450 0.193 0.6785 grit_steps 1 0.4050 0.4050 0.320 0.5963 pressure_kg 1 0.8450 0.8450 0.667 0.4513 passes 1 1.8050 1.8050 1.424 0.2863 dust_extract 1 6.8450 6.8450 5.400 0.0677 start_grit*grit_steps 1 1.8050 1.8050 1.424 0.2863 start_grit*pressure_kg 1 6.8450 6.8450 5.400 0.0677 start_grit*passes 1 0.4050 0.4050 0.320 0.5963 start_grit*dust_extract 1 0.8450 0.8450 0.667 0.4513 grit_steps*pressure_kg 1 3.1250 3.1250 2.465 0.1772 grit_steps*passes 1 0.2450 0.2450 0.193 0.6785 grit_steps*dust_extract 1 1.4450 1.4450 1.140 0.3345 pressure_kg*passes 1 1.4450 1.4450 1.140 0.3345 pressure_kg*dust_extract 1 0.2450 0.2450 0.193 0.6785 passes*dust_extract 1 3.1250 3.1250 2.465 0.1772 Error (Lenth PSE) 5 6.3375 1.2675 Total 7 14.7150 2.1021 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: finish_score === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ start_grit pressure_kg 1.8500 21.0% grit_steps pressure_kg 1.2500 14.2% passes dust_extract -1.2500 14.2% start_grit grit_steps -0.9500 10.8% grit_steps dust_extract 0.8500 9.7% pressure_kg passes -0.8500 9.7% start_grit dust_extract 0.6500 7.4% start_grit passes -0.4500 5.1% grit_steps passes -0.3500 4.0% pressure_kg dust_extract 0.3500 4.0% === Summary Statistics: finish_score === start_grit: Level N Mean Std Min Max ------------------------------------------------------------ 120 4 5.5500 1.9070 3.0000 7.6000 60 4 5.2000 1.0893 3.7000 6.3000 grit_steps: Level N Mean Std Min Max ------------------------------------------------------------ 2 4 5.6000 1.9374 3.0000 7.6000 5 4 5.1500 1.0083 3.7000 6.0000 pressure_kg: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 4 5.7000 1.6062 3.7000 7.6000 3.0 4 5.0500 1.4295 3.0000 6.3000 passes: Level N Mean Std Min Max ------------------------------------------------------------ 10 4 5.8500 0.3697 5.5000 6.3000 3 4 4.9000 2.0412 3.0000 7.6000 dust_extract: Level N Mean Std Min Max ------------------------------------------------------------ 0 4 6.3000 0.9626 5.3000 7.6000 1 4 4.4500 1.3026 3.0000 5.6000 === Main Effects: time_min === Factor Effect Std Error % Contribution -------------------------------------------------------------- grit_steps -9.5000 3.0163 38.8% dust_extract -9.0000 3.0163 36.7% pressure_kg -4.0000 3.0163 16.3% passes -1.5000 3.0163 6.1% start_grit -0.5000 3.0163 2.0% === ANOVA Table: time_min === Source DF SS MS F p-value ----------------------------------------------------------------------------- start_grit 1 0.5000 0.5000 0.167 0.7000 grit_steps 1 180.5000 180.5000 60.167 0.0006 pressure_kg 1 32.0000 32.0000 10.667 0.0223 passes 1 4.5000 4.5000 1.500 0.2752 dust_extract 1 162.0000 162.0000 54.000 0.0007 start_grit*grit_steps 1 4.5000 4.5000 1.500 0.2752 start_grit*pressure_kg 1 162.0000 162.0000 54.000 0.0007 start_grit*passes 1 180.5000 180.5000 60.167 0.0006 start_grit*dust_extract 1 32.0000 32.0000 10.667 0.0223 grit_steps*pressure_kg 1 2.0000 2.0000 0.667 0.4513 grit_steps*passes 1 0.5000 0.5000 0.167 0.7000 grit_steps*dust_extract 1 128.0000 128.0000 42.667 0.0013 pressure_kg*passes 1 128.0000 128.0000 42.667 0.0013 pressure_kg*dust_extract 1 0.5000 0.5000 0.167 0.7000 passes*dust_extract 1 2.0000 2.0000 0.667 0.4513 Error (Lenth PSE) 5 15.0000 3.0000 Total 7 509.5000 72.7857 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: time_min === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ start_grit passes -9.5000 22.1% start_grit pressure_kg 9.0000 20.9% grit_steps dust_extract 8.0000 18.6% pressure_kg passes -8.0000 18.6% start_grit dust_extract 4.0000 9.3% start_grit grit_steps -1.5000 3.5% grit_steps pressure_kg -1.0000 2.3% passes dust_extract 1.0000 2.3% grit_steps passes -0.5000 1.2% pressure_kg dust_extract 0.5000 1.2% === Summary Statistics: time_min === start_grit: Level N Mean Std Min Max ------------------------------------------------------------ 120 4 10.0000 9.6954 3.0000 24.0000 60 4 9.5000 8.6987 2.0000 22.0000 grit_steps: Level N Mean Std Min Max ------------------------------------------------------------ 2 4 14.5000 9.9833 4.0000 24.0000 5 4 5.0000 3.1623 2.0000 9.0000 pressure_kg: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 4 11.7500 8.2614 6.0000 24.0000 3.0 4 7.7500 9.5350 2.0000 22.0000 passes: Level N Mean Std Min Max ------------------------------------------------------------ 10 4 10.5000 8.1035 3.0000 22.0000 3 4 9.0000 10.1325 2.0000 24.0000 dust_extract: Level N Mean Std Min Max ------------------------------------------------------------ 0 4 14.2500 10.5317 2.0000 24.0000 1 4 5.2500 2.2174 3.0000 8.0000

Optimization Recommendations

doe optimize
=== Optimization: finish_score === Direction: maximize Best observed run: #4 start_grit = 60 grit_steps = 2 pressure_kg = 3.0 passes = 10 dust_extract = 0 Value: 7.6 RSM Model (linear, R² = 0.5345, Adj R² = -0.6293): Coefficients: intercept +5.3750 start_grit -0.1750 grit_steps -0.1750 pressure_kg -0.2250 passes +0.8750 dust_extract -0.3250 Predicted optimum (from linear model, at observed points): start_grit = 60 grit_steps = 2 pressure_kg = 3.0 passes = 10 dust_extract = 0 Predicted value: 6.7000 Surface optimum (via L-BFGS-B, linear model): start_grit = 60 grit_steps = 2 pressure_kg = 0.5 passes = 10 dust_extract = 0 Predicted value: 7.1500 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. passes (effect: -1.8, contribution: 49.3%) 2. dust_extract (effect: -0.7, contribution: 18.3%) 3. pressure_kg (effect: -0.4, contribution: 12.7%) 4. start_grit (effect: 0.3, contribution: 9.9%) 5. grit_steps (effect: -0.3, contribution: 9.9%) === Optimization: time_min === Direction: minimize Best observed run: #7 start_grit = 60 grit_steps = 5 pressure_kg = 0.5 passes = 3 dust_extract = 1 Value: 2.0 RSM Model (linear, R² = 0.6811, Adj R² = -0.1163): Coefficients: intercept +9.7500 start_grit +1.0000 grit_steps -0.2500 pressure_kg +4.2500 passes +4.5000 dust_extract -2.0000 Predicted optimum (from linear model, at observed points): start_grit = 60 grit_steps = 2 pressure_kg = 3.0 passes = 10 dust_extract = 0 Predicted value: 19.7500 Surface optimum (via L-BFGS-B, linear model): start_grit = 60 grit_steps = 5 pressure_kg = 0.5 passes = 3 dust_extract = 1 Predicted value: -2.2500 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. passes (effect: -9.0, contribution: 37.5%) 2. pressure_kg (effect: 8.5, contribution: 35.4%) 3. dust_extract (effect: -4.0, contribution: 16.7%) 4. start_grit (effect: -2.0, contribution: 8.3%) 5. grit_steps (effect: -0.5, contribution: 2.1%)
← Previous: Steam Bending Parameters All Use Cases →