
Severe fragmentation from suitable-habitat patches and population density
Source:R/fragmentation.R
fragment_habitat.RdImplements the habitat-and-density fragmentation method of the IUCN Red List
guidelines (Santini et al. 2019), as used by sRedList (Cazalis
et al. 2024): the suitable habitat (Area of Habitat) within the range
is split into patches, patches within a dispersal / isolation
distance of one another are grouped into isolated subpopulations,
and each subpopulation's size in individuals is its habitat area
times the population density. This is the guideline-compliant
companion to assess_fragmentation (which uses occurrence counts
as a rough proxy when no habitat model or density is available).
Usage
fragment_habitat(
range,
isolation_km,
density,
year = NULL,
collection = NULL,
initiative = "brazil",
src = NULL,
suitable_groups = "natural",
suitable_codes = NULL,
elev_min = NA,
elev_max = NA,
z = 9,
elev_src = NULL,
max_pixels = 4000,
small_size = NULL
)Arguments
- range
An
sf/sfcrange polygon (e.g. the EOO hull).- isolation_km
Isolation / dispersal distance in km: patches further apart than this host isolated subpopulations. Required.
- density
Population density in mature individuals per km^2 of suitable habitat. A length-2 vector gives a low/high range (a second population column
pop_highis added). Required.- year, collection, initiative, src
Land-cover selection, as in
calc_aoh/mb_raster_local.- suitable_groups, suitable_codes
Which land-cover classes count as suitable habitat (default: the
"natural"group). Seecalc_aoh.- elev_min, elev_max, z, elev_src
Optional elevation band (metres) and DEM source, as in
calc_aoh.- max_pixels
Display pixel budget for the habitat mask read (default
4000); larger ranges are read coarser, as sRedList aggregates them.- small_size
Optional size (individuals) the assessor considers "small"; when given,
prop_in_smallandsevere_suggestedare returned.
Value
A list with method = "habitat", n_subpop (occupied
subpopulations), isolation_km, density, sizes (a
data.frame of cluster, aoh_km2, pop and, for a
density range, pop_high), clusters (subpopulation polygons as
an sfc in WGS84), curve, median_subpop_size,
max_subpop (C2a(i)), pct_largest (C2a(ii)), total_pop,
and prop_in_small / severe_suggested. Values degrade to
NA when the land cover cannot be read.
Details
Following Santini et al. (2019): contiguous suitable cells form
patches; each patch is buffered by half the isolation distance and buffers
that touch are merged, so patches closer than the isolation distance share a
subpopulation; the number of individuals in a subpopulation is its total
suitable area (km^2) times density (individuals km^-2), and a
subpopulation of fewer than two individuals is treated as unoccupied. The
curve then gives the proportion of the population in subpopulations no
larger than a given size, whose median_subpop_size is the size below
which half the population lives; if the assessor considers a subpopulation of
that size "small", the population can be treated as severely fragmented
(Criterion B sub-criterion a). The largest subpopulation's size
(max_subpop, Criterion C2a(i)) and its share of the population
(pct_largest, Criterion C2a(ii)) are also returned.
Use with care: use the result only when the mapped clusters make ecological sense as subpopulations, exactly as sRedList advises. Barriers (water, mountains, infrastructure) are not accounted for.
References
Santini L. et al. (2019) Applying habitat and population-density models to land-cover time series to inform IUCN Red List assessments. Conservation Biology 33:1084-1093. doi:10.1111/cobi.13279
Cazalis V. et al. (2024) Accelerating and standardising IUCN Red List assessments with sRedList. Biological Conservation 298:110761. doi:10.1016/j.biocon.2024.110761
Examples
# \donttest{
f <- system.file("extdata", "example_occurrences.csv", package = "mappingAS")
occ <- read_occurrences(f)
sp1 <- occ[occ$species == occ$species[1], ]
hull <- calc_eoo(sp1)$hull
# Reads land cover; density in mature individuals per km^2:
fr <- fragment_habitat(hull, isolation_km = 20, density = 5)
fr$n_subpop
#> [1] 1
fr$max_subpop # C2a(i)
#> [1] 6850.165
# }