Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 6
)
## ----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
## ----Download CHELSA past, eval=FALSE-----------------------------------------
# # Define variables to download
# var_to_use <- c("BIO_01", "BIO_07", "BIO_12", "BIO_15")
#
# # Define GCMs
# gcms <- c("CCSM4", "CNRM-CM5", "FGOALS-g2", "IPSL-CM5A-LR", "MIROC-ESM",
# "MPI-ESM-P", "MRI-CGCM3")
#
# # Create a grid combining variables and GCMs
# g <- expand.grid("gcm" = gcms, "var" = var_to_use)
#
# # Create links to download
# l <- do.call(paste, c(g, sep = "_"))
# l <- paste0("https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_",
# l, ".tif")
#
# # See links
# head(l)
# #> [1] "https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_CCSM4_BIO_01.tif"
# #> [2] "https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_CNRM-CM5_BIO_01.tif"
# #> [3] "https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_FGOALS-g2_BIO_01.tif"
# #> [4] "https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_IPSL-CM5A-LR_BIO_01.tif"
# #> [5] "https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_MIROC-ESM_BIO_01.tif"
# #> [6] "https://os.zhdk.cloud.switch.ch/chelsav1/pmip3/bioclim/CHELSA_PMIP_MPI-ESM-P_BIO_01.tif"
#
# # Create a directory to save the raw variables
# raw_past_chelsa <- file.path(tempdir(), "Raw_past") # Here, in a temporary directory
# dir.create(raw_past_chelsa)
#
# # Download files and save in the Raw_past directory
# options(timeout = 300) # To avoid errors with timeout
# sapply(l, function(i) {
# downfile <- file.path(raw_past_chelsa, basename(i))
#
# # Download only if the file has not been downloaded yet
# if(!file.exists(downfile)) {
# download.file(url = i, destfile = downfile, method = "curl")
# }
# }) # It will take a while
#
# #Check the files in the Raw_past
# list.files(raw_past_chelsa)
# #> [1] "CHELSA_PMIP_CCSM4_BIO_01.tif" "CHELSA_PMIP_CCSM4_BIO_07.tif"
# #> [3] "CHELSA_PMIP_CCSM4_BIO_12.tif" "CHELSA_PMIP_CCSM4_BIO_15.tif"
# #> [5] "CHELSA_PMIP_CNRM-CM5_BIO_01.tif" "CHELSA_PMIP_CNRM-CM5_BIO_07.tif"
# #> [7] "CHELSA_PMIP_CNRM-CM5_BIO_12.tif" "CHELSA_PMIP_CNRM-CM5_BIO_15.tif"
# #> [9] "CHELSA_PMIP_FGOALS-g2_BIO_01.tif" "CHELSA_PMIP_FGOALS-g2_BIO_07.tif"
# #> [11] "CHELSA_PMIP_FGOALS-g2_BIO_12.tif" "CHELSA_PMIP_FGOALS-g2_BIO_15.tif"
# #> [13] "CHELSA_PMIP_IPSL-CM5A-LR_BIO_01.tif" "CHELSA_PMIP_IPSL-CM5A-LR_BIO_07.tif"
# #> [15] "CHELSA_PMIP_IPSL-CM5A-LR_BIO_12.tif" "CHELSA_PMIP_IPSL-CM5A-LR_BIO_15.tif"
# #> [17] "CHELSA_PMIP_MIROC-ESM_BIO_01.tif" "CHELSA_PMIP_MIROC-ESM_BIO_07.tif"
# #> [19] "CHELSA_PMIP_MIROC-ESM_BIO_12.tif" "CHELSA_PMIP_MIROC-ESM_BIO_15.tif"
# #> [21] "CHELSA_PMIP_MPI-ESM-P_BIO_01.tif" "CHELSA_PMIP_MPI-ESM-P_BIO_07.tif"
# #> [23] "CHELSA_PMIP_MPI-ESM-P_BIO_12.tif" "CHELSA_PMIP_MPI-ESM-P_BIO_15.tif"
# #> [25] "CHELSA_PMIP_MRI-CGCM3_BIO_01.tif" "CHELSA_PMIP_MRI-CGCM3_BIO_07.tif"
# #> [27] "CHELSA_PMIP_MRI-CGCM3_BIO_12.tif" "CHELSA_PMIP_MRI-CGCM3_BIO_15.tif"
## ----download CHELSA present, eval=FALSE--------------------------------------
# # Create directory to save the variables
# present_dir <- file.path(tempdir(), "Present_raw")
# dir.create(present_dir)
#
# # Define variables to download
# var_present <- c("bio1", "bio7", "bio12", "bio15")
#
# # Create links, download and save in the Present_raw directory
# l_present <- sapply(var_present, function(i){
# # Create link to download
# l_present_i <- paste0("https://os.zhdk.cloud.switch.ch/chelsav2/GLOBAL/climatologies/1981-2010/bio/CHELSA_",
# i, "_1981-2010_V.2.1.tif")
#
# # Donwload only if the file has not been downloaded yet
# if(!file.exists(file.path(present_dir, basename(l_present_i))))
# download.file(url = l_present_i,
# destfile = file.path(present_dir, basename(l_present_i)),
# method = "curl")
# }) # This might take a while
#
# # Check the files in the directory
# list.files(present_dir)
# #> [1] "CHELSA_bio1_1981-2010_V.2.1.tif" "CHELSA_bio12_1981-2010_V.2.1.tif"
# #> [3] "CHELSA_bio15_1981-2010_V.2.1.tif" "CHELSA_bio7_1981-2010_V.2.1.tif"
## ----prepare present, eval=FALSE----------------------------------------------
# # Import are for model calibration (M)
# m <- vect(system.file("extdata", "m.gpkg",
# package = "kuenm2"))
#
# # Import present variables
# present_files <- list.files(present_dir, full.names = TRUE) # List files
# present_var <- rast(present_files)
#
# # Mask variables using the calibration area (m)
# present_m <- crop(present_var, m, mask = TRUE)
#
# # Check variables names
# names(present_m)
# #> [1] "CHELSA_bio1_1981-2010_V.2.1" "CHELSA_bio12_1981-2010_V.2.1"
# #> [3] "CHELSA_bio15_1981-2010_V.2.1" "CHELSA_bio7_1981-2010_V.2.1"
#
# # Rename variables
# names(present_m) <- c("bio1", "bio12", "bio15", "bio7")
# names(present_m)
# #> [1] "bio1" "bio12" "bio15" "bio7"
#
# # Check current resolution (30arc-sec)
# res(present_m)
# #> [1] 0.008333333 0.008333333
#
# # Decrease resolution to 10arc-min
# present_chelsa <- aggregate(present_m, fact = 20, fun = "mean")
#
# # Save processed raster
# dir_current <- file.path(tempdir(), "Current_CHELSA")
# dir.create(dir_current)
#
# writeRaster(present_chelsa,
# filename = file.path(dir_current, "Current_CHELSA.tif"))
## ----mask future, eval=FALSE--------------------------------------------------
# # Import LGM variables
# lgm_files <- list.files(raw_past_chelsa, full.names = TRUE) # List files
# lgm_var <- rast(lgm_files)
#
# # Mask variables using the calibration area (m)
# lgm_m <- crop(lgm_var, m, mask = TRUE)
#
# # Decrease resolution to 10arc-min
# lgm_chelsa <- aggregate(lgm_m, fact = 20, fun = "mean")
#
# # Check variables names
# names(lgm_chelsa)
# #> [1] "CHELSA_PMIP_CCSM4_BIO_01" "CHELSA_PMIP_CCSM4_BIO_07"
# #> [3] "CHELSA_PMIP_CCSM4_BIO_12" "CHELSA_PMIP_CCSM4_BIO_15"
# #> [5] "CHELSA_PMIP_CNRM-CM5_BIO_01" "CHELSA_PMIP_CNRM-CM5_BIO_07"
# #> [7] "CHELSA_PMIP_CNRM-CM5_BIO_12" "CHELSA_PMIP_CNRM-CM5_BIO_15"
# #> [9] "CHELSA_PMIP_FGOALS-g2_BIO_01" "CHELSA_PMIP_FGOALS-g2_BIO_07"
# #> [11] "CHELSA_PMIP_FGOALS-g2_BIO_12" "CHELSA_PMIP_FGOALS-g2_BIO_15"
# #> [13] "CHELSA_PMIP_IPSL-CM5A-LR_BIO_01" "CHELSA_PMIP_IPSL-CM5A-LR_BIO_07"
# #> [15] "CHELSA_PMIP_IPSL-CM5A-LR_BIO_12" "CHELSA_PMIP_IPSL-CM5A-LR_BIO_15"
# #> [17] "CHELSA_PMIP_MIROC-ESM_BIO_01" "CHELSA_PMIP_MIROC-ESM_BIO_07"
# #> [19] "CHELSA_PMIP_MIROC-ESM_BIO_12" "CHELSA_PMIP_MIROC-ESM_BIO_15"
# #> [21] "CHELSA_PMIP_MPI-ESM-P_BIO_01" "CHELSA_PMIP_MPI-ESM-P_BIO_07"
# #> [23] "CHELSA_PMIP_MPI-ESM-P_BIO_12" "CHELSA_PMIP_MPI-ESM-P_BIO_15"
# #> [25] "CHELSA_PMIP_MRI-CGCM3_BIO_01" "CHELSA_PMIP_MRI-CGCM3_BIO_07"
# #> [27] "CHELSA_PMIP_MRI-CGCM3_BIO_12" "CHELSA_PMIP_MRI-CGCM3_BIO_15"
## ----group future by gcm, eval=FALSE------------------------------------------
# # In each iteration, 'i' is a GCM
# lgm_by_gcm <- lapply(gcms, function(i){
# # Subset variables that belong to GCM i
# lgm_gcm_i <- lgm_chelsa[[grepl(i, names(lgm_chelsa))]]
#
# # Rename variables
# names(lgm_gcm_i) <- c("bio1", "bio7", "bio12", "bio15")
# return(lgm_gcm_i)
# })
#
# names(lgm_by_gcm) <- gcms
## ----check units, eval = FALSE------------------------------------------------
# # Check values of variables in present
# #> minmax(present_chelsa[[c("bio1", "bio7", "bio12", "bio15")]])
# #> bio1 bio7 bio12 bio15
# #> min 12.87700 10.11300 1211.605 10.32925
# #> max 24.70025 21.06125 3063.049 70.45125
#
# # Check values of variables in LGM (CCSM4)
# minmax(lgm_by_gcm$CCSM4)
# #> bio1 bio7 bio12 bio15
# #> min 2822.425 173.5125 10710.62 86.9125
# #> max 2946.758 219.7700 23159.20 659.0025
## ----convert units, eval=FALSE------------------------------------------------
# # Fixing units in loop
# lgm_fixed_units <- lapply(lgm_by_gcm, function(x) {
# x$bio1 <- (x$bio1 / 10) - 273 # Divide by 10 and subtracts -273
# x$bio7 <- x$bio7 / 10 # Divide by 10
# x$bio12 <- x$bio12 / 10 # Divide by 10
# x$bio15 <- x$bio15 / 10 # Divide by 10
# return(x)
# })
#
# # Check units
# minmax(lgm_fixed_units$CCSM4)
# #> bio1 bio7 bio12 bio15
# #> min 9.24250 17.35125 1071.062 8.69125
# #> max 21.67575 21.97700 2315.920 65.90025
## ----Save lgm, eval=FALSE-----------------------------------------------------
# # Create directory to save processed lgm variables
# dir_lgm <- file.path(tempdir(), "LGM_CHELSA")
# dir.create(dir_lgm)
#
# # Processing in loop
# lapply(names(lgm_fixed_units), function(i) {
# # Subset SpatRaster from GCM i
# r_i <- lgm_fixed_units[[i]]
#
# # Name the file with the Period (LGM) and GCM (i)
# filename_i <- paste0("CHELSA_LGM_", i, ".tif")
#
# # Write Raster
# writeRaster(r_i, filename = file.path(dir_lgm, filename_i))
# })
## ----set directory with examples do not show, include=FALSE-------------------
dir_current <- system.file("extdata", package = "kuenm2")
dir_lgm <- system.file("extdata", package = "kuenm2")
## ----list files---------------------------------------------------------------
# Listing files in directories
present_list <- list.files(path = dir_current, pattern = "Current_CHELSA",
full.names = TRUE)
lgm_list <- list.files(path = dir_lgm, pattern = "LGM", full.names = TRUE)
## ----check files, eval=FALSE--------------------------------------------------
# # Check list of files with full paths
# ## Present
# present_list # Paths can be different in distinct computers
# #> "Local\\Temp\\Current_CHELSA.tif"
#
# # Past
# lgm_list # Paths can be different in distinct computers
# #> [1] "Local\\Temp\\CHELSA_LGM_CCSM4.tif"
# #> [2] "Local\\Temp\\CHELSA_LGM_CNRM-CM5.tif"
# #> [3] "Local\\Temp\\CHELSA_LGM_FGOALS-g2.tif"
# #> [4] "Local\\Temp\\CHELSA_LGM_IPSL-CM5A-LR.tif"
# #> [5] "Local\\Temp\\CHELSA_LGM_MIROC-ESM.tif"
# #> [6] "Local\\Temp\\CHELSA_LGM_MPI-ESM-P.tif"
# #> [7] "Local\\Temp\\CHELSA_LGM_MRI-CGCM3.tif"
## ----organize files, results='hide'-------------------------------------------
# Create a directory to save the variables
# Here, in a temporary directory. Change to your work directory in your computer
out_dir <- file.path(tempdir(), "Projection_variables")
# Organizing files the way it is needed
organize_for_projection(output_dir = out_dir,
variable_names = c("bio1", "bio7", "bio12", "bio15"),
present_file = present_list,
past_files = lgm_list,
past_period = "LGM",
past_gcm = c("CCSM4", "CNRM-CM5", "FGOALS-g2",
"IPSL-CM5A-LR", "MIROC-ESM", "MPI-ESM-P",
"MRI-CGCM3"),
resample_to_present = TRUE,
overwrite = TRUE)
## ----fs, eval = FALSE---------------------------------------------------------
# # Install package if necessary
# if(!require("fs")) {
# install.packages("fs")
# }
#
# fs::dir_tree(out_dir)
# #> Local\Temp\Projection_variables
# #> ├── Past
# #> │ └── LGM
# #> │ ├── CCSM4
# #> │ │ └── Variables.tif
# #> │ ├── CNRM-CM5
# #> │ │ └── Variables.tif
# #> │ ├── FGOALS-g2
# #> │ │ └── Variables.tif
# #> │ ├── IPSL-CM5A-LR
# #> │ │ └── Variables.tif
# #> │ ├── MIROC-ESM
# #> │ │ └── Variables.tif
# #> │ ├── MPI-ESM-P
# #> │ │ └── Variables.tif
# #> │ └── MRI-CGCM3
# #> │ └── Variables.tif
# #> └── Present
# #> └── Variables.tif
## ----create fitted models with CHELSA, eval=FALSE, include=FALSE--------------
# d_chelsa <- prepare_data(algorithm = "maxnet", occ = occ_data, x = "x", y = "y",
# raster_variables = present_chelsa,
# species = "Myrcia hatschbachii", partition_method = "kfolds",
# n_partitions = 4,
# n_background = 1000,
# features = c("l", "q", "lq", "lqp"),
# r_multiplier = c(0.1, 1, 2))
#
# m_chelsa <- calibration(data = d_chelsa,
# error_considered = c(5, 10),
# omission_rate = 10,
# parallel = TRUE, # Set TRUE to run in parallel
# ncores = 8)
#
# fitted_model_chelsa <- fit_selected(m_chelsa, n_replicates = 4)
## ----import fitted_model_chelsa, include=TRUE---------------------------------
# Load the object with fitted models
data(fitted_model_chelsa, package = "kuenm2")
## ----prepare projections------------------------------------------------------
# Define present_dir and past_dir
in_dir_present <- file.path(out_dir, "Present")
in_dir_past <- file.path(out_dir, "Past")
# Prepare projections using fitted models to check variables
pr <- prepare_projection(models = fitted_model_chelsa,
present_dir = in_dir_present, # Directory with present variables
past_dir = in_dir_past,
past_period = "LGM",
past_gcm = c("CCSM4", "CNRM-CM5", "FGOALS-g2",
"IPSL-CM5A-LR", "MIROC-ESM", "MPI-ESM-P",
"MRI-CGCM3"),
future_dir = NULL, # NULL because we won't project to the Future
future_period = NULL,
future_pscen = NULL,
future_gcm = NULL)
## ----print pr, eval=FALSE-----------------------------------------------------
# pr
# #> projection_data object summary
# #> ==============================
# #> Variables prepared to project models for Present and Past
# #> Past projections contain the following periods and GCMs:
# #> - Periods: LGM
# #> - GCMs: CCSM4 | CNRM-CM5 | FGOALS-g2 | IPSL-CM5A-LR | MIROC-ESM | MPI-ESM-P | MRI-CGCM3
# #> All variables are located in the following root directory:
# #> Local/Temp/Projection_variables
## ----project selected---------------------------------------------------------
# Create a folder to save projection results
# Here, in a temporary directory
out_dir_projections <- file.path(tempdir(), "Projection_results/chelsa")
dir.create(out_dir_projections, recursive = TRUE)
# Project selected models to multiple scenarios
p <- project_selected(models = fitted_model_chelsa,
projection_data = pr,
out_dir = out_dir_projections,
write_replicates = TRUE,
progress_bar = FALSE, # Do not print progress bar
overwrite = TRUE)
# Import mean of each projected scenario
p_mean <- import_results(projection = p, consensus = "mean")
# Plot all scenarios
terra::plot(p_mean, cex.main = 0.8)
## ----changes------------------------------------------------------------------
# Run function to detect changes
changes <- projection_changes(model_projections = p, consensus = "mean",
output_dir = out_dir_projections,
write_bin_models = TRUE, # Write individual binary results
return_raster = TRUE, overwrite = TRUE)
# Set colors
summary_with_colors <- colors_for_changes(changes_projections = changes)
# Plot
terra::plot(summary_with_colors$Summary_changes)
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.