Calculate the marginal responses of each variables within the model.

marginal_response(model, var_occ, variables, si = 1000, visualize = FALSE)



(Any predictive model). In this package, it is isolation_forest. It could be the item model of POIsotree made by function isotree_po.


(data.frame, tibble) The data.frame style table that include values of environmental variables at occurrence locations.


(stars) The stars of environmental variables. It should have multiple attributes instead of dims. If you have raster object instead, you could use st_as_stars to convert it to stars or use read_stars directly read source data as a stars. You also could use item variables of POIsotree made by function isotree_po.


(integer) The number of samples to generate response curves. If it is too small, the response curves might be biased. The default value is 1000.


(logical) if TRUE, plot the response curves. The default is FALSE.


(MarginalResponse) A nested list of

  • responses_cont (list) A list of response values of continuous variables

  • responses_cat (list) A list of response values of categorical variables


The values show how each environmental variable affects the modeling prediction. They show how the predicted result changes as each environmental variable is varied while keeping all other environmental variables at average sample value. They might be hard to interpret if there are strongly correlated variables. The users could use dim_reduce function to remove the strong correlation from original environmental variable stack.


  • Elith, Jane, et al. "The evaluation strip: a new and robust method for plotting predicted responses from species distribution models." Ecological modelling 186.3 (2005): 280-289.doi:10.1016/j.ecolmodel.2004.12.007


# Using a pseudo presence-only occurrence dataset of
# virtual species provided in this package

# Prepare data
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(
  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 = 20,
  sample_size = 0.8, ndim = 2L,
  seed = 123L, response = FALSE,
  spatial_response = FALSE,
  check_variable = FALSE)

marginal_responses <- marginal_response(
  model = mod$model,
  var_occ = mod$vars_train,
  variables = mod$variables)