
🎓 Tutorial: the Northeast Pacific (FAO area 67) from zero to a report
Source:vignettes/articles/tutorial-67.Rmd
tutorial-67.Rmdfao_data_info() shows the release you use and how
to cite it.
This tutorial walks through a complete assessment of one FAO major fishing area, the Northeast Pacific (FAO area 67), from an empty R session to a finished report. Area 67 stretches from the eastern Bering Sea and the Gulf of Alaska along the coasts of Canada and the United States down to northern California (40° N). The tutorial uses almost every function of the package, in the order you would use them in your own work, and explains what each chart shows, how to read it and what it says about the area. If you have never used the package, read it from top to bottom and run the code as you go; if you know the package, use the table of contents to jump to the step you need.
Area 67 is a good teaching example because its history is written clearly in the data: for twenty years the fleets of Japan and the USSR took a large part of its catch, until the United States and Canada extended their fishery limits to 200 nautical miles in 1977 and the catch passed to their own fleets. It is dominated by one species, the Alaska pollock, it holds a famous case of overfishing (the Pacific ocean perch) and the salmon fisheries of the North Pacific, and its data are among the best of all FAO areas. Every number in the text below is computed from the data when the page is built, so it matches the charts.
How the charts are explained. Under each chart, “🔎 How to read it” describes the axes, colours and lines, and “What it shows for area 67” gives the result. Charts describe the reported catch: they say what was landed and reported to FAO, not how many fish are in the sea. Keep that in mind for every conclusion.
1. 🧰 Prepare
Install the package once, with all the packages it uses (see 🚀 Get started for details), then load it at the start of every session:
install.packages("remotes")
remotes::install_github("Linbojun99/faofishingreport", dependencies = TRUE)Work in a project folder. Every function saves its
charts and tables in the working directory (the folder
getwd() returns). Create one folder per assessment,
e.g. with an RStudio project, or set it yourself:
dir.create("~/fao67", showWarnings = FALSE)
setwd("~/fao67")
getwd()Choose the settings once for the session with
fao_settings(): the language of the charts, their style and
the output formats. Call it without arguments to see the current
settings.
fao_settings(lang = "en", theme = "classic", dpi = 100, pptx = FALSE)| Setting | Here | What it does |
|---|---|---|
lang |
"en" |
Chart text and names in English; "zh" Chinese;
"both" both |
theme |
"classic" |
Chart style (see 🎨 Customise) |
dpi |
100 |
Resolution of the PNG files (300 for print) |
pptx |
FALSE |
TRUE also saves every chart as an editable PowerPoint
file |
The chart font is chosen for your system (fao_font()
shows it): SimSun on Windows, Songti SC on macOS, Noto Serif CJK SC on
Linux, so that Chinese names display.
2. 💾 Get the data
2.1 Check for the newest FAO release
FAO publishes the Global Capture Production statistics once a year.
The package comes with a recent release; check_fao_update()
compares it with the newest one online, and
download_fao_data() downloads and converts a release (about
6 MB, usually under a minute):
check_fao_update() # newest release online vs. the data on your computer
download_fao_data() # download the newest release (only when FAO publishes a new one)2.2 Load the data and know which release you use
load_fao_data() returns the newest release available on
your computer (downloaded, or else the one bundled with the package),
one row per country, species item, area and year:
fao <- load_fao_data()
dim(fao)
#> [1] 1024698 8
show_table(fao[fao$FAO.major.fishing.area..Name. == "Pacific, Northeast" & fao$Year == 2024, ], n = 5)| Country..Name. | ASFIS.species..Name. | FAO.major.fishing.area..Name. | Unit..Name. | Unit | Year | Production | Production.Type | |
|---|---|---|---|---|---|---|---|---|
| 95717 | Canada | Pink(=Humpback) salmon | Pacific, Northeast | Tonnes - live weight | TLW, Number | 2024 | 3,659.42 | actual |
| 95792 | Canada | Chum(=Keta=Dog) salmon | Pacific, Northeast | Tonnes - live weight | TLW, Number | 2024 | 1,840.59 | actual |
| 95867 | Canada | Coho(=Silver) salmon | Pacific, Northeast | Tonnes - live weight | TLW, Number | 2024 | 432.38 | actual |
| 95908 | Canada | Rainbow trout | Pacific, Northeast | Tonnes - live weight | TLW, Number | 2024 | 0.00 | actual |
| 95983 | Canada | Sockeye(=Red) salmon | Pacific, Northeast | Tonnes - live weight | TLW, Number | 2024 | 1,418.83 | actual |
| Column | Meaning |
|---|---|
Country..Name. |
Reporting country (FAO English name) |
ASFIS.species..Name. |
FAO species item (a species, a genus, a family or a group such as “Marine fishes nei”, nei = not elsewhere included) |
FAO.major.fishing.area..Name. |
FAO major fishing area |
Year, Production
|
Year and catch in tonnes live weight |
Production.Type |
How the value was obtained: reported by the country, estimated by FAO, … |
Always record the release you used: FAO revises past
years in every release, so a report must say which one it is based on.
fao_data_info() gives the release, its dates, the download
link and a citation:
info <- fao_data_info()
info
#> FAO Global Capture Production
#> Release: 2026.1.0 (published by FAO on 2026-03-30)
#> Years: 1950-2024
#> File: https://www.fao.org/fishery/static/Data/Capture_2026.1.0.zip
#> Obtained: bundled with faofishingreport, downloaded from FAO on 2026-10-10
#> Licence: CC BY 4.0 (https://www.fao.org/contact-us/terms/db-terms-of-use/en)
#> Citation: FAO. 2026. Global Capture Production 1950-2024, release 2026.1.0. In: Fisheries and Aquaculture [online]. Rome. [Cited 10 October 2026]. https://www.fao.org/fishery/collection/capture/en. Licence: CC BY 4.0.2.3 Where the data are kept
Downloaded releases are kept in the data folder of the package,
fao_data_dir(), and used again in every session. To share
one folder between computers or a team, set the environment variable
FAOFISHINGREPORT_DATA_DIR in ~/.Renviron (see
💾 FAO data). Your own copies of the data of an
area can be saved like any R object:
fao_data_dir()
#> [1] "/home/runner/.local/share/R/faofishingreport"
area67_raw <- fao[fao$FAO.major.fishing.area..Name. == "Pacific, Northeast", ]
saveRDS(area67_raw, "area67_data.rds") # for R: readRDS("area67_data.rds")
write.csv(area67_raw, "area67_data.csv", row.names = FALSE, fileEncoding = "UTF-8") # for Excel3. 🌊 The catch of the area
fishing_area_data() takes the name of an FAO major area,
keeps its data, and draws the total catch with its stages and the share
of the area in the world marine catch:
NEP <- fishing_area_data("Pacific, Northeast")
area67 <- NEP$area_datafishing_trend.png: total catch and its
stages
🔎 How to read it. The grey area is the yearly catch of the
area (million tonnes). The vertical dashed lines are
breakpoints: years in which the mean catch changes,
found with the Bai-Perron test
(strucchange::breakpoints()); a stage starts at each dashed
line. The horizontal grey segments are the mean catch of each stage.
What it shows for area 67. The catch rose from 0.6 million t in 1950 to a peak of 3.4 million t in 1987, and was 2.6 million t in 2024. The test finds 3 stages: 1950–1963 (mean 0.7 million t); 1964–1983 (mean 2.0 million t); 1984–2024 (mean 2.9 million t). They follow the history of the fleets, which the next steps show one by one: a small catch of salmon and herring by Canada and the United States in the 1950s; the arrival of the trawlers of the USSR and Japan, which fished the groundfish of the Bering Sea and the Gulf of Alaska from the 1960s; and, after the 200-mile fishery limits of 1977, the growth of the fleets of the United States to the high, steady catch of the last four decades.
fishing_percentage.png: share of the world
marine catch
🔎 How to read it. Each point is the catch of the area as a percentage of the catch of all FAO marine areas in that year; the red line is the mean of these shares. Inland waters are not counted.
What it shows for area 67. The area took between 2.1% and 5.0% of the world marine catch, 3.4% on average, and 3.2% in 2024. A share above its mean means the area grew faster (or declined more slowly) than the rest of the world’s oceans: here in the 1980s, when its catch reached its plateau.
NEP is a list: NEP$area_data (the data of
the area, used by all the next steps), NEP$coefs_data (the
stages: first and last year and mean catch) and
NEP$act_world_map (the map data). Save it with
saveRDS(NEP, "NEP.rds") to continue later without
recomputing.
4. 🐟 The main species
fishing_area_species() ranks the species items by their
catch (rank_range = 1:10: the ten largest), draws their
catch over time and finds the stages of each:
sp <- fishing_area_species(area67, rank_range = 1:10)area_species.png: the main species
together, and area_species_wrap.png: one
panel per species
🔎 How to read them. The first chart puts the ten species items on one scale, to compare their size. The second gives each species its own panel and scale, so that small species are readable: the line is the yearly catch, the dashed vertical lines and grey segments are the stages of that species, the dashed slanted line is a linear trend, and the percentage is the share of the species in the catch of the area over all years.
What it shows for area 67. Over the last five years the largest items were Alaska pollock(=Walleye poll.) (1.41 million t a year), North Pacific hake (0.22 million t a year), Pacific cod (0.17 million t a year), Pink(=Humpback) salmon (0.13 million t a year), Sockeye(=Red) salmon (0.13 million t a year). Four patterns stand out:
- One species dominates. The Alaska pollock gave 43.5% of all the catch of the area since 1950, against 39.3% for the next nine items together. What happens to the pollock happens to the area.
- Boom and bust. The Pacific ocean perch, a rockfish, went from 0.03 million t in 1950 to a peak of 0.46 million t in 1965, taken mostly by Soviet and Japanese trawlers, and fell to 0.07 million t ten years later. Rockfishes grow slowly and live long, so they cannot sustain a heavy catch for long.
- A fishery that faded. The Pacific herring gave 0.21 million t in 1950 and peaked at 0.34 million t in 1963; its catch in 2024 was 0.022 million t.
- Two-year cycles. The pink salmon lives two years, so its runs alternate: since 2000 the catch averaged 0.21 million t in odd years and 0.11 million t in even years, the zigzag in its panel.
Changing rank_range changes the species shown,
e.g. rank_range = 11:20 for the next ten. The lines in the
panels are smoothed only if timeseries_analysis = FALSE,
which also removes the stages.
5. 🌎 The main countries
fishing_area_country() does the same for the countries,
and adds a map of their catch:
co <- fishing_area_country(area67, rank_range = 1:8)🔎 How to read them. As for the species: one panel per country with its stages, trend and share of the catch over all years; the map colours each country by its total catch in the area.
What it shows for area 67. Over the last five years, United States of America (95.2%) and Canada (4.5%) took almost all of the catch. It was not always so. Canada was the largest fishing country in 9 years of the 1950s; the USSR was the largest in 1962–1966 (its peak: 0.9 million t in 1972) and Japan in 1967–1982 (its peak: 1.4 million t in 1970); the Republic of Korea reached 0.5 million t in 1986. The share of the United States was only 14% in 1970 and 32% in 1980, then 87% in 1990 and 96% in 2024; it has caught more than Japan every year since 1983, and Japan’s last catch above 1 000 t in the area was in 2001.
This change has a clear cause. The Fishery Conservation and Management Act of the United States (1976, in force on 1 March 1977) created a 200-mile fishery zone and gave foreign fleets only the part of the catch that US fleets could not take; Canada extended its fishery limit to 200 miles in the same year. In the 1980s US fishing vessels first sold their catch to foreign processing ships at sea (“joint ventures”), then landed it at home, until foreign fishing ended. The panels of Japan, the USSR, Korea and Poland all end in those years.
6. 🔍 One species, one country
6.1 Who catches a species: species_country()
pollock <- species_country(area67, "Alaska pollock(=Walleye poll.)", rank_range = 1:5)🔎 How to read them. The charts break the catch of one
species item down by country: the ranked chart and the small multiples
(one panel per country, with stages), a pie chart of the countries by
period and a map. Species names must be written as in the FAO data
(unique(area67$ASFIS.species..Name.) lists them;
fao_translate() gives the Chinese names).
What it shows for area 67. The pollock story is the story of the area in miniature. Japan developed the fishery (peak 1.07 million t in 1970), followed by the USSR (peak 0.39 million t in 1972) and the Republic of Korea (peak 0.46 million t in 1986). The United States caught almost no pollock before 1980; its catch rose through the joint ventures of the 1980s and has been the only large one since, with a peak of 1.55 million t in 2005.
6.2 What a country catches: country_species() and
country_analysis()
country_species() breaks down the catch of one country
in the area by species; country_analysis() looks at the
same country in all FAO areas, to see where it
fishes:
usa_67 <- country_species(area67, "United States of America", rank_range = 1:10)
usa_all <- country_analysis("United States of America", rank_range = 1:10)🔎 How to read them.
United_States_of_America_species_* charts: the species of
the United States in area 67.
United_States_of_Americaanalysis_* charts: the species of
the United States in all areas, its catch by area
(United_States_of_Americayearly_area_production.png, one
line per area) and a map of the areas where it fishes.
What it shows. In the 1970s the US catch in area 67 was mostly Natantian decapods nei, Pink(=Humpback) salmon, King crabs: salmon, crabs and shrimps of the coastal fisheries. Over the last five years it was Alaska pollock(=Walleye poll.), North Pacific hake, Pacific cod: the groundfish that the foreign fleets had caught before. Across all FAO areas, area 67 has been the largest fishing area of the United States since 1985, when it passed the Northwest Atlantic; it now gives far more than all other areas.
7. 📈 Composition, stock status, trends and shifts
7.1 Species groups: species_group_composition()
groups <- species_group_composition(area67)🔎 How to read it. Species items are grouped into the
ISSCAAP groups of FAO (e.g. “Herrings, sardines, anchovies”, “Cods,
hakes, haddocks”). The stacked areas show the catch of each group, and
the _share chart its percentage of the catch; the largest
groups are named, the others are “Other groups”.
What it shows for area 67. In 1950 the salmons (38%) and the herrings (35%) made up most of the catch, and the cods, hakes and haddocks only 9%. The trawl fisheries changed this within twenty years: the cods, hakes and haddocks (pollock, Pacific cod, Pacific hake) reached 53% in 1970 and 69% in 2024, with the flatfishes second.
7.2 Stock status plots: stock_status()
status <- stock_status(area67)🔎 How to read them. Each “stock” is the catch series of one
species item in the area. Every year, a stock is classed by its catch
relative to its own peak (Kleisner et al. 2013):
developing (before the peak, below half of it),
exploited (above half of the peak),
over-exploited (after the peak, 10–50% of it),
collapsed (after the peak, below 10%) and
rebuilding (back to 10–50% after a collapse). The
_stocks chart counts stocks, the _catch chart
weights them by their catch.
What it shows for area 67. Of the 91 stocks, in 2024 44.0% were collapsed and 24.2% over-exploited by number. Weighted by catch the picture is very different: the collapsed stocks took only 1.1% of the catch and the over-exploited ones 19.7%, while the exploited stocks, still above half of their peak, took 75.0%. Many small stocks are far below their old peaks (some of them, like the herring, because their fisheries were closed or not wanted any more), but the large stocks that give most of the catch are not.
What not to conclude. A stock status plot uses catch
only. A fall in catch can come from fewer fish, but also from less
fishing, management, markets or a change in reporting (e.g. a species
reported as “nei”). Use it to ask questions, not as a stock assessment;
smooth = TRUE classes the 3-year running mean, which
reduces the effect of single bad years.
7.3 Peak and trend of each species: peak_trend()
pt <- peak_trend(area67)
show_table(pt[, c("name", "peak_year", "pct_of_peak", "growth_pct_per_year", "trend")], n = 11)🔎 How to read it. For each of the main species: the year of its peak catch, the catch of the last year as a percentage of that peak, the mean yearly growth over the last ten years and the Mann-Kendall test of that trend (“up”, “down” or “none” at P < 0.05). In area 67 the total and the pollock are both close to their peak of the late 1980s, while the herring and the Pacific ocean perch are far below theirs.
7.4 Synchronous shifts: regime_shift()
shifts <- regime_shift(area67)🔎 How to read it. The breakpoints of each main species are found as in step 4; the bar chart counts, for every year, how many species changed their mean catch in that year. Years when many species change together point to a common cause: the ocean (a regime shift), a change of management, or a change of reporting.
What it shows for area 67. The years with the most simultaneous breakpoints are 1983 (3 species), 1986 (3 species), 1997 (3 species). The North Pacific had well-known climate regime shifts in 1977 and 1989 (Hare and Mantua 2000), but the catch breakpoints cluster instead in the 1980s, the years when the catch passed from foreign to US fleets. In catch data, fleets and management often leave a larger mark than the ocean; a breakpoint alone cannot tell which cause it was.
7.5 All FAO areas compared: area_overview()
overview <- area_overview()🔎 How to read it. The catch of every FAO marine area over time, and their peak year and recent trend. It places area 67 among the others: a medium-sized area with a catch that has been steady for four decades, unlike the areas that peaked and declined.
8. 🔍 Data quality, diversity and fleets
8.1 How good are the data? data_quality()
quality <- data_quality(area67)🔎 How to read them. _taxon_share: the share of
the catch identified to species, genus, family, or only to order or
higher (e.g. “Marine fishes nei”). _status_share: the share
reported officially by countries and the share estimated by FAO or the
country.
What it shows for area 67. In 2024, 95.7% of the catch was identified to species, only 2.4% to order or higher, and 100.0% was official data reported by the countries. Few areas have data this good: the species charts above describe nearly the whole catch, and a change in a species is unlikely to be a change in reporting.
8.2 Diversity and concentration:
diversity_concentration()
div <- diversity_concentration(area67)🔎 How to read it. Seven indicators, one per panel: the number of species items and of countries reporting, the Shannon diversity of the species, the Herfindahl-Hirschman index (HHI) of the species and of the countries, and the share of the five largest species and countries. The HHI goes from near 0 (catch spread over many) to 10 000 (one takes all); above 2 500 is “highly concentrated”.
What it shows for area 67. In 2024, 95 species items and 5 countries reported catch. Both indices are above 2 500: the HHI of the countries was 9135, close to its maximum, because the United States takes almost everything, and the HHI of the species was 3295, because of the pollock. The area has many species, but its catch depends on one country and one species.
8.3 Who fishes: country_group_summary() and
coastal_distant()
income <- country_group_summary(area67)
fleets <- coastal_distant(area67)🔎 How to read them. country_income: the catch
by World Bank income group of the countries.
coastal_distant: the catch of coastal
countries (whose territory borders the area) and of
distant-water countries, from the FAO area boundaries
and country outlines.
What it shows for area 67. Nearly all the catch is taken by high-income countries; the “not classified” part of the 1960s and 1970s is the USSR, which no longer exists. The distant-water countries (Japan, the Republic of Korea, Poland and others) took 26% of the catch in 1960 and up to 59% in 1981; their share fell below 1% in 1994 and has stayed there. Note that the USSR and the Russian Federation count as coastal, because part of the Russian coast on the Bering Sea borders the area: the foreign share of the catch before 1990 was even larger than the distant-water share.
9. 🔬 Methods from the literature
These analyses follow published methods; 🔬 Shocks, collapses, synchrony and fleets explains each in detail.
9.1 Catch shocks: catch_shocks()
shocks_country <- catch_shocks(area67)
shocks_species <- catch_shocks(area67, by = "species", label = "area67_species")🔎 How to read them. A shock is a year in
which the catch of a series fell far below what its recent years
predicted (Cottrell et al. 2019). The bar chart gives the percentage of
series with a shock in each year; _series shows the series
with their shocks, _by_country / _by_continent
count them by group.
What it shows for area 67. By country
(by = c("country", "area"), the default), area 67 has only
8 series, so each shock is a large percentage and the chart is coarse.
By species there are 98 series and 35 shocks, a more informative picture
for one area. Choose the series to fit the question:
countries for national food supply, species for ecology.
9.2 Fishery collapses: collapse_analysis()
set.seed(1) # the comparison with random series uses random numbers
collapses <- collapse_analysis(area67)
show_table(collapses$summary)🔎 How to read it. A series (one species by one country) has collapsed when, after its maximum, its catch stays below a tenth of the maximum for four years (Mullon et al. 2005). The bars count collapses by year and by the shape of the decline before them (plateau, smooth or erratic). The function repeats the analysis on random series without trend, because random ups and downs alone produce some “collapses” (Wilberg and Miller 2007): only the excess over that null model is informative.
What it shows for area 67. 10 of the 50 series collapsed (20%), against 21% of the random series. That is about what random variability alone produces, so the collapses of area 67 are, as a whole, no evidence of a fishery-wide problem; look at the individual series instead. This is why the null model matters: without it, 20% of the series “collapsed” would sound alarming.
9.3 Synchrony and the portfolio effect:
catch_synchrony()
sync <- catch_synchrony(area67)🔎 How to read them. _cv: the coefficient of
variation (year-to-year variability) of each species and, in red, of the
total catch. _correlation: how the species vary together.
The synchrony index φ is 0 when species compensate each other and 1 when
they rise and fall together (Loreau and de Mazancourt 2008).
What it shows for area 67. φ = 0.3: the total catch varies (CV 0.21) much less than its species (mean CV 0.54): the species are on average 161% more variable than their total. This portfolio effect means that when one species declines, others take its place. Among the main species in the chart, the Pacific ocean perch is by far the most variable, the mark of its boom and bust.
9.4 Pelagic to demersal ratio: pelagic_demersal()
pd <- pelagic_demersal(area67)
show_table(pd$decades[, c("period", "pd_mean", "pd_min", "pd_max")])🔎 How to read them. P/D is the catch of small pelagic fishes divided by the catch of demersal fishes and crustaceans (Caddy 1993; de Leiva Moreno et al. 2000), on a log scale; the dashed line is P/D = 1. In semi-enclosed seas a rising P/D has been linked to nutrient enrichment; in open areas it mostly follows what the fleets target.
What it shows for area 67. P/D fell from 0.95 in the 1950s to 0.016 in the 2020s. It does not mean the sea lost its nutrients: the herring fisheries shrank while the trawl fisheries for groundfish grew, so the ratio tells the history of the fishery.
9.5 A distant-water fleet: distant_water_profile()
japan_dw <- distant_water_profile("Japan")🔎 How to read them. The catch of one country in the FAO areas it borders (“adjacent”) and in the others (“distant-water”), the share of distant-water catch, the number of areas fished each year and when it entered each area (Swartz et al. 2010).
What it shows. Japan’s only adjacent area is area 61. Its distant-water share rose to 23.1% in 1970, when it fished 13 distant FAO areas; in that year area 67 alone gave 1.39 million t, or 70% of its distant-water catch. The 200-mile zones of the late 1970s closed the richest of these waters, and the share was 7.6% in 2024. Area 67 and Japan show the two sides of the same change.
10. 🌡️ Species traits and temperature
10.1 FishBase traits: fishbase_match()
traits <- fishbase_match(area67, version = "builtin")
show_table(traits[, c("species_en", "catch_pct", "match_type", "trophic_level", "temp_pref_mean")], n = 8)| species_en | catch_pct | match_type | trophic_level | temp_pref_mean |
|---|---|---|---|---|
| Alaska pollock(=Walleye poll.) | 43.51 | exact | 3.57 | 1.6 |
| North Pacific hake | 7.67 | exact | 4.32 | 8.6 |
| Pacific cod | 6.80 | exact | 3.78 | 2.9 |
| Pink(=Humpback) salmon | 5.25 | exact | 4.49 | 3.3 |
| Pacific herring | 4.61 | exact | 3.16 | 2.8 |
| Sockeye(=Red) salmon | 4.25 | exact | 3.54 | 4.2 |
| Yellowfin sole | 3.42 | exact | 3.49 | 3.4 |
| Pacific ocean perch | 2.66 | exact | 3.48 | 3.8 |
🔎 How to read it. Each FAO species item is matched to
FishBase or SeaLifeBase by published rules (exact name, synonym, WoRMS,
the mean of a higher taxon); match_type says which rule was
used and each row has links to check it.
version = "builtin" uses the table bundled with the
package, so it works offline. Matches are first guesses: check the main
ones with the links (see 🐠 FishBase).
10.2 Sea surface temperature and the mean temperature of the catch
sst67 <- fao_area_sst("Pacific, Northeast")
mtc <- mean_temperature_catch(area67, version = "builtin")
show_table(mtc$trend[, c("period_start", "period_end", "mtc_slope_per_decade", "trend", "sst_slope_per_decade", "cor_mtc_sst")])🔎 How to read it. The mean temperature of the catch (MTC, red) is the average preferred temperature of the species caught, weighted by their catch (Cheung et al. 2013); the blue line is the sea surface temperature (SST) of the area and the light band its range within the area. The lower panel is the share of the catch with a known preferred temperature; years below 50% are faded. A rising MTC means warm-water species take a larger share of the catch.
What it shows for area 67. The MTC stays between 2.7 and 3.8 °C, far below the SST of the area (9.9 °C in 2024). The reason is the species: the main catch is of cold-water fishes that live near the bottom, such as the pollock (preferred temperature 1.6 °C) and the Pacific cod (2.9 °C). The MTC was lowest in 1972, when the pollock gave 52% of the catch, and highest in 1967, before the pollock fishery grew; the Pacific hake of the US west coast (8.6 °C) raises it in the years when its catch is large. The trend of the MTC is “none” over 1950–2024 (0.009 °C per decade) and “none” over 1970–2024 (0.056 °C per decade) while the SST warmed by 0.21 °C per decade. The MTC of area 67 follows the mix of target species more than the ocean: read it with the species charts.
11. 📉 Stock assessment of the main species
cmsy_area() runs the CMSY++ catch-only stock assessment
(Froese et al. 2023) for the species with the largest catch. It needs
the JAGS program once (cmsy_setup(), see 📉 CMSY++) and takes a few minutes; the charts
below were made beforehand with the same code.
cmsy_setup() # once: JAGS and the R packages
nep_cmsy <- cmsy_area("Pacific, Northeast", top = 10) # the ten main species
nep_cmsy$summary # B/Bmsy, F/Fmsy, MSY, status🔎 How to read the Kobe plot. Each circle is one stock in its last year: its biomass relative to the biomass that gives the maximum sustainable yield (B/Bmsy, horizontal) and its fishing pressure relative to the one that gives it (F/Fmsy, vertical); the size is the catch. Green (bottom right): healthy; red (top left): overfished and still overfishing; orange and yellow: one of the two. The dashed line at B/Bmsy = 0.8 separates “maximally sustainably fished” from “overfished” in the FAO classes for catch-only results.
What it shows for area 67. 6 of the 10 stocks assessed were below 0.8 Bmsy in their last year; the lowest were Pacific herring (0.26) and Pacific ocean perch (0.37), the two fisheries whose catch has fallen furthest from its peak.
| Stock | species | B_Bmsy | F_Fmsy | MSY | status |
|---|---|---|---|---|---|
| ALK_67 | Alaska pollock(=Walleye poll.) | 0.91 | 1.16 | 1,382,729 | maximally sustainably fished |
| NHA_67 | North Pacific hake | 0.69 | 1.02 | 268,082 | overfished |
| PCO_67 | Pacific cod | 0.78 | 0.84 | 266,781 | overfished |
| PIN_67 | Pink(=Humpback) salmon | 0.61 | 1.14 | 163,342 | overfished |
| HEP_67 | Pacific herring | 0.26 | 0.99 | 197,699 | overfished |
| SOC_67 | Sockeye(=Red) salmon | 0.85 | 1.02 | 134,004 | maximally sustainably fished |
| YES_67 | Yellowfin sole | 1.24 | 0.55 | 152,488 | maximally sustainably fished |
| OPP_67 | Pacific ocean perch | 0.37 | 1.25 | 191,429 | overfished |
| CHU_67 | Chum(=Keta=Dog) salmon | 0.71 | 1.21 | 59,817 | overfished |
| HUM_67 | Atka mackerel | 0.85 | 1.33 | 59,732 | maximally sustainably fished |
🔎 How to read it. One row per stock: its B/Bmsy in the last year with the 95% confidence limits (the bar), coloured by status. A long bar means the data could not pin the stock size down.
🔎 How to read it. The share of the assessed stocks in each status class, year by year. It shows whether the stocks of the area moved together, e.g. all declining in the same years.
🔎 How to read it. The “management” chart of the largest stock (Alaska pollock(=Walleye poll.)): the catch with the MSY (top left), the fishing pressure F/Fmsy (top right), the biomass B/Bmsy with the lines at Bmsy and 0.8 Bmsy (bottom left), and the path of the stock through the Kobe plot (bottom right). Shaded bands are the 95% limits. See 📉 CMSY++ for all CMSY++ charts.
FAO capture statistics have no abundance index, so these are catch-only assessments driven largely by their priors: indicative only, never a replacement for a full stock assessment. This matters in area 67: most of its main stocks are assessed every year by the fishery agencies of the United States and Canada with survey data, and their catch is held by catch limits, so a catch that stays below its old peak can be read by a catch-only method as a smaller stock. Compare these results with the official assessments before using them. The CMSY++ code is that of its authors (https://github.com/SISTA16/cmsyPlusPlus); see the disclaimer in 📉 CMSY++.
12. 📝 The report in Word, LaTeX and PDF
fao_report() runs the analyses of the area and writes
the whole assessment as a report: cover, abstract, data and methods,
results with charts and tables, conclusions, references and appendix.
Here a Word report in English, with the catch shocks and the mean
temperature of the catch added to the default sections:
report <- fao_report(67, lang = "en", shocks = TRUE, mtc = TRUE)
report
#> FAO report: /tmp/RtmpIm8Mqo/faofishingreport_site_20a852b71945d/reports/FAO67_report_en.docx
#> Sections: total, species, countries, groups, status, quality, diversity, fleets, shocks, mtc
#> $main_species main species of the last five years (10 rows)
#> $main_countries main fishing countries of the last five years (5 rows)
#> $mtc_species species of the mean temperature of the catch, with FishBase matches (200 rows)
#> $analyses results of the analyses: total, species, countries, groups, status, quality, diversity, fleets, shocks, mtcThe headings of the Word file:
doc <- officer::docx_summary(officer::read_docx(report$file[["docx"]]))
headings <- doc$text[doc$style_name %in% c("FAO Heading 1", "FAO Heading 2")]
headings
#> [1] "1 Data and methods"
#> [2] "1.1 Data sources"
#> [3] "1.2 Methods"
#> [4] "2 Results and conclusions"
#> [5] "2.1 Catch trends and stages"
#> [6] "2.2 Main species"
#> [7] "2.3 Main fishing countries"
#> [8] "2.4 Composition by species group"
#> [9] "2.5 Stock status"
#> [10] "2.6 Data quality"
#> [11] "2.7 Diversity and concentration of the catch"
#> [12] "2.8 Coastal and distant-water fleets"
#> [13] "2.9 Catch shocks"
#> [14] "2.10 Mean temperature of the catch"
#> [15] "2.11 Conclusions"
#> [16] "References"
#> [17] "Appendix"12.1 Before the PDF: install TinyTeX once
The Word file and the LaTeX source (format = "latex")
need nothing else. The PDF is compiled from the LaTeX
source with XeLaTeX, which comes with a LaTeX distribution. The simplest
is TinyTeX (Xie 2019), a small
distribution installed from R, without administrator rights:
install.packages("tinytex")
tinytex::install_tinytex() # once, a few minutes; restart R afterwards
tinytex::is_tinytex() # TRUE when it is installedThe first PDF takes longer: TinyTeX downloads the LaTeX packages the
report uses (e.g. ctex and the Chinese fonts for a Chinese
report) and keeps them for the next times. If TinyTeX was installed long
ago and the PDF fails with a message such as “TeX Live is older than
remote”, update it with tinytex::reinstall_tinytex(). 📝 Assessment report lists the other
cases (another LaTeX distribution, compiling an edited .tex
file).
12.2 The same report as LaTeX and PDF
The same report as LaTeX and PDF, in Chinese, with CMSY++ (reusing the results of step 11 so CMSY++ does not run again):
fao_report(67, lang = "zh", format = c("docx", "latex", "pdf"), shocks = TRUE, mtc = TRUE,
cmsy = nep_cmsy)| File | What it is |
|---|---|
reports/FAO67_report_en.docx |
The Word report, to edit and complete |
reports/FAO67_report_zh.tex and
reports/FAO67_report_zh_figures/
|
The LaTeX source and its figures |
reports/FAO67_report_zh.pdf |
The PDF (needs XeLaTeX, e.g. TinyTeX, see above) |
The report is a first draft: the text is written from templates filled with the results. Read it, complete the grey “To be completed” notes (other data sources, discussion, other references) and check every conclusion against the charts above. See 📝 Assessment report for every option.
13. 🗂️ Where everything is saved and how to get it back
Every function writes into the working directory:
| Folder | What | Written by |
|---|---|---|
figures/png/ |
fishing_trend.png,
fishing_percentage.png
|
fishing_area_data() |
figures/png/area/ |
area_species*.png, area_country*.png
|
fishing_area_species(),
fishing_area_country()
|
figures/png/ |
area_country_map.png,
<species>_country_map.png
|
maps of fishing_area_country(),
species_country()
|
figures/png/species/ |
<species>_country_*.png |
species_country() |
figures/png/country/ |
<country>_species_*.png,
<country>analysis_*.png,
<country>yearly_area_production*.png
|
country_species(), country_analysis()
|
figures/png/summary/ |
<label>_<analysis>*.png,
e.g. Pacific__Northeast_stock_status_stocks.png
|
the summary and literature analyses |
figures/pptx/... |
The same charts as PowerPoint files | when pptx = TRUE
|
tables/ |
CSV tables (UTF-8, open in Excel) | every function with table = TRUE
|
reports/ |
The reports, and reports/cmsy/ with the CMSY++
results |
fao_report() |
cmsy_areas/ |
The CMSY++ runs, charts and tables of each area | cmsy_area() |
The files saved by this tutorial:
head(list.files("figures/png", recursive = TRUE), 20)
#> [1] "Alaska_pollock__Walleye_poll___country_map.png"
#> [2] "area_country_map.png"
#> [3] "area/area_country_wrap.png"
#> [4] "area/area_country.png"
#> [5] "area/area_species_wrap.png"
#> [6] "area/area_species.png"
#> [7] "country/United_States_of_America_species_pie_selected.png"
#> [8] "country/United_States_of_America_species_ranked_total.png"
#> [9] "country/United_States_of_America_species_ranked_wrap.png"
#> [10] "country/United_States_of_America_species_ranked.png"
#> [11] "country/United_States_of_Americaanalysis_area_total_production.png"
#> [12] "country/United_States_of_Americaanalysis_species_by_area.png"
#> [13] "country/United_States_of_Americaanalysis_species_pie_selected.png"
#> [14] "country/United_States_of_Americaanalysis_species_ranked_total.png"
#> [15] "country/United_States_of_Americaanalysis_species_ranked_wrap.png"
#> [16] "country/United_States_of_Americaanalysis_species_ranked.png"
#> [17] "country/United_States_of_Americafishing_area_map.png"
#> [18] "country/United_States_of_Americayearly_area_production_wrap.png"
#> [19] "country/United_States_of_Americayearly_area_production.png"
#> [20] "fishing_percentage.png"
length(list.files("figures/png", recursive = TRUE))
#> [1] 65
head(list.files("tables"), 10)
#> [1] "Alaska_pollock__Walleye_poll___country_ranked_table.csv"
#> [2] "area67_species_shocks_by_group.csv"
#> [3] "area67_species_shocks_by_year.csv"
#> [4] "area67_species_shocks_series.csv"
#> [5] "area67_species_shocks.csv"
#> [6] "country_coefs_data.csv"
#> [7] "country_ranked_table.csv"
#> [8] "Japan_distant_water_areas.csv"
#> [9] "Japan_distant_water.csv"
#> [10] "marine_areas_peak_trend_area.csv"Getting results back. Every function also returns its results to R (assign them, as above). To continue another day, save them and read them back, or read the CSV tables:
saveRDS(list(NEP = NEP, status = status, mtc = mtc), "area67_results.rds")
results <- readRDS("area67_results.rds")
names(results)
#> [1] "NEP" "status" "mtc"
head(read.csv("tables/Pacific__Northeast_stock_status_stocks.csv"), 3)
#> species_name species_en first_year
#> 1 Alaska pollock(=Walleye poll.) Alaska pollock(=Walleye poll.) 1950
#> 2 Pacific ocean perch Pacific ocean perch 1950
#> 3 North Pacific hake North Pacific hake 1960
#> peak_year peak_tonnes last_year_tonnes pct_of_peak status_last_year
#> 1 1987 1694473 1434351.99 84.64885 Exploited
#> 2 1965 460647 63974.28 13.88792 Rebuilding
#> 3 1987 372672 143562.00 38.52235 Over-exploitedWhen FAO publishes a new release, run
download_fao_data() and the same code again: every chart,
table and number is recomputed from the new data, and
fao_data_info() gives the new citation.
14. 🎨 Make it yours
The same analyses in Chinese or bilingual charts, another style or map projection:
fao_settings(lang = "zh") # Chinese charts and names
fao_settings(lang = "both") # Chinese and English on the same chart
fao_settings(theme = "minimal", palette = "npg", map_projection = "robinson", map_center = 180)
fao_settings(reset = TRUE) # back to the defaultsSee 🎨 Customise charts and maps for all settings.
✅ Summary
| Step | Function | Main output |
|---|---|---|
| Data |
load_fao_data(), fao_data_info()
|
The data and the release to cite |
| Area | fishing_area_data() |
Total catch, stages, share of the world |
| Species, countries |
fishing_area_species(),
fishing_area_country(), species_country(),
country_species(), country_analysis()
|
Who catches what, and its stages |
| Status |
species_group_composition(),
stock_status(), peak_trend(),
regime_shift(), area_overview()
|
Composition, status, trends, shifts |
| Quality, fleets |
data_quality(), diversity_concentration(),
country_group_summary(),
coastal_distant()
|
How reliable and how concentrated |
| Literature |
catch_shocks(), collapse_analysis(),
catch_synchrony(), pelagic_demersal(),
distant_water_profile()
|
Shocks, collapses, synchrony, P/D, fleets |
| Temperature |
fishbase_match(), fao_area_sst(),
mean_temperature_catch()
|
Traits, SST, MTC |
| Assessment | cmsy_area() |
B/Bmsy, F/Fmsy, MSY |
| Report |
fao_report(), with TinyTeX for the PDF |
Word, LaTeX, PDF |
📖 References
- Bai, J. and Perron, P. (2003). Computation and analysis of multiple structural change models. Journal of Applied Econometrics, 18(1), 1–22. doi:10.1002/jae.659
- Caddy, J. F. (1993). Toward a comparative evaluation of human impacts on fishery ecosystems of enclosed and semi-enclosed seas. Reviews in Fisheries Science, 1(1), 57–95. doi:10.1080/10641269309388535
- Cheung, W. W. L., Watson, R. and Pauly, D. (2013). Signature of ocean warming in global fisheries catch. Nature, 497, 365–368. doi:10.1038/nature12156
- 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
- de Leiva Moreno, J. I., Agostini, V. N., Caddy, J. F. and Carocci, F. (2000). Is the pelagic-demersal ratio from fishery landings a useful proxy for nutrient availability? ICES Journal of Marine Science, 57(4), 1091–1102. doi:10.1006/jmsc.2000.0705
- FAO. 2026. Global Capture Production 1950-2024, release 2026.1.0. In: Fisheries and Aquaculture [online]. Rome. [Cited 10 October 2026]. https://www.fao.org/fishery/collection/capture/en. Licence: CC BY 4.0.
- Fishery Conservation and Management Act of 1976. Public Law 94-265, 90 Stat. 331, United States (in force 1 March 1977; now the Magnuson-Stevens Fishery Conservation and Management Act).
- Froese, R., Winker, H., Coro, G., Palomares, M. L. D., Tsikliras, A. C., Dimarchopoulou, D., Touloumis, K., Demirel, N., Vianna, G. M. S., Scarcella, G., Schijns, R., Liang, C. and Pauly, D. (2023). New developments in the analysis of catch time series as the basis for fish stock assessments: the CMSY++ method. Acta Ichthyologica et Piscatoria, 53, 173–189. doi:10.3897/aiep.53.105910
- Hare, S. R. and Mantua, N. J. (2000). Empirical evidence for North Pacific regime shifts in 1977 and 1989. Progress in Oceanography, 47(2–4), 103–145. doi:10.1016/S0079-6611(00)00033-1
- Kleisner, K., Zeller, D., Froese, R. and Pauly, D. (2013). Using global catch data for inferences on the world’s marine fisheries. Fish and Fisheries, 14(3), 293–311. doi:10.1111/j.1467-2979.2012.00469.x
- Loreau, M. and de Mazancourt, C. (2008). Species synchrony and its drivers: neutral and nonneutral community dynamics in fluctuating environments. The American Naturalist, 172(2), 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(2), 111–120. doi:10.1111/j.1467-2979.2005.00181.x
- 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(12), e15143. doi:10.1371/journal.pone.0015143
- 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
- Xie, Y. (2019). TinyTeX: a lightweight, cross-platform, and easy-to-maintain LaTeX distribution based on TeX Live. TUGboat, 40(1), 30–32. https://tug.org/TUGboat/tb40-1/tb124xie-tinytex.pdf; R package tinytex: https://CRAN.R-project.org/package=tinytex