The other vignettes are based on presence only methods. Here you will
learn how to train a presence absence model. The following examples are
based on the Artificial Neural Networks method (Venables and Ripley 2002), but you can adapt
the code for any of the other supported methods. We use the first 8
environmental variables and the virtualSp
dataset selecting
the absence instead of the background locations.
library(SDMtune)
library(zeallot)
# Prepare data
<- list.files(path = file.path(system.file(package = "dismo"), "ex"),
files pattern = "grd",
full.names = TRUE)
<- terra::rast(files)
predictors <- virtualSp$presence
p_coords <- virtualSp$absence
a_coords <- prepareSWD(species = "Virtual species",
data p = p_coords,
a = a_coords,
env = predictors[[1:8]])
# Split data in training and testing datasets
c(train, test) %<-% trainValTest(data,
test = 0.2,
seed = 25)
cat("# Training : ", nrow(train@data))
cat("\n# Testing : ", nrow(test@data))
# Create folds
<- randomFolds(train,
folds k = 4,
seed = 25)
We first train the model with default settings and using 10 neurons:
set.seed(25)
<- train("ANN",
model data = train,
size = 10,
folds = folds)
model
Let’s check the training and testing AUC:
auc(model)
auc(model, test = TRUE)
To check which hyperparameters can be tuned we use the function
getTunableArgs
function:
getTunableArgs(model)
We use the function optimizeModel
to tune the
hyperparameters:
<- list(size = 10:50,
h decay = c(0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5),
maxit = c(50, 100, 300, 500))
<- optimizeModel(model,
om hypers = h,
metric = "auc",
seed = 25)
The best model is:
<- om@models[[1]]
best_model @results[1, ] om
We now train a model with the same configuration as found by the
functionoptimizeModel
, without cross validation, using all
the train data, and we evaluate it using the held apart testing
dataset:
set.seed(25)
<- train("ANN",
final_model data = train,
size = om@results[1, 1],
decay = om@results[1, 2],
maxit = om@results[1, 4])
plotROC(final_model,
test = test)