← All Use Cases
🧪
D-Optimal Design

Pharmaceutical Tablet Compression

D-optimal design to optimize tablet hardness, dissolution, and friability

Summary

This experiment investigates pharmaceutical tablet compression. D-optimal design to optimize tablet hardness, dissolution, and friability.

The design varies 4 factors: compression force (kN), ranging from 5 to 20, granule size (microns), ranging from 50 to 200, binder pct (%), ranging from 2 to 8, and lubricant pct (%), ranging from 0.5 to 2. The goal is to optimize 3 responses: hardness (N) (maximize), dissolution rate (%) (maximize), and friability (%) (minimize). Fixed conditions held constant across all runs include active ingredient = 500mg.

The D-Optimal Design produces 12 experimental runs.

Key Findings

For hardness, the most influential factors were lubricant pct (47.2%), granule size (30.9%), binder pct (16.3%). The best observed value was 188.7 (at compression force = 20, granule size = 200, binder pct = 8).

For dissolution rate, the most influential factors were binder pct (58.0%), granule size (17.7%), compression force (16.8%). The best observed value was 100.0 (at compression force = 5, granule size = 50, binder pct = 8).

For friability, the most influential factors were lubricant pct (48.0%), granule size (32.3%), binder pct (14.6%). The best observed value was 0.153 (at compression force = 20, granule size = 200, binder pct = 8).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
compression_force520kN
granule_size50200microns
binder_pct28%
lubricant_pct0.52%

Fixed: active_ingredient = 500mg

Responses

ResponseDirectionUnit
hardness↑ maximizeN
dissolution_rate↑ maximize%
friability↓ minimize%

Configuration

use_cases/303_pharmaceutical_tablet/config.json
{ "metadata": { "name": "Pharmaceutical Tablet Compression", "description": "D-optimal design to optimize tablet hardness, dissolution, and friability" }, "factors": [ { "name": "compression_force", "levels": [ "5", "20" ], "type": "continuous", "unit": "kN" }, { "name": "granule_size", "levels": [ "50", "200" ], "type": "continuous", "unit": "microns" }, { "name": "binder_pct", "levels": [ "2", "8" ], "type": "continuous", "unit": "%" }, { "name": "lubricant_pct", "levels": [ "0.5", "2" ], "type": "continuous", "unit": "%" } ], "fixed_factors": { "active_ingredient": "500mg" }, "responses": [ { "name": "hardness", "optimize": "maximize", "unit": "N" }, { "name": "dissolution_rate", "optimize": "maximize", "unit": "%" }, { "name": "friability", "optimize": "minimize", "unit": "%" } ], "settings": { "operation": "d_optimal", "test_script": "use_cases/303_pharmaceutical_tablet/sim.sh" } }

Experimental Matrix

The D-Optimal Design produces 12 runs. Each row is one experiment with specific factor settings.

Runcompression_forcegranule_sizebinder_pctlubricant_pct
12020080.5
2205022
3520022
455022
5205082
655020.5
755080.5
8520082
9520080.5
102020020.5
11205080.5
122020082

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/303_pharmaceutical_tablet/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/303_pharmaceutical_tablet/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/303_pharmaceutical_tablet/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/303_pharmaceutical_tablet/config.json
6

Multi-objective optimization

With 3 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.

Terminal
$ doe optimize --config use_cases/303_pharmaceutical_tablet/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/303_pharmaceutical_tablet/config.json \ --output use_cases/303_pharmaceutical_tablet/results/report.html

Features Exercised

FeatureValue
Design typed_optimal
Factor typescontinuous (all 4)
Arg styledouble-dash
Responses3 (hardness ↑, dissolution_rate ↑, friability ↓)
Total runs12

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: hardness

Top factors: lubricant_pct (47.2%), granule_size (30.9%), binder_pct (16.3%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
compression_force136.400836.40080.0030.9643
granule_size11146.60751146.60750.0990.8058
binder_pct1309.0859309.08590.0270.8968
lubricant_pct12673.06752673.06750.2310.7147
compression_force*granule_size19809.80089809.80080.8480.5261
compression_force*binder_pct168.817468.81740.0060.9510
compression_force*lubricant_pct191.300891.30080.0080.9436
granule_size*binder_pct11582.62411582.62410.1370.7744
granule_size*lubricant_pct121.067521.06750.0020.9728
binder_pct*lubricant_pct1586.6257586.62570.0510.8590
Error111562.744411562.7444
Total1127888.14252535.2857

Response: dissolution_rate

Top factors: binder_pct (58.0%), granule_size (17.7%), compression_force (16.8%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
compression_force19.72009.72000.0110.9348
granule_size110.830010.83000.0120.9312
binder_pct1112.5304112.53040.1220.7859
lubricant_pct11.92001.92000.0020.9710
compression_force*granule_size11121.33331121.33331.2180.4687
compression_force*binder_pct129.772129.77210.0320.8867
compression_force*lubricant_pct1429.6033429.60330.4670.6185
granule_size*binder_pct1165.6571165.65710.1800.7446
granule_size*lubricant_pct1125.4533125.45330.1360.7749
binder_pct*lubricant_pct1132.3546132.35460.1440.7693
Error1920.8824920.8824
Total113060.0567278.1870

Response: friability

Top factors: lubricant_pct (48.0%), granule_size (32.3%), binder_pct (14.6%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
compression_force10.00290.00290.0030.9634
granule_size10.11520.11520.1330.7777
binder_pct10.02290.02290.0260.8975
lubricant_pct10.25400.25400.2920.6845
compression_force*granule_size10.45470.45470.5230.6013
compression_force*binder_pct10.00000.00000.0001.0000
compression_force*lubricant_pct10.06720.06720.0770.8273
granule_size*binder_pct10.04520.04520.0520.8572
granule_size*lubricant_pct10.03290.03290.0380.8777
binder_pct*lubricant_pct10.03770.03770.0430.8693
Error10.86900.8690
Total111.90180.1729

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

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
hardness 1.5
0.4747
121.20 0.4747 121.20 N
dissolution_rate 2.0
0.8375
93.50 0.8375 93.50 %
friability 1.0
0.6230
0.75 0.6230 0.75 %

Recommended Settings

FactorValue
compression_force20 kN
granule_size50 microns
binder_pct8 %
lubricant_pct2 %

Source: from observed run #2

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
dissolution_rate93.50100.00+6.50
friability0.750.15+0.60

Top 3 Runs by Desirability

RunDFactor Settings
#70.6290compression_force=5, granule_size=200, binder_pct=8, lubricant_pct=0.5
#50.5912compression_force=20, granule_size=50, binder_pct=2, lubricant_pct=2

Model Quality

ResponseType
dissolution_rate0.3612linear
friability0.3196linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.6490 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- hardness 1.5 0.4747 121.20 N ↑ dissolution_rate 2.0 0.8375 93.50 % ↑ friability 1.0 0.6230 0.75 % ↓ Recommended settings: compression_force = 20 kN granule_size = 50 microns binder_pct = 8 % lubricant_pct = 2 % (from observed run #2) Trade-off summary: hardness: 121.20 (best observed: 188.70, sacrifice: +67.50) dissolution_rate: 93.50 (best observed: 100.00, sacrifice: +6.50) friability: 0.75 (best observed: 0.15, sacrifice: +0.60) Model quality: hardness: R² = 0.3653 (linear) dissolution_rate: R² = 0.3612 (linear) friability: R² = 0.3196 (linear) Top 3 observed runs by overall desirability: 1. Run #2 (D=0.6490): compression_force=20, granule_size=50, binder_pct=8, lubricant_pct=2 2. Run #7 (D=0.6290): compression_force=5, granule_size=200, binder_pct=8, lubricant_pct=0.5 3. Run #5 (D=0.5912): compression_force=20, granule_size=50, binder_pct=2, lubricant_pct=2

Full Analysis Output

doe analyze
=== Main Effects: hardness === Factor Effect Std Error % Contribution -------------------------------------------------------------- lubricant_pct 29.8500 14.5353 47.2% granule_size 19.5500 14.5353 30.9% binder_pct 10.2943 14.5353 16.3% compression_force 3.4833 14.5353 5.5% === ANOVA Table: hardness === Source DF SS MS F p-value ----------------------------------------------------------------------------- compression_force 1 36.4008 36.4008 0.003 0.9643 granule_size 1 1146.6075 1146.6075 0.099 0.8058 binder_pct 1 309.0859 309.0859 0.027 0.8968 lubricant_pct 1 2673.0675 2673.0675 0.231 0.7147 compression_force*granule_size 1 9809.8008 9809.8008 0.848 0.5261 compression_force*binder_pct 1 68.8174 68.8174 0.006 0.9510 compression_force*lubricant_pct 1 91.3008 91.3008 0.008 0.9436 granule_size*binder_pct 1 1582.6241 1582.6241 0.137 0.7744 granule_size*lubricant_pct 1 21.0675 21.0675 0.002 0.9728 binder_pct*lubricant_pct 1 586.6257 586.6257 0.051 0.8590 Error 1 11562.7444 11562.7444 Total 11 27888.1425 2535.2857 === Interaction Effects: hardness === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ compression_force granule_size 57.1833 58.7% granule_size binder_pct -16.8771 17.3% binder_pct lubricant_pct 13.8086 14.2% compression_force lubricant_pct -5.5167 5.7% granule_size lubricant_pct -2.6500 2.7% compression_force binder_pct -1.4486 1.5% === Summary Statistics: hardness === compression_force: Level N Mean Std Min Max ------------------------------------------------------------ 20 6 112.7833 36.6247 53.4000 162.9000 5 6 116.2667 65.0306 33.6000 188.7000 granule_size: Level N Mean Std Min Max ------------------------------------------------------------ 200 6 104.7500 49.7664 33.6000 162.9000 50 6 124.3000 53.5875 53.4000 188.7000 binder_pct: Level N Mean Std Min Max ------------------------------------------------------------ 2 5 108.5200 46.3525 60.7000 185.2000 8 7 118.8143 56.2507 33.6000 188.7000 lubricant_pct: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 6 99.6000 55.8639 33.6000 188.7000 2 6 129.4500 43.8434 60.7000 185.2000 === Main Effects: dissolution_rate === Factor Effect Std Error % Contribution -------------------------------------------------------------- binder_pct -6.2114 4.8148 58.0% granule_size 1.9000 4.8148 17.7% compression_force -1.8000 4.8148 16.8% lubricant_pct 0.8000 4.8148 7.5% === ANOVA Table: dissolution_rate === Source DF SS MS F p-value ----------------------------------------------------------------------------- compression_force 1 9.7200 9.7200 0.011 0.9348 granule_size 1 10.8300 10.8300 0.012 0.9312 binder_pct 1 112.5304 112.5304 0.122 0.7859 lubricant_pct 1 1.9200 1.9200 0.002 0.9710 compression_force*granule_size 1 1121.3333 1121.3333 1.218 0.4687 compression_force*binder_pct 1 29.7721 29.7721 0.032 0.8867 compression_force*lubricant_pct 1 429.6033 429.6033 0.467 0.6185 granule_size*binder_pct 1 165.6571 165.6571 0.180 0.7446 granule_size*lubricant_pct 1 125.4533 125.4533 0.136 0.7749 binder_pct*lubricant_pct 1 132.3546 132.3546 0.144 0.7693 Error 1 920.8824 920.8824 Total 11 3060.0567 278.1870 === Interaction Effects: dissolution_rate === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ compression_force granule_size -19.3333 36.3% compression_force lubricant_pct -11.9667 22.4% granule_size binder_pct 7.5829 14.2% granule_size lubricant_pct -6.4667 12.1% binder_pct lubricant_pct 6.4514 12.1% compression_force binder_pct 1.5143 2.8% === Summary Statistics: dissolution_rate === compression_force: Level N Mean Std Min Max ------------------------------------------------------------ 20 6 82.7167 14.0926 58.3000 96.7000 5 6 80.9167 20.2846 49.6000 100.0000 granule_size: Level N Mean Std Min Max ------------------------------------------------------------ 200 6 80.8667 14.4555 58.3000 100.0000 50 6 82.7667 20.0221 49.6000 100.0000 binder_pct: Level N Mean Std Min Max ------------------------------------------------------------ 2 5 85.4400 21.5400 49.6000 100.0000 8 7 79.2286 13.4885 58.3000 93.5000 lubricant_pct: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 6 81.4167 16.0059 58.3000 100.0000 2 6 82.2167 18.8531 49.6000 100.0000 === Main Effects: friability === Factor Effect Std Error % Contribution -------------------------------------------------------------- lubricant_pct -0.2910 0.1200 48.0% granule_size -0.1960 0.1200 32.3% binder_pct -0.0886 0.1200 14.6% compression_force 0.0310 0.1200 5.1% === ANOVA Table: friability === Source DF SS MS F p-value ----------------------------------------------------------------------------- compression_force 1 0.0029 0.0029 0.003 0.9634 granule_size 1 0.1152 0.1152 0.133 0.7777 binder_pct 1 0.0229 0.0229 0.026 0.8975 lubricant_pct 1 0.2540 0.2540 0.292 0.6845 compression_force*granule_size 1 0.4547 0.4547 0.523 0.6013 compression_force*binder_pct 1 0.0000 0.0000 0.000 1.0000 compression_force*lubricant_pct 1 0.0672 0.0672 0.077 0.8273 granule_size*binder_pct 1 0.0452 0.0452 0.052 0.8572 granule_size*lubricant_pct 1 0.0329 0.0329 0.038 0.8777 binder_pct*lubricant_pct 1 0.0377 0.0377 0.043 0.8693 Error 1 0.8690 0.8690 Total 11 1.9018 0.1729 === Interaction Effects: friability === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ compression_force granule_size -0.3893 49.5% compression_force lubricant_pct 0.1497 19.0% granule_size lubricant_pct 0.1047 13.3% binder_pct lubricant_pct -0.0897 11.4% granule_size binder_pct 0.0471 6.0% compression_force binder_pct 0.0063 0.8% === Summary Statistics: friability === compression_force: Level N Mean Std Min Max ------------------------------------------------------------ 20 6 0.8640 0.3296 0.4260 1.3770 5 6 0.8950 0.5207 0.1530 1.6500 granule_size: Level N Mean Std Min Max ------------------------------------------------------------ 200 6 0.9775 0.4216 0.4260 1.6500 50 6 0.7815 0.4238 0.1530 1.3770 binder_pct: Level N Mean Std Min Max ------------------------------------------------------------ 2 5 0.9312 0.2615 0.5600 1.1510 8 7 0.8426 0.5173 0.1530 1.6500 lubricant_pct: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 6 1.0250 0.5191 0.1530 1.6500 2 6 0.7340 0.2452 0.4260 1.1510

Optimization Recommendations

doe optimize
=== Optimization: hardness === Direction: maximize Best observed run: #11 compression_force = 20 granule_size = 200 binder_pct = 8 lubricant_pct = 2 Value: 188.7 RSM Model (linear, R² = 0.1638, Adj R² = -0.3140): Coefficients: intercept +111.9422 compression_force +6.9255 granule_size +5.8755 binder_pct +15.4969 lubricant_pct +0.2745 Predicted optimum (from linear model, at observed points): compression_force = 20 granule_size = 200 binder_pct = 8 lubricant_pct = 2 Predicted value: 140.5146 Surface optimum (via L-BFGS-B, linear model): compression_force = 20 granule_size = 200 binder_pct = 8 lubricant_pct = 2 Predicted value: 140.5146 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. binder_pct (effect: 35.3, contribution: 46.5%) 2. compression_force (effect: -19.0, contribution: 25.1%) 3. granule_size (effect: -16.9, contribution: 22.3%) 4. lubricant_pct (effect: -4.6, contribution: 6.1%) === Optimization: dissolution_rate === Direction: maximize Best observed run: #4 compression_force = 5 granule_size = 50 binder_pct = 8 lubricant_pct = 0.5 Value: 100.0 RSM Model (linear, R² = 0.1971, Adj R² = -0.2616): Coefficients: intercept +82.7344 compression_force -2.5990 granule_size -0.7656 binder_pct -5.5063 lubricant_pct +1.9323 Predicted optimum (from linear model, at observed points): compression_force = 5 granule_size = 50 binder_pct = 2 lubricant_pct = 2 Predicted value: 93.5375 Surface optimum (via L-BFGS-B, linear model): compression_force = 5 granule_size = 50 binder_pct = 2 lubricant_pct = 2 Predicted value: 93.5375 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. binder_pct (effect: -12.8, contribution: 44.3%) 2. compression_force (effect: 7.0, contribution: 24.3%) 3. lubricant_pct (effect: 5.7, contribution: 19.7%) 4. granule_size (effect: 3.4, contribution: 11.6%) === Optimization: friability === Direction: minimize Best observed run: #11 compression_force = 20 granule_size = 200 binder_pct = 8 lubricant_pct = 2 Value: 0.153 RSM Model (linear, R² = 0.2289, Adj R² = -0.2117): Coefficients: intercept +0.9051 compression_force -0.0900 granule_size -0.0142 binder_pct -0.1538 lubricant_pct -0.0421 Predicted optimum (from linear model, at observed points): compression_force = 5 granule_size = 50 binder_pct = 2 lubricant_pct = 0.5 Predicted value: 1.2053 Surface optimum (via L-BFGS-B, linear model): compression_force = 20 granule_size = 200 binder_pct = 8 lubricant_pct = 2 Predicted value: 0.6049 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. binder_pct (effect: -0.3, contribution: 48.9%) 2. compression_force (effect: 0.2, contribution: 34.4%) 3. granule_size (effect: 0.1, contribution: 11.8%) 4. lubricant_pct (effect: -0.0, contribution: 4.9%)
← Previous: Ceramic Glaze Firing Optimization Next: Concrete Admixture Blend Optimization →