← All Use Cases
🍳
Fractional Factorial Design

Fermented Hot Sauce Formulation

Fractional factorial screening of pepper type, salt concentration, garlic ratio, fermentation days, and vinegar addition for heat balance and umami depth

Summary

This experiment investigates fermented hot sauce formulation. Fractional factorial screening of pepper type, salt concentration, garlic ratio, fermentation days, and vinegar addition for heat balance and umami depth.

The design varies 5 factors: pepper shu (SHU), ranging from 5000 to 100000, salt pct (%), ranging from 2 to 6, garlic pct (%), ranging from 2 to 10, ferm days (days), ranging from 7 to 90, and vinegar pct (%), ranging from 5 to 25. The goal is to optimize 2 responses: heat balance (pts) (maximize) and umami depth (pts) (maximize). Fixed conditions held constant across all runs include ferm temp = 22, jar size = 1L.

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 heat balance, the most influential factors were vinegar pct (50.8%), garlic pct (35.1%), pepper shu (13.1%). The best observed value was 6.5 (at pepper shu = 5000, salt pct = 6, garlic pct = 10).

For umami depth, the most influential factors were vinegar pct (46.2%), ferm days (23.8%), garlic pct (11.9%). The best observed value was 8.8 (at pepper shu = 5000, salt pct = 2, garlic pct = 2).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
pepper_shu5000100000SHU
salt_pct26%
garlic_pct210%
ferm_days790days
vinegar_pct525%

Fixed: ferm_temp = 22, jar_size = 1L

Responses

ResponseDirectionUnit
heat_balance↑ maximizepts
umami_depth↑ maximizepts

Configuration

use_cases/96_fermented_hot_sauce/config.json
{ "metadata": { "name": "Fermented Hot Sauce Formulation", "description": "Fractional factorial screening of pepper type, salt concentration, garlic ratio, fermentation days, and vinegar addition for heat balance and umami depth" }, "factors": [ { "name": "pepper_shu", "levels": [ "5000", "100000" ], "type": "continuous", "unit": "SHU" }, { "name": "salt_pct", "levels": [ "2", "6" ], "type": "continuous", "unit": "%" }, { "name": "garlic_pct", "levels": [ "2", "10" ], "type": "continuous", "unit": "%" }, { "name": "ferm_days", "levels": [ "7", "90" ], "type": "continuous", "unit": "days" }, { "name": "vinegar_pct", "levels": [ "5", "25" ], "type": "continuous", "unit": "%" } ], "fixed_factors": { "ferm_temp": "22", "jar_size": "1L" }, "responses": [ { "name": "heat_balance", "optimize": "maximize", "unit": "pts" }, { "name": "umami_depth", "optimize": "maximize", "unit": "pts" } ], "settings": { "operation": "fractional_factorial", "test_script": "use_cases/96_fermented_hot_sauce/sim.sh" } }

Experimental Matrix

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

Runpepper_shusalt_pctgarlic_pctferm_daysvinegar_pct
1500061075
21000002275
310000062905
41000006109025
5500062725
6100000210725
75000229025
85000210905

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/96_fermented_hot_sauce/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/96_fermented_hot_sauce/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/96_fermented_hot_sauce/config.json
5

Get optimization recommendations

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

Generate the HTML report

Terminal
$ doe report --config use_cases/96_fermented_hot_sauce/config.json \ --output use_cases/96_fermented_hot_sauce/results/report.html

Features Exercised

FeatureValue
Design typefractional_factorial
Factor typescontinuous (all 5)
Arg styledouble-dash
Responses2 (heat_balance ↑, umami_depth ↑)
Total runs8

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: heat_balance

Top factors: vinegar_pct (50.8%), garlic_pct (35.1%), pepper_shu (13.1%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
pepper_shu10.78120.781232.0510.0024
salt_pct10.00130.00130.0510.8298
garlic_pct15.61135.6113230.2050.0000
ferm_days10.00130.00130.0510.8298
vinegar_pct111.761311.7613482.5130.0000
pepper_shu*salt_pct10.00120.00120.0510.8298
pepper_shu*garlic_pct111.761211.7612482.5130.0000
pepper_shu*ferm_days10.00120.00120.0510.8298
pepper_shu*vinegar_pct15.61125.6112230.2050.0000
salt_pct*garlic_pct10.03120.03121.2820.3089
salt_pct*ferm_days10.78120.781232.0510.0024
salt_pct*vinegar_pct10.15120.15126.2050.0551
garlic_pct*ferm_days10.15120.15126.2050.0551
garlic_pct*vinegar_pct10.78120.781232.0510.0024
ferm_days*vinegar_pct10.03120.03121.2820.3089
Error(LenthPSE)50.12190.0244
Total718.33872.6198

Pareto Chart

Pareto chart for heat_balance

Main Effects Plot

Main effects plot for heat_balance

Normal Probability Plot of Effects

Normal probability plot for heat_balance

Half-Normal Plot of Effects

Half-normal plot for heat_balance

Model Diagnostics

Model diagnostics for heat_balance

Response: umami_depth

Top factors: vinegar_pct (46.2%), ferm_days (23.8%), garlic_pct (11.9%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
pepper_shu11.12501.12500.6670.4513
salt_pct10.60500.60500.3590.5754
garlic_pct11.44501.44500.8560.3972
ferm_days15.78005.78003.4250.1234
vinegar_pct121.780021.780012.9070.0157
pepper_shu*salt_pct15.78005.78003.4250.1234
pepper_shu*garlic_pct121.780021.780012.9070.0157
pepper_shu*ferm_days10.60500.60500.3590.5754
pepper_shu*vinegar_pct11.44501.44500.8560.3972
salt_pct*garlic_pct12.00002.00001.1850.3260
salt_pct*ferm_days11.12501.12500.6670.4513
salt_pct*vinegar_pct10.60500.60500.3590.5754
garlic_pct*ferm_days10.60500.60500.3590.5754
garlic_pct*vinegar_pct11.12501.12500.6670.4513
ferm_days*vinegar_pct12.00002.00001.1850.3260
Error(LenthPSE)58.43751.6875
Total733.34004.7629

Pareto Chart

Pareto chart for umami_depth

Main Effects Plot

Main effects plot for umami_depth

Normal Probability Plot of Effects

Normal probability plot for umami_depth

Half-Normal Plot of Effects

Half-normal plot for umami_depth

Model Diagnostics

Model diagnostics for umami_depth

Response Surface Plots

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

heat balance ferm days vs vinegar pct

RSM surface: heat balance ferm days vs vinegar pct

heat balance garlic pct vs ferm days

RSM surface: heat balance garlic pct vs ferm days

heat balance garlic pct vs vinegar pct

RSM surface: heat balance garlic pct vs vinegar pct

heat balance pepper shu vs ferm days

RSM surface: heat balance pepper shu vs ferm days

heat balance pepper shu vs garlic pct

RSM surface: heat balance pepper shu vs garlic pct

heat balance pepper shu vs salt pct

RSM surface: heat balance pepper shu vs salt pct

heat balance pepper shu vs vinegar pct

RSM surface: heat balance pepper shu vs vinegar pct

heat balance salt pct vs ferm days

RSM surface: heat balance salt pct vs ferm days

heat balance salt pct vs garlic pct

RSM surface: heat balance salt pct vs garlic pct

heat balance salt pct vs vinegar pct

RSM surface: heat balance salt pct vs vinegar pct

umami depth ferm days vs vinegar pct

RSM surface: umami depth ferm days vs vinegar pct

umami depth garlic pct vs ferm days

RSM surface: umami depth garlic pct vs ferm days

umami depth garlic pct vs vinegar pct

RSM surface: umami depth garlic pct vs vinegar pct

umami depth pepper shu vs ferm days

RSM surface: umami depth pepper shu vs ferm days

umami depth pepper shu vs garlic pct

RSM surface: umami depth pepper shu vs garlic pct

umami depth pepper shu vs salt pct

RSM surface: umami depth pepper shu vs salt pct

umami depth pepper shu vs vinegar pct

RSM surface: umami depth pepper shu vs vinegar pct

umami depth salt pct vs ferm days

RSM surface: umami depth salt pct vs ferm days

umami depth salt pct vs garlic pct

RSM surface: umami depth salt pct vs garlic pct

umami depth salt pct vs vinegar pct

RSM surface: umami depth salt pct vs vinegar 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.8245

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
heat_balance 1.5
0.7121
5.30 0.7121 5.30 pts
umami_depth 1.5
0.9545
8.80 0.9545 8.80 pts

Recommended Settings

FactorValue
pepper_shu5000 SHU
salt_pct2 %
garlic_pct10 %
ferm_days90 days
vinegar_pct5 %

Source: from observed run #4

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
umami_depth8.808.80+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#80.7971pepper_shu=100000, salt_pct=6, garlic_pct=10, ferm_days=90, vinegar_pct=25
#30.6286pepper_shu=100000, salt_pct=2, garlic_pct=2, ferm_days=7, vinegar_pct=5

Model Quality

ResponseType
umami_depth0.5187linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.8245 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- heat_balance 1.5 0.7121 5.30 pts ↑ umami_depth 1.5 0.9545 8.80 pts ↑ Recommended settings: pepper_shu = 5000 SHU salt_pct = 2 % garlic_pct = 10 % ferm_days = 90 days vinegar_pct = 5 % (from observed run #4) Trade-off summary: heat_balance: 5.30 (best observed: 6.50, sacrifice: +1.20) umami_depth: 8.80 (best observed: 8.80, sacrifice: +0.00) Model quality: heat_balance: R² = 0.5593 (linear) umami_depth: R² = 0.5187 (linear) Top 3 observed runs by overall desirability: 1. Run #4 (D=0.8245): pepper_shu=5000, salt_pct=2, garlic_pct=10, ferm_days=90, vinegar_pct=5 2. Run #8 (D=0.7971): pepper_shu=100000, salt_pct=6, garlic_pct=10, ferm_days=90, vinegar_pct=25 3. Run #3 (D=0.6286): pepper_shu=100000, salt_pct=2, garlic_pct=2, ferm_days=7, vinegar_pct=5

Full Analysis Output

doe analyze
=== Main Effects: heat_balance === Factor Effect Std Error % Contribution -------------------------------------------------------------- vinegar_pct -2.4250 0.5723 50.8% garlic_pct 1.6750 0.5723 35.1% pepper_shu -0.6250 0.5723 13.1% salt_pct -0.0250 0.5723 0.5% ferm_days -0.0250 0.5723 0.5% === ANOVA Table: heat_balance === Source DF SS MS F p-value ----------------------------------------------------------------------------- pepper_shu 1 0.7812 0.7812 32.051 0.0024 salt_pct 1 0.0013 0.0013 0.051 0.8298 garlic_pct 1 5.6113 5.6113 230.205 0.0000 ferm_days 1 0.0013 0.0013 0.051 0.8298 vinegar_pct 1 11.7613 11.7613 482.513 0.0000 pepper_shu*salt_pct 1 0.0012 0.0012 0.051 0.8298 pepper_shu*garlic_pct 1 11.7612 11.7612 482.513 0.0000 pepper_shu*ferm_days 1 0.0012 0.0012 0.051 0.8298 pepper_shu*vinegar_pct 1 5.6112 5.6112 230.205 0.0000 salt_pct*garlic_pct 1 0.0312 0.0312 1.282 0.3089 salt_pct*ferm_days 1 0.7812 0.7812 32.051 0.0024 salt_pct*vinegar_pct 1 0.1512 0.1512 6.205 0.0551 garlic_pct*ferm_days 1 0.1512 0.1512 6.205 0.0551 garlic_pct*vinegar_pct 1 0.7812 0.7812 32.051 0.0024 ferm_days*vinegar_pct 1 0.0312 0.0312 1.282 0.3089 Error (Lenth PSE) 5 0.1219 0.0244 Total 7 18.3387 2.6198 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: heat_balance === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ pepper_shu garlic_pct 2.4250 39.1% pepper_shu vinegar_pct -1.6750 27.0% salt_pct ferm_days 0.6250 10.1% garlic_pct vinegar_pct 0.6250 10.1% salt_pct vinegar_pct -0.2750 4.4% garlic_pct ferm_days -0.2750 4.4% salt_pct garlic_pct 0.1250 2.0% ferm_days vinegar_pct 0.1250 2.0% pepper_shu salt_pct 0.0250 0.4% pepper_shu ferm_days 0.0250 0.4% === Summary Statistics: heat_balance === pepper_shu: Level N Mean Std Min Max ------------------------------------------------------------ 100000 4 4.8750 0.4425 4.4000 5.3000 5000 4 4.2500 2.3784 2.0000 6.5000 salt_pct: Level N Mean Std Min Max ------------------------------------------------------------ 2 4 4.5750 1.5756 2.4000 6.1000 6 4 4.5500 1.9053 2.0000 6.5000 garlic_pct: Level N Mean Std Min Max ------------------------------------------------------------ 10 4 3.7250 1.7689 2.0000 5.3000 2 4 5.4000 1.0551 4.4000 6.5000 ferm_days: Level N Mean Std Min Max ------------------------------------------------------------ 7 4 4.5750 1.8910 2.0000 6.5000 90 4 4.5500 1.5927 2.4000 6.1000 vinegar_pct: Level N Mean Std Min Max ------------------------------------------------------------ 25 4 5.7750 0.6292 5.2000 6.5000 5 4 3.3500 1.3404 2.0000 4.6000 === Main Effects: umami_depth === Factor Effect Std Error % Contribution -------------------------------------------------------------- vinegar_pct -3.3000 0.7716 46.2% ferm_days 1.7000 0.7716 23.8% garlic_pct -0.8500 0.7716 11.9% pepper_shu -0.7500 0.7716 10.5% salt_pct 0.5500 0.7716 7.7% === ANOVA Table: umami_depth === Source DF SS MS F p-value ----------------------------------------------------------------------------- pepper_shu 1 1.1250 1.1250 0.667 0.4513 salt_pct 1 0.6050 0.6050 0.359 0.5754 garlic_pct 1 1.4450 1.4450 0.856 0.3972 ferm_days 1 5.7800 5.7800 3.425 0.1234 vinegar_pct 1 21.7800 21.7800 12.907 0.0157 pepper_shu*salt_pct 1 5.7800 5.7800 3.425 0.1234 pepper_shu*garlic_pct 1 21.7800 21.7800 12.907 0.0157 pepper_shu*ferm_days 1 0.6050 0.6050 0.359 0.5754 pepper_shu*vinegar_pct 1 1.4450 1.4450 0.856 0.3972 salt_pct*garlic_pct 1 2.0000 2.0000 1.185 0.3260 salt_pct*ferm_days 1 1.1250 1.1250 0.667 0.4513 salt_pct*vinegar_pct 1 0.6050 0.6050 0.359 0.5754 garlic_pct*ferm_days 1 0.6050 0.6050 0.359 0.5754 garlic_pct*vinegar_pct 1 1.1250 1.1250 0.667 0.4513 ferm_days*vinegar_pct 1 2.0000 2.0000 1.185 0.3260 Error (Lenth PSE) 5 8.4375 1.6875 Total 7 33.3400 4.7629 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: umami_depth === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ pepper_shu garlic_pct 3.3000 30.0% pepper_shu salt_pct -1.7000 15.5% salt_pct garlic_pct -1.0000 9.1% ferm_days vinegar_pct -1.0000 9.1% pepper_shu vinegar_pct 0.8500 7.7% salt_pct ferm_days 0.7500 6.8% garlic_pct vinegar_pct 0.7500 6.8% pepper_shu ferm_days -0.5500 5.0% salt_pct vinegar_pct 0.5500 5.0% garlic_pct ferm_days 0.5500 5.0% === Summary Statistics: umami_depth === pepper_shu: Level N Mean Std Min Max ------------------------------------------------------------ 100000 4 5.3750 2.7379 2.4000 8.8000 5000 4 4.6250 1.8007 3.2000 7.2000 salt_pct: Level N Mean Std Min Max ------------------------------------------------------------ 2 4 4.7250 2.2911 2.4000 7.2000 6 4 5.2750 2.3796 3.6000 8.8000 garlic_pct: Level N Mean Std Min Max ------------------------------------------------------------ 10 4 5.4250 2.5902 3.2000 8.8000 2 4 4.5750 1.9805 2.4000 7.2000 ferm_days: Level N Mean Std Min Max ------------------------------------------------------------ 7 4 4.1500 1.5588 2.4000 6.1000 90 4 5.8500 2.5994 3.2000 8.8000 vinegar_pct: Level N Mean Std Min Max ------------------------------------------------------------ 25 4 6.6500 1.8120 4.5000 8.8000 5 4 3.3500 0.7550 2.4000 4.2000

Optimization Recommendations

doe optimize
=== Optimization: heat_balance === Direction: maximize Best observed run: #1 pepper_shu = 5000 salt_pct = 6 garlic_pct = 10 ferm_days = 7 vinegar_pct = 5 Value: 6.5 RSM Model (linear, R² = 0.5445, Adj R² = -0.5941): Coefficients: intercept +4.5625 pepper_shu -0.1875 salt_pct -0.3125 garlic_pct +0.0625 ferm_days +0.1875 vinegar_pct -1.0375 Predicted optimum (from linear model, at observed points): pepper_shu = 5000 salt_pct = 2 garlic_pct = 10 ferm_days = 90 vinegar_pct = 5 Predicted value: 6.3500 Surface optimum (via L-BFGS-B, linear model): pepper_shu = 5000 salt_pct = 2 garlic_pct = 10 ferm_days = 90 vinegar_pct = 5 Predicted value: 6.3500 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. vinegar_pct (effect: 2.1, contribution: 58.0%) 2. salt_pct (effect: -0.6, contribution: 17.5%) 3. pepper_shu (effect: 0.4, contribution: 10.5%) 4. ferm_days (effect: 0.4, contribution: 10.5%) 5. garlic_pct (effect: -0.1, contribution: 3.5%) === Optimization: umami_depth === Direction: maximize Best observed run: #4 pepper_shu = 5000 salt_pct = 2 garlic_pct = 2 ferm_days = 90 vinegar_pct = 25 Value: 8.8 RSM Model (linear, R² = 0.6506, Adj R² = -0.2230): Coefficients: intercept +5.0000 pepper_shu -0.7500 salt_pct -0.3750 garlic_pct -0.5000 ferm_days +1.3250 vinegar_pct -0.0500 Predicted optimum (from linear model, at observed points): pepper_shu = 5000 salt_pct = 2 garlic_pct = 2 ferm_days = 90 vinegar_pct = 25 Predicted value: 7.9000 Surface optimum (via L-BFGS-B, linear model): pepper_shu = 5000 salt_pct = 2 garlic_pct = 2 ferm_days = 90 vinegar_pct = 5 Predicted value: 8.0000 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. ferm_days (effect: 2.7, contribution: 44.2%) 2. pepper_shu (effect: 1.5, contribution: 25.0%) 3. garlic_pct (effect: 1.0, contribution: 16.7%) 4. salt_pct (effect: -0.8, contribution: 12.5%) 5. vinegar_pct (effect: 0.1, contribution: 1.7%)
← Previous: Cookie Texture Optimization Next: Tomato Greenhouse Yield →