This internal biomod2 function allows to tune single model parameters and select more efficient ones based on an evaluation metric.
bm_Tuning(
model,
tuning.fun,
do.formula = FALSE,
do.stepAIC = FALSE,
bm.options,
bm.format,
calib.lines = NULL,
metric.eval = "TSS",
metric.AIC = "AIC",
weights = NULL,
ctrl.train = NULL,
params.train = list(ANN.size = c(2, 4, 6, 8), ANN.decay = c(0.01, 0.05, 0.1), ANN.bag =
FALSE, DNN.hidden = list(depth = 3, width = 100), DNN.bias = TRUE, DNN.lambda =
0.001, DNN.alpha = 1, DNN.lr = c(1e-04, 0.1), DNN.batchsize = 100, DNN.epochs = 150,
FDA.degree = 1:2, FDA.nprune = 2:25, GAM.select = c(TRUE, FALSE), GAM.method =
c("GCV.Cp", "GACV.Cp", "REML", "P-REML", "ML", "P-ML"), GAM.span = c(0.3, 0.5, 0.7),
GAM.degree = 1, GBM.n.trees = c(500, 1000, 2500), GBM.interaction.depth = seq(2, 8,
by = 3), GBM.shrinkage = c(0.001,
0.01, 0.1), GBM.n.minobsinnode = 10,
MARS.degree = 1:2, MARS.nprune = 2:max(21, 2 * ncol(bm.format@data.env.var) + 1),
MAXENT.algorithm = "maxnet", MAXENT.parallel = TRUE, MAXENT.tune.args = list(rm =
seq(0.5, 1, 0.5), fc = c("L")), MAXENT.partitions = "randomkfold", MAXENT.kfolds =
10, MAXENT.user.grp = NULL, RF.mtry = 1:min(10, ncol(bm.format@data.env.var)),
RFd.mtry = 1:min(10, ncol(bm.format@data.env.var)), SRE.quant = c(0, 0.0125, 0.025,
0.05, 0.1), XGBOOST.nrounds = 50, XGBOOST.max_depth = 1,
XGBOOST.eta = c(0.3,
0.4), XGBOOST.gamma = 0, XGBOOST.colsample_bytree = c(0.6, 0.8),
XGBOOST.min_child_weight = 1, XGBOOST.subsample = 0.5)
)a character corresponding to the algorithm to be tuned, must be either
ANN, CTA, DNN, FDA, GAM, GBM, GLM, MARS,
MAXENT, MAXNET, RF, RFd, SRE, XGBOOST
a character corresponding to the model function name to be called
through train function for tuning parameters (see ModelsTable
dataset)
(optional, default FALSE)
A logical value defining whether formula is to be optimized or not
(optional, default FALSE)
A logical value defining whether variables selection is to be performed for
GLM and GAM models or not
a BIOMOD.options.default or BIOMOD.options.dataset
object returned by the bm_ModelingOptions function
a BIOMOD.formated.data or BIOMOD.formated.data.PA
object returned by the BIOMOD_FormatingData function
(optional, default NULL)
A data.frame object returned by get_calib_lines or
bm_CrossValidation functions
a character corresponding to the evaluation metric to be used, must
be either AUC, Kappa or TSS for SRE only ; auc.val.avg,
auc.diff.avg, or.mtp.avg, or.10p.avg, AICc for MAXENT only ;
ROC or TSS for all other models
a character corresponding to the AIC metric to be used, must
be either AIC or BIC
(optional, default NULL)
A vector of numeric values corresponding to observation weights (one per
observation, see Details)
(optional, default NULL)
A trainControl object
a list containing values of model parameters to be tested
(see Details)
A BIOMOD.models.options object (see bm_ModelingOptions) with
optimized parameters
Concerning ctrl.train parameter :
Set by default to :
ctrl.train <- caret::trainControl(method = "repeatedcv", repeats = 3, number = 10, summaryFunction = caret::twoClassSummary, classProbs = TRUE, returnData = FALSE)
Concerning params.train parameter :
All elements of the list must have names matching model.parameter_name format,
parameter_name being one of the parameter of the tuning.fun function called by
caret package and that can be found through the getModelInfo
function.
Currently, the available parameters to be tuned are the following :
size, decay, bag
maxdepth
hidden , bias, lambda, alpha, lr, batchsize, 150
degree, nprune
span, degree
select, method
n.trees, interaction.depth, shrinkage, n.minobsinnode
degree, nprune
algorithm,tune.args, parallel, partitions, kfolds,
user.grp
mtry
mtry
quant
nrounds, max_depth, eta, gamma,
colsampl_bytree, min_child_weight, subsample
The expand.grid function is used to build a matrix containing all
combinations of parameters to be tested.
No tuning for GLM and MAXNET
MAXENT is tuned through ENMevaluate function which is
calling either :
maxnet (by defining MAXENT.algorithm = 'maxnet') (default)
Java version of Maxent defined in dismo package (by defining
MAXENT.algorithm = 'maxent.jar')
DNN is tuned through tune function.
The values include in params.train are the lower or upper range which hyperparameters are sampled.
If there is only one value, the hyperparameter is fixed by biomod2 (inclunding the width and depth of hidden parameters.)
SRE is tuned through bm_SRE function
All other models are tuned through train function
No optimization of formula for DNN, MAXENT, MAXNET, SRE and
XGBOOST
No interaction included in formula for CTA
Variables selection only for GAM.gam and GLM
trainControl, train,
ENMevaluate,
ModelsTable, BIOMOD.models.options,
bm_ModelingOptions, BIOMOD_Modeling
Other Secondary functions:
bm_BinaryTransformation(),
bm_CrossValidation(),
bm_FindOptimStat(),
bm_MakeFormula(),
bm_ModelingOptions(),
bm_PlotEvalBoxplot(),
bm_PlotEvalMean(),
bm_PlotRangeSize(),
bm_PlotResponseCurves(),
bm_PlotVarImpBoxplot(),
bm_PseudoAbsences(),
bm_RangeSize(),
bm_RunModelsLoop(),
bm_SRE(),
bm_SampleBinaryVector(),
bm_SampleFactorLevels(),
bm_VariablesImportance()
library(terra)
# Load species occurrences (6 species available)
data(DataSpecies)
head(DataSpecies)
# Select the name of the studied species
myRespName <- 'GuloGulo'
# Get corresponding presence/absence data
myResp <- as.numeric(DataSpecies[, myRespName])
# Get corresponding XY coordinates
myRespXY <- DataSpecies[, c('X_WGS84', 'Y_WGS84')]
# Load environmental variables extracted from BIOCLIM (bio_3, bio_4, bio_7, bio_11 & bio_12)
data(bioclim_current)
myExpl <- terra::rast(bioclim_current)
DONTSHOW({
myExtent <- terra::ext(0,30,45,70)
myExpl <- terra::crop(myExpl, myExtent)
})
# --------------------------------------------------------------- #
# Format Data with true absences
myBiomodData <- BIOMOD_FormatingData(resp.name = myRespName,
resp.var = myResp,
resp.xy = myRespXY,
expl.var = myExpl)
# --------------------------------------------------------------- #
# List of all models currently available in `biomod2` (and their related package and function)
# Some of them can be tuned through the `train` function of the `caret` package
# (and corresponding training function to be used is indicated)
data(ModelsTable)
ModelsTable
allModels <- c('ANN', 'CTA', 'FDA', 'GAM', 'GBM', 'GLM'
, 'MARS', 'MAXENT', 'MAXNET', 'RF', 'SRE', 'XGBOOST')
# default parameters
opt.d <- bm_ModelingOptions(data.type = 'binary',
models = allModels,
strategy = 'default')
# tune parameters for Random Forest model
tuned.rf <- bm_Tuning(model = 'RF',
tuning.fun = 'rf', ## see in ModelsTable
do.formula = FALSE,
bm.options = opt.d@options$RF.binary.randomForest.randomForest,
bm.format = myBiomodData)
tuned.rf
if (FALSE) { # \dontrun{
# tune parameters for GAM (from mgcv package) model
tuned.gam <- bm_Tuning(model = 'GAM',
tuning.fun = 'gam', ## see in ModelsTable
do.formula = TRUE,
do.stepAIC = TRUE,
bm.options = opt.d@options$GAM.binary.mgcv.gam,
bm.format = myBiomodData)
tuned.gam
} # }