get_Db_index estimates the BPc index sensu Querios et al., 2013 and Solan et al., 2004.

get_irr_index estimates the IPc index sensu Wrede et al., 2018.

get_Db_index (data, descriptor, taxon, density, biomass, averageOver,    
       subset, trait = Traits_Db, taxonomy = NULL, 
       full.output = FALSE, verbose = FALSE)

get_irr_index (data, descriptor, taxon, density, biomass, averageOver,    
       subset, trait = Traits_irr, taxonomy = NULL, 
       full.output = FALSE, verbose = FALSE)

Arguments

data

data.frame to use for extracting the arguments descriptor, taxon, value, averageOver. Can be missing.

descriptor

variable(s) *where* the data were taken, e.g. sampling stations. If data is not missing: one or more column(s) from data; use cbind or data.frame to select more columns. If data is missing: a vector, a list, a data.frame or a matrix (with one or multiple columns). It can be of type numerical, character, or a factor. In theory, descriptor can also be one number, NA or missing; however, care needs to be taken in case this combined with subset and averageOver.

taxon

variables describing *what* the data are; it gives the taxonomic name (e.g. species). If data is not missing: one column from data. If data is missing: a list (or data.frame with one column), or a vector. When a data.frame or a list the "name" will be used in the output; when a vector, the argument name will be used.

density, biomass

variable that contains the density and biomasss *values* of the data. If data is not missing: one or more column(s) from data; use cbind or data.frame to select more columns. If data is missing: a vector, a list, a data.frame or a matrix (with one or multiple columns). it should be of the same length (or have the same number of rows) as (the number of rows of) descriptor and taxon. Should contain numerical values. Should always be present.

averageOver

*replicates* over which averages need to be taken. If data is not missing: one or more column(s) from data; use cbind or data.frame to select more columns. Else a vector, a list, a data.frame or a matrix (with one or multiple columns). It can be of type numerical, character, or a factor. Can be absent.

subset

logical expression indicating elements to keep from the density data: missing values are taken as FALSE. If NULL, or absent, then all elements are used. Note that the subset is taken *after* the number of samples to average per descriptor is calculated, so this will also work for selecting certain taxa that may not be present in all replicates over which should be averaged.

trait

(taxon x trait) data, in *WIDE* format, and containing numerical values only. The first column should contain the name of the taxa. For function get_Db_index, also the columns named Mi and Ri, denoting the mobility and reworking mode (values between 1-4 and 1-5 respectively) should be present. For function get_irr_index, the columns named BT (burrowtype, 1-3), FT (feeding type, 1-3), and ID (injection depth, 1-4) should be present. Good choices are Traits_Db and Traits_irr (the defaults).

verbose

when TRUE, will write warnings to the screen.

full.output

when TRUE, will output the full data.frame with the descriptor x taxon indices (called all. See value.

taxonomy

taxonomic information (the relationships between the taxa), a data.frame; first column will be matched with taxon (in the data.frames data and trait). The subsequent columns should have increasing taxonomic level. (e.g. the column order should be *species, genus, family, ...*. The taxonomic relations from data and trait are used to estimate traits of taxa that are not accounted for, and that will be estimated based on taxa at the nearest taxonomic level. See details.

Details

The algorithm first calls function get_density, to obtain the (depending on averageOver averaged) taxon densities and biomass per descriptor. The weight is estimated from biomass and density.

Then, for each taxon in the obtained dataset, the required traits are extracted from the trait database using function get_trait.

The two data.frames are then merged (based on taxon), so that for each descriptor x taxon occurrence, the density, weight and required traits.

The bioturbation or bioirrigation Index is then estimated by using the appropriate formula,

Finally, the sums of the taxon indices are taken per descriptor, and the averages are estimated for the taxa, using the R-function aggregate.

Value

Both return a list with the following elements:

  • descriptor a data.frame with two columns, the descriptor, and the index (BPc or IPc), which consist of the *summed* values over all taxa.

  • taxon a data.frame with two columns, the taxon name, and the index (BPc or IPc), which is *averaged* over all descriptors

  • all, will only be present if full.output is TRUE: the full dataset on which the indices were estimated.

Depending on whether argument data is passed or not, the output columns may be labelled differently:

  • if data is passed: the original names in data will be kept

  • if data is not passed: the names will only be kept if explicitly passed.

Author

Karline Soetaert <karline.soetaert@nioz.nl>

See also

MWTL for the data sets

map_key for simple plotting functions

get_density for functions working with density data

get_trait_density for functions operating on density and trait data.

extend_trait for functions working with traits

get_trait

References

Queiros, Ana M., Silvana N. R. Birchenough, Julie Bremner, Jasmin A. Godbold, Ruth E. Parker, Alicia Romero-Ramirez, Henning Reiss, Martin Solan, Paul J. Somerfield, Carl Van Colen, Gert Van Hoey, Stephen Widdicombe, 2013. A bioturbation classification of European marine infaunal invertebrates. Ecology and Evolution 3 (11), 3958-3985

Solan M, Cardinale BJ, Downing AL, Engelhardt KAM, Ruesink JL, Srivastava DS. 2004. Extinction and ecosystem function in the marine benthos. Science 306:1177-80.

A. Wrede, J.Beermann, J.Dannheim, L.Gutow, T.Brey, 2018. Organism functional traits and ecosystem supporting services - A novel approach to predict bioirrigation. Ecological indicators, 91, 737-743.

Note

Equations:

  • The formula for estimating the bioturbation Index for taxon i (as in Querios et al., 2013)is:

    BPc_i = sqrt(Wi) * density_i * Ri*Mi,

    where Mi and Ri, denote the mobility and reworking mode (values between 1-4 and 1-5 respectively). See Traits_Db for what these numbers mean.

  • The formula for estimating the bioirrigation Index for taxon i (as in Wrede et al., 2018) is:

    IPc_i = (Wi)^(0.75) * density_i * BTi*FTi*IDi,

    where BT is burrowtype (1-3), FT is feeding type (1-3), and ID is injection depth (BF1-4). See Traits_irr for what these numbers mean.

The stations Index is the sum of all species indices.

Examples


##-----------------------------------------------------
## The bioturbation potential for one species
##-----------------------------------------------------

# Amphiura filiformis, for increasing density 
DbAmp <- get_Db_index(
              taxon   = rep("Amphiura filiformis", times=10), 
              density = 1:10, 
              biomass = (1:10)*4.5e-3, 
              full.output=TRUE, 
              trait   = Traits_Db)
head(DbAmp$all)
#>                 taxon descriptor density biomass Weight Ri Mi       BPc
#> 1 Amphiura filiformis          1       1  0.0045 0.0045  4  3 0.8049845
#> 3 Amphiura filiformis          2       2  0.0090 0.0045  4  3 1.6099689
#> 4 Amphiura filiformis          3       3  0.0135 0.0045  4  3 2.4149534
#> 5 Amphiura filiformis          4       4  0.0180 0.0045  4  3 3.2199379
#> 6 Amphiura filiformis          5       5  0.0225 0.0045  4  3 4.0249224
#> 7 Amphiura filiformis          6       6  0.0270 0.0045  4  3 4.8299068

##-----------------------------------------------------
## The bioirrigation potential for one species
##-----------------------------------------------------

# Amphiura filiformis, in dutch part of the northsea 
IrrAmp <- get_irr_index(
              data        = MWTL$density,   # use data 
              descriptor  = station,         
              taxon       = taxon, 
              subset      = taxon == "Amphiura filiformis", 
              averageOver = year,
              density     = density, 
              biomass     = biomass, 
              full.output = TRUE, 
              trait       = Traits_irr)

# irrigation activity per station
head(IrrAmp$descriptor) 
#>     station        IPc
#> 1 BREEVTN02 3.39001010
#> 2 BREEVTN26 0.57202895
#> 3 BREEVTN34 1.56014062
#> 4  DOGGBK02 0.89370665
#> 5  DOGGBK03 0.22054641
#> 6  DOGGBK04 0.03289779

# add coordinates of the stations
IRR.amphiura <- merge(MWTL$stations, IrrAmp$descriptor, 
                      by = "station")

# create a map
with(IRR.amphiura, 
  map_key(x = x, y = y, colvar = IPc,
          contours = MWTL$contours, draw.levels = TRUE, 
          pch = 18))

                     
IrrAmp$taxon  # average irrigation activity
#>                 taxon     IPc
#> 1 Amphiura filiformis 56.0902

##-----------------------------------------------------
## The bioturbation potential index for communities
##-----------------------------------------------------
# BPc = sqrt(weight) * density * Mi * Ri

# BPc for the Dutch part of the Northsea, in 1995
BPC <-  get_Db_index(data       = MWTL$density,
                     descriptor = station,
                     subset     = (MWTL$density$year == 1995),
                     taxon      = taxon, 
                     density    = density, 
                     biomass    = biomass, 
                     trait      = Traits_Db,      
                     taxonomy   = Taxonomy) 

# There is one taxon for which trait could not be derived
attributes(BPC)$notrait  
#> [1] "Entoprocta"

# Total BPC per station
head(BPC$descriptor)
#>     station      BPc
#> 1 BREEVTN02 627.3342
#> 2 BREEVTN03 254.4773
#> 3 BREEVTN04 367.8208
#> 4 BREEVTN05 292.6285
#> 5 BREEVTN06 278.8084
#> 6 BREEVTN07 343.3364

# Average BPC per taxon (only where taxon is present)
head(BPC$taxon)
#>                   taxon        BPc
#> 1             Abra alba  11.837624
#> 2       Abra prismatica   7.703744
#> 3     Acidostoma obesum   2.770155
#> 4   Acrocnida brachiata 170.679651
#> 5 Ampelisca brevicornis   1.189973
#> 6 Ampelisca tenuicornis   1.511491

# Plot the results (after adding the coordinates)
BPC_MWTL <- merge(MWTL$stations, BPC$descriptor, 
                  by = 1)

with (BPC_MWTL, 
  map_key(x = x, y = y, colvar = BPc, 
          contours = MWTL$contours, draw.levels = TRUE, 
          main = "BPc", 
          pch = 18))


# The 10 main bioturbators in the data set:
head(BPC$taxon[order(BPC$taxon$BPc, decreasing=TRUE), ], 
     n = 10)
#>                   taxon       BPc
#> 7   Amphiura filiformis 549.47920
#> 24          Callianassa 284.34819
#> 43           Ensis leei 266.91010
#> 38        Echinocardium 266.41715
#> 4   Acrocnida brachiata 170.67965
#> 141 Spisula subtruncata 133.51702
#> 89             Magelona 126.64536
#> 153   Upogebia deltaura 114.46170
#> 23  Brissopsis lyrifera 103.86270
#> 44        Ensis siliqua  91.17133

##-----------------------------------------------------
## The bioirrigation Index
##-----------------------------------------------------
# IPc = (weight_i)^0.75 * density * FTi * BTi * IDi

# IPc for the NSBS station OESTGDN19 in the OysterGrounds
   IPC <- get_irr_index(data  = MWTL$density,
                  descriptor  = list(station=station),
                  subset      = (station == "OESTGDN19"),
                  taxon       = taxon, 
                  averageOver = year,
                  density     = density, 
                  biomass     = biomass, 
                  trait       = Traits_irr,      
                  taxonomy    = Taxonomy,
                  full.output = TRUE)

# The 10 main bioirrigators in the data set, and why :
head(IPC$all[order(IPC$all$IPc, decreasing=TRUE), ], n=10)
#>                        taxon   station    density   biomass      Weight
#> 31             Echinocardium OESTGDN19  12.355175 7.6178121 0.616568521
#> 63     Notomastus latericeus OESTGDN19  27.258948 1.2724267 0.046679231
#> 55                  Magelona OESTGDN19 386.563533 0.3492551 0.000903487
#> 62                   Nephtys OESTGDN19  48.488303 0.6977140 0.014389326
#> 9        Amphiura filiformis OESTGDN19 163.526663 0.7331815 0.004483559
#> 19               Callianassa OESTGDN19  10.891484 0.2309406 0.021203780
#> 96         Thyasira flexuosa OESTGDN19 210.743760 0.2532416 0.001201657
#> 53         Lanice conchilega OESTGDN19   8.884480 0.5046557 0.056801933
#> 86        Sigalion mathildae OESTGDN19  31.626840 0.2567129 0.008116931
#> 20 Chaetopterus variopedatus OESTGDN19   2.033738 0.6440768 0.316696025
#>          BT   FT   ID        IPc
#> 31 1.500000 3.00 3.40 131.530463
#> 63 2.000000 3.00 4.00  65.699657
#> 55 2.000000 2.75 3.00  33.238870
#> 62 3.000000 1.40 3.25  27.497928
#> 9  1.500000 2.50 2.50  26.562996
#> 19 2.500000 3.00 4.00  18.155920
#> 96 1.714286 2.00 3.00  13.990217
#> 53 1.500000 2.50 3.40  13.179974
#> 86 3.000000 1.00 4.00  10.263156
#> 20 1.333333 2.00 4.00   9.158107