
🔬 Shocks, collapses, synchrony and fleets
Source:vignettes/articles/literature-analyses.Rmd
literature-analyses.Rmdfao_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.
-
catch_shocks(),collapse_analysis()andcatch_synchrony()take catch data, like the summary analyses: a fishing area fromfishing_area_data(), or any subset ofload_fao_data()(see 💾 FAO data). -
distant_water_profile()takes a country and follows its catch in all FAO areas. -
compare_releases()takes two releases of the FAO data.
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:
- The catch is smoothed, and the residuals from the smooth are kept.
- The residuals are regressed on those of the year before: (a lag-1 regression).
- 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.
- A candidate is kept only if the catch fell below a baseline computed from the preceding years. The loss is tonnes, or percent.
- The shock has recovered in the first later year in which the catch is back to at least 95% of .
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 | 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)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")
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 3The 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")
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 , the catch stays below for 4 consecutive years; the first of them is the collapse year (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 in every year from to : a sudden fall after a long period of high catch |
| Smooth | Correlation between catch and time from to below : 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:
with
and
,
and catch
,
where
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)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 and . 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")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 the standard deviation of series (after detrending), that of the total catch, the mean catch of series and the mean total catch:
| Measure | Formula | Column |
|---|---|---|
| Synchrony | , 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 | cv_total |
|
| Weighted mean CV | : the CV of the total if all series were perfectly synchronous | weighted_mean_cv |
| Decomposition | (Thibaut and Connolly 2013, eqs. 2–4): the lower the synchrony, the more stable the total | |
| Mean CV of the series | mean_cv_series |
|
| Portfolio effect | : 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)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.1583766The second line checks the decomposition of Thibaut and Connolly
(2013): the CV of the total is
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
,
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 () 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")
countries <- catch_synchrony(FAO27$area_data, by = "country")
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 ( = 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; 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_catchtonnes (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")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)
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")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)
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