Previous steps

If you would like to return to information from the previous section, please click here.

Context

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.

Extracting from Fishbase

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>

Extracting from IUCN Redlist

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

Next steps

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