Use threshold-based, logistic or linear conversion method to convert predicted suitability map to presence-absence map.

convert_to_pa(
  suitability,
  method = "logistic",
  beta = 0.5,
  alpha = -0.05,
  a = 1,
  b = 0,
  species_prevalence = NA,
  threshold = 0.5,
  seed = 10L,
  visualize = TRUE
)

Arguments

suitability

(stars or RasterLayer) The suitability raster.

method

(character) The conversion method, must be one of 'threshold', 'logistic', and 'linear'. The default is 'logistic'.

beta

(numeric) Works for 'threshold' or 'logistic' method. If method is threshold, then beta is the threshold value to cutoff. If method is logistic, it is the sigmoid midpoint. The default is 0.5.

alpha

(numeric) Works for logistic method. It is the logistic growth rate or steepness of the curve. The default is -.05.

a

(numeric) Works for linear method. It is the slope of the line. The default is 1.

b

(numeric) Works for linear method. It is the intercept of the line. The default is 0.

species_prevalence

(numeric or NA) Works for all three methods. It is the species prevalence to classify suitability map. It could be NA, when the will be calculated automatically based on other arguments. The default is NA.

threshold

(numeric) The threshold used to convert probability of occurrence to presence-absence map. It ranges in [0, 1]. The default is 0.5.

seed

(integer) The seed for random progress. The default is 10L

visualize

(logical) If TRUE, plot map of suitability, probability of occurrence, and presence-absence together. The default is TRUE.

Value

(PAConversion) A list of

  • suitability (stars) The input suitability map

  • probability_of_occurrence (stars) The map of occurrence probability

  • pa_conversion (list) A list of conversion arguments

  • pa_map (stars) The presence-absence map

Details

Multiple methods and arguments could be used as a combination to do the conversion.

Examples

# Using a pseudo presence-only occurrence dataset of
# virtual species provided in this package
library(dplyr)
library(sf)
library(stars)
library(itsdm)

# Prepare data
data("occ_virtual_species")
obs_df <- occ_virtual_species %>% filter(usage == "train")
eval_df <- occ_virtual_species %>% filter(usage == "eval")
x_col <- "x"
y_col <- "y"
obs_col <- "observation"

# Format the observations
obs_train_eval <- format_observation(
  obs_df = obs_df, eval_df = eval_df,
  x_col = x_col, y_col = y_col, obs_col = obs_col,
  obs_type = "presence_only")

env_vars <- system.file(
  'extdata/bioclim_tanzania_10min.tif',
  package = 'itsdm') %>% read_stars() %>%
  slice('band', c(1, 5, 12, 16))

# With imperfect_presence mode,
mod <- isotree_po(
  obs_mode = "imperfect_presence",
  obs = obs_train_eval$obs,
  obs_ind_eval = obs_train_eval$eval,
  variables = env_vars, ntrees = 5,
  sample_size = 0.8, ndim = 1L,
  nthreads = 1,
  seed = 123L, response = FALSE,
  spatial_response = FALSE,
  check_variable = FALSE)

# Threshold conversion
pa_thred <- convert_to_pa(mod$prediction,
                          method = 'threshold', beta = 0.5, visualize = FALSE)
pa_thred
plot(pa_thred)

if (FALSE) {
# Logistic conversion
pa_log <- convert_to_pa(mod$prediction, method = 'logistic',
                        beta = 0.5, alpha = -.05)

# Linear conversion
pa_lin <- convert_to_pa(mod$prediction, method = 'linear',
                        a = 1, b = 0)
}