vignettes/articles/ConR.Rmd
ConR.RmdThis vignette shows how to use ConR to apply a workflow
for conducting conservation assessments for multiple species using the
IUCN criteria A, B, C and D. Here, we use only three species to make it
simple. But ConR was developed to perform assessments for
many more species at the same time.
We will use as examples three emblematic and threatened arborescent species that are endemic or near-endemic to the Atlantic Forest in South America: Araucaria angustifolia, Euterpe edulis and Paubrasilia echinata. Thus, it is necessary to obtain information for this specific region of the world (e.g. habitat cover maps, protected areas), which should be available to run this tutorial.
spp <- c("Araucaria angustifolia", "Euterpe edulis", "Paubrasilia echinata")Another more general but important piece of information is the year of the assessment itself (which depends on the information available) and the starting year used to assess recent continuing decline (which depends on the region):
assess.year <- 2018
recent.year <- 2000To perform the IUCN conservation assessments, we need different types of species information related to their biology, distribution, population size, threats, among other information.
We will use real occurrence data for our target species. This example
dataset data is provided with ConR within the internal
object example_tutorial, but users can load a file
containing a similar format. We will name it occs for
simplicity.
Then, we need to define objects with the basic species information that are necessary for the IUCN assessments.
gen.length <- c(40, 65, 50) ## generation length in years
p.mature <- c(0.4485, 0.3028, 0.4143) ## proportion of mature individuals in the population
early.sucession <- c(0.9, 1, 1) ## correction applied to population decline
harvest <- c(10, 10, 10) ## levels of exploitation causing reductions in population size (in %)To assess the IUCN criteria A, C and D, we also need to provide
ConR the population size information. For this tutorial,
this information is also provided within the internal object
example_tutorial. We will name it
pop.sizes:
pop.sizes <- example_tutorial$population.sizes
years <- names(pop.sizes[,-1])
pop.sizes[, 1:6]
#> species 1850 1940 1945 1950 1955
#> 1 Araucaria angustifolia 2263714973 1763953733 1742714122 1706724090 1672711025
#> 2 Euterpe edulis 4131301664 3423126071 3375255741 3301309873 3173853514
#> 3 Paubrasilia echinata 24777189 20519325 20094366 19379164 18179102Before we start calculating the population metrics, we need to load
ConR to make the functions available in our R
workspace.
To match the time frame of 1-3 generation times into the past or into
the future, we need to estimate the population sizes for the years that
we do not have information available. These estimates are produced using
the fit of different statistical models (i.e. quadratic, exponential,
logistic, general logistic) to the population size trends. Here, we will
only estimate population sizes into the past, but one can also use the
same ConR function pop.decline() to estimate
them into the future.
# Vector of years missing from the input data
possible.years <-
sort(unique(gen.length * rep(c(1:3), each=length(gen.length))), decreasing = TRUE)
missing.years <- assess.year - possible.years
# Estimating population sizes for the missing years
est.pop.sizes <- pop.decline(pop.sizes[,-1], taxa = spp, output = "predictions",
show_progress = FALSE)
# Re-organizing the information for downstream analyses
new.years <- est.pop.sizes[[1]][[1]]$years
ncols <- length(new.years)
nrows <- length(spp)
mean.pop <-
matrix(NA, ncol = ncols, nrow = nrows, dimnames = list(spp, new.years))
for(i in seq_along(spp)) mean.pop[i,] <- est.pop.sizes[[1]][[i]]$predicted
mean.pop <- cbind.data.frame(tax = spp, mean.pop, row.names = NULL)We now have a new object called mean.pop which stores
both the input population sizes and the estimates based on the
statistical models that best describe the input data.
We can begin by expecting how many valid occurrences are available for each species.
nb.occs <- coord.check(XY = occs)
nb.occs <- nb.occs$unique_occsWe then use the species occurrences to compute their extent of
occurrences (EOO) in square kilometers using the function
EOO.computing() and the IUCN-recommended Convex Hull
method.
EOO.hull <- EOO.computing(XY = occs[, c(1:3)], method.range = "convex.hull",
export_shp = TRUE, show_progress = FALSE)Another important metric for IUCN assessments is the species’ area of
occupancy (AOO), also in square kilometers, which is computed using the
function AOO.computing(). Here, we also set as defaults the
IUCN recommendation of using 2x2 km grid cells to compute AOO.
ConR allows for computing AOO using multiple random
starting positions of the grid, to make sure the AOO estimate is not
influenced by the grid start position.
AOO <- AOO.computing(occs[, c(1:3)],
cell_size_AOO = 2, nbe.rep.rast.AOO = 30,
show_progress = FALSE)The number of subpopulations for each species is also an important
information. The delimitation of subpopulations depends on species
dispersal abilities. If this information is available, it can be
directly provided to the function subpop.comp(). If it is
not available, ConR offers the possibility of estimating
the maximum distance between species occurrences using the function
subpop.radius() and the circular buffer method. This
distance can be used as a proxy of species’ dispersal abilities:
radius <- subpop.radius(XY = occs[, c(1:3)],
quant.max = 0.9)
sub <- subpop.comp(XY = occs[, c(1:3)],
resol_sub_pop = radius[,c("tax", "radius")],
show_progress = FALSE)One of the conditions to detect threat under the IUCN criterion B
(restricted geographic range) is related to the number of locations
where the species occur. Locations depend on the spatial extent of the
threats faced by the species. Here we used an extent of 10 km that makes
sense for the target region, the Atlantic Forest. This computation is
performed using the function locations.comp().
locs <- locations.comp(occs[, c(1:3),],
method = "fixed_grid",
nbe_rep = 30,
cell_size_locations = 10,
rel_cell_size = 0.05,
#threat_list = strict.ucs.spdf,
#id_shape = "NAME",
method_polygons = "no_more_than_one",
show_progress = FALSE)Another condition to detect threat under the IUCN criterion B is
whether the species populations is severely fragmented: more than
half of species AOO corresponds to habitat patches separated from others
by a large distance. Thus, to assess the level of fragmentation we
need the information on the species AOO and the dispersal ability. The
function severe_frag() computes the percentage of AOO that
is isolated across a large distance.
sever.frag <- severe_frag(XY = occs,
resol_sub_pop = radius[,c("tax", "radius")],
dist_isolated = radius$radius,
show_progress = FALSE)The area of habitat (AOH) is currently not an official population metric that is compared against the IUCN Criteria. However, it provides important information on the amount of habitat left for a given species within its EOO and more importantly how this amount is changing through time.
ConR computes AOH using the function
AOH.estimation(). If habitat maps are available for
different periods in time, the function can be used to infer the
continuing declines of the species AOH, which is an important condition
to assess the IUCN criterion B.
For this example, we do not provide habitat maps for the area of study (i.e. rasters with the Atlantic Forest cover through time), which are demanding in terms of storage and computational time. So we will assume that we already have available a vector containing the relative losses (in %) of AOH previously estimated for each species between 2000 and 2018.
The IUCN criterion A mainly evaluates paste and projects population
size reductions. In ConR, it is assessed using the function
criterion_A(), which requires population sizes through time
(mean.pop) and generation lengths
(gen.length). For this tutorial, we will assess only the
subcriterion A2, which makes more sense in the specific context of the
Atlantic Forest.
ConR also allows to include information on exploitation
levels for commercial species (e.g. timber), related to the base d of
criterion A. These levels are provided using the argument
exploitation.
critA <- criterion_A(x = mean.pop,
assess.year = assess.year,
project.years = NULL,
subcriteria = c("A2"),
generation.time = gen.length,
exploitation = harvest, show_progress = FALSE)
#> Warning: The years of the population sizes were not given and were taken from
#> the input population data
#> Warning in criterion_A(x = mean.pop, assess.year = assess.year, project.years =
#> NULL, : Maximum projection of population sizes is more than 100 years into the
#> future: assuming 100 years after the year of assessment
#> Computing the predictions based on population trends...
#> Warning: Breakpoint estimate(s) outdistanced to allow finite estimates and
#> st.errs
#> Warning: Breakpoint estimate(s) outdistanced to allow finite estimates and
#> st.errs
#> Warning: Breakpoint estimate(s) outdistanced to allow finite estimates and
#> st.errs
#> Warning: The following subcriteria were not used in the assessment: A1, A3, A4The function criterion_B() help to obtain assessments
based on the criterion B, as well as others parameters documenting the
species geographic range.
critB <- criterion_B(x = occs,
AOO = AOO,
EOO = EOO.hull$results,
locations = locs$locations,
severe.frag = sever.frag,
subpops = sub,
decline = declineB, show_progress = FALSE)The IUCN criterion C is about small and declining populations. In
ConR, this criterion is assessed using the function
criterion_C(), which requires subpopulation sizes to apply
the sub-criterion C2.
We do not have estimates of subpopulation sizes available. So, we
take a simple approach which is assuming that all subpopulations have
the same size. And we store this simplification in the object
subpop.sizes.
id.assess <- which(names(mean.pop) %in% assess.year)
df <- merge(data.frame(tax = spp, '2018' = mean.pop[,id.assess]), sub)
subpop.sizes <- vector("list", dim(sub)[1])
names(subpop.sizes) <- sub$tax
for(i in seq_along(subpop.sizes)) {
subpop.sizes[[i]] <- rep(df$X2018[i]/df$subpop[i], df$subpop[i])
}Now, we apply criterion C itself using criterion_C(),
which requires information on population sizes through time
(mean.pop), generation lengths (gen.length)
and proportion of mature individuals (p.mature), besides
the subpopulation sizes obtained above (subpop.sizes).
critC <- criterion_C(x = mean.pop,
assess.year = assess.year,
project = FALSE,
recent.year = recent.year,
subcriteria = c("C1","C2"),
generation.time = gen.length,
prop.mature = p.mature,
subpop.size = subpop.sizes,
correction = early.sucession, show_progress = FALSE)
#> Warning: The years of the population sizes were not given and were taken from
#> the input population data
#> Warning in criterion_C(x = mean.pop, assess.year = assess.year, project =
#> FALSE, : Maximum year to project population sizes is more than 100 years into
#> the future: assuming 100 years after the year of assessment
#> Computing the estimated continuing decline (subcriteria C1)...
#> Warning: Breakpoint estimate(s) outdistanced to allow finite estimates and
#> st.errs
#> Warning: Breakpoint estimate(s) outdistanced to allow finite estimates and
#> st.errs
#> Warning: Breakpoint estimate(s) outdistanced to allow finite estimates and
#> st.errsIf C1 is listed within the argument subcriteria, the
function returns the estimated continuing decline:
est.decline <- critC$cont.declineThe IUCN criterion D is assessed using the function
criterion_D(). We have no spatially explicit information
for future human activities or stochastic events for the Atlantic
Forest. Therefore, here we assess the subcriterion D and not D2.
However, function criterion_D() can be used to assess D2
only if the AOO and the number of locations are provided.
# accounting for exploitation of commercial species
p.mature.explo <- p.mature - harvest/100
# population sizes at the year of assessment
pop.sizes.assess <- mean.pop[[18]]
# assessing criterion D
critD <- criterion_D(pop.size = pop.sizes.assess,
name_sp = mean.pop[[1]],
AOO = AOO$aoo,
n.Locs = locs$locations$locations,
prop.mature = p.mature.explo,
subcriteria = c("D", "D2"),
AOO.threshold = 20,
Loc.threshold = 5)Because we are assessing multiple criteria for the same set of
species, we need to combine the results from all criteria. We try to
avoid duplicated columns in the final object all.crit.
all.crit <- merge(critA, critB, by = "tax", all = TRUE)
rm.dup.columns <- which(names(critC) %in% c("assessment.year", "assessment.period"))
all.crit <- merge(all.crit, critC[, -rm.dup.columns], by = "tax", all = TRUE,
suffixes = c(".A",".C"))
rm.dup.columns <- which(names(critD) %in% c("AOO"))
all.crit <- merge(all.crit, critD[, -rm.dup.columns], by = "tax", all = TRUE)
all.crit <- all.crit[order(all.crit$tax),]Next, we try to tell apart the Least Concern (LC) from
Near-Threatened (NT) species using the function
near.threatened():
subcriteria <- c("A2", "category_B", "C1", "C2", "D")
for(i in 1:length(subcriteria)) {
all.crit[,subcriteria[i]] <-
near.threatened(cats = all.crit[,subcriteria[i]],
EOO = all.crit$EOO,
AOO = all.crit$AOO,
decline = all.crit$any.decline,
pop.reduction = all.crit$reduction_A12,
pop.size = all.crit$pop.size,
pop.size.low = NULL,
locations = all.crit$locations,
sever.frag = all.crit$severe_frag,
ext.fluct = NULL,
subpop = all.crit$subpop,
subcriteria = subcriteria[i])
}Finally, we obtained the consensus categories for all four IUCN
criteria using the function cat_mult_criteria(). Although
the criteria resulting in the most restrictive category for each species
prevails, the function returns the evaluation result using other
criteria.
consensus <- cat_mult_criteria(all.crit[, c("tax", subcriteria)])
all.crit <- cbind.data.frame(all.crit,
consensus[, c("category","main.criteria","aux.criteria")])The object all.crit now contains all relevant population
metrics and the results of the IUCN conservation assessments using the
Red List criteria A-D.