View source: R/detect_envi_change.R
detect_envi_change | R Documentation |
Use shapley values to detect the potential areas that will impact the species distribution. It only works on continuous variables.
detect_envi_change(
model,
var_occ,
variables,
target_var,
bins = NULL,
shap_nsim = 10,
seed = 10,
var_future = NULL,
variables_future = NULL,
pfun = .pfun_shap,
method = "gam",
formula = y ~ s(x)
)
model |
( |
var_occ |
( |
variables |
( |
target_var |
( |
bins |
( |
shap_nsim |
( |
seed |
( |
var_future |
( |
variables_future |
( |
pfun |
( |
method |
Argument passed on to |
formula |
Argument passed on to |
The values show how changes in environmental variable affects the modeling prediction in space. These maps could help to answer questions of where will be affected by a changing variable.
(EnviChange
) A list of
A figure of fitted variable curve
A map of variable contribiution change
Tipping points of variable contribution
A stars
of variable contribution under current and future condition,
and the detected changes
shap_spatial_response
# 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, 12))
#'
# 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)
# Use a fixed value
bio1_changes <- detect_envi_change(
model = mod$model,
var_occ = mod$vars_train,
variables = mod$variables,
shap_nsim = 1,
target_var = "bio1",
var_future = 5)
## Not run:
# Use a future layer
## Read the future Worldclim variables
future_vars <- system.file(
'extdata/future_bioclim_tanzania_10min.tif',
package = 'itsdm') %>% read_stars() %>%
split() %>% select(bioc1, bioc12)
# Rename the bands
names(future_vars) <- paste0("bio", c(1, 12))
## Just use the target future variable
climate_changes <- detect_envi_change(
model = mod$model,
var_occ = mod$vars_train,
variables = mod$variables,
shap_nsim = 1,
target_var = "bio1",
var_future = future_vars %>% select("bio1"))
## Use the whole future variable tack
bio12_changes <- detect_envi_change(
model = mod$model,
var_occ = mod$vars_train,
variables = mod$variables,
shap_nsim = 1,
target_var = "bio12",
variables_future = future_vars)
print(bio12_changes)
##### Use Random Forest model as an external model ########
library(randomForest)
# Prepare data
data("occ_virtual_species")
obs_df <- occ_virtual_species %>%
filter(usage == "train")
env_vars <- system.file(
'extdata/bioclim_tanzania_10min.tif',
package = 'itsdm') %>% read_stars() %>%
slice('band', c(1, 5, 12)) %>%
split()
model_data <- stars::st_extract(
env_vars, at = as.matrix(obs_df %>% select(x, y))) %>%
as.data.frame()
names(model_data) <- names(env_vars)
model_data <- model_data %>%
mutate(occ = obs_df[['observation']])
model_data$occ <- as.factor(model_data$occ)
mod_rf <- randomForest(
occ ~ .,
data = model_data,
ntree = 200)
pfun <- function(X.model, newdata) {
# for data.frame
predict(X.model, newdata, type = "prob")[, "1"]
}
# Use a fixed value
bio5_changes <- detect_envi_change(
model = mod_rf,
var_occ = model_data %>% select(-occ),
variables = env_vars,
target_var = "bio5",
bins = 20,
var_future = 5,
pfun = pfun)
plot(bio5_changes)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.