Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 6,
dpi=100,
out.width = "95%"
)
## ----results='hide', message=FALSE, warning=FALSE-----------------------------
# Load packages
library(kuenm2)
library(terra)
# Current directory
getwd()
# Define new directory
#setwd("YOUR/DIRECTORY") # uncomment and modify if setting a new directory
# Saving original plotting parameters
original_par <- par(no.readonly = TRUE)
## ----create model_projections, warning=FALSE, results='hide'------------------
# Import calib_results_maxnet
data("fitted_model_maxnet", package = "kuenm2")
# Import path to raster files with future variables provided as example
# The data is located in the "inst/extdata" folder.
in_dir <- system.file("extdata", package = "kuenm2")
# Import raster layers (same used to calibrate and fit final models)
var <- rast(system.file("extdata", "Current_variables.tif", package = "kuenm2"))
# Get soilType
soiltype <- var$SoilType
# Organize and structure WorldClim files
# Create folder to save structured files
out_dir_future <- file.path(tempdir(), "Future_raw") # Here, in a temporary directory
# Organize
organize_future_worldclim(input_dir = in_dir, # Path to the raw variables from WorldClim
output_dir = out_dir_future,
name_format = "bio_", # Name format
static_variables = var$SoilType, # Static variables
progress_bar = FALSE, overwrite = TRUE)
# Create a "Current_raw" folder in a temporary directory
# and copy the rawvariables there.
out_dir_current <- file.path(tempdir(), "Current_raw")
dir.create(out_dir_current, recursive = TRUE)
# Save current variables in temporary directory
terra::writeRaster(var, file.path(out_dir_current, "Variables.tif"),
overwrite = TRUE)
# Prepare projections using fitted models to check variables
pr <- prepare_projection(models = fitted_model_maxnet,
present_dir = out_dir_current, # Directory with present-day variables
future_dir = out_dir_future, # Directory with future variables
future_period = c("2041-2060", "2081-2100"),
future_pscen = c("ssp126", "ssp585"),
future_gcm = c("ACCESS-CM2", "MIROC6"))
# Project selected models to multiple scenarios
## Create a folder to save projection results
# Here, in a temporary directory
out_dir <- file.path(tempdir(), "Projection_results/maxnet")
dir.create(out_dir, recursive = TRUE)
## Project selected models to multiple scenarios
p <- project_selected(models = fitted_model_maxnet,
projection_data = pr,
out_dir = out_dir,
write_replicates = TRUE,
progress_bar = FALSE, # Do not print progress bar
overwrite = TRUE)
## ----compute variance---------------------------------------------------------
# Create a directory to save results
v <- projection_variability(model_projections = p, write_files = TRUE,
output_dir = out_dir,
verbose = FALSE, overwrite = TRUE)
## ----plot variability present, fig.width = 7, fig.height = 4------------------
# Variability for the present
terra::plot(v$Present, range = c(0, 0.15))
## ----plot variability future--------------------------------------------------
# Variability for Future_2081-2100_ssp585
terra::plot(v$`Future_2081-2100_ssp585`, range = c(0, 0.1))
## ----root_directory, eval = FALSE---------------------------------------------
# # See the folder where the results were saved
# v$root_directory
# #> [1] "Temp/Projection_results/maxnet/variance"
## ----import variability_projections-------------------------------------------
# Importing results
v_2041_2060_ssp126 <- import_results(projection = v,
present = FALSE, # Do not import results from the present time
future_period = "2041-2060",
future_pscen = "ssp126")
# Plot
terra::plot(v_2041_2060_ssp126, range = c(0, 0.1))
## ----save raster variability, eval = FALSE------------------------------------
# writeRaster(v$`Future_2081-2100_ssp585`,
# file.path(out_dir, "Future_2081-2100_ssp585.tif"))
## ----read variability projection----------------------------------------------
v <- readRDS(file.path(out_dir, "variance/variability_projections.rds"))
## ----see maximum temp---------------------------------------------------------
max(fitted_model_maxnet$calibration_data$bio_1)
## ----Highlight non-analogous--------------------------------------------------
# Import variables from the 2081-2100 period (SSP585, GCM MIROC6)
future_ACCESS_CM2 <- rast(file.path(out_dir_future,
"2081-2100/ssp585/ACCESS-CM2/Variables.tif"))
# Range of values in bio_1
terra::minmax(future_ACCESS_CM2$bio_1)
# Plot
terra::plot(future_ACCESS_CM2$bio_1,
breaks = c(-Inf, 22.7, Inf)) # Highlight regions with values above 22.7ÂșC
## ----perform mop--------------------------------------------------------------
# Create a folder to save MOP results
out_dir_mop <- file.path(tempdir(), "MOPresults")
dir.create(out_dir_mop, recursive = TRUE)
# Run MOP
kmop <- projection_mop(data = fitted_model_maxnet, projection_data = pr,
subset_variables = TRUE,
calculate_distance = TRUE,
out_dir = out_dir_mop,
type = "detailed",
overwrite = TRUE, progress_bar = FALSE)
## ----import mop, warning=FALSE------------------------------------------------
# Import results from MOP runs
mop_ssp585_2100 <- import_results(projection = kmop,
future_period = "2081-2100",
future_pscen = "ssp585")
# See types of results
names(mop_ssp585_2100)
## ----plot distance------------------------------------------------------------
terra::plot(mop_ssp585_2100$distances)
## ----plot basic---------------------------------------------------------------
terra::plot(mop_ssp585_2100$basic)
## ----plot simple--------------------------------------------------------------
terra::plot(mop_ssp585_2100$simple)
## ----plot towards end---------------------------------------------------------
# Non-analogous conditions towards high values in the ACCESS-CM2 scenario
terra::plot(mop_ssp585_2100$towards_high_end$`Future_2081-2100_ssp585_ACCESS-CM2`)
# Non-analogous conditions towards low values in the MIROC6 scenario
terra::plot(mop_ssp585_2100$towards_low_end$`Future_2081-2100_ssp585_ACCESS-CM2`,
main = names(mop_ssp585_2100$towards_low_end$`Future_2081-2100_ssp585_ACCESS-CM2`))
## ----plot towars combined-----------------------------------------------------
# Variables with conditions above training range
terra::plot(mop_ssp585_2100$towards_high_combined)
# Variables with conditions below training range
terra::plot(mop_ssp585_2100$towards_low_combined)
## ----mop zero-----------------------------------------------------------------
# Create a folder to save MOP results, now assigning 0 to cells within the range
out_dir_mop_zero <- file.path(tempdir(), "MOPresults_zero")
dir.create(out_dir_mop_zero, recursive = TRUE)
# Run MOP
kmop_zero <- projection_mop(data = fitted_model_maxnet, projection_data = pr,
subset_variables = TRUE,
na_in_range = FALSE, # Assign 0 to cells within range
calculate_distance = TRUE,
out_dir = out_dir_mop_zero,
type = "detailed",
overwrite = TRUE, progress_bar = FALSE)
## ----check difference zero mop, fig.width = 7, fig.height = 4-----------------
# Import MOP for the scenario ssp585 in 2081-2100
mop_ssp585_2100_zero <- import_results(projection = kmop_zero,
future_period = "2081-2100",
future_pscen = "ssp585")
# Compare with the MOP that assigns NA to cells within the calibration range
# Simple MOP
terra::plot(c(mop_ssp585_2100$simple$`Future_2081-2100_ssp585_ACCESS-CM2`,
mop_ssp585_2100_zero$simple$`Future_2081-2100_ssp585_ACCESS-CM2`),
main = c("Within range as NA", "Within range as 0"))
# Detailed MOP
terra::plot(c(mop_ssp585_2100$towards_high_combined$`Future_2081-2100_ssp585_ACCESS-CM2`,
mop_ssp585_2100_zero$towards_high_combined$`Future_2081-2100_ssp585_ACCESS-CM2`),
main = c("Within range as NA", "Within range as 0"),
plg=list(cex=0.6))
## ----plot towards high values-------------------------------------------------
# Non-analogous conditions towards high values in the ACCESS-CM2 scenario
terra::plot(mop_ssp585_2100$towards_high_combined$`Future_2081-2100_ssp585_ACCESS-CM2`)
## ----response curves towards high, fig.height=3.8-----------------------------
# Plotting response curves to check extrapolation towards the high end of variables
par(mfrow = c(1,3)) # Set plot grid
response_curve(models = fitted_model_maxnet, variable = "bio_1",
new_data = future_ACCESS_CM2)
response_curve(models = fitted_model_maxnet, variable = "bio_12",
new_data = future_ACCESS_CM2)
response_curve(models = fitted_model_maxnet, variable = "bio_15",
new_data = future_ACCESS_CM2)
## ----plot towards low values, fig.width = 7, fig.height = 4-------------------
# Non-analogous conditions towards low values in the ACCESS-CM2 scenario
par(mfrow = c(1, 2)) # Set grid
terra::plot(mop_ssp585_2100$towards_low_combined$`Future_2081-2100_ssp585_ACCESS-CM2`)
## It's bio 7. Plot response curve:
response_curve(models = fitted_model_maxnet, variable = "bio_7",
new_data = future_ACCESS_CM2)
## ----par_reset----------------------------------------------------------------
# Reset plotting parameters
par(original_par)
## ----save mop rds-------------------------------------------------------------
# Check for RDS files in the directory where we saved the MOP results
list.files(path = out_dir_mop, pattern = "rds")
# Import the mop_projections file
kmop <- readRDS(file.path(out_dir_mop, "mop_projections.rds"))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.