EU Farm Fish CEA - 1. Consumption Prep File

Author

Sagar Shah, Rethink Priorities

Published

March 18, 2024

About this file

This file brings together estimates of per country EU consumption of Sea bream, Sea bass, Carp, Salmon and Rainbow Trout into a single dataset in long format.

Preparation

Clear environment

Code
rm(list=ls())

Load packages

Code
library(readxl)
library(tidyverse)
library(scales)
library(DT)

Session Info

Code
sessionInfo()
R version 4.3.0 (2023-04-21)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS 14.3.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/London
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] DT_0.28         scales_1.2.1    lubridate_1.9.2 forcats_1.0.0  
 [5] stringr_1.5.0   dplyr_1.1.2     purrr_1.0.1     readr_2.1.4    
 [9] tidyr_1.3.0     tibble_3.2.1    ggplot2_3.4.2   tidyverse_2.0.0
[13] readxl_1.4.2   

loaded via a namespace (and not attached):
 [1] gtable_0.3.3      jsonlite_1.8.4    compiler_4.3.0    tidyselect_1.2.0 
 [5] yaml_2.3.7        fastmap_1.1.1     R6_2.5.1          generics_0.1.3   
 [9] knitr_1.43        htmlwidgets_1.6.2 munsell_0.5.0     pillar_1.9.0     
[13] tzdb_0.4.0        rlang_1.1.1       utf8_1.2.3        stringi_1.7.12   
[17] xfun_0.39         timechange_0.2.0  cli_3.6.1         withr_2.5.0      
[21] magrittr_2.0.3    digest_0.6.31     grid_4.3.0        rstudioapi_0.14  
[25] hms_1.1.3         lifecycle_1.0.3   vctrs_0.6.2       evaluate_0.21    
[29] glue_1.6.2        cellranger_1.1.0  fansi_1.0.4       colorspace_2.1-0 
[33] rmarkdown_2.22    tools_4.3.0       pkgconfig_2.0.3   htmltools_0.5.5  

Open data files

This file contains data on:

  • EU country codes (from Eurostat)

  • EUFOMA apparent consumption estimates (live weight equivalent) in various EU countries of Seabass (2016), Seabream (2019) and Carp(2018)

  • Portion trout and large trout estimates come from the EUFOMA large trout in the EU (2020) study, using apparent consumption estimates for large trout and all trout respectively

  • Salmon consumption estimates are extracted from the chart from page 42 of the Mowi (2023) industry report for France, Germany, Italy, Spain and Sweden only.

  • Population data for EU27 countries to estimate salmon consumption (from Eurostat)

Code
xl_data <-"../1_input_data/EUFOMA_consumption_data.xlsx"
country_codes <- read_excel(xl_data,sheet = "country_codes")
bass <- read_excel(xl_data,sheet = "seabass_2016")
bream <- read_excel(xl_data,sheet = "seabream_2019")
carp <- read_excel(xl_data,sheet = "carp_2018")
trout <- read_excel(xl_data,sheet = "trout_2020")
salmon <- read_excel(xl_data,sheet = "salmon_2022_raw")
population <- read_excel("../1_input_data/country populations.xlsx",sheet = "EU27populations2022")

Salmon consumption estimates

Mowi industry report only provides salmon consumption estimates for 5 EU countries. For other countries, we need estimate salmon consumption. I do this by assuming:

  • per capita consumption in the Denmark and Finland is equal to per capita consumption in Sweden

  • per capita consumption in Netherlands, Belgium, Austria, Luxembourg and Ireland is equal to per capita consumption in Germany

  • per capita consumption in Portugal, Greece, Cyprus and Malta is equal to per capita consumption in Italy

  • the remainder is equally distributed across the rest of the EU

I also assume that the Mowi industry reports estimate for EU+UK market size actually excludes the UK, based on comparisons with EUFOMA balance sheet data (https://www.eumofa.eu/supply-balance).

I first extract aggregate EU consumption of salmon…

Code
EU_salmon <- salmon %>% filter(Country=="EU27") %>% pull(Tons) %>%mean()
EU_salmon
[1] 1141000

I then estimate per capita consumption of salmon (in Tons) for the three reference countries, Sweden, Italy and Germany.

Code
per_capita_salmon <- 
  salmon %>% 
  filter(Country %in% c("Sweden","Germany","Italy")) %>%
  left_join(population,by="Country") %>%
  mutate(per_capita=Tons/pop) %>%
  select(Country,per_capita) %>%
  rename(ref_country=Country)

per_capita_salmon
# A tibble: 3 × 2
  ref_country per_capita
  <chr>            <dbl>
1 Germany        0.00285
2 Italy          0.00235
3 Sweden         0.00555

I then assign these per capita consumption values to selected other countries, and calculate aggregate consumption in those countries.

Code
#Assign country groups
nordic <- c("Denmark","Finland")
germanic <- c("Austria","Netherlands","Belgium","Luxembourg","Ireland")
italian <- c("Portugal","Greece","Malta","Cyprus")

#Estimate salmon consumption in these countries
salmon_ref_countries <- population %>%
  filter(Country %in% c(nordic,germanic,italian)) %>%
  mutate(
    ref_country=
    case_when(
      Country %in% nordic ~ "Sweden",
      Country %in% germanic ~ "Germany",
      Country %in% italian ~ "Italy",
      TRUE ~ "Error"
    )) %>%
  left_join(per_capita_salmon,by="ref_country") %>%
  mutate(
    Tons=pop*per_capita,
    Estimate=str_c("ref country per capita - ",str_to_lower(ref_country))) %>%
  select(Country,Tons,Estimate)

salmon_ref_countries
# A tibble: 11 × 3
   Country       Tons Estimate                        
   <chr>        <dbl> <chr>                           
 1 Belgium     33079. ref country per capita - germany
 2 Denmark     32592. ref country per capita - sweden 
 3 Ireland     14407. ref country per capita - germany
 4 Greece      24630. ref country per capita - italy  
 5 Cyprus       2130. ref country per capita - italy  
 6 Luxembourg   1838. ref country per capita - germany
 7 Malta        1227. ref country per capita - italy  
 8 Netherlands 50086. ref country per capita - germany
 9 Austria     25566. ref country per capita - germany
10 Portugal    24376. ref country per capita - italy  
11 Finland     30787. ref country per capita - sweden 

I then estimate consumption in the remainder of EU countries, by assuming per capita consumption in these countries is equal.

Code
#Estimate residual aggregate salmon consumption
salmon_residual_aggregate<- EU_salmon*2-sum(salmon$Tons)-sum(salmon_ref_countries$Tons)

#Calculate consumption in each country by multiplying aggregate by their population share
salmon_residual_countries <- population %>%
  filter(!(Country %in% c(salmon$Country,germanic,italian,nordic))) %>%
  mutate(
    Tons=pop/sum(pop)*salmon_residual_aggregate,
    Estimate="residual EU per capita"
    ) %>%
  select(-pop)

salmon_residual_countries
# A tibble: 11 × 3
   Country     Tons Estimate              
   <chr>      <dbl> <chr>                 
 1 Bulgaria   4549. residual EU per capita
 2 Czechia    6995. residual EU per capita
 3 Estonia     886. residual EU per capita
 4 Croatia    2569. residual EU per capita
 5 Latvia     1248. residual EU per capita
 6 Lithuania  1866. residual EU per capita
 7 Hungary    6444. residual EU per capita
 8 Poland    25045. residual EU per capita
 9 Romania   12666. residual EU per capita
10 Slovenia   1402. residual EU per capita
11 Slovakia   3615. residual EU per capita

Finally I combine the data into final table

Code
#Combined table
salmon<-salmon %>%
  filter(Country!="EU27") %>%
  mutate(Estimate="mowi industry report") %>%
  rbind(salmon_ref_countries,salmon_residual_countries)

salmon
# A tibble: 27 × 3
   Country    Tons Estimate                        
   <chr>     <dbl> <chr>                           
 1 France  269000  mowi industry report            
 2 Germany 237000  mowi industry report            
 3 Italy   139000  mowi industry report            
 4 Spain   130000  mowi industry report            
 5 Sweden   58000  mowi industry report            
 6 Belgium  33079. ref country per capita - germany
 7 Denmark  32592. ref country per capita - sweden 
 8 Ireland  14407. ref country per capita - germany
 9 Greece   24630. ref country per capita - italy  
10 Cyprus    2130. ref country per capita - italy  
# ℹ 17 more rows

And check that the values look reasonable (TRUE means working ok).

Code
#Check
near(EU_salmon,sum(salmon$Tons))
[1] TRUE

Finally I plot some charts for reference.

Estimated salmon consumption in each EU country

Code
salmon %>%
  ggplot(
    aes(
      x=Tons,
      y=reorder(Country,Tons),
      fill=Estimate
        )) +
   geom_col()+
   labs(
     title = "Estimated Atlantic Salmon consumption in the EU (2022)",
     y="Country",
     fill="Source/method") +
  scale_fill_brewer(palette="Dark2") +
  theme_light() +
  scale_x_continuous(labels = label_number(suffix = "K", scale = 1e-3))

Per capita Atlantic salmon production

Code
salmon %>% 
  left_join(population,by="Country") %>%
  mutate(per_capita=Tons*1000/pop) %>%
  ggplot(
    aes(
      x=per_capita,
      y=reorder(Country,per_capita),
      fill=Estimate
        )) +
   geom_col()+
   labs(
     title = "Assumed per capita Atlantic Salmon consumption (2022)",
     y="Country",
     x="Kg/capita/year",
     fill="Source/method") +
  scale_fill_brewer(palette="Dark2") +
  theme_light()

Combine data into single file

We now prepare/clean the country species consumption data and assemble to into a “long” dataframe. Steps involved are:

  1. linking country code and country code data

  2. adding species names

  3. apportioning consumption by portion trout and large trout share (iv) combining the species data into a single data frame

  4. making column names lower case for ease of matching

Code
# Add country codes and species name
bream<- left_join(bream,country_codes,by="Code") %>% mutate(Species="Sea Bream")
bass<- left_join(bass,country_codes,by="Country") %>% mutate(Species="Sea Bass")
carp<- left_join(carp,country_codes,by="Code") %>% mutate(Species="Carp")
salmon<- left_join(salmon,country_codes,by="Country") %>% mutate(Species="Atlantic Salmon")

# Add country codes and fish size and separate into two observations
trout<- trout %>%
        left_join(country_codes,by="Code") %>%
        pivot_longer(
          cols=c("Rainbow Trout (Small)","Rainbow Trout (Large)"),
          names_to="Species",values_to="Tons"
        ) %>%
        select(-Notes,-Total)

# combine into single dataframe
cons_data <- bind_rows(bream,bass,carp,trout) %>%
             mutate(Estimate="EUFOMA") %>%
             bind_rows(salmon)


# make column names lower case and reorder
names(cons_data) <- str_to_lower(names(cons_data))
cons_data <- relocate(cons_data, species, country, code, tons)

We do a simple plot of the data to make sure it looks reasonable.

Code
cons_data <- cons_data %>%
  group_by(country) %>%
  mutate(total_cons=sum(tons)) %>%
  ungroup()
Code
cons_data %>%
  ggplot(
    aes(
      x=tons,
      y=reorder(country,total_cons),
      fill=species
      )) +
  geom_col() +
    labs(
    title = "Annual consumption of salmon, carp, trout and seabream/bass in EU",
    x = "Metric tons (live weight equivalent)",
    y = "",
    fill = "Species"
  ) +
  scale_x_continuous(labels = label_number(suffix = "K", scale = 1e-3)) +
  scale_fill_brewer(palette = "Dark2") +
  theme_light() +
  theme(legend.position = "top")

Annual consumption of selected species in the EU (kg)

Save output file

Code
saveRDS(cons_data,file= "../3_intermediate_data/cons_data.rds")