cardosopmb / red

red r package for Red List Assessments according to the IUCN criteria
8 stars 0 forks source link

EOO = 0 when there's only 1 species record #7

Open AMBarbosa opened 2 years ago

AMBarbosa commented 2 years ago

When there's only 1 occurrence point or pixel, function aoo() estimates the occupancy area, but eoo() outputs zero:

data(red.records)
rec1 <- red.records[1, ]
aoo(rec1)  # 4
eoo(rec1)  # 0

data(red.range)
range1 <- rasterize(rec1, red.range)
plot(range1)

image

aoo(range1)  # 4
eoo(range1)  # 0

If the "Area of occupancy [AOO] is defined as the area within its 'extent of occurrence' which is occupied", shouldn't the EOO be at least as large as the AOO? Cheers,

cardosopmb commented 2 years ago

Yes, but that is made a posteriori for IUCN. We still calculate EOO using only the points and correct afterwards if needed. So we do not use the 2x2km cells to calculate EOO. Hope it helps!

AMBarbosa commented 1 year ago

But how do we correct these zero EOOs a posteriori? Is there a function in 'red' for that? An EOO of zero (when AOO is not zero) doesn't make sense. Mind that this also happens when there are only two presence pixels, even if they are far apart; and also when there are more pixels but in a straight line:

library(red)
library(raster)
data(red.records)
data(red.range)
par(mfrow = c(1, 2))

rec2 <- red.records[c(1, 8), ]
aoo(rec2)  # 8
eoo(rec2)  # 0

range2 <- rasterize(rec2, red.range)
plot(range2, col = "blue", legend = FALSE)

aoo(range2)  # 8
eoo(range2)  # 0

rec3 <- red.records[c(1, 3, 10), ]
aoo(rec3)  # 12
eoo(rec3)  # 0

range3 <- rasterize(rec3, red.range)
plot(range3, col = "blue", legend = FALSE)

aoo(range3)  # 12
eoo(range3)  # 0

image

Does the IUCN explicitly dictate that the EOO must be calculated using the presence points / grid cell centroids? Or could it instead be calculated using the 2x2 km presence polygons?

cardosopmb commented 1 year ago

Yes, the IUCN requires to use the localities and not the 2x2 cells. One way to correct is to include in the code:

if (eoo < aoo) eoo = aoo

This is not done in red to make it transparent that the value comes from the polygon and not the AOO.

There is a nice online course where these questions are explained: https://www.conservationtraining.org/course/index.php?categoryid=23

Or the guidelines: https://www.iucnredlist.org/resources/redlistguidelines

AMBarbosa commented 1 year ago

Many thanks for your swift response! The IUCN guidelines are not always that clear, as "sites" or "localities" can mean different things, but they do seem to indicate presence points to generate the EOO (versus 2x2 km areas for the AOO). They also state that "If EOO is less than AOO, EOO should be changed to make it equal to AOO to ensure consistency with the definition of AOO as an area within EOO". This would grant the application of your above command if (eoo < aoo) eoo = aoo. I'd suggest to at least mention this in the eoo function help file.

While this is indeed what the IUCN indicates, I think it leads to unnecesssary inconsistencies which contradict their own statements that "EOO measures the spatial spread of the areas currently occupied by the taxon", and "exclusion of areas forming discontinuities or disjunctions from estimates of EOO is strongly discouraged". The images in my previous comment (above) show that setting EOO=AOO in such cases can largely underestimate the actual EOO. Besides, if a single presence point was added in a pixel contiguous to one of those presence pixels, the EOO would suddenly become much larger (as it would then be the area of the polygon linking those pixels' centroids, rather than the sum of the pixels' areas), and comparisons between those EOOs would be irrealistic. I know this isn't the 'red' package's fault, though ;)

Cheers!