#install.packages(c("ggplot2", "Matrix", "nloptr", "mvtnorm", "triangle", "XLConnect"))
#remotes::install_github("flr/FLCore")
#remotes::install_github("flr/FLFleet")
#remotes::install_github("flr/FLash")
#remotes::install_github("flr/FLBEIA")
library(FLCore)
library(FLBEIA)
# load the FLBEIA input lists (biols, fleets, BD, SRs, etc.)
data(one) # this is the FLBEIA dummy data set
<- 1990
first.yr <- 2010
proj.yr <- 2025
last.yr <- c(first.yr=first.yr, proj.yr=proj.yr, last.yr=last.yr)
yrs
<- yrs['proj.yr'] - yrs['first.yr'] + 1 # position of first projection yr in objects
i1 <- yrs['last.yr'] - yrs['first.yr'] + 1 # position of last yr in objects i2
SEAwise – Socio-economic scenarios
Introduction
This tutorial is based on the work carried out in SEAwise – Work Package 2: Social and economic effects of and on fishing.
Within SEAwise (seawiseproject.org), the socio-economic impacts of a set of management measures were investigated and quantified using bio-economic modelling. The project developed methodologies to strengthen the economic sub-models integrated into bio-economic models for Ecosystem-Based Fisheries Management (EBFM), improving the configuration of the economic component through more realistic fleet performance projections (Enhancing Fish price in FLBEIA and Enhanced fish price & fuel costs submodels.
In SEAwise Deliverables 2.3 SEAwise report on carbon footprint, economic and social impacts and 2.4 SEAwise report on carbon footprint and impacts in a changing climate), a set of integrated socio-economic and management scenarios were developed to assess the impacts of fisheries management strategies under changing environmental and market conditions.
Socio-economic scenarios
Four socio-economic scenarios, adapted from the CERES project (https://ceresproject.eu/), were explored:
Global Sustainability (GS) (RCP4.5, SSP1): global sustainability is prioritized, aiming to limit climate change to the lower RCP4.5 target while striving to promote welfare by balancing economic, social, and environmental considerations, supported by strong trans-boundary cooperation. Key factors such as a smaller global population, improved fish stock management, cheaper sources of fish meal and oil for aquaculture, and increased competition between farmed and wild fish contribute to a more moderate rise in fish prices compared to other scenarios.
National Enterprise (NE) (RCP8.5, SSP3): governments prioritize national interests, focusing on maximizing welfare and employment within the fishing industry, but with reduced trans-national cooperation. Fish prices remain high to support national well-being and due to an increase in per capita consumption. Global warming is expected to follow the RCP8.5 trajectory, driven by limited technological innovation and a heavy reliance on fossil fuels, resulting in a significant rise in fuel prices.
Local Stewardship (LS) (RCP4.5, SSP2): this scenario envisions a path where sustainability is pursued through small-scale regional efforts, emphasizing equity, social inclusion, and democratic values. Global warming is expected to follow the milder RCP4.5 warming, with relatively high rate of fish price increase but lower fuel price increase than the ‘National Enterprise’ scenario.
World Markets (WM) (RCP8.5, SSP5): this scenario is defined by strong demand for affordable seafood (with a moderate rise in fish prices), increased technological innovation driven by global competition, lower taxes, and a robust private sector. While global warming follows the RCP8.5 pathway, the increase in fuel prices is slower than in the “National Enterprise” scenario, due to greater technological advancements.
These scenarios combined different pathways of climate change (RCP4.5 and RCP8.5) with varying trajectories for fish and fuel prices, reflecting political, economic, social, and technological factors influencing the fisheries sector.
Figure 1 - Socio-political scenarios elaborated for European fisheries in CERES project Peck et al., (2020)
Each socio-economic scenario corresponds to a combination of fish and fuel price increase. Annual rates of fuel and fish price increase corresponding to the four scenarios summarized in Figure 1 (CERES scenarios) are reported in Table 1.
Table 1- Fish and Fuel price annual-increase rates [%] for each of the four socio-political scenarios: World Market (WM), National Enterprise (NE), Local Stewardship (LS), Global Sustainability (GS).SSP stands for socio-political scenarios (Figure 1) and RCP stands for Representative concentration pathways (RCP4.5 moderate climate impact; RCP8.5 extreme climate impact)
Scenario | FishPriceIncreaseRate | FuelPriceIncreaseRate |
---|---|---|
GS_RCP4.5_SSP1 | 1.33 | 2.59 |
LS_RCP4.5_SSP2 | 1.64 | 2.61 |
NE_RCP8.5_SSP3 | 1.67 | 2.89 |
WM_RCP8.5_SSP5 | 1.57 | 2.59 |
This document presents three examples of how the socio-economic scenarios can be implemented in bio-economic models (FLBEIA and BEMTOOL):
- dummy dataset;
- North Sea;
- Adriatic and western Ionian Sea.
Implementing socio-economic scenarios in FLBEIA - dummy data set
This example uses the FLBEIA dummy dataset and show how the four CERES scenarios can be implemented using R, integrating the increase in fish and fuel price in the projections.
The first step is to define the tables with annual change rates in fish and fuel prices, following the scenarios described above.
# ----- annual increase rate of Fish prices
<- matrix(NA, nrow=1, ncol=4)
fish_price <- c(1.57, 1.67, 1.33, 1.64) # annual increase rates per scenario
fish_price names(fish_price) <- c('WM', 'NE', 'GS', 'LS')
<- fish_price/100 # divide by 100 as the are % rates
fish_price fish_price
WM NE GS LS
0.0157 0.0167 0.0133 0.0164
# ----- annual increase rate of fuel prices
<- matrix(NA, nrow=3, ncol=4)
fuel_price <- c(2.59, 2.80, 2.59, 2.61) # annual increase rates per scenario
fuel_price names(fuel_price) <- c('WM', 'NE', 'GS', 'LS')
<- fuel_price/100 # divide by 100 as the are % rates
fuel_price fuel_price
WM NE GS LS
0.0259 0.0280 0.0259 0.0261
Then, the fraction of Variable costs corresponding to the fuel costs by fleet-metier combination have to be defined. This is case study specific.
<- matrix(NA, nrow=1, ncol=1)
fuelcost_fr <- c(0.5) # fraction of variable costs that is due to fuel costs per metier
fuelcost_fr names(fuelcost_fr) <- c('met1') # name of metier
fuelcost_fr
met1
0.5
In this example there is only 1 fleet and one metier. The script can be generalised to cover all metiers, as follows:
<-fuelcost_fr
fuelcost_fr_bkp
<- matrix(NA, nrow=1, ncol=3) # ncol equals to the number of metiers
fuelcost_fr <- c(0.5, 0.3, 0.4) # fraction of variable costs that is due to fuel costs per metier
fuelcost_fr names(fuelcost_fr) <- c('met1', 'met2', 'met3') # name of metier
fuelcost_fr
met1 met2 met3
0.5 0.3 0.4
The next step is the modificaton of fish prices in the fleets object before calling FLBEIA. In the following example, fish prices are changed according to ‘WM’ scenario.
# FISH PRICE
<- seq(1, i2 - i1 + 1, 1) # sequence of years to modify
x <- fish_price['WM'] # select scenario
rate <- (1 + rate)^x # these are the fish price multipliers
price_mult
# for stock1
for (i in 1 : 12){ # repeat for all age classes
"fl1"]]@metiers[["met1"]]@catches[["stk1"]]@price[i, i1:i2, , , ] <- oneFl[["fl1"]]@metiers[["met1"]]@catches[["stk1"]]@price[i, i1:i2, , , ]*price_mult
oneFl[[# ... add all fleets and metier for the given stock
}
# for stock 2
#...
# for stock 3
#...
Energy or fuel costs form a given fraction of variable costs for each fleet-metier combination. Fuel costs increase with fuel prices. The annual multiplier for fuel costs is \(\mathtt{mult} = 1 + \mathtt{fuel\_price}\), where fuel_price
is the annual rate of change. The annual change in the variable-cost multiplier due to fuel is \((\mathtt{mult} - 1)\,\mathtt{fuelcost\_fr}\), where fuelcost_fr
is the fuel share of variable costs.
<-fuelcost_fr_bkp
fuelcost_fr
<- (1 + fuel_price['WM'])
fuelcost_mult <- (1 + (fuelcost_mult - 1) * fuelcost_fr)
vcost_mult <- matrix(NA, nrow=(last.yr - proj.yr + 1), ncol=length(vcost_mult))
vcost_m 1] <- vcost_mult[1]^x
vcost_m[,
# In this example there is 1 metier. Fill in vcost columns for each of your metiers
# vcost_m[,2] <- vcost_mult[2]^x
# vcost_m[,3] <- vcost_mult[3]^x
# ...
colnames(vcost_m) <- c('met1') # name vcost with the names of metiers (as in the FLBEIA objects)
vcost_m
met1
[1,] 1.012950
[2,] 1.026068
[3,] 1.039355
[4,] 1.052815
[5,] 1.066449
[6,] 1.080259
[7,] 1.094249
[8,] 1.108419
[9,] 1.122773
[10,] 1.137313
[11,] 1.152041
[12,] 1.166960
[13,] 1.182073
[14,] 1.197380
[15,] 1.212886
[16,] 1.228593
# apply it to all fleets and metiers
"fl1"]]@metiers[["met1"]]@vcost[, i1:i2, , , ] <- oneFl[["fl1"]]@metiers[["met1"]]@vcost[, i1:i2, , , ]*vcost_m[,'met1']
oneFl[[# oneFl[["fl1"]]@metiers[["met2"]]@vcost[, i1:i2, , , ] <- oneFl[["fl1"]]@metiers[["met2"]]@vcost[, i1:i2, , , ]*vcost_m[,'met2']
# ...
Finally, the FLBEIA model can be called for the WM scenario:
<- FLBEIA(biols = oneBio,
WM SRs = oneSR,
BDs = NULL,
fleets = oneFl,
covars = oneCv,
indices = NULL,
advice = oneAdv,
main.ctrl = oneMainC,
biols.ctrl = oneBioC,
fleets.ctrl = oneFlC,
covars.ctrl = oneCvC,
obs.ctrl = oneObsC,
assess.ctrl = oneAssC,
advice.ctrl = oneAdvC)
Examples of graphical output that can be extracted by the WM object follow:
library(dplyr)
<- names(WM$biols)[1]
stk
<- as.data.frame(ssb(WM$biols[[stk]])) %>% # quant="ssb" already implicit
ssb_df rename(SSB = data) %>%
group_by(year) %>%
summarise(med = median(SSB, na.rm=TRUE),
lo = quantile(SSB, 0.10, na.rm=TRUE),
hi = quantile(SSB, 0.90, na.rm=TRUE))
ggplot(ssb_df, aes(x=as.numeric(as.character(year)), y=med)) +
geom_ribbon(aes(ymin=lo, ymax=hi), alpha=0.2) +
geom_line(size=1) +
labs(x="Year", y="SSB", title=paste("SSB -", stk), subtitle="median and 80% CI") +
theme_minimal()
Below, the revenues are estimated from the price per kg and the landing in weight:
library(FLCore)
library(dplyr)
library(purrr)
library(tidyr)
library(ggplot2)
<- function(WM){
calc_revenue_cost_profit <- WM$fleets
fleets <- names(fleets)
all_fleets
map_dfr(all_fleets, function(fl){
<- fleets[[fl]]
fobj
# ---- Revenues: sum on all metier and catches: landings.wt * price ----
<- map_dfr(names(fobj@metiers), function(mt){
rev_df <- fobj@metiers[[mt]]
met map_dfr(names(met@catches), function(st){
<- met@catches[[st]]
ct if(!("landings.wt" %in% slotNames(ct)) || !("price" %in% slotNames(ct))) return(NULL)
<- as.data.frame(ct@landings.wt) %>% rename(wt = data)
wt_df <- as.data.frame(ct@price) %>% rename(p = data)
pr_df
inner_join(wt_df, pr_df, by=c("year","unit","season","area","iter")) %>%
mutate(revenue = wt * p) %>%
group_by(year, iter) %>%
summarise(revenue = sum(revenue, na.rm=TRUE), .groups="drop")
})%>%
}) group_by(year, iter) %>%
summarise(revenue = sum(revenue, na.rm=TRUE), .groups="drop")
# ---- Costs (if exist): it search common slots on fleet and metiers ----
<- intersect(c("vcost","fcost","crewsal","capital","crewshare"), slotNames(fobj))
cost_slots_fleet <- NULL
cost_df_fleet if(length(cost_slots_fleet) > 0){
<- map_dfr(cost_slots_fleet, function(slt){
cost_df_fleet as.data.frame(slot(fobj, slt)) %>%
rename(val = data) %>%
group_by(year, iter) %>%
summarise(val = sum(val, na.rm=TRUE), .groups="drop")
%>% group_by(year, iter) %>% summarise(cost = sum(val, na.rm=TRUE), .groups="drop")
})
}
# costs by metier (if not present al fleet level)
<- NULL
cost_df_met if(is.null(cost_df_fleet)){
<- map_dfr(names(fobj@metiers), function(mt){
cost_df_met <- fobj@metiers[[mt]]
met <- intersect(c("vcost","fcost","crewsal","capital"), slotNames(met))
cslots if(length(cslots)==0) return(NULL)
map_dfr(cslots, function(slt){
as.data.frame(slot(met, slt)) %>%
rename(val = data) %>%
group_by(year, iter) %>%
summarise(val = sum(val, na.rm=TRUE), .groups="drop")
})
})if(!is.null(cost_df_met)){
<- cost_df_met %>% group_by(year, iter) %>%
cost_df_met summarise(cost = sum(val, na.rm=TRUE), .groups="drop")
}
}
<- if(!is.null(cost_df_fleet)) cost_df_fleet else cost_df_met
cost_df
<- if(is.null(cost_df)){
out # if the costs are not present, return only the revenue and profit=NA
%>% mutate(cost = NA_real_, profit = NA_real_, fleet = fl)
rev_df else {
} full_join(rev_df, cost_df, by=c("year","iter")) %>%
mutate(revenue = replace_na(revenue, 0),
cost = replace_na(cost, 0),
profit = revenue - cost,
fleet = fl)
}
out
})
}
<- calc_revenue_cost_profit(WM)
eco
# summary by year and fleet
<- eco %>%
eco_summ group_by(fleet, year) %>%
summarise(revenue_med = median(revenue, na.rm=TRUE),
revenue_lo = quantile(revenue, 0.10, na.rm=TRUE),
revenue_hi = quantile(revenue, 0.90, na.rm=TRUE),
profit_med = if(all(is.na(profit))) NA_real_ else median(profit, na.rm=TRUE),
profit_lo = if(all(is.na(profit))) NA_real_ else quantile(profit, 0.10, na.rm=TRUE),
profit_hi = if(all(is.na(profit))) NA_real_ else quantile(profit, 0.90, na.rm=TRUE),
.groups="drop")
Plots at different levels of detail (e.g. metier, fleet) follow:
<- ggplot(eco_summ,
p1 aes(x = as.numeric(as.character(year)),
y = revenue_med, color = fleet, fill = fleet)) +
geom_ribbon(aes(ymin = revenue_lo, ymax = revenue_hi), alpha = 0.15, colour = NA) +
geom_line(size = 1) +
labs(x="Year", y="Revenues (ton x price)", title="Revenues by fleet (median and 80% CI)") +
theme_minimal()
<- eco_summ %>% filter(!is.na(profit_med))
eco_summ_prof
if(nrow(eco_summ_prof) > 0){
<- ggplot(eco_summ_prof,
p2 aes(x = as.numeric(as.character(year)),
y = profit_med, color = fleet, fill = fleet)) +
geom_ribbon(aes(ymin = profit_lo, ymax = profit_hi), alpha = 0.15, colour = NA) +
geom_line(size = 1) +
labs(x="Year", y="Profit", title="Profit by fleet (median and 80% CI)") +
theme_minimal()
}
# Revenues by metier
<- purrr::map_dfr(names(WM$fleets), function(fl){
rev_met <- WM$fleets[[fl]]
fobj ::map_dfr(names(fobj@metiers), function(mt){
purrr<- fobj@metiers[[mt]]
met ::map_dfr(names(met@catches), function(st){
purrr<- met@catches[[st]]
ct if(!("landings.wt" %in% slotNames(ct)) || !("price" %in% slotNames(ct))) return(NULL)
<- as.data.frame(ct@landings.wt) %>% rename(wt = data)
wt_df <- as.data.frame(ct@price) %>% rename(p = data)
pr_df inner_join(wt_df, pr_df, by=c("year","unit","season","area","iter")) %>%
mutate(revenue = wt * p, fleet = fl, metier = mt, stock = st) %>%
group_by(fleet, metier, year, iter) %>%
summarise(revenue = sum(revenue, na.rm=TRUE), .groups="drop")
})
})
})
<- rev_met %>%
rev_met_s group_by(fleet, metier, year) %>%
summarise(med = median(revenue, na.rm=TRUE),
lo = quantile(revenue, 0.10, na.rm=TRUE),
hi = quantile(revenue, 0.90, na.rm=TRUE),
.groups="drop")
<- ggplot(rev_met_s, aes(x=as.numeric(as.character(year)), y=med, color=metier)) +
p3geom_ribbon(aes(ymin=lo, ymax=hi, fill=metier), alpha=0.15, colour=NA) +
geom_line(size=1) +
facet_wrap(~ fleet, scales="free_y") +
labs(x="Year", y="Revenues", title="Revenues per metier (facet by fleet)") +
theme_minimal()
<- c("ggplot2","patchwork","cowplot")
pkgs <- setdiff(pkgs, rownames(installed.packages()))
to_install if(length(to_install)) install.packages(to_install)
library(ggplot2); library(patchwork); library(cowplot)
<- (p1 + p2) / p3 +
p_comb plot_layout(guides = "collect", axes = "collect") &
theme(legend.position = "bottom")
# Etichette A, B, C
<- p_comb + plot_annotation(tag_levels = "A")
p_comb
p_comb

Implementing socio-economic scenarios in FLBEIA - North Sea
Introduction
The mixed fisheries model of the North Sea is defined using the procedure of WGMIXFISH-Advice 2021 and 2022. The modelling framework is FLBEIA (Garcia et al., 2017), and includes 46 fleets (152 total métiers) and 20 stocks for the North Sea mixed fisheries. Stock dynamics are either age-based (COD-NS, HAD, PLE-EC, PLE-NS, POK, SOL-NS, SOL-EC, TUR, WHG-NS, WIT), or fixed (NEP6, NEP7, NEP8, NEP9, NEP5, NEP10, NEP32, NEP33, NEP34, NEPOTH-NS) and differ whether they are actively managed via a TAC advice or, in some cases, considered as bycatch stocks. For this case study please refer to Kuehn et al. (2023), Deliverables 2.3 SEAwise report on carbon footprint, economic and social impacts and 2.4 SEAwise report on carbon footprint and impacts in a changing climate).
1. Purpose
This chapter outlines how to:
- build projected multipliers for costs and prices (script 01_prepare_projCosts.R), and
- apply them to FLBEIA multi-run simulations (script 02_Add_Economic_data_to_FLBEIA_simulations.R),
to produce EMSRR economic projections for the North Sea — without embedding internal code.
The script used in this chapter of the tutorial are available on SEAwise github (task 2.2), stored in the zip-file add_price_scenarios_to_FLBEIA.zip. It contains following two scripts:
- Data preparation: 01_prepare_projCosts.R;
- Add economic data to simulations: 02_Add_Economic_data_to_FLBEIA_simulations.R.
In the following we just want to go through the main-steps with you, highlighting how to add additional information originating from economic projections to FLBEIA output. The way we do it here, is simply post-processing of available FLBEIA simulations.
2. Inputs & Required Files
output/fleets.Rdata
(base fleets object for FLBEIA).growthRate.csv
(annual % growth by country; first columncountry
, following columns = years).priceRate.csv
(rows = scenariosscen
; columns includeyear
,var
in {fuel_price
,fish_price
}, andrate
).output/frac_fcost.2060.Rdata
(fixed-cost fractions per fleet).output/frac_vcost.2060.Rdata
(variable-cost fractions per fleet/metier).- For script 0.2: directory
output/multi_econ/EMSRR/
containing multi-iteration files (SR.ensembles*
) for the relevant climate scenarios.
Step 1 — Build Economic Multipliers (01_prepare_projCosts.R)
This script prepares the economic multipliers for each fleet and metier separately. What it does:
- Loads out fleet-definition
fleets
(output/fleets.Rdata), sets yrMax = 2100, and set a reference year yrRef = 2018. - From growthRate.csv, computes cumulative inflation factors by country (flat extrapolation beyond last available year).
- From priceRate.csv, compute cumulative factors for fuel_price and fish_price by scenario.
- Merge the above and using frac_fcost.2060.Rdata and frac_vcost.2060.Rdata, derive:
- relFcost (fixed-cost multiplier via inflation),
- relVcost (variable-cost multiplier: non-fuel share via inflation + fuel share via fuel_price),
- relPrice (fish price multiplier).
- Normalize relative to 2018 (yrRelCost = 2018, yrRelPrice = 2018).
Output: output/relEcon.Rdata with columns: fleet, metier, scen, year, relVcost, relFcost, relPrice.
Step 2 — Modify FLBEIA runs to incorporate economic projections (02_Add_Economic_data_to_FLBEIA_simulations.R)
Now that we have a lookup table with our fleet/métier-specific rates for fixed costs, variable costs and fish prices, we add those scenario-specific rates to the FLBEIA output e.g. one iteration of a stochastic scenario projection.
What it does:
- Cleans environment, load FLR-packages and helper-functions.
- Define the time horizon: first.yr = 2014, proj.yr = 2019, last.yr = 2060.
- Load the output/relEcon.Rdata; harmonise scenario labels (e.g., RCP6.0 → RCP4.5).
- Selects economic scenarios consistent with climate scenarios (RCP4.5, RCP8.5).
- For each economic scenario and HCR (e.g., FmsyH):
- Find the matching multi-iteration result files in output/multi_econ/EMSRR/ (those carrying SR.ensembles).
- Loads the run object and extract the fleets-obj: res$fleets.
- Apply the multipliers over projection years to the:
- fcost (fixed costs, once per fleet),
- vcost per metier (variable costs),
- price for each stock caught by that metier in each catch object (via helper update.price).
Output: output/multi_econ/EMSRR/econ_projections/
Results — graphics (from relEcon.Rdata)
Here we just plot the different growth rates in fixed and variable costs as well as fish prices for the respective scenarios:
# Packages
# (Install once if needed: install.packages(c("tidyverse","scales")))
suppressPackageStartupMessages({
library(dplyr)
library(tidyr)
library(ggplot2)
library(stringr)
library(scales)
})
# Load the multipliers prepared by 01_prepare_projCosts.r
load(file.path("output","relEcon.Rdata")) # loads `relEcon`
stopifnot(exists("relEcon"))
<- relEcon %>%
relEcon mutate(year = as.integer(year),
scen = as.character(scen),
fleet = as.character(fleet),
metier = as.character(metier))
# --- (Optional) Focus on a subset of North Sea fleets/metiers ------------------
# If you want to specify exactly which fleets/metiers to show, list them here:
# pairs_keep <- tibble(fleet = c("UK_Trawl_24_40","NL_Beam_40plus"),
# metier = c("OTB_DEF","TBB_MIX"))
# Otherwise, we take the 6 most common pairs (edit n = ...)
<- relEcon %>%
pairs_keep count(fleet, metier, sort = TRUE) %>%
slice_head(n = 6) %>%
select(fleet, metier)
<- relEcon %>% inner_join(pairs_keep, by = c("fleet","metier"))
relNS
# Helper labels
<- c(relFcost = "Fixed-cost multiplier",
metric_labs relVcost = "Variable-cost multiplier",
relPrice = "Fish price multiplier")
<- max(relNS$year, na.rm = TRUE)
last_year <- 2018L
ref_year
# =========================
# Figure NS-1: Multipliers over time
# =========================
<- relNS %>%
df_long pivot_longer(c(relFcost, relVcost, relPrice),
names_to = "metric", values_to = "value")
<- ggplot(df_long,
p1 aes(x = year, y = value,
color = scen,
group = interaction(fleet, metier, scen))) +
geom_line(alpha = 0.8, linewidth = 0.6) +
facet_wrap(~ metric, ncol = 1, scales = "free_y",
labeller = as_labeller(metric_labs)) +
labs(title = "North Sea — Cost & price multipliers over time (2018 = 1)",
subtitle = "Selected fleets/metiers; color = scenario",
x = NULL, y = "Multiplier", color = "Scenario") +
scale_y_continuous(labels = number_format(accuracy = 0.01)) +
theme_minimal(base_size = 11)
print(p1)
An example of outcome from Deliverable 2.4 is reported below:
Implementing socio-economic scenarios in BEMTOOL - Adriatic and western Ionian Sea
This chapter summarises the main steps to implement the socio-economic scenarios in BEMTOOL model.
Introduction
BEMTOOL is a bio-economic multi-fleet and multiple stocks simulation model (Rossetto et al. (2015) and Bitetto et al.(2025)) and it has been applied in SEAwise to model the demersal fisheries in Adriatic and wester Ionian Sea. BEMTOOL model includes 24 fleet segments, that which encompass both active and passive gears targeting demersal resources, and covers the dynamics of 10 key target stocks: European hake in GSAs 17-18, European hake in GSA 19, Red mullet in GSAs 17-18, Red mullet in GSA 19, Deep-water rose shrimp in GSAs 17-18-19, Common sole in GSA 17, Norway lobster in GSA 17, Norway lobster in GSA 18, giant red shrimp in GSAs 18-19 and blue and red shrimp in GSAs 18-19. More detailes can be found in Deliverables 2.3 SEAwise report on carbon footprint, economic and social impacts and 2.4 SEAwise report on carbon footprint and impacts in a changing climate).
Steps to run socio-economic scenarios
The steps to implement the socio-economic scenarios in BEMTOOL are basically 4:
to run the scenarios combining management strategy and RCP effect on the stocks (following the WP3 and WP6 tutorials on BEMTOOL). For examples you will have these folders: 1) SQ-RCP4.5, 2) Fmsy-RCP45, 3) SQ-RCP8.5, 4) Fmsy-RCP85.
create for each climate scenario a copy. From scenario 1) you will create a copy: one will be renamed as SQ-RCP4.5_GS and the other SQ-RCP4.5_LS. Duplicating scenario 2) you will have Fmsy-RCP45_GS and Fmsy-RCP45_LS. From scenarios 3) you will have SQ-RCP8.5_NE and SQ-RCP8.5_WM and the same for scenario 4): Fmsy-RCP85_NE and Fmsy-RCP85_WM.
From the 4 scenarios at point 2 you need to have 8 scenarios, duplicating each of the four, following the climate scenario associated to the relevant socio-economic scenario (as described in chapter 2).
- Now we need to update in the 8 folders the indicators impacted by the socio-economic scenarios:
- revenues and variables costs (according change in fuel and fish price in Table 1);
- labour costs
Here an example of update for one scenario:
# ChangeSel_RCP45_GS : fish price: 1.33 Fuel price: 2.59
=1.33
fi_pr=2.59
fu_pr
=read.csv("Economic output SQ_RCP45 quantiles.csv",sep=";",header=TRUE)
Eco_indhead(Eco_ind)
=unique(Eco_ind$Fleet_segment)
FS=FS[-which(FS=="ALL")]
FS
for (fs in FS){
print(fs)
=0
ifor (yea in c(2023:2060)){
$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="variable.cost[fuel.cost]","Value"]=as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==(yea) & Eco_ind$Variable=="variable.cost[fuel.cost]","Value"])*(1+fu_pr/100)^i
Eco_ind[Eco_ind=i+1
i# print(i)
# print((1+fu_pr/100)^i)
}
=0
ifor (yea in c(2023:2060)){
$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="total.revenues","Value"]=as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==(yea) & Eco_ind$Variable=="total.revenues","Value"])*(1+fi_pr/100)^i
Eco_ind[Eco_ind=i+1
i# print(i)
# print((1+fi_pr/100)^i)
}
=0
ifor (yea in c(2023:2060)){
$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="total.revenues.landing","Value"]=as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==(yea) & Eco_ind$Variable=="total.revenues.landing","Value"])*(1+fi_pr/100)^i
Eco_ind[Eco_ind=i+1
i#print(i)
#print((1+fi_pr/100)^i)
}for (yea in c(2023:2060)){
$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="variable.cost[tot.var.cost]","Value"]= (as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="variable.cost[fuel.cost]" ,"Value"])+as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="variable.cost[other.var.cost]" ,"Value"]))
Eco_ind[Eco_ind#print(i)
#print((1+fi_pr/100)^i)
}=0
i
#CREW SHARE COEFFICIENT
=as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==2022 & Eco_ind$Variable=="labour.cost"& Eco_ind$quantile==0.5,"Value"])/(as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==2022 & Eco_ind$Variable=="total.revenues" & Eco_ind$quantile==0.5,"Value"])-as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==2022 & Eco_ind$Variable=="variable.cost[tot.var.cost]" & Eco_ind$quantile==0.5,"Value"]))
cs
for (yea in c(2023:2060)){
$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="labour.cost","Value"]= cs*(as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="total.revenues" ,"Value"])-as.numeric(Eco_ind[Eco_ind$Fleet_segment==fs & Eco_ind$Year==yea & Eco_ind$Variable=="variable.cost[tot.var.cost]" ,"Value"]))
Eco_ind[Eco_ind
=i+1
i#print(i)
#print((1+fi_pr/100)^i)
}
}
$Scenario="ChangeSel_RCP45_GS"
Eco_ind
head(Eco_ind)
#write.table(Eco_ind,"ChangeSel_RCP45_GS_rev.csv",sep=";",row.names=FALSE)
- Re-estimate socio-economic indicators (e.g. GVA, wages, etc…) with updated fuel and fish price. An example of outcome from Deliverable 2.4 is reported below: