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
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
compression_force | 5 | 20 | kN |
granule_size | 50 | 200 | microns |
binder_pct | 2 | 8 | % |
lubricant_pct | 0.5 | 2 | % |
Fixed: active_ingredient = 500mg
Responses
| Response | Direction | Unit |
hardness | ↑ maximize | N |
dissolution_rate | ↑ maximize | % |
friability | ↓ minimize | % |
Configuration
{
"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.
| Run | compression_force | granule_size | binder_pct | lubricant_pct |
| 1 | 20 | 200 | 8 | 0.5 |
| 2 | 20 | 50 | 2 | 2 |
| 3 | 5 | 200 | 2 | 2 |
| 4 | 5 | 50 | 2 | 2 |
| 5 | 20 | 50 | 8 | 2 |
| 6 | 5 | 50 | 2 | 0.5 |
| 7 | 5 | 50 | 8 | 0.5 |
| 8 | 5 | 200 | 8 | 2 |
| 9 | 5 | 200 | 8 | 0.5 |
| 10 | 20 | 200 | 2 | 0.5 |
| 11 | 20 | 50 | 8 | 0.5 |
| 12 | 20 | 200 | 8 | 2 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/303_pharmaceutical_tablet/config.json
2
Generate the runner script
$ 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
$ bash use_cases/303_pharmaceutical_tablet/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/303_pharmaceutical_tablet/config.json
5
Get optimization recommendations
$ 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.
$ doe optimize --config use_cases/303_pharmaceutical_tablet/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/303_pharmaceutical_tablet/config.json \
--output use_cases/303_pharmaceutical_tablet/results/report.html
Features Exercised
| Feature | Value |
| Design type | d_optimal |
| Factor types | continuous (all 4) |
| Arg style | double-dash |
| Responses | 3 (hardness ↑, dissolution_rate ↑, friability ↓) |
| Total runs | 12 |
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
| Source | DF | SS | MS | F | p-value |
| 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 | | |
Response: dissolution_rate
Top factors: binder_pct (58.0%), granule_size (17.7%), compression_force (16.8%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| 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 | | |
Response: friability
Top factors: lubricant_pct (48.0%), granule_size (32.3%), binder_pct (14.6%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| 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 | | |
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
| Response | Weight | Desirability | Predicted | Dir |
hardness |
1.5 |
|
121.20 0.4747 121.20 N |
↑ |
dissolution_rate |
2.0 |
|
93.50 0.8375 93.50 % |
↑ |
friability |
1.0 |
|
0.75 0.6230 0.75 % |
↓ |
Recommended Settings
| Factor | Value |
compression_force | 20 kN |
granule_size | 50 microns |
binder_pct | 8 % |
lubricant_pct | 2 % |
Source: from observed run #2
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
dissolution_rate | 93.50 | 100.00 | +6.50 |
friability | 0.75 | 0.15 | +0.60 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #7 | 0.6290 | compression_force=5, granule_size=200, binder_pct=8, lubricant_pct=0.5 |
| #5 | 0.5912 | compression_force=20, granule_size=50, binder_pct=2, lubricant_pct=2 |
Model Quality
| Response | R² | Type |
dissolution_rate | 0.3612 | linear |
friability | 0.3196 | linear |
Full Multi-Objective Output
============================================================
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
=== 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
=== 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%)