If you would like to return to information from the previous section, please click here.
One of the key variables for GCRMN monitoring is the biomass of coral
reef fishes. In order to convert abundance and length information to
biomass requires coefficients from the length-weight
relationship for individual taxa. Instead of manually searching for taxa
on Fishbase and looking for
length-weight coefficients, the rfishbase
makes it easy to
extract the information from a list of taxa.
In addition, fishbase contains useful information on trophic level and diet that can help in standardising the classification of taxa into functional groups.
Similarly, threat information from IUCNs Redlist can compliment coral
reef monitoring data by identifying taxa in threat of extinction and
individual threats used in the IUCNs assessment. This information can be
similarly extracted using the rredlist
package.
This wiki page provides a brief introduction to extracting
information from these databases. Note that the approach to extracting
from Fishbase and IUCN Redlist is similar to other R
packages and the basic technique can be applied across multiple
packages.
Fishbase can be a useful source to standardise biomass conversions and assign trophic information for fish taxa. In particular, if information is lacking from an individual species, information from similar taxa can be used. The search engine to convert common names and filter by geographic region can also assist in cleaning up coral reef monitoring data:
A strategy for extracting information from fishbase is to identify a
list of taxa using unique()
from the taxa from monitoring
data or specifying a list of taxa (i.e. this example from the Eastern
Tropical Pacific):
# set fish lists
fish_list <-
c("Acanthemblemaria crockeri",
"Apogon pacifici",
"Axoclinus carminalis",
"Chromis limbaughi",
"Gnathanodonciosus",
"Kyphosus sandwicensis",
"Microlepidotus inornatus",
"Paralabrax auroguttatus",
"Uraspis helvola",
"Zapteryx xyster")
As Fishbase has a number of different tables to extract data, the
Length-weight and Ecology are most
useful for converting size class information to biomass and to assign
trophic groups. To begin, we will extract the length_weight
coefficients:
# create empty object
fish_length_weight <- tibble()
# loop to import
for(i in 1:length(fish_list)){
# print progress to screen
cat(paste0("extracting... ", fish_list[i],
" [", i, " of ", length(fish_list), "]\n"))
# call to fields
dat <-
fish_list[i] %>%
rfishbase::length_weight()
# set taxa
dat %<>%
mutate(Taxa = fish_list[i])
# harvest results
fish_length_weight %<>%
bind_rows(dat)
}
# have a look
fish_length_weight
# # A tibble: 11 x 39
# SpecCode Species AutoCtr StockCode FamCode PopLWRef LengthMin LengthMax Type
# <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
# 1 46704 Acanthemblemaria … 9758 39343 483 59088 1.61 4.51 TL
# 2 NA Apogon pacifici NA NA NA NA NA NA <NA>
# 3 NA Axoclinus carmina… NA NA NA NA NA NA <NA>
# 4 11869 Chromis limbaughi 8975 12195 350 59088 1.05 11.3 TL
# 5 NA Gnathanodonciosus NA NA NA NA NA NA <NA>
# 6 66546 Kyphosus sandwice… NA NA NA NA NA NA <NA>
# 7 3569 Microlepidotus in… 5647 3765 327 26176 11.7 20.9 TL
# 8 14238 Paralabrax aurogu… 9328 14100 289 40637 54.6 60 TL
# 9 14238 Paralabrax aurogu… 37351 14100 NA 111079 13.7 47.9 SL
# 10 1983 Uraspis helvola NA NA NA NA NA NA <NA>
# 11 52476 Zapteryx xyster NA NA NA NA NA NA <NA>
# # … with 30 more variables: LmaxCompare <chr>, EsQ <chr>, Number <dbl>, Sex <chr>,
# # a <dbl>, aTL <dbl>, b <dbl>, CoeffDetermination <dbl>, SEa <dbl>, SEb <dbl>,
# # SDa <dbl>, SDb <dbl>, LCLa <dbl>, UCLa <dbl>, LCLb <dbl>, UCLb <dbl>, Method <chr>,
# # SpecimenType <chr>, Locality <chr>, DataRef <dbl>, C_Code <chr>, Comment <chr>,
# # Entered <dbl>, DateEntered <dbl>, Modified <dbl>, DateModified <dbl>, Expert <dbl>,
# # DateChecked <dbl>, TS <int>, Taxa <chr>
# set column order
fish_length_weight %>%
dplyr::select(Taxa,
Species,
a,
b)
# # A tibble: 11 x 4
# Taxa Species a b
# <chr> <chr> <dbl> <dbl>
# 1 Acanthemblemaria crockeri Acanthemblemaria crockeri 0.00957 2.63
# 2 Apogon pacifici Apogon pacifici NA NA
# 3 Axoclinus carminalis Axoclinus carminalis NA NA
# 4 Chromis limbaughi Chromis limbaughi 0.0159 3.04
# 5 Gnathanodonciosus Gnathanodonciosus NA NA
# 6 Kyphosus sandwicensis Kyphosus sandwicensis NA NA
# 7 Microlepidotus inornatus Microlepidotus inornatus 0.0151 2.93
# 8 Paralabrax auroguttatus Paralabrax auroguttatus 0.0146 3
# 9 Paralabrax auroguttatus Paralabrax auroguttatus 0.024 3.08
# 10 Uraspis helvola Uraspis helvola NA NA
# 11 Zapteryx xyster Zapteryx xyster NA NA
The trophic information from Fishbase can also be useful for
assigning trophic groups. To identify the
fields_of_interest
can help optimise bandwith while
conducting extractions for a long list of taxa:
# set fields to extract
fields_of_interest <-
c("Species",
"FoodTroph",
"DietTroph",
"FeedingType")
# create empty object
fish_diet_information <- tibble()
# loop to import
for(i in 1:length(fish_list)){
# print progress to screen
cat(paste0("extracting... ", fish_list[i],
" [", i, " of ", length(fish_list), "]\n"))
# call to fields
dat <-
rfishbase::ecology(fish_list[i], fields = fields_of_interest)
# set taxa
dat %<>%
mutate(Taxa = fish_list[i])
# harvest results
fish_diet_information %<>%
bind_rows(dat)
}
# set column order
fish_diet_information %<>%
dplyr::select(Taxa,
Species,
FoodTroph,
DietTroph,
FeedingType)
# # A tibble: 10 x 5
# Taxa Species FoodTroph DietTroph FeedingType
# <chr> <chr> <dbl> <dbl> <chr>
# 1 Acanthemblemaria cro… Acanthemblemaria cro… 3.4 NA selective plankton feed…
# 2 Apogon pacifici Apogon pacifici NA NA <NA>
# 3 Axoclinus carminalis Axoclinus carminalis NA NA <NA>
# 4 Chromis limbaughi Chromis limbaughi 3.4 NA selective plankton feed…
# 5 Gnathanodonciosus Gnathanodonciosus NA NA <NA>
# 6 Kyphosus sandwicensis Kyphosus sandwicensis NA NA <NA>
# 7 Microlepidotus inorn… Microlepidotus inorn… 3.55 NA hunting macrofauna (pre…
# 8 Paralabrax aurogutta… Paralabrax aurogutta… NA NA <NA>
# 9 Uraspis helvola Uraspis helvola 3.78 NA hunting macrofauna (pre…
# 10 Zapteryx xyster Zapteryx xyster NA NA <NA>
Obtaining information from the IUCN Redlist can highlight threatened species within a region and help focus coral reef monitoring programmes. For example, “Camotillo” Paralabrax albomaculatus in Galápagos is considered Endangered.
The extraction process is similar to that of rfishbase
,
a list of taxa is constructed and a for()
loop is used to
go through the individual taxa. Users should note that an api
key is required to access the information from the IUCN Redlist
API:
# list taxa
taxa_to_get <-
c("Acanthocybium solandri",
"Aetobatus narinari",
"Alectis ciliaris",
"Alopias pelagicus",
"Alopias superciliosus",
"Anous stolidus",
"Aphriza virgata",
"Apristurus kampae"
"Apristurus stenseni",
"Arctocephalus galapagoensis",
"Ardenna carneipes",
"Ardenna creatopus",
"Ardenna grisea",
"Ardenna pacifica",
"Balaenoptera acutorostrata",
"Balaenoptera borealis",
"Balaenoptera musculus",
"Balaenoptera physalus)
## -- loop to extract -- ##
# set empty object to hold results
pelagic_taxa_redlist_classifications <- tibble()
pelagic_taxa_redlist_threats <- tibble()
# loop to extract
for(i in 1:length(taxa_to_get)){
# print progress to window
cat(paste0("processing... ", taxa_to_get[i],
" [ ", i, " of ", length(taxa_to_get), " ]\n"))
# get category
cat <-
rredlist::rl_search(name = taxa_to_get[i],
key = api_key) %>%
.$result %>%
as_tibble()
# get threats
dat <-
rredlist::rl_threats(name = taxa_to_get[i],
key = api_key) %>%
.$result %>%
as_tibble()
# set scientific name
dat %<>%
mutate(scientific_name = taxa_to_get[i])
## -- harvest results -- ##
# bind result data
# cat %<>%
# left_join(dat)
# harvest classifications
pelagic_taxa_redlist_classifications %<>%
bind_rows(cat)
# harvest threats
pelagic_taxa_redlist_threats %<>%
bind_rows(dat)
}
In this example, the taxonomic classification are extracted along
with the population_trend
, assessment_date
and
other information:
# have a look
pelagic_taxa_redlist_classifications
# # A tibble: 17 x 30
# taxonid scientific_name kingdom phylum class order family genus main_common_name
# <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 170331 Acanthocybium so… ANIMALIA CHORD… ACTIN… PERCI… SCOMBR… Acant… Wahoo
# 2 42564343 Aetobatus narina… ANIMALIA CHORD… CHOND… MYLIO… AETOBA… Aetob… Whitespotted Ea…
# 3 155014 Alectis ciliaris ANIMALIA CHORD… ACTIN… PERCI… CARANG… Alect… African Pompano
# 4 161597 Alopias pelagicus ANIMALIA CHORD… CHOND… LAMNI… ALOPII… Alopi… Pelagic Thresher
# 5 161696 Alopias supercil… ANIMALIA CHORD… CHOND… LAMNI… ALOPII… Alopi… Bigeye Thresher
# 6 22694794 Anous stolidus ANIMALIA CHORD… AVES CHARA… LARIDAE Anous Brown Noddy
# 7 44215 Apristurus kampae ANIMALIA CHORD… CHOND… CARCH… PENTAN… Apris… Longnose Catsha…
# 8 44574 Apristurus stens… ANIMALIA CHORD… CHOND… CARCH… PENTAN… Apris… Panama Ghost Ca…
# 9 2057 Arctocephalus ga… ANIMALIA CHORD… MAMMA… CARNI… OTARII… Arcto… Galápagos Fur S…
# 10 22698188 Ardenna carneipes ANIMALIA CHORD… AVES PROCE… PROCEL… Arden… Flesh-footed Sh…
# 11 22698195 Ardenna creatopus ANIMALIA CHORD… AVES PROCE… PROCEL… Arden… Pink-footed She…
# 12 22698209 Ardenna grisea ANIMALIA CHORD… AVES PROCE… PROCEL… Arden… Sooty Shearwater
# 13 22698175 Ardenna pacifica ANIMALIA CHORD… AVES PROCE… PROCEL… Arden… Wedge-tailed Sh…
# 14 2474 Balaenoptera acu… ANIMALIA CHORD… MAMMA… CETAR… BALAEN… Balae… Common Minke Wh…
# 15 2475 Balaenoptera bor… ANIMALIA CHORD… MAMMA… CETAR… BALAEN… Balae… Sei Whale
# 16 2477 Balaenoptera mus… ANIMALIA CHORD… MAMMA… CETAR… BALAEN… Balae… Blue Whale
# 17 2478 Balaenoptera phy… ANIMALIA CHORD… MAMMA… CETAR… BALAEN… Balae… Fin Whale
# # … with 21 more variables: authority <chr>, published_year <int>, assessment_date <chr>,
# # category <chr>, criteria <chr>, population_trend <chr>, marine_system <lgl>,
# # freshwater_system <lgl>, terrestrial_system <lgl>, assessor <chr>, reviewer <chr>,
# # aoo_km2 <chr>, eoo_km2 <chr>, elevation_upper <int>, elevation_lower <int>,
# # depth_upper <int>, depth_lower <int>, errata_flag <lgl>, errata_reason <chr>,
# # amended_flag <lgl>, amended_reason <chr>
It is also interesting to note the criteria for the threat classifications are available and can be useful in characterising threats within a monitoring region:
# review threats
pelagic_taxa_redlist_threats
# # A tibble: 112 x 8
# code title timing scope severity score invasive scientific_name
# <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 5.4 Fishing & harvest… Ongoing <NA> <NA> Low Im… <NA> Acanthocybium s…
# 2 5.4.4 Unintentional eff… Ongoing <NA> <NA> Low Im… <NA> Acanthocybium s…
# 3 5.4 Fishing & harvest… Ongoing Majorit… Slow, Signi… Medium… <NA> Aetobatus narin…
# 4 5.4 Fishing & harvest… Ongoing Minorit… Slow, Signi… Low Im… <NA> Aetobatus narin…
# 5 5.4.1 Intentional use: … Ongoing Minorit… Slow, Signi… Low Im… <NA> Aetobatus narin…
# 6 5.4.3 Unintentional eff… Ongoing Majorit… Slow, Signi… Medium… <NA> Aetobatus narin…
# 7 5.4.4 Unintentional eff… Ongoing Majorit… Slow, Signi… Medium… <NA> Aetobatus narin…
# 8 5.4.5 Persecution/contr… Ongoing Minorit… Slow, Signi… Low Im… <NA> Aetobatus narin…
# 9 5.4 Fishing & harvest… Ongoing Unknown Negligible … Unknown <NA> Alectis ciliaris
# 10 5.4 Fishing & harvest… Ongoing Unknown No decline Unknown <NA> Alectis ciliaris
# # … with 102 more rows
As these examples come from outside of the WIO region, course participants should try extracting from their monitoring data or known taxa from their region. These exercises will also help understand the relative coverage and accuracy of these databases for the WIO region.
Another useful tool for coral reef monitoring is additional information that can be gleaned from iNaturalist