
Local to Global Mariculture Modelling
Project Documentation
1 Table of Contents
All code and processes for this project are linked below. Note that some scripts require access to raw data which is not stored on Github. While this page (the index) has code that runs prior to rendering, all code in the subsequent pages has not been run for rendering.
1.1 Main scripts
The main scripts for this project focus on setting up the model to examine the differences in total protein, carbohydrate, lipid and nitrogen losses between feeds.
Page | Description |
---|---|
Data Tidying | Initial data tidying and preparation |
Extracting Production Locations | Identification and processing of mariculture production site locations |
Assessing Species Potential | Evaluation of species suitability for different locations |
Extracting Temperatures | SST data extraction and processing for model inputs |
Formulating Feeds | Feed composition formulation for model runs |
Running Atlantic Salmon Model | Atlantic salmon growth model execution |
1.2 Extra scripts
The extra scripts for this project involved some exploration into potential impacts of nutrient losses. These will likely not make it into the final manuscript.
Page | Description |
---|---|
Species Layers | Spatial analysis of species distribution layers, to try and acertain impacts on vulnerable species |
Relative N Inputs | Analysis of nitrogen input (runoff) patterns and the relative impacts of farm nutrients |
2 Results
Table 1 is a summary of all the results I’ve processed so far, basically trying to acertain all the major differences in inputs between the feeds.
The NI diet was more efficient than the PD diet. When farms were fed the NI diet they had an average FCE* of 1.08, compared to the average FCE of 1.09 when farms were fed the PD diet, and feeding the NI diet resulted in 2.1% more biomass produced with the same population compared to the PD diet.
*Note that when I refer to “FCE” here I’m talking about the “PLC weight” (weight of protein + lipid + carbohydrate) of feed, which may differ from its actual weight because of the inclusion of minerals and non-digestible material.
Despite this, nutrients lost to the environment were generally highest in the NI diet and lowest in the MD diet. In terms of total waste, the NI and PD diets were very similar. I initially thought that this was because the NI and PD diets are more similar than the MD and PD diets, but this doesn’t match up with the numbers (PD and NI diets are 63.3% the same, while the PD and MD diets are 54.3% the same). The MD diet had markedly lower total waste than either the PD or NI diets.
However, the composition of waste lost to the environment was very different between the diets, particularly in terms of proteins and carbohydrates (Figure 1). The PD diet had the lowest protein waste output and the NI diet had the highest, while the MD diet had the lowest carbohydrate and lipid waste outputs and the PD diet the highest. Overall, changing from the PD diet to the NI diet would result in a 44.6% increase in protein waste but a 36.8% and 2.2% reduction in carbohydrates and lipids respectively, while changing to the MD diet would result in a 23.4% increase in protein waste but a 36.8% and 2.2% reduction in carbohydrates and lipids respectively.
Consequently, while total waste was only 0.5% higher when farms were fed the NI diet, protein waste was 44.6% higher and nitrogen waste was 54.6% higher relative to when farms were fed the PD diet.
Proteins in the NI diet were only slightly less digestible than those used in the PD diet (Table 2), but this difference, combined with the higher protein content in the NI diet, resulted in the large difference in nitrogen lost to the environment.
Description | Plant-dominant | Marine-dominant | Novel-inclusive | Change from PD to MD (%) | Change from PD to NI (%) |
---|---|---|---|---|---|
Salmon biomass produced (t) | 847.5 | 811.6 | 865.2 | -4.3 | 2.1 |
Feed provided (t) | 909.5 | 885.4 | 921.3 | -2.7 | 1.3 |
Feed provided (kg/kg salmon) | 1.09 | 1.11 | 1.08 | 1.7 | -0.8 |
Uneaten feed (t) | 25 | 24.2 | 25.3 | -3.6 | 1 |
Excreted waste (t) | 101.8 | 75.6 | 102.2 | -25.8 | 0.4 |
Total waste (E+U, t) | 126.9 | 99.7 | 127.5 | -21.4 | 0.5 |
Proportion of total waste composed of excretion (%) | 80.2 | 75.7 | 80.1 | ||
Total protein waste (t) | 43.5 | 52.2 | 67.3 | 23.4 | 44.6 |
Total carbohydrate waste (t) | 62 | 31.6 | 39.3 | -38.9 | -36.8 |
Total lipid waste (t) | 21.4 | 16 | 20.9 | -24.9 | -2.2 |
Proportion of protein waste from excretion (%) | 77.2 | 75.3 | 81.4 | ||
Proportion of carbohydrate waste from excretion (%) | 90.6 | 86.4 | 90.8 | ||
Proportion of lipid waste from excretion (%) | 56.1 | 56.2 | 56 | ||
Total N from uneaten feed (t) | 61.8 | 80.4 | 78.1 | 30 | 26.3 |
Total N from excreted waste (t) | 210.2 | 245.6 | 342.4 | 16.8 | 62.9 |
Total N inputs (E+U, t) | 272 | 326 | 420.5 | 19.8 | 54.6 |
I accidentally used raw total waste in Figure 1 instead of waste per kg of biomass

3 N inputs only
4 Spatially

5 Supplemental methods
5.1 Population and biomass
Each farm’s final population was calculated by dividing the production tonnage required by the average modelled individual harvest size for each farm (when feed reference feed, Figure 3). A population timeseries was then generated using the standard mortality rate (0.06 % d\(^{-1}\)).

Using this method, a farm’s ‘population’ is not a good representation of the actual number of individuals being farmed, but it ensures each farm location is producing the correct tonnage while allowing comparisons between the different feeds.

By this method, farm biomass as predicted by the model predicted farm tonnage relatively accurately. Predicted farm biomass was within -3.2% – 3% of tonnage produced.
5.2 Feed provision and feeding response to temperature
Figure 5 shows the response of food ingested to temperature, and the food provided in response.

5.3 Modelled experimental feeds
Feed | Protein | Lipid | Carbohydrate |
---|---|---|---|
Plant-dominant | 36% (89.4%) | 34% (96%) | 21% (69.7%) |
Marine-dominant | 48% (90.5%) | 26.2% (96%) | 15.9% (80.1%) |
Novel-inclusive | 44.8% (86.3%) | 32.8% (96%) | 13.1% (69.4%) |
5.4 Model sensitivity to parameter changes
Parameter sensitivity was tested by varying each parameter by \(\pm 10\)% and calculating sensitivity as \(S_p = \frac{(P_{1.1} - P_{0.9})}{0.2 \times P_1}\), where \(S\) is the sensitivity of the measured variable to changes in parameter \(p\), and \(P_{1.1}\), \(P_{0.9}\), and \(P_{1}\) are the value of the measured variable when the model is run with parameter \(p\) at 110%, 90%, and 100% of its value respectively. The population-level parameters (\(\overline{W}\), \(\Delta{W}\), \(\overline{I_{max}}\), \(\Delta{I_{max}}\), \(\overline{F}\), \(\Delta{F}\)) were tested with a population of of 5000 on a random 10% of farms, while all other parameters were tested across all farms with a population of 10 (Figure 6).

6 Code and packages used
All analysis was conducted in R version 4.4.2 “Pile of Leaves” (R Core Team 2019). Major packages used include packages aquamapsdata
version 0.1.6 (Skyttner 2020), arrow
version 20.0.0.2 (Richardson et al. 2024), dplyr
version 1.1.4 (Wickham et al. 2023), furrr
version 0.3.1 (Vaughan and Dancho 2022), future
version 1.58.0 (Bengtsson 2021), ggplot2
version 3.5.2 (Wickham 2016), lubridate
version 1.9.4 (Grolemund and Wickham 2011), magrittr
version 2.0.3 (Bache and Wickham 2022), rnaturalearth
version 1.1.0 (Massicotte and South, n.d.), sf
version 1.0.21 (Pebesma 2018), stringr
version 1.5.1 (Wickham 2023), targets
version 1.11.3 (Landau 2021), terra
version 1.8.60 (Hijmans 2024), tidyr
version 1.3.1 (Wickham, Vaughan, and Girlich 2024), units
version 0.8.7 (Pebesma, Mailund, and Hiebert 2016), and worrms
version 0.4.3 (Chamberlain and Vanhoorne. 2025).
For a full list of R packages used see the lockfile on Github. This manuscript was written in Quarto (Allaire et al. 2024) using TinyTex (Xie 2017) and the acronyms extension (Chaput 2024).