← All Use Cases
🌱
Full Factorial Design

Fruit Tree Pruning Strategy

Full factorial of pruning intensity, timing, branch angle, and thinning ratio to maximize fruit size and total yield per tree

Summary

This experiment investigates fruit tree pruning strategy. Full factorial of pruning intensity, timing, branch angle, and thinning ratio to maximize fruit size and total yield per tree.

The design varies 4 factors: prune intensity (%), ranging from 10 to 40, prune month (month), ranging from 1 to 3, branch angle (deg), ranging from 30 to 60, and thin ratio (%), ranging from 0 to 50. The goal is to optimize 2 responses: fruit size g (g) (maximize) and yield kg (kg/tree) (maximize). Fixed conditions held constant across all runs include tree age = 7yr, variety = honeycrisp_apple.

A full factorial design was used to explore all 16 possible combinations of the 4 factors at two levels. This guarantees that every main effect and interaction can be estimated independently, at the cost of a larger experiment (16 runs).

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 fruit size g, the most influential factors were thin ratio (42.3%), prune intensity (35.6%), branch angle (11.9%). The best observed value was 234.0 (at prune intensity = 10, prune month = 1, branch angle = 60).

For yield kg, the most influential factors were branch angle (32.9%), thin ratio (31.4%), prune intensity (20.9%). The best observed value was 68.9 (at prune intensity = 10, prune month = 1, branch angle = 30).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
prune_intensity1040%
prune_month13month
branch_angle3060deg
thin_ratio050%

Fixed: tree_age = 7yr, variety = honeycrisp_apple

Responses

ResponseDirectionUnit
fruit_size_g↑ maximizeg
yield_kg↑ maximizekg/tree

Configuration

use_cases/102_fruit_tree_pruning/config.json
{ "metadata": { "name": "Fruit Tree Pruning Strategy", "description": "Full factorial of pruning intensity, timing, branch angle, and thinning ratio to maximize fruit size and total yield per tree" }, "factors": [ { "name": "prune_intensity", "levels": [ "10", "40" ], "type": "continuous", "unit": "%" }, { "name": "prune_month", "levels": [ "1", "3" ], "type": "continuous", "unit": "month" }, { "name": "branch_angle", "levels": [ "30", "60" ], "type": "continuous", "unit": "deg" }, { "name": "thin_ratio", "levels": [ "0", "50" ], "type": "continuous", "unit": "%" } ], "fixed_factors": { "tree_age": "7yr", "variety": "honeycrisp_apple" }, "responses": [ { "name": "fruit_size_g", "optimize": "maximize", "unit": "g" }, { "name": "yield_kg", "optimize": "maximize", "unit": "kg/tree" } ], "settings": { "operation": "full_factorial", "test_script": "use_cases/102_fruit_tree_pruning/sim.sh" } }

Experimental Matrix

The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.

Runprune_intensityprune_monthbranch_anglethin_ratio
11036050
24013050
31033050
4103600
5403600
6401600
7403300
8401300
91013050
10101600
114033050
124036050
13103300
144016050
15101300
161016050

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/102_fruit_tree_pruning/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/102_fruit_tree_pruning/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/102_fruit_tree_pruning/config.json
5

Get optimization recommendations

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

Generate the HTML report

Terminal
$ doe report --config use_cases/102_fruit_tree_pruning/config.json \ --output use_cases/102_fruit_tree_pruning/results/report.html

Features Exercised

FeatureValue
Design typefull_factorial
Factor typescontinuous (all 4)
Arg styledouble-dash
Responses2 (fruit_size_g ↑, yield_kg ↑)
Total runs16

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: fruit_size_g

Top factors: thin_ratio (42.3%), prune_intensity (35.6%), branch_angle (11.9%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
prune_intensity11190.25001190.25000.6220.4662
prune_month1100.0000100.00000.0520.8283
branch_angle1132.2500132.25000.0690.8032
thin_ratio11681.00001681.00000.8780.3918
prune_intensity*prune_month1256.0000256.00000.1340.7296
prune_intensity*branch_angle1812.2500812.25000.4240.5436
prune_intensity*thin_ratio11024.00001024.00000.5350.4974
prune_month*branch_angle149.000049.00000.0260.8792
prune_month*thin_ratio1110.2500110.25000.0580.8199
branch_angle*thin_ratio1225.0000225.00000.1180.7457
Error59573.75001914.7500
Total1515153.75001010.2500

Pareto Chart

Pareto chart for fruit_size_g

Main Effects Plot

Main effects plot for fruit_size_g

Normal Probability Plot of Effects

Normal probability plot for fruit_size_g

Half-Normal Plot of Effects

Half-normal plot for fruit_size_g

Model Diagnostics

Model diagnostics for fruit_size_g

Response: yield_kg

Top factors: branch_angle (32.9%), thin_ratio (31.4%), prune_intensity (20.9%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
prune_intensity1148.8400148.84000.3890.5599
prune_month175.690075.69000.1980.6749
branch_angle1370.5625370.56250.9700.3700
thin_ratio1336.7225336.72250.8810.3910
prune_intensity*prune_month1282.2400282.24000.7390.4294
prune_intensity*branch_angle1386.1225386.12251.0100.3609
prune_intensity*thin_ratio1308.0025308.00250.8060.4105
prune_month*branch_angle112.602512.60250.0330.8630
prune_month*thin_ratio1122.1025122.10250.3200.5963
branch_angle*thin_ratio186.490086.49000.2260.6543
Error51910.7350382.1470
Total154040.1100269.3407

Pareto Chart

Pareto chart for yield_kg

Main Effects Plot

Main effects plot for yield_kg

Normal Probability Plot of Effects

Normal probability plot for yield_kg

Half-Normal Plot of Effects

Half-normal plot for yield_kg

Model Diagnostics

Model diagnostics for yield_kg

Response Surface Plots

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

fruit size g branch angle vs thin ratio

RSM surface: fruit size g branch angle vs thin ratio

fruit size g prune intensity vs branch angle

RSM surface: fruit size g prune intensity vs branch angle

fruit size g prune intensity vs prune month

RSM surface: fruit size g prune intensity vs prune month

fruit size g prune intensity vs thin ratio

RSM surface: fruit size g prune intensity vs thin ratio

fruit size g prune month vs branch angle

RSM surface: fruit size g prune month vs branch angle

fruit size g prune month vs thin ratio

RSM surface: fruit size g prune month vs thin ratio

yield kg branch angle vs thin ratio

RSM surface: yield kg branch angle vs thin ratio

yield kg prune intensity vs branch angle

RSM surface: yield kg prune intensity vs branch angle

yield kg prune intensity vs prune month

RSM surface: yield kg prune intensity vs prune month

yield kg prune intensity vs thin ratio

RSM surface: yield kg prune intensity vs thin ratio

yield kg prune month vs branch angle

RSM surface: yield kg prune month vs branch angle

yield kg prune month vs thin ratio

RSM surface: yield kg prune month vs thin ratio

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

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
fruit_size_g 1.5
0.6304
193.00 0.6304 193.00 g
yield_kg 1.5
0.6266
49.60 0.6266 49.60 kg/tree

Recommended Settings

FactorValue
prune_intensity10 %
prune_month1 month
branch_angle30 deg
thin_ratio50 %

Source: from observed run #1

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
yield_kg49.6068.90+19.30

Top 3 Runs by Desirability

RunDFactor Settings
#50.5543prune_intensity=40, prune_month=1, branch_angle=60, thin_ratio=50
#160.5257prune_intensity=40, prune_month=3, branch_angle=60, thin_ratio=0

Model Quality

ResponseType
yield_kg0.1312linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.6285 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- fruit_size_g 1.5 0.6304 193.00 g ↑ yield_kg 1.5 0.6266 49.60 kg/tree ↑ Recommended settings: prune_intensity = 10 % prune_month = 1 month branch_angle = 30 deg thin_ratio = 50 % (from observed run #1) Trade-off summary: fruit_size_g: 193.00 (best observed: 234.00, sacrifice: +41.00) yield_kg: 49.60 (best observed: 68.90, sacrifice: +19.30) Model quality: fruit_size_g: R² = 0.0997 (linear) yield_kg: R² = 0.1312 (linear) Top 3 observed runs by overall desirability: 1. Run #1 (D=0.6285): prune_intensity=10, prune_month=1, branch_angle=30, thin_ratio=50 2. Run #5 (D=0.5543): prune_intensity=40, prune_month=1, branch_angle=60, thin_ratio=50 3. Run #16 (D=0.5257): prune_intensity=40, prune_month=3, branch_angle=60, thin_ratio=0

Full Analysis Output

doe analyze
=== Main Effects: fruit_size_g === Factor Effect Std Error % Contribution -------------------------------------------------------------- thin_ratio -20.5000 7.9461 42.3% prune_intensity -17.2500 7.9461 35.6% branch_angle -5.7500 7.9461 11.9% prune_month -5.0000 7.9461 10.3% === ANOVA Table: fruit_size_g === Source DF SS MS F p-value ----------------------------------------------------------------------------- prune_intensity 1 1190.2500 1190.2500 0.622 0.4662 prune_month 1 100.0000 100.0000 0.052 0.8283 branch_angle 1 132.2500 132.2500 0.069 0.8032 thin_ratio 1 1681.0000 1681.0000 0.878 0.3918 prune_intensity*prune_month 1 256.0000 256.0000 0.134 0.7296 prune_intensity*branch_angle 1 812.2500 812.2500 0.424 0.5436 prune_intensity*thin_ratio 1 1024.0000 1024.0000 0.535 0.4974 prune_month*branch_angle 1 49.0000 49.0000 0.026 0.8792 prune_month*thin_ratio 1 110.2500 110.2500 0.058 0.8199 branch_angle*thin_ratio 1 225.0000 225.0000 0.118 0.7457 Error 5 9573.7500 1914.7500 Total 15 15153.7500 1010.2500 === Interaction Effects: fruit_size_g === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ prune_intensity thin_ratio -16.0000 29.4% prune_intensity branch_angle 14.2500 26.1% prune_intensity prune_month 8.0000 14.7% branch_angle thin_ratio -7.5000 13.8% prune_month thin_ratio 5.2500 9.6% prune_month branch_angle 3.5000 6.4% === Summary Statistics: fruit_size_g === prune_intensity: Level N Mean Std Min Max ------------------------------------------------------------ 10 8 178.2500 26.1684 145.0000 217.0000 40 8 161.0000 36.1939 119.0000 234.0000 prune_month: Level N Mean Std Min Max ------------------------------------------------------------ 1 8 172.1250 41.8038 119.0000 234.0000 3 8 167.1250 20.0744 145.0000 193.0000 branch_angle: Level N Mean Std Min Max ------------------------------------------------------------ 30 8 172.5000 31.2639 133.0000 217.0000 60 8 166.7500 34.1833 119.0000 234.0000 thin_ratio: Level N Mean Std Min Max ------------------------------------------------------------ 0 8 179.8750 31.2750 133.0000 234.0000 50 8 159.3750 30.7661 119.0000 217.0000 === Main Effects: yield_kg === Factor Effect Std Error % Contribution -------------------------------------------------------------- branch_angle 9.6250 4.1029 32.9% thin_ratio 9.1750 4.1029 31.4% prune_intensity 6.1000 4.1029 20.9% prune_month 4.3500 4.1029 14.9% === ANOVA Table: yield_kg === Source DF SS MS F p-value ----------------------------------------------------------------------------- prune_intensity 1 148.8400 148.8400 0.389 0.5599 prune_month 1 75.6900 75.6900 0.198 0.6749 branch_angle 1 370.5625 370.5625 0.970 0.3700 thin_ratio 1 336.7225 336.7225 0.881 0.3910 prune_intensity*prune_month 1 282.2400 282.2400 0.739 0.4294 prune_intensity*branch_angle 1 386.1225 386.1225 1.010 0.3609 prune_intensity*thin_ratio 1 308.0025 308.0025 0.806 0.4105 prune_month*branch_angle 1 12.6025 12.6025 0.033 0.8630 prune_month*thin_ratio 1 122.1025 122.1025 0.320 0.5963 branch_angle*thin_ratio 1 86.4900 86.4900 0.226 0.6543 Error 5 1910.7350 382.1470 Total 15 4040.1100 269.3407 === Interaction Effects: yield_kg === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ prune_intensity branch_angle -9.8250 25.2% prune_intensity thin_ratio 8.7750 22.5% prune_intensity prune_month -8.4000 21.6% prune_month thin_ratio 5.5250 14.2% branch_angle thin_ratio 4.6500 11.9% prune_month branch_angle -1.7750 4.6% === Summary Statistics: yield_kg === prune_intensity: Level N Mean Std Min Max ------------------------------------------------------------ 10 8 44.5250 15.5284 15.4000 59.6000 40 8 50.6250 17.7416 23.6000 68.9000 prune_month: Level N Mean Std Min Max ------------------------------------------------------------ 1 8 45.4000 19.8910 15.4000 68.9000 3 8 49.7500 13.0650 23.6000 64.4000 branch_angle: Level N Mean Std Min Max ------------------------------------------------------------ 30 8 42.7625 19.3368 15.4000 68.9000 60 8 52.3875 12.2601 27.8000 67.9000 thin_ratio: Level N Mean Std Min Max ------------------------------------------------------------ 0 8 42.9875 15.9779 23.6000 68.9000 50 8 52.1625 16.5458 15.4000 67.9000

Optimization Recommendations

doe optimize
=== Optimization: fruit_size_g === Direction: maximize Best observed run: #12 prune_intensity = 10 prune_month = 1 branch_angle = 60 thin_ratio = 0 Value: 234.0 RSM Model (linear, R² = 0.2888, Adj R² = 0.0301): Coefficients: intercept +169.6250 prune_intensity +0.6250 prune_month -13.2500 branch_angle -9.8750 thin_ratio -0.1250 RSM Model (quadratic, R² = 0.4453, Adj R² = -7.3200): Coefficients: intercept +33.9250 prune_intensity +0.6250 prune_month -13.2500 branch_angle -9.8750 thin_ratio -0.1250 prune_intensity*prune_month -4.7500 prune_intensity*branch_angle -2.8750 prune_intensity*thin_ratio -1.1250 prune_month*branch_angle -5.7500 prune_month*thin_ratio +5.0000 branch_angle*thin_ratio -7.6250 prune_intensity^2 +33.9250 prune_month^2 +33.9250 branch_angle^2 +33.9250 thin_ratio^2 +33.9250 Curvature analysis: prune_month coef=+33.9250 convex (has a minimum) thin_ratio coef=+33.9250 convex (has a minimum) prune_intensity coef=+33.9250 convex (has a minimum) branch_angle coef=+33.9250 convex (has a minimum) Notable interactions: branch_angle*thin_ratio coef=-7.6250 (antagonistic) prune_month*branch_angle coef=-5.7500 (antagonistic) prune_month*thin_ratio coef=+5.0000 (synergistic) prune_intensity*prune_month coef=-4.7500 (antagonistic) prune_intensity*branch_angle coef=-2.8750 (antagonistic) prune_intensity*thin_ratio coef=-1.1250 (antagonistic) Predicted optimum (from linear model, at observed points): prune_intensity = 40 prune_month = 1 branch_angle = 30 thin_ratio = 0 Predicted value: 193.5000 Surface optimum (via L-BFGS-B, linear model): prune_intensity = 40 prune_month = 1 branch_angle = 30 thin_ratio = 3.55271e-15 Predicted value: 193.5000 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. prune_month (effect: -26.5, contribution: 55.5%) 2. branch_angle (effect: -19.8, contribution: 41.4%) 3. prune_intensity (effect: 1.2, contribution: 2.6%) 4. thin_ratio (effect: -0.2, contribution: 0.5%) === Optimization: yield_kg === Direction: maximize Best observed run: #13 prune_intensity = 10 prune_month = 1 branch_angle = 30 thin_ratio = 0 Value: 68.9 RSM Model (linear, R² = 0.2722, Adj R² = 0.0075): Coefficients: intercept +47.5750 prune_intensity -2.1125 prune_month +2.2750 branch_angle +7.6625 thin_ratio +0.6125 RSM Model (quadratic, R² = 0.6192, Adj R² = -4.7126): Coefficients: intercept +9.5150 prune_intensity -2.1125 prune_month +2.2750 branch_angle +7.6625 thin_ratio +0.6125 prune_intensity*prune_month +5.2625 prune_intensity*branch_angle +3.7500 prune_intensity*thin_ratio +2.3250 prune_month*branch_angle +2.9625 prune_month*thin_ratio -4.3875 branch_angle*thin_ratio +3.5250 prune_intensity^2 +9.5150 prune_month^2 +9.5150 branch_angle^2 +9.5150 thin_ratio^2 +9.5150 Curvature analysis: prune_intensity coef=+9.5150 convex (has a minimum) prune_month coef=+9.5150 convex (has a minimum) branch_angle coef=+9.5150 convex (has a minimum) thin_ratio coef=+9.5150 convex (has a minimum) Notable interactions: prune_intensity*prune_month coef=+5.2625 (synergistic) prune_month*thin_ratio coef=-4.3875 (antagonistic) prune_intensity*branch_angle coef=+3.7500 (synergistic) branch_angle*thin_ratio coef=+3.5250 (synergistic) prune_month*branch_angle coef=+2.9625 (synergistic) prune_intensity*thin_ratio coef=+2.3250 (synergistic) Predicted optimum (from linear model, at observed points): prune_intensity = 10 prune_month = 3 branch_angle = 60 thin_ratio = 50 Predicted value: 60.2375 Surface optimum (via L-BFGS-B, linear model): prune_intensity = 10 prune_month = 3 branch_angle = 60 thin_ratio = 50 Predicted value: 60.2375 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. branch_angle (effect: 15.3, contribution: 60.5%) 2. prune_month (effect: 4.5, contribution: 18.0%) 3. prune_intensity (effect: -4.2, contribution: 16.7%) 4. thin_ratio (effect: 1.2, contribution: 4.8%)
← Previous: Lawn Grass Seed Mix All Use Cases →