Summary
This experiment investigates cat litter box management. Central composite design to minimize odor and maximize cat usage by tuning litter depth, cleaning frequency, and box size.
The design varies 3 factors: litter depth cm (cm), ranging from 3 to 10, clean per day (per_day), ranging from 1 to 3, and box area cm2 (cm2), ranging from 1500 to 4000. The goal is to optimize 2 responses: odor control (pts) (maximize) and usage pct (%) (maximize). Fixed conditions held constant across all runs include litter type = clumping_clay, cats = 2.
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 odor control, the most influential factors were clean per day (42.6%), litter depth cm (29.6%), box area cm2 (27.8%). The best observed value was 7.7 (at litter depth cm = 6.5, clean per day = 2, box area cm2 = 2750).
For usage pct, the most influential factors were clean per day (39.2%), box area cm2 (32.9%), litter depth cm (28.0%). The best observed value was 93.0 (at litter depth cm = 6.5, clean per day = 2, box area cm2 = 2750).
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 |
litter_depth_cm | 3 | 10 | cm |
clean_per_day | 1 | 3 | per_day |
box_area_cm2 | 1500 | 4000 | cm2 |
Fixed: litter_type = clumping_clay, cats = 2
Responses
| Response | Direction | Unit |
odor_control | ↑ maximize | pts |
usage_pct | ↑ maximize | % |
Configuration
{
"metadata": {
"name": "Cat Litter Box Management",
"description": "Central composite design to minimize odor and maximize cat usage by tuning litter depth, cleaning frequency, and box size"
},
"factors": [
{
"name": "litter_depth_cm",
"levels": [
"3",
"10"
],
"type": "continuous",
"unit": "cm"
},
{
"name": "clean_per_day",
"levels": [
"1",
"3"
],
"type": "continuous",
"unit": "per_day"
},
{
"name": "box_area_cm2",
"levels": [
"1500",
"4000"
],
"type": "continuous",
"unit": "cm2"
}
],
"fixed_factors": {
"litter_type": "clumping_clay",
"cats": "2"
},
"responses": [
{
"name": "odor_control",
"optimize": "maximize",
"unit": "pts"
},
{
"name": "usage_pct",
"optimize": "maximize",
"unit": "%"
}
],
"settings": {
"operation": "central_composite",
"test_script": "use_cases/168_cat_litter_box/sim.sh"
}
}
Experimental Matrix
The Central Composite Design produces 22 runs. Each row is one experiment with specific factor settings.
| Run | litter_depth_cm | clean_per_day | box_area_cm2 |
| 1 | 6.5 | 2 | 2750 |
| 2 | 10 | 1 | 4000 |
| 3 | 3 | 3 | 1500 |
| 4 | 6.5 | 3.82574 | 2750 |
| 5 | 6.5 | 2 | 2750 |
| 6 | 0.109903 | 2 | 2750 |
| 7 | 6.5 | 2 | 467.823 |
| 8 | 6.5 | 2 | 2750 |
| 9 | 10 | 3 | 1500 |
| 10 | 12.8901 | 2 | 2750 |
| 11 | 6.5 | 2 | 2750 |
| 12 | 6.5 | 0.174258 | 2750 |
| 13 | 6.5 | 2 | 2750 |
| 14 | 3 | 1 | 4000 |
| 15 | 6.5 | 2 | 2750 |
| 16 | 10 | 1 | 1500 |
| 17 | 6.5 | 2 | 5032.18 |
| 18 | 10 | 3 | 4000 |
| 19 | 6.5 | 2 | 2750 |
| 20 | 3 | 1 | 1500 |
| 21 | 3 | 3 | 4000 |
| 22 | 6.5 | 2 | 2750 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/168_cat_litter_box/config.json
2
Generate the runner script
$ doe generate --config use_cases/168_cat_litter_box/config.json \
--output use_cases/168_cat_litter_box/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/168_cat_litter_box/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/168_cat_litter_box/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/168_cat_litter_box/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/168_cat_litter_box/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/168_cat_litter_box/config.json \
--output use_cases/168_cat_litter_box/results/report.html
Features Exercised
| Feature | Value |
| Design type | central_composite |
| Factor types | continuous (all 3) |
| Arg style | double-dash |
| Responses | 2 (odor_control ↑, usage_pct ↑) |
| Total runs | 22 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: odor_control
Top factors: clean_per_day (42.6%), litter_depth_cm (29.6%), box_area_cm2 (27.8%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| litter_depth_cm | 4 | 3.7929 | 0.9482 | 0.233 | 0.9129 |
| clean_per_day | 4 | 8.9854 | 2.2463 | 0.552 | 0.7030 |
| box_area_cm2 | 4 | 5.5704 | 1.3926 | 0.342 | 0.8430 |
| Lack | of | Fit | 2 | 5.0059 | 2.5030 |
| Pure | Error | 7 | 28.4950 | | |
| Error | 9 | 33.5009 | 4.0707 | | |
| Total | 21 | 51.8495 | 2.4690 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: usage_pct
Top factors: clean_per_day (39.2%), box_area_cm2 (32.9%), litter_depth_cm (28.0%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| litter_depth_cm | 4 | 72.3409 | 18.0852 | 0.330 | 0.8512 |
| clean_per_day | 4 | 170.3409 | 42.5852 | 0.777 | 0.5674 |
| box_area_cm2 | 4 | 224.1742 | 56.0436 | 1.022 | 0.4461 |
| Lack | of | Fit | 2 | 75.8598 | 37.9299 |
| Pure | Error | 7 | 383.8750 | | |
| Error | 9 | 459.7348 | 54.8393 | | |
| Total | 21 | 926.5909 | 44.1234 | | |
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.
odor control clean per day vs box area cm2
odor control litter depth cm vs box area cm2
odor control litter depth cm vs clean per day
usage pct clean per day vs box area cm2
usage pct litter depth cm vs box area cm2
usage pct litter depth cm vs clean per day
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.9545
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
odor_control |
1.5 |
|
7.70 0.9545 7.70 pts |
↑ |
usage_pct |
1.0 |
|
93.00 0.9545 93.00 % |
↑ |
Recommended Settings
| Factor | Value |
litter_depth_cm | 6.5 cm |
clean_per_day | 2 per_day |
box_area_cm2 | 5032.18 cm2 |
Source: from observed run #18
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
usage_pct | 93.00 | 93.00 | +0.00 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #4 | 0.7989 | litter_depth_cm=0.109903, clean_per_day=2, box_area_cm2=2750 |
| #17 | 0.7515 | litter_depth_cm=10, clean_per_day=1, box_area_cm2=1500 |
Model Quality
| Response | R² | Type |
usage_pct | 0.1117 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.9545
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
odor_control 1.5 0.9545 7.70 pts ↑
usage_pct 1.0 0.9545 93.00 % ↑
Recommended settings:
litter_depth_cm = 6.5 cm
clean_per_day = 2 per_day
box_area_cm2 = 5032.18 cm2
(from observed run #18)
Trade-off summary:
odor_control: 7.70 (best observed: 7.70, sacrifice: +0.00)
usage_pct: 93.00 (best observed: 93.00, sacrifice: +0.00)
Model quality:
odor_control: R² = 0.1820 (linear)
usage_pct: R² = 0.1117 (linear)
Top 3 observed runs by overall desirability:
1. Run #18 (D=0.9545): litter_depth_cm=6.5, clean_per_day=2, box_area_cm2=5032.18
2. Run #4 (D=0.7989): litter_depth_cm=0.109903, clean_per_day=2, box_area_cm2=2750
3. Run #17 (D=0.7515): litter_depth_cm=10, clean_per_day=1, box_area_cm2=1500
Full Analysis Output
=== Main Effects: odor_control ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
clean_per_day 3.6000 0.3350 42.6%
litter_depth_cm 2.5000 0.3350 29.6%
box_area_cm2 2.3500 0.3350 27.8%
=== ANOVA Table: odor_control ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
litter_depth_cm 4 3.7929 0.9482 0.233 0.9129
clean_per_day 4 8.9854 2.2463 0.552 0.7030
box_area_cm2 4 5.5704 1.3926 0.342 0.8430
Lack of Fit 2 5.0059 2.5030 0.615 0.5675
Pure Error 7 28.4950 4.0707
Error 9 33.5009 4.0707
Total 21 51.8495 2.4690
=== Summary Statistics: odor_control ===
litter_depth_cm:
Level N Mean Std Min Max
------------------------------------------------------------
0.109903 1 3.2000 0.0000 3.2000 3.2000
10 4 5.1000 0.4243 4.7000 5.6000
12.8901 1 5.7000 0.0000 5.7000 5.7000
3 4 5.0500 1.0536 3.5000 5.8000
6.5 12 5.0333 2.0042 1.1000 7.7000
clean_per_day:
Level N Mean Std Min Max
------------------------------------------------------------
0.174258 1 2.2000 0.0000 2.2000 2.2000
1 4 5.2750 0.4500 4.7000 5.8000
2 12 5.1083 1.8904 1.1000 7.7000
3 4 4.8750 0.9912 3.5000 5.6000
3.82574 1 5.8000 0.0000 5.8000 5.8000
box_area_cm2:
Level N Mean Std Min Max
------------------------------------------------------------
1500 4 4.7000 0.9416 3.5000 5.8000
2750 12 5.1583 1.9893 1.1000 7.7000
4000 4 5.4500 0.1732 5.3000 5.6000
467.823 1 4.3000 0.0000 4.3000 4.3000
5032.18 1 3.1000 0.0000 3.1000 3.1000
=== Main Effects: usage_pct ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
clean_per_day 14.0000 1.4162 39.2%
box_area_cm2 11.7500 1.4162 32.9%
litter_depth_cm 10.0000 1.4162 28.0%
=== ANOVA Table: usage_pct ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
litter_depth_cm 4 72.3409 18.0852 0.330 0.8512
clean_per_day 4 170.3409 42.5852 0.777 0.5674
box_area_cm2 4 224.1742 56.0436 1.022 0.4461
Lack of Fit 2 75.8598 37.9299 0.692 0.5320
Pure Error 7 383.8750 54.8393
Error 9 459.7348 54.8393
Total 21 926.5909 44.1234
=== Summary Statistics: usage_pct ===
litter_depth_cm:
Level N Mean Std Min Max
------------------------------------------------------------
0.109903 1 76.0000 0.0000 76.0000 76.0000
10 4 80.0000 6.0000 73.0000 85.0000
12.8901 1 86.0000 0.0000 86.0000 86.0000
3 4 83.0000 6.0553 74.0000 87.0000
6.5 12 82.2500 7.6053 68.0000 93.0000
clean_per_day:
Level N Mean Std Min Max
------------------------------------------------------------
0.174258 1 71.0000 0.0000 71.0000 71.0000
1 4 83.5000 4.4347 77.0000 87.0000
2 12 82.7500 7.0855 68.0000 93.0000
3 4 79.5000 6.9522 73.0000 86.0000
3.82574 1 85.0000 0.0000 85.0000 85.0000
box_area_cm2:
Level N Mean Std Min Max
------------------------------------------------------------
1500 4 77.2500 5.4391 73.0000 85.0000
2750 12 82.9167 7.4524 68.0000 93.0000
4000 4 85.7500 0.9574 85.0000 87.0000
467.823 1 80.0000 0.0000 80.0000 80.0000
5032.18 1 74.0000 0.0000 74.0000 74.0000
Optimization Recommendations
=== Optimization: odor_control ===
Direction: maximize
Best observed run: #18
litter_depth_cm = 6.5
clean_per_day = 2
box_area_cm2 = 2750
Value: 7.7
RSM Model (linear, R² = 0.2388, Adj R² = 0.1120):
Coefficients:
intercept +4.9955
litter_depth_cm -0.1950
clean_per_day -0.3966
box_area_cm2 +0.8056
RSM Model (quadratic, R² = 0.4153, Adj R² = -0.0232):
Coefficients:
intercept +5.6060
litter_depth_cm -0.1950
clean_per_day -0.3966
box_area_cm2 +0.8056
litter_depth_cm*clean_per_day +0.4000
litter_depth_cm*box_area_cm2 -0.0250
clean_per_day*box_area_cm2 +0.5500
litter_depth_cm^2 -0.3103
clean_per_day^2 -0.1753
box_area_cm2^2 -0.4303
Curvature analysis:
box_area_cm2 coef=-0.4303 concave (has a maximum)
litter_depth_cm coef=-0.3103 concave (has a maximum)
clean_per_day coef=-0.1753 concave (has a maximum)
Notable interactions:
clean_per_day*box_area_cm2 coef=+0.5500 (synergistic)
litter_depth_cm*clean_per_day coef=+0.4000 (synergistic)
Predicted optimum (from linear model, at observed points):
litter_depth_cm = 6.5
clean_per_day = 2
box_area_cm2 = 5032.18
Predicted value: 6.4663
Surface optimum (via L-BFGS-B, linear model):
litter_depth_cm = 3
clean_per_day = 1
box_area_cm2 = 4000
Predicted value: 6.3927
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. box_area_cm2 (effect: 4.7, contribution: 44.0%)
2. litter_depth_cm (effect: 3.5, contribution: 32.8%)
3. clean_per_day (effect: 2.5, contribution: 23.3%)
=== Optimization: usage_pct ===
Direction: maximize
Best observed run: #18
litter_depth_cm = 6.5
clean_per_day = 2
box_area_cm2 = 2750
Value: 93.0
RSM Model (linear, R² = 0.5114, Adj R² = 0.4299):
Coefficients:
intercept +81.8636
litter_depth_cm -1.9473
clean_per_day -3.4711
box_area_cm2 +4.0578
RSM Model (quadratic, R² = 0.6304, Adj R² = 0.3533):
Coefficients:
intercept +84.1400
litter_depth_cm -1.9473
clean_per_day -3.4711
box_area_cm2 +4.0578
litter_depth_cm*clean_per_day -0.6250
litter_depth_cm*box_area_cm2 -0.1250
clean_per_day*box_area_cm2 +2.1250
litter_depth_cm^2 -1.3382
clean_per_day^2 -0.7382
box_area_cm2^2 -1.3382
Curvature analysis:
litter_depth_cm coef=-1.3382 concave (has a maximum)
box_area_cm2 coef=-1.3382 concave (has a maximum)
clean_per_day coef=-0.7382 concave (has a maximum)
Notable interactions:
clean_per_day*box_area_cm2 coef=+2.1250 (synergistic)
litter_depth_cm*clean_per_day coef=-0.6250 (antagonistic)
Predicted optimum (from linear model, at observed points):
litter_depth_cm = 3
clean_per_day = 1
box_area_cm2 = 4000
Predicted value: 91.3398
Surface optimum (via L-BFGS-B, linear model):
litter_depth_cm = 3
clean_per_day = 1
box_area_cm2 = 4000
Predicted value: 91.3398
Model quality: Moderate fit — use predictions directionally, not precisely.
Factor importance:
1. box_area_cm2 (effect: 20.0, contribution: 43.5%)
2. litter_depth_cm (effect: 14.0, contribution: 30.4%)
3. clean_per_day (effect: 12.0, contribution: 26.1%)