Skip to contents
📦 Data: FAO Global Capture Production, release 2026.1.0 (published by FAO on 2026-03-30; catches 1950–2024), downloaded from Capture_2026.1.0.zip. Licence CC BY 4.0. fao_data_info() shows the release you use and how to cite it.

The five functions of this article follow methods published in the fisheries and ecology literature. Each section gives the method with its sources, so that the results can be checked against the original studies, and says which settings are choices of this package rather than of those studies. The full references are at the end of the page.

The examples use the Northeast Atlantic (FAO area 27). The charts are saved in figures/png/summary/ and the tables in tables/. The pelagic/demersal ratio, pelagic_demersal(), belongs to the same group of analyses and is described in 📈 Composition, stock status and trends.

FAO27 <- fishing_area_data("Atlantic, Northeast")

The five functions share these arguments:

Argument Meaning Default
plot Save the charts in figures/png/summary/ TRUE
table Save the tables in tables/ TRUE
lang Language of the charts and names: "en", "zh" or "both"; NULL uses the language set with fao_settings() NULL
pptx Also save the charts as editable PowerPoint files in figures/pptx/summary/ FALSE, or TRUE after fao_settings(pptx = TRUE)
plot_show Also draw each chart in the plot window (e.g. the Plots pane of RStudio) as it is saved FALSE, or plot_show of fao_settings()
label Name at the start of the file names The fishing area (or the country) of the data

They return their results invisibly: assign them (x <- catch_shocks(...)) to use the tables.

📝 In the Word report

fao_report() can add four of these analyses to the Word report of a fishing area (see 📝 Assessment report: Word, LaTeX and PDF). They are switched off by default:

fao_report(27, shocks = TRUE, collapse = TRUE, synchrony = TRUE, distant = TRUE)

The settings of each function are given with the name of its section as prefix:

fao_report(27, shocks = TRUE, collapse = TRUE, synchrony = TRUE, distant = TRUE,
           shocks_method = "gephart2017",   # catch_shocks(method = "gephart2017")
           collapse_method = "worm2006",    # collapse_analysis(method = "worm2006")
           collapse_seed = 2,               # seed of the random series of the null model
           synchrony_by = "country",        # catch_synchrony(by = "country")
           distant_countries = 5,           # profiles of the 5 main distant-water countries
           distant_min_catch = 100)         # distant_water_profile(min_catch = 100)
Section Function Settings of the report only
shocks catch_shocks()
collapse collapse_analysis() collapse_seed: seed of the random series of the null model, default 1, so that the report gives the same numbers every time
synchrony catch_synchrony()
distant distant_water_profile() distant_countries: the number of countries profiled, default 3 (the countries with the largest distant-water catch in the area over the last five years), or their names, e.g. c("China", "Japan")
pelagic pelagic_demersal()

compare_releases() compares two versions of the data rather than describing a fishing area, so it is not a section of the report.

⚡ Catch shocks

A shock is a sudden, unusually large fall in production from one year to the next. Gephart et al. (2017) proposed a statistical method to find shocks in national fish production series, and Cottrell et al. (2019) used a version of it to compare shocks in crop, livestock, fisheries and aquaculture production. catch_shocks() applies both versions to FAO catch series and counts how often shocks happen, by year and by group.

Method

By default a series is the catch of one country in one FAO area (by = c("country", "area")). It runs from its first year with catch to the last year of the data, with missing years counted as zero. In each series:

  1. The catch ctc_t is smoothed, and the residuals rt=ct−ĉtr_t = c_t - \hat{c}_t from the smooth are kept.
  2. The residuals are regressed on those of the year before: rt=a+brt−1+etr_t = a + b\,r_{t-1} + e_t (a lag-1 regression).
  3. Years whose Cook’s distance in this regression is above a threshold are candidate shocks. Cook’s distance measures how much one observation changes the fitted regression, so it picks out years that break the usual year-to-year pattern.
  4. A candidate is kept only if the catch fell below a baseline BtB_t computed from the preceding years. The loss is Bt−ctB_t - c_t tonnes, or 100(Bt−ct)/Bt100\,(B_t - c_t)/B_t percent.
  5. The shock has recovered in the first later year in which the catch is back to at least 95% of BtB_t.

The two methods differ in the smoother, the threshold and the baseline:

"cottrell2019" (default) "gephart2017"
Smoother LOESS, span 0.6 lowess, span 2/3
Cook’s distance above 0.3 0.35
Baseline BtB_t Median catch of the previous 7 years Mean catch of the previous 5 years
Earliest possible shock 8th year of the series 6th year of the series
Source Cottrell et al. (2019), Methods, and their code Gephart et al. (2017), section 2, and their code

Two summaries follow from the shocks:

  • the shock frequency of a year: the number of shocks divided by the number of series analysed in that year, in percent (Cottrell et al. 2019); a series counts from its first year with catch to the last year, also in years in which its catch fell to zero, so that a shock to zero is counted in both;
  • the shock rate of a group (an area, a country, a continent or a species group): the number of shocks divided by the number of series in the group (Gephart et al. 2017).

Two settings are choices of this package. Series with catch in fewer than min_years years (20) are left out, because neither study gives a minimum length. The series of countries that no longer exist (e.g. the USSR) end in their last year with catch, so that the end of a country is not counted as a shock.

Example

shocks <- catch_shocks(FAO27$area_data)
Atlantic__Northeast_shocks.png
Atlantic__Northeast_shocks_series.png
Atlantic__Northeast_shocks_by_continent.png
Atlantic__Northeast_shocks_by_country.png

The first chart is the shock frequency of each year. The second shows the top_n series with the largest catch, from their first to their last year, with a dot for each shock sized by the loss in percent. The others give the shock rate of each continent and each country, with the number of shocks and series next to each bar; a grouping with a single group (here the area) has no chart.

The largest shocks, in tonnes:

largest <- shocks$shocks[order(-shocks$shocks$loss_tonnes), ]
show_table(data.frame(largest[, c("series_name", "Year", "catch_tonnes", "baseline_tonnes", "loss_tonnes",
                                  "loss_pct", "cooks_distance", "recovery_years")], row.names = NULL),
           digits = c(0, 0, 0, 0, 0, 1, 2, 0))
series_name Year catch_tonnes baseline_tonnes loss_tonnes loss_pct cooks_distance recovery_years
Greenland | Atlantic, Northeast 2024 89,282 124,106 34,824 28.1 0.47 NA
Greenland | Atlantic, Northeast 2019 85,189 118,128 32,939 27.9 0.32 3
Poland | Atlantic, Northeast 1977 196,823 215,725 18,902 8.8 1.97 3
Jersey | Atlantic, Northeast 2020 992 1,537 545 35.5 0.39 NA

The years with the highest shock frequency, and the shock rate by continent:

show_table(data.frame(head(shocks$by_year[order(-shocks$by_year$shock_frequency_pct), ], 5), row.names = NULL))
Year n_series n_shocks shock_frequency_pct
1977 23 1 4.35
2019 29 1 3.45
2020 29 1 3.45
2024 29 1 3.45
1950 18 0 0.00
show_table(data.frame(subset(shocks$by_group, grouping == "continent"), row.names = NULL))
grouping group group_name n_series n_shocks shocks_per_series
continent Americas Americas 2 2 1.00
continent Europe Europe 23 2 0.09
continent Asia Asia 3 0 0.00
continent Other Other 2 0 0.00

Reading the results. In area 27, 30 country series have catch in at least 20 years, and 4 shocks were found in 3 of them. The shock frequency is at most 4.3% in any year: shocks are rare events in any one series. recovery_years is the number of years until the catch was back to 95% of the baseline; NA means it had not recovered by the end of the series (2 of the 4 shocks). The USSR, a former country, and “Other nei” (catch not attributed to a country) have no continent in the FAO country list and are shown as NA.

Other settings

The method of Gephart et al. (2017). The file names do not include the method, so label keeps the charts of this call from replacing those of the first one:

gephart <- catch_shocks(FAO27$area_data, method = "gephart2017", label = "FAO27 gephart2017")
FAO27_gephart2017_shocks.png
both <- merge(shocks$shocks[, c("series", "Year")], gephart$shocks[, c("series", "Year")])
c(cottrell2019 = nrow(shocks$shocks), gephart2017 = nrow(gephart$shocks), both = nrow(both))
#> cottrell2019  gephart2017         both 
#>            4            6            3

The two methods find 4 and 6 shocks, and only 3 of them in the same series and year: with a threshold close to the Cook’s distance of many years, the smoother and the baseline decide the borderline cases. Results that hold with both methods are the more robust.

With by = "species", a series is the catch of one species item in the area, all countries together, and the shock rate is also given by ISSCAAP species group:

species_shocks <- catch_shocks(FAO27$area_data, by = "species", label = "FAO27 species")
FAO27_species_shocks_by_species_group.png
groups <- subset(species_shocks$by_group, grouping == "species_group" & n_series >= 5)
show_table(data.frame(groups[, c("group_name", "n_series", "n_shocks", "shocks_per_series")], row.names = NULL))
group_name n_series n_shocks shocks_per_series
Herrings, sardines, anchovies 6 4 0.67
Miscellaneous pelagic fishes 19 10 0.53
Salmons, trouts, smelts 9 4 0.44
Crabs, sea-spiders 7 3 0.43
Tunas, bonitos, billfishes 15 6 0.40
Sharks, rays, chimaeras 50 19 0.38
Clams, cockles, arkshells 16 6 0.38
Flounders, halibuts, soles 22 8 0.36
Miscellaneous coastal fishes 47 17 0.36
Miscellaneous freshwater fishes 6 2 0.33

The two studies analysed national totals, all species and areas of a country together. The same series come from the data of all areas with by = "country" (this takes longer):

catch_shocks(load_fao_data(), by = "country", method = "gephart2017")

Arguments and results

Argument Meaning Default
area_data FAO catch data: fishing_area_data()$area_data, or any subset of load_fao_data()
by What a series is: one or more of "country", "area" and "species" c("country", "area")
method "cottrell2019" or "gephart2017" "cottrell2019"
min_years Series with catch in fewer years are left out 20
top_n Number of series with the largest catch in the timeline chart 25
plot, table, lang, pptx, label Common arguments (see the start of the page)
Element Content
shocks One row per shock: the series, Year, catch_tonnes, baseline_tonnes, loss_tonnes, loss_pct, cooks_distance and recovery_years
by_year Each year: n_series (series analysed in that year, including those whose catch fell to zero), n_shocks and shock_frequency_pct
by_group Shock rate by grouping (country, area, species, continent, species group): n_series, n_shocks and shocks_per_series
series The series analysed: first_year, last_year, n_years, total_tonnes and n_shocks
  • Both studies analysed national totals. Series of one country in one area, or of one species, use the same method on smaller units.
  • Highly variable series (e.g. Peruvian anchoveta) may show no shocks, because large changes are usual in them (Gephart et al. 2017).
  • A shock is an anomaly of the catch series. It may come from the stock, the environment, markets, management or a change in reporting; the catch data do not say which.
  • The smoother and the regression use the whole series, so a new year of data can change which earlier years are found as shocks.

💥 Fishery collapses

Two definitions of a collapse from catch data are widely used. Mullon et al. (2005) counted the collapses in FAO catch series and described the shape of the decline before them; Worm et al. (2006) followed the share of fisheries whose catch was below 10% of its maximum. Wilberg and Miller (2007) showed that the second measure also rises for random series with no trend, which is why collapse_analysis() compares the data with such random series.

Method

"mullon2005" (default) "worm2006"
A series is One species or genus caught by one country in one FAO area One species item in one FAO area, all countries together
Left out Items not identified to genus or species; the countries in exclude_countries; series with a missing year among the last complete_years (20) years; series with a mean catch below min_mean_catch (500 t a year) Fisheries with a total catch below min_total_catch (10,000 t)
Collapsed After the year of the maximum catch XmaxX_{max}, the catch stays below Xmax/10X_{max}/10 for 4 consecutive years; the first of them is the collapse year DcD_c (Mullon et al. 2005, p. 113) In each year when the catch is below 10% of the maximum; recovered when back above. A fishery starts when its catch first reaches 10% of the maximum
Results Number of collapses, their years and the shape of the decline Share of fisheries collapsed in each year, and share that have collapsed at least once (Worm et al. 2006, main text and supplementary pp. 4–5)

By default exclude_countries holds the countries that Mullon et al. (2005, p. 112) left out: the former USSR, Yugoslavia and Czechoslovakia, whose series end with the country; South Africa and Namibia, whose series were split; and China, whose series they considered distorted.

Shape of the decline (Mullon et al. 2005, p. 114), checked in this order (the paper does not give an order):

Type Rule
Plateau Catch above Xmax/4X_{max}/4 in every year from Dc−8D_c - 8 to Dc−3D_c - 3: a sudden fall after a long period of high catch
Smooth Correlation between catch and time from Dc−10D_c - 10 to DcD_c below −0.7-0.7: a long, regular decline
Erratic Otherwise: a fall after several ups and downs
Not classified Collapses less than 10 years after the first year of the series

Mullon et al. found 366 collapses among 1,519 FAO series from 1950 to 2000 (24%): 21% plateau, 33% smooth and 45% erratic.

Null model. The maximum of a series grows with its length, so a share of “collapsed” fisheries defined against the maximum rises over time even when nothing changes (Wilberg and Miller 2007). With null_model = TRUE (default) the analysis is repeated on n_sim (100) sets of random series with no trend, with the same start years and lengths as the real series. As in Wilberg and Miller (2007), they are stationary first-order autoregressive lognormal series: xt=ρxt−1+εtx_t = \rho\,x_{t-1} + \varepsilon_t with ρ=0.75\rho = 0.75 and εt∼N(0,σ2(1−ρ2))\varepsilon_t \sim N\!\left(0,\ \sigma^2 (1 - \rho^2)\right), and catch =ext= e^{x_t}, where σ2=ln⁡(1+CV2)\sigma^2 = \ln(1 + \text{CV}^2) for a coefficient of variation of 80%. The share of collapses in these series is the level that the definition gives by itself.

Random numbers. The random series are drawn again at every run, so the results of the null model change slightly from one run to the next. set.seed() before the call fixes them. This page uses set.seed(1) so that the numbers in the text match the tables at every build of the site; fao_report() does the same with collapse_seed (default 1).

Example

set.seed(1)   # fixes the random series of the null model
collapses <- collapse_analysis(FAO27$area_data)
Atlantic__Northeast_collapse_mullon2005.png
Atlantic__Northeast_collapse_mullon2005_types.png
Atlantic__Northeast_collapse_mullon2005_by_group.png

The first chart is the number of collapses in each year, by type of decline. The second is the mean catch of each type relative to its maximum, from 10 years before to 5 years after the collapse year; the dashed lines are Xmax/4X_{max}/4 and Xmax/10X_{max}/10. The third is the share of collapsed series in each ISSCAAP species group with at least 3 series.

s <- collapses$summary
show_table(data.frame(s, row.names = NULL), digits = 1)
type n pct_of_series pct_of_collapses n_series null_pct_of_series
collapsed 166 35.9 100.0 463 22.6
plateau 27 5.8 16.3 463 NA
smooth 45 9.7 27.1 463 NA
erratic 84 18.1 50.6 463 NA
not classified 10 2.2 6.0 463 NA

The largest series that collapsed, and the share of collapsed series by species group:

collapsed <- subset(collapses$series, collapsed)
collapsed <- collapsed[order(-collapsed$max_tonnes), c("series_name", "max_year", "max_tonnes", "collapse_year", "type")]
show_table(data.frame(collapsed, row.names = NULL), digits = 0)
series_name max_year max_tonnes collapse_year type
Norway | Capelin | Atlantic, Northeast 1977 2,115,701 1987 plateau
Norway | Atlantic herring | Atlantic, Northeast 1954 1,461,500 1973 erratic
Norway | Atlantic mackerel | Atlantic, Northeast 1967 868,600 1980 erratic
Iceland | Atlantic herring | Atlantic, Northeast 1966 770,700 1969 plateau
Denmark | Norway pout | Atlantic, Northeast 1974 475,142 2003 smooth
United Kingdom | Atlantic cod | Atlantic, Northeast 1956 474,900 2000 erratic
Russian Federation | Capelin | Atlantic, Northeast 1992 424,781 1994 not classified
Denmark | Haddock | Atlantic, Northeast 1969 317,500 1977 erratic
Norway | Norway pout | Atlantic, Northeast 1975 308,806 2001 smooth
Denmark | Atlantic cod | Atlantic, Northeast 1981 194,716 2017 erratic
groups <- subset(collapses$by_group, grouping == "species_group" & n_series >= 3)
show_table(data.frame(groups[, c("group_name", "n_series", "n_collapsed", "pct_collapsed")], row.names = NULL), digits = 1)
group_name n_series n_collapsed pct_collapsed
Cods, hakes, haddocks 124 57 46.0
Flounders, halibuts, soles 63 16 25.4
Miscellaneous demersal fishes 56 22 39.3
Herrings, sardines, anchovies 42 17 40.5
Miscellaneous pelagic fishes 33 14 42.4
Shrimps, prawns 18 5 27.8
Miscellaneous coastal fishes 17 5 29.4
Sharks, rays, chimaeras 14 4 28.6
Clams, cockles, arkshells 12 7 58.3
Tunas, bonitos, billfishes 11 3 27.3

Reading the results. In area 27, 166 of the 463 series (35.9%) collapsed by the definition of Mullon et al. (2005), against 22.6% in random series with no trend. The difference, not the share itself, is what points to real collapses. Of the collapses, 51% were erratic, 16% plateau and 27% smooth. Plateau collapses are the hardest to foresee: the catch stays high until it falls (Mullon et al. 2005).

Other settings

The definition of Worm et al. (2006), with the same seed:

set.seed(1)
worm <- collapse_analysis(FAO27$area_data, method = "worm2006")
Atlantic__Northeast_collapse_worm2006.png

The solid lines are the data and the dashed lines the random series of the null model: in red the share of fisheries that have collapsed at least once, in blue the share collapsed in the year.

show_table(data.frame(worm$summary, row.names = NULL), digits = 1)
type n n_series pct_of_series null_pct_of_series
collapsed in the last year 103 246 41.9 13.3
collapsed at least once 178 246 72.4 82.1
show_table(data.frame(subset(worm$by_year, Year %in% c(1960, 1980, 2000, max(Year))), row.names = NULL), digits = 1)
Year n_fisheries n_collapsed n_ever_collapsed pct_current pct_cumulative null_pct_current null_pct_cumulative
1960 120 12 24 10.0 20.0 14.5 42.9
1980 175 46 91 26.3 52.0 14.2 65.6
2000 212 39 114 18.4 53.8 12.7 73.3
2024 246 103 178 41.9 72.4 13.3 82.1

By the last year, 72.4% of the fisheries of area 27 had collapsed at least once, but random series with no trend give 82.1%: in this area the rising cumulative share comes from the definition, which is the point made by Wilberg and Miller (2007). The share collapsed in the last year, 41.9% against 13.3% in the null model, is the better indicator.

Three more settings are often useful: exclude_countries = character(0) keeps all countries with the method of Mullon et al.; null_model = FALSE skips the random series, which is faster; n_sim = 1000 gives a steadier null model.

Arguments and results

Argument Meaning Default
area_data FAO catch data: fishing_area_data()$area_data, or any subset of load_fao_data()
method "mullon2005" or "worm2006" "mullon2005"
exclude_countries Countries left out with "mullon2005" c("Un. Sov. Soc. Rep.", "Yugoslavia SFR", "Czechoslovakia", "South Africa", "Namibia", "China")
complete_years With "mullon2005", series need a record in each of the last this many years of the data 20
min_mean_catch With "mullon2005", minimum mean catch of a series (t a year) 500
min_total_catch With "worm2006", minimum total catch of a fishery (t) 10000
null_model Repeat the analysis on random series with no trend (Wilberg and Miller 2007) TRUE
n_sim Number of random data sets of the null model 100
plot, table, lang, pptx, label Common arguments (see the start of the page)
Element Content
series One row per series: max_year and max_tonnes; with "mullon2005" also collapsed, collapse_year and type; with "worm2006" start_year, collapsed_last_year and first_collapse_year
summary "mullon2005": number of collapses and of each type, pct_of_series, pct_of_collapses and the share in the null model null_pct_of_series. "worm2006": fisheries collapsed in the last year and at least once, with the null model
by_year "mullon2005": n_collapses by year and type. "worm2006": n_fisheries, n_collapsed, n_ever_collapsed, pct_current, pct_cumulative, and the same shares in the null model
by_group Share of collapsed series by FAO area and species group: n_series, n_collapsed and pct_collapsed
  • Catch data alone cannot tell a collapse of the stock from a fall in catch caused by management, markets or reporting.
  • A definition based on the maximum gives “collapses” in random series too. Compare the data with the null model, which is a reference level and not a statistical test.
  • Worm et al. (2006) used species in large marine ecosystems from Sea Around Us data; here a fishery is a species item in an FAO area, so the shares are not directly comparable.
  • With the default exclude_countries, the catch of China is left out, as by Mullon et al. (2005).

🎼 Synchrony and the portfolio effect

When the catches of different species rise and fall at different times, their total varies less than each of them. This is the portfolio effect, named after the way a diverse investment portfolio reduces risk. Ong et al. (2021) analysed 1,092 marine catch series and found that regions with more synchronous catches had less stable total catches. catch_synchrony() measures how synchronously the catch series of the data fluctuate, and how much their asynchrony stabilises the total catch.

Method

The series are chosen as by Ong et al. (2021): the median catch is above min_median (10 t a year) and more than min_nonzero (3/4) of the years have catch. With by = "species", only items identified to species are used (Ong et al. left out miscellaneous and “nei” items). Each series is detrended with a linear regression on year, as by Ong et al., since common trends make series look synchronous (Lepš et al. 2019); detrend = "none" keeps the trends.

With σi\sigma_i the standard deviation of series ii (after detrending), σT\sigma_T that of the total catch, mim_i the mean catch of series ii and mTm_T the mean total catch:

Measure Formula Column
Synchrony φ=σT2/(∑iσi)2\varphi = \sigma_T^2 / \left(\sum_i \sigma_i\right)^2, from 0 (the fluctuations fully compensate each other) to 1 (perfectly synchronous) (Loreau and de Mazancourt 2008, eq. 9) synchrony_phi
CV of the total CVT=σT/mT\text{CV}_T = \sigma_T / m_T cv_total
Weighted mean CV ∑iσi/mT\sum_i \sigma_i / m_T: the CV of the total if all series were perfectly synchronous weighted_mean_cv
Decomposition CVT=φ×∑iσi/mT\text{CV}_T = \sqrt{\varphi} \times \sum_i \sigma_i / m_T (Thibaut and Connolly 2013, eqs. 2–4): the lower the synchrony, the more stable the total
Mean CV of the series CV¯=1n∑iσi/mi\overline{\text{CV}} = \frac{1}{n} \sum_i \sigma_i / m_i mean_cv_series
Portfolio effect 100×(CV¯−CVT)/CVT100 \times (\overline{\text{CV}} - \text{CV}_T) / \text{CV}_T: how much more variable the single series are than their total, in percent (Ong et al. 2021, after Carlson and Satterthwaite 2011) portfolio_effect_pct
Pairwise correlations Correlations between the detrended series: their mean and the share that are positive mean_pairwise_correlation, positive_correlations_pct

The same measures are computed in moving windows of window years (20), with the linear trend removed in each window (a choice of this package), to show how synchrony changed over time. Ong et al. (2021) measured synchrony with wavelet coherence, which separates time scales; this function uses the simpler correlation-based measures above.

Example

sync <- catch_synchrony(FAO27$area_data)
Atlantic__Northeast_synchrony_species.png
Atlantic__Northeast_synchrony_species_cv.png
Atlantic__Northeast_synchrony_species_correlation.png

The first chart is the synchrony and the portfolio effect in each 20-year window, plotted at the middle year of the window. The second compares the CV of the total catch (red, dashed line) with the CV of the top_n largest series. The third shows the correlations between these series: red for series that rise and fall together, blue for series that compensate each other.

show_table(sync$summary[, c("n_series", "synchrony_phi", "cv_total", "weighted_mean_cv", "mean_cv_series",
                            "portfolio_effect_pct", "mean_pairwise_correlation")], digits = 2)
n_series synchrony_phi cv_total weighted_mean_cv mean_cv_series portfolio_effect_pct mean_pairwise_correlation
100 0.12 0.16 0.46 0.64 305.95 0.02
with(sync$summary, c(cv_total = cv_total, decomposition = sqrt(synchrony_phi) * weighted_mean_cv))
#>      cv_total decomposition 
#>     0.1583766     0.1583766

The second line checks the decomposition of Thibaut and Connolly (2013): the CV of the total is φ\sqrt{\varphi} times the weighted mean CV. For each series, variance_contribution_pct is its contribution to the variance of the total catch, its covariance with the total divided by the variance of the total (the contributions add up to 100%, and a series that damps the total has a negative one); sd_share_pct is only its share of ∑iσi\sum_i \sigma_i, which ignores how the series vary together:

show_table(sync$series[, c("series", "mean_tonnes", "sd_tonnes", "cv", "sd_share_pct", "variance_contribution_pct")], digits = 2)
series mean_tonnes sd_tonnes cv sd_share_pct variance_contribution_pct
Atlantic herring 1,783,720.1 641,085.45 0.36 17.14 -21.13
Atlantic cod 1,340,211.7 250,666.29 0.19 6.70 6.95
Capelin 963,394.1 913,315.70 0.95 24.42 58.50
Blue whiting(=Poutassou) 681,303.2 424,417.72 0.62 11.35 3.77
Atlantic mackerel 594,879.2 193,891.44 0.33 5.18 6.08
European sprat 379,887.1 184,815.48 0.49 4.94 10.46
Saithe(=Pollock) 369,793.0 121,278.75 0.33 3.24 6.85
Haddock 342,581.3 120,815.19 0.35 3.23 3.16
Norway pout 203,371.8 204,525.52 1.01 5.47 11.78
European pilchard(=Sardine) 160,844.9 35,782.65 0.22 0.96 0.66
show_table(data.frame(subset(sync$windows, first_year %% 10 == 0), row.names = NULL), digits = 2)
first_year last_year mid_year n_series synchrony_phi cv_total mean_cv_series portfolio_effect_pct
1950 1969 1959.5 100 0.11 0.08 0.49 514.30
1960 1979 1969.5 100 0.04 0.06 0.50 722.09
1970 1989 1979.5 100 0.09 0.08 0.47 491.84
1980 1999 1989.5 100 0.18 0.09 0.35 279.75
1990 2009 1999.5 100 0.15 0.09 0.33 250.20
2000 2019 2009.5 100 0.09 0.07 0.34 363.01

Reading the results. The 100 species series of area 27 have a synchrony of 0.12, far from 1: their fluctuations largely compensate each other. The CV of the total catch, 0.16, is 0.35 (φ\sqrt{\varphi}) times what it would be if all species fluctuated together (0.46). A single species series varies on average 4.1 times as much as the total, a portfolio effect of 306%. The mean correlation between two series is 0.02. In the moving windows, the synchrony was 0.11 in 1950–1969, reached 0.20 in 1978–1997 and fell to 0.07 in 2005–2024.

Other settings

Without detrending, and by country instead of species:

none <- catch_synchrony(FAO27$area_data, detrend = "none", label = "FAO27 no detrending")
FAO27_no_detrending_synchrony_species.png
countries <- catch_synchrony(FAO27$area_data, by = "country")
Atlantic__Northeast_synchrony_country.png
settings <- rbind(sync$summary, none$summary, countries$summary)
settings$by <- c("species", "species", "country")
show_table(settings[, c("by", "detrend", "n_series", "synchrony_phi", "cv_total", "mean_cv_series",
                        "portfolio_effect_pct", "mean_pairwise_correlation")], digits = 2)
by detrend n_series synchrony_phi cv_total mean_cv_series portfolio_effect_pct mean_pairwise_correlation
species linear 100 0.12 0.16 0.64 305.95 0.02
species none 100 0.09 0.16 0.78 378.89 0.02
country linear 19 0.41 0.16 0.32 97.29 0.13

Without detrending, the synchrony is 0.09 instead of 0.12: the catches of most species grew over the decades, and this common trend makes the series look synchronous (Lepš et al. 2019). The catches of the 19 countries compensate each other even more (φ\varphi = 0.41).

Arguments and results

Argument Meaning Default
area_data FAO catch data: fishing_area_data()$area_data, or any subset of load_fao_data()
by What a series is: "species" or "country" "species"
detrend "linear" to remove a linear trend from each series, or "none" "linear"
window Length of the moving windows (years) 20
top_n Number of series with the largest catch in the CV and correlation charts 20
min_median Series need a median catch above this many tonnes a year 10
min_nonzero Series need catch in more than this share of the years 0.75
plot, table, lang, pptx, label Common arguments (see the start of the page)
Element Content
summary n_series, first_year, last_year, detrend, synchrony_phi, cv_total, weighted_mean_cv, mean_cv_series, portfolio_effect_pct, mean_pairwise_correlation and positive_correlations_pct
series Each series: mean_tonnes, sd_tonnes (after detrending), cv, sd_share_pct and variance_contribution_pct
windows The measures in each moving window: first_year, last_year, mid_year, n_series, synchrony_phi, cv_total, mean_cv_series and portfolio_effect_pct (NULL when the data have fewer than window + 2 years)
correlation Matrix of the pairwise correlations of the detrended series
  • Trends make series look synchronous (Lepš et al. 2019): compare detrend = "linear" and "none" before reading much into the synchrony.
  • The measures are correlation-based. Ong et al. (2021) used wavelet coherence, which separates time scales and allows for lags.
  • Catches can fluctuate together because of the fish or because of fishing: Ong et al. (2021) found that coherent catches can come from coherent biomass or from coherent fishing mortality.
  • The mean CV of the series is not weighted, so small and variable series raise the portfolio effect; φ\varphi and the weighted mean CV weight each series by its size.

🚢 Distant-water profile of a country

Since 1950 marine fisheries have spread over a growing part of the ocean (Swartz et al. 2010). distant_water_profile() follows this expansion for one country with FAO statistics: its catch in the FAO areas it borders and in those it does not border, the number of areas in which it fishes each year, and the first and last year, peak and recent catch in each area.

Method

  • Distant-water catch is defined as by FAO: the catch of a country in the FAO major fishing areas it does not border. Fishing outside its own waters but in an area it borders does not count (Grainger and Garcia 1996, section 2.6; Garibaldi and Limongelli 2003, section 2.1).
  • An area is adjacent to a country when the country’s land, including overseas territories, lies within 20 km of the FAO area boundary. This is a rule of this package, the same as in coastal_distant() (see 🔍 Data quality, diversity and fleets).
  • An area counts as fished in a year when the country’s catch there is above min_catch tonnes (default 0, any reported catch).
  • Inland fishing areas are left out.

FAO records the catch by the flag of the vessel and by FAO major area, not by exclusive economic zone (EEZ). The profile shows in which FAO areas a country’s fleet fished, not whether the catch came from its own waters, the waters of other countries or the high seas. Swartz et al. (2010) mapped the expansion with Sea Around Us catch maps; this function uses FAO statistics only, at the resolution of FAO major areas.

Example

The function takes a country, as named in the FAO data, and uses the catch of all areas:

china <- distant_water_profile("China")
China_distant_water.png
China_distant_water_share.png
China_distant_water_areas.png
China_distant_water_n_areas.png
China_distant_water_timeline.png

The charts are the catch in adjacent and distant-water areas (in tonnes and as a share), the catch in each distant-water area (the top_n largest, the others combined), the number of areas fished each year, and the years from the first to the last catch in each area.

show_table(data.frame(tail(china$yearly, 5), row.names = NULL), digits = 1)
Year adjacent_tonnes distant_tonnes distant_pct n_adjacent_areas n_distant_areas n_areas
2020 11,338,947 647,381.8 5.4 1 12 13
2021 11,180,662 762,963.3 6.4 1 12 13
2022 11,192,862 819,959.4 6.8 1 12 13
2023 11,232,509 862,450.3 7.1 1 12 13
2024 11,365,630 733,461.8 6.1 1 12 13
show_table(china$areas[, c("area", "adjacent", "first_year", "last_year", "peak_year", "peak_tonnes",
                           "total_tonnes", "share_of_distant_pct")], n = 20, digits = 1)
area adjacent first_year last_year peak_year peak_tonnes total_tonnes share_of_distant_pct
Pacific, Northwest TRUE 1950 2024 2015 13,668,205.8 513,123,780.1 NA
Pacific, Southeast FALSE 2000 2024 2022 554,788.4 7,017,268.6 50.4
Atlantic, Southwest FALSE 1994 2024 2015 471,519.0 2,972,602.5 21.4
Pacific, Western Central FALSE 1988 2024 2009 110,289.0 1,377,376.8 9.9
Atlantic, Antarctic FALSE 2010 2024 2024 116,368.2 754,284.4 5.4
Atlantic, Eastern Central FALSE 1986 2024 2012 67,402.0 576,779.9 4.1
Pacific, Eastern Central FALSE 2000 2024 2015 42,492.0 517,196.8 3.7
Indian Ocean, Western FALSE 1999 2024 2024 86,845.8 486,670.6 3.5
Pacific, Southwest FALSE 2001 2024 2019 10,802.0 85,474.1 0.6
Indian Ocean, Eastern FALSE 1995 2024 2023 6,451.9 66,412.3 0.5
Atlantic, Southeast FALSE 1991 2024 2000 7,059.0 39,749.4 0.3
Atlantic, Western Central FALSE 2008 2024 2023 1,872.0 7,402.1 0.1
Atlantic, Northeast FALSE 2004 2024 2005 5,587.0 7,358.2 0.1
Indian Ocean, Antarctic FALSE 2017 2018 2017 513.0 770.9 0.0
Mediterranean and Black Sea FALSE 1994 1997 1995 137.0 376.0 0.0

share_of_distant_pct is the share of each distant-water area in all the distant-water catch of the country over the whole period. China borders only the Northwest Pacific (area 61). It reported its first catch in area 27 in 2004, and area 27 makes up 0.1% of its distant-water catch.

For China, FAO notes that in 2022 China reported 2.3 million tonnes of distant-water catch but gave species and areas only for the catch landed in China (area 61). FAO filled the other areas with data from regional fisheries management organizations and entered 1.3 million tonnes as “Marine fishes nei” in area 61 (FAO 2024). The recent distant-water catch of China is therefore partly counted in its adjacent area 61.

Other settings

Spain, with min_catch = 100: an area counts as fished only in the years with more than 100 t:

spain <- distant_water_profile("Spain", min_catch = 100)
Spain_distant_water_share.png
Spain_distant_water_timeline.png
show_table(spain$areas[, c("area", "adjacent", "first_year", "last_year", "peak_year", "peak_tonnes",
                           "total_tonnes", "share_of_distant_pct")], n = 20, digits = 1)
area adjacent first_year last_year peak_year peak_tonnes total_tonnes share_of_distant_pct
Atlantic, Northeast TRUE 1950 2024 1969 614,352.0 31,240,735.4 NA
Atlantic, Eastern Central TRUE 1950 2024 1978 489,815.0 15,248,549.1 NA
Mediterranean and Black Sea TRUE 1950 2024 1982 163,022.0 8,755,909.8 NA
Atlantic, Northwest FALSE 1950 2024 1968 341,312.0 6,661,750.2 28.6
Atlantic, Southeast FALSE 1963 2024 1970 246,000.0 5,457,179.9 23.4
Indian Ocean, Western FALSE 1972 2024 2006 210,247.0 5,403,857.6 23.2
Atlantic, Southwest FALSE 1983 2024 2014 197,658.0 3,844,766.4 16.5
Pacific, Southeast FALSE 1970 2024 2000 28,933.0 605,979.2 2.6
Pacific, Eastern Central FALSE 1972 2024 2024 66,924.0 581,127.0 2.5
Pacific, Western Central FALSE 1998 2023 2013 45,035.0 418,408.1 1.8
Atlantic, Western Central FALSE 1972 2024 2011 13,217.0 148,548.8 0.6
Pacific, Southwest FALSE 2004 2024 2022 8,284.4 95,387.0 0.4
Indian Ocean, Eastern FALSE 1996 2024 1998 13,379.0 50,818.3 0.2
Atlantic, Antarctic FALSE 1987 2024 2003 882.0 9,504.2 0.0
Pacific, Antarctic FALSE 2004 2022 2013 531.0 4,910.8 0.0
Indian Ocean, Antarctic FALSE 2005 2018 2006 648.0 2,154.1 0.0
Pacific, Northwest FALSE 2005 2005 2005 537.0 537.0 0.0
Pacific, Northeast FALSE NA NA 2013 18.0 18.0 0.0

Spain borders three FAO areas: the Northeast Atlantic, the Mediterranean and Black Sea, and the Eastern Central Atlantic, because of the Canary Islands. Its catch in area 27 is therefore not distant-water catch, and share_of_distant_pct is empty for it.

How much of the distant-water catch of several countries comes from area 27, over the whole period (share_of_distant_pct) and over the last five years (recent_share_pct), with the distant-water share of their marine catch in the last year (distant_pct_latest):

others <- c("Japan", "Bulgaria", "Romania", "Korea, Republic of")
profiles <- c(list(China = china, Spain = spain),
              sapply(others, distant_water_profile, plot = FALSE, table = FALSE, simplify = FALSE))
area27 <- do.call(rbind, lapply(names(profiles), function(country) {
  areas <- profiles[[country]]$areas
  here <- areas$area_en == "Atlantic, Northeast"
  recent <- 100 * areas$last_5_years_tonnes / sum(areas$last_5_years_tonnes[!areas$adjacent])
  data.frame(country = fao_translate(country, "country", lang = NULL),
             distant_pct_latest = tail(profiles[[country]]$yearly$distant_pct, 1),
             area27_adjacent = areas$adjacent[here],
             area27_first_year = areas$first_year[here],
             share_of_distant_pct = areas$share_of_distant_pct[here],
             recent_share_pct = ifelse(areas$adjacent[here], NA, recent[here]))
}))
show_table(area27, digits = 1)
country distant_pct_latest area27_adjacent area27_first_year share_of_distant_pct recent_share_pct
China 6.1 FALSE 2004 0.1 0.0
Spain 54.2 TRUE 1950 NA NA
Japan 7.6 FALSE 1964 0.3 1.5
Bulgaria 0.0 FALSE 1972 10.4 NaN
Romania 0.0 FALSE 1970 3.1 NaN
Korea, Republic of 34.9 FALSE 1983 0.0 0.1

Arguments and results

Argument Meaning Default
country_name The country, as named in the FAO data (e.g. "China", "Spain")
top_n Number of distant-water areas shown separately; the others are combined 8
min_catch An area counts as fished in a year when the country’s catch there is above this many tonnes 0
data_version The FAO data release to use; see load_fao_data() "latest"
plot, table, lang, pptx, label Common arguments (see the start of the page); label defaults to the country
Element Content
yearly Each year: adjacent_tonnes, distant_tonnes, distant_pct, n_adjacent_areas, n_distant_areas and n_areas (areas fished)
areas One row per FAO area fished: adjacent, first_year and last_year with catch above min_catch, n_years, peak_year, peak_tonnes, last_5_years_tonnes, total_tonnes and share_of_distant_pct (empty for adjacent areas)
distant Yearly catch in each distant-water area (top_n areas, the others combined)

🔁 Revisions between FAO releases

FAO publishes a new release of the Global Capture Production data every year. A release adds the latest year and also revises earlier years when countries send corrected or more complete data (Garibaldi 2012). Zeller and Pauly (2018) call “presentist bias” the practice of applying improvements in reporting to recent years only, without revising the earlier years, which makes a time series show an increase that did not happen. compare_releases() compares two releases record by record and shows which years and countries were revised, and how far back the revisions reach.

Method

A record is the catch of one country, species item and FAO area in one year. Each record of the two releases is put in one class:

Class Rule
revised In both releases, with catches that differ by more than tolerance (0.5 t, rounding)
added Only in the new release, for a year the older release already covered
removed Only in the older release
reclassified Removed under one species item and added under another with the same country, area, year and catch, e.g. when FAO renames or splits a species item; not counted as a revision
new year In a year after the last year of the older release
unchanged Everything else

The function then sums the catch of each year in both releases and the revisions by country, and counts the records whose status flag changed (e.g. from an estimate to an official figure). The releases are compared on the names used by the package, matched through the FAO codes when a release is downloaded. No published study has compared successive FishStat releases record by record in this way: the comparison is a tool of this package, and the two papers above give the background.

Example

The comparison needs both releases on the computer. The newest release is bundled with the package; download older ones with download_fao_data() (about 5 MB each, from FAO). check_fao_update() lists the releases available.

check_fao_update()               # releases available from FAO
download_fao_data("2025.1.0")    # download an older release
releases <- compare_releases("2025.1.0", "2026.1.0", area_name = "Atlantic, Northeast")
Atlantic__Northeast_releases_2025_1_0_vs_2026_1_0.png
Atlantic__Northeast_releases_2025_1_0_vs_2026_1_0_by_year.png
Atlantic__Northeast_releases_2025_1_0_vs_2026_1_0_countries.png

The first chart is the total catch of each year in the two releases. The second is the revision of each year’s total (new minus old release), in thousand tonnes. The third gives the net revision of the top_n countries with the largest revisions, ranked by the sum of their absolute revisions: a country can rank high with a small net revision when its revisions up and down cancel out.

table(releases$records$change)
#> 
#>        added reclassified      removed      revised 
#>            9          136           35           53
show_table(data.frame(tail(releases$by_year, 10), row.names = NULL), digits = 1)
Year old_tonnes new_tonnes change_tonnes change_pct n_revised n_added n_removed n_reclassified n_status_changed
2014 8,914,935 8,914,898 -36.6 0.0 0 0 1 6 0
2015 9,410,087 9,410,278 191.3 0.0 1 0 1 6 0
2016 8,605,840 8,607,412 1,572.4 0.0 3 1 1 8 0
2017 9,625,087 9,628,636 3,549.4 0.0 6 0 2 8 0
2018 9,581,025 9,586,641 5,615.3 0.1 4 0 3 6 0
2019 8,570,117 8,575,264 5,147.1 0.1 4 1 2 8 0
2020 8,604,066 8,611,702 7,635.2 0.1 3 1 2 12 0
2021 8,349,327 8,358,726 9,398.2 0.1 7 3 2 4 0
2022 8,722,573 8,731,646 9,073.2 0.1 4 0 3 8 0
2023 8,663,332 8,749,829 86,497.2 1.0 16 2 4 8 29
show_table(releases$by_country[, c("country", "net_change_tonnes", "abs_change_tonnes", "n_records",
                                   "first_year", "last_year")], digits = 0)
country net_change_tonnes abs_change_tonnes n_records first_year last_year
Iceland 76,551 76,551 1 2023 2023
Ireland 54,000 54,000 8 2016 2023
Germany 1,844 5,168 5 2021 2022
Senegal -4,189 4,465 20 2011 2023
Portugal 0 3,410 10 2007 2011
France 0 1,999 12 2018 2023
Isle of Man 521 1,279 13 2023 2023
Venezuela (Boliv Rep of) -524 524 10 2011 2023
Belize -448 450 2 2016 2019
El Salvador 425 425 3 2015 2021

records keeps only the records that changed. The largest revisions:

records <- releases$records[order(-abs(releases$records$difference)), ]
show_table(data.frame(records[, c("country_name", "species_name", "Year", "tonnes_old", "tonnes_new",
                                  "difference", "change", "status_old", "status_new")], row.names = NULL),
           digits = 0)
country_name species_name Year tonnes_old tonnes_new difference change status_old status_new
Iceland Atlantic herring 2023 109,769 186,320 76,551 revised actual actual
Ireland North Atlantic rockweed 2022 28,000 38,000 10,000 revised estimate estimate
Ireland North Atlantic rockweed 2023 28,000 38,000 10,000 revised estimate estimate
Ireland North Atlantic rockweed 2020 28,000 36,000 8,000 revised estimate estimate
Ireland North Atlantic rockweed 2021 28,000 36,000 8,000 revised estimate estimate
Ireland North Atlantic rockweed 2018 28,000 34,000 6,000 revised estimate estimate
Ireland North Atlantic rockweed 2019 28,000 34,000 6,000 revised estimate estimate
Ireland North Atlantic rockweed 2017 28,000 32,000 4,000 revised estimate estimate
Germany Beaked redfish 2021 NA 2,140 2,140 added NA actual
Ireland North Atlantic rockweed 2016 28,000 30,000 2,000 revised estimate estimate

Reading the results. Between the two releases, 53 records of area 27 were revised, 9 added and 35 removed. Most of them concern the last ten years covered by the older release (48 of the revised records), and the largest revision is that of the last year: the total catch of 2023 went up by 86 thousand tonnes (1%). The 136 reclassified records are catches moved from one species item to another, which leave the totals unchanged.

Other settings

One country, ignoring changes of 100 t or less:

iceland <- compare_releases("2025.1.0", "2026.1.0", area_name = "Atlantic, Northeast",
                            country_name = "Iceland", tolerance = 100)
Atlantic__Northeast_Iceland_releases_2025_1_0_vs_2026_1_0_by_year.png
revised <- subset(iceland$by_year, n_revised + n_added + n_removed > 0)
show_table(data.frame(revised[, c("Year", "old_tonnes", "new_tonnes", "change_tonnes", "change_pct",
                                  "n_revised", "n_added", "n_removed", "n_status_changed")], row.names = NULL),
           digits = 1)
Year old_tonnes new_tonnes change_tonnes change_pct n_revised n_added n_removed n_status_changed
2023 1,371,088 1,447,639 76,551 5.6 1 0 0 0

For Iceland, only the catch of 2023 changed by more than 100 t, which raised its total by 5.6%. Without area_name and country_name the whole data set is compared; without old and new the newest release on the computer is compared with the one before it.

Arguments and results

Argument Meaning Default
old, new The releases to compare, e.g. "2025.1.0" and "2026.1.0", or "bundled" for the data bundled with the package NULL: the newest release on the computer for new, and the one before it for old
area_name FAO fishing areas to compare NULL (all)
country_name Countries to compare NULL (all)
tolerance Changes of at most this many tonnes are ignored 0.5
top_n Number of countries with the largest revisions in the country chart 10
data_dir Folder where the downloaded releases are stored fao_data_dir()
plot, table, lang, pptx, label Common arguments (see the start of the page); label defaults to the areas and countries compared
Element Content
by_year Each year covered by the older release: old_tonnes, new_tonnes, change_tonnes, change_pct, and the numbers of records n_revised, n_added, n_removed, n_reclassified and n_status_changed
by_country Revisions by country, without reclassified records: net_change_tonnes, abs_change_tonnes, n_records, first_year and last_year
records Every revised, added, removed or reclassified record: tonnes_old, tonnes_new, status_old, status_new, difference, change and status_changed
releases The two releases compared
  • Recent years are revised most, because their figures are often provisional or estimated when first published (see data_quality() in 🔍 Data quality, diversity and fleets).
  • A record counts as reclassified only when the same catch moves to another species item. When FAO splits one item into several with different catches, the change shows as records removed and added.
  • Revisions show what FAO changed, not which release is right.

📖 References

Carlson, S.M. and Satterthwaite, W.H. (2011). Weakened portfolio effect in a collapsed salmon population complex. Canadian Journal of Fisheries and Aquatic Sciences 68: 1579–1589. doi:10.1139/f2011-084

Cottrell, R.S., Nash, K.L., Halpern, B.S., Remenyi, T.A., Corney, S.P., Fleming, A., Fulton, E.A., Hornborg, S., Johne, A., Watson, R.A. and Blanchard, J.L. (2019). Food production shocks across land and sea. Nature Sustainability 2: 130–137. doi:10.1038/s41893-018-0210-1

FAO (2024). The State of World Fisheries and Aquaculture 2024. Blue Transformation in action. Rome: FAO. doi:10.4060/cd0683en

Garibaldi, L. (2012). The FAO global capture production database: a six-decade effort to catch the trend. Marine Policy 36: 760–768. doi:10.1016/j.marpol.2011.10.024

Garibaldi, L. and Limongelli, L. (2003). Trends in oceanic captures and clustering of large marine ecosystems: two studies based on the FAO capture database. FAO Fisheries Technical Paper 435. Rome: FAO. https://www.fao.org/4/y4449e/y4449e00.htm

Gephart, J.A., Deutsch, L., Pace, M.L., Troell, M. and Seekell, D.A. (2017). Shocks to fish production: identification, trends, and consequences. Global Environmental Change 42: 24–32. doi:10.1016/j.gloenvcha.2016.11.003

Grainger, R.J.R. and Garcia, S.M. (1996). Chronicles of marine fishery landings (1950-1994): trend analysis and fisheries potential. FAO Fisheries Technical Paper 359. Rome: FAO. https://www.fao.org/4/w3244e/w3244e00.htm

Lepš, J., Götzenberger, L., Valencia, E. and de Bello, F. (2019). Accounting for long-term directional trends on year-to-year synchrony in species fluctuations. Ecography 42: 1728–1741. doi:10.1111/ecog.04528

Loreau, M. and de Mazancourt, C. (2008). Species synchrony and its drivers: neutral and nonneutral community dynamics in fluctuating environments. The American Naturalist 172: E48–E66. doi:10.1086/589746

Mullon, C., Fréon, P. and Cury, P. (2005). The dynamics of collapse in world fisheries. Fish and Fisheries 6: 111–120. doi:10.1111/j.1467-2979.2005.00181.x

Ong, J.J.L., Walter, J.A., Jensen, O.P. and Pinsky, M.L. (2021). Global hotspots of coherent marine fishery catches. Ecological Applications 31: e02321. doi:10.1002/eap.2321

Swartz, W., Sala, E., Tracey, S., Watson, R. and Pauly, D. (2010). The spatial expansion and ecological footprint of fisheries (1950 to present). PLoS ONE 5: e15143. doi:10.1371/journal.pone.0015143

Thibaut, L.M. and Connolly, S.R. (2013). Understanding diversity–stability relationships: towards a unified model of portfolio effects. Ecology Letters 16: 140–150. doi:10.1111/ele.12019

Wilberg, M.J. and Miller, T.J. (2007). Comment on “Impacts of biodiversity loss on ocean ecosystem services”. Science 316: 1285. doi:10.1126/science.1137946

Worm, B., Barbier, E.B., Beaumont, N., Duffy, J.E., Folke, C., Halpern, B.S., Jackson, J.B.C., Lotze, H.K., Micheli, F., Palumbi, S.R., Sala, E., Selkoe, K.A., Stachowicz, J.J. and Watson, R. (2006). Impacts of biodiversity loss on ocean ecosystem services. Science 314: 787–790. doi:10.1126/science.1132294

Zeller, D. and Pauly, D. (2018). The ‘presentist bias’ in time-series data: implications for fisheries science and policy. Marine Policy 90: 14–19. doi:10.1016/j.marpol.2018.01.015