#####European Green Grab Alaska R Script######

#####Install necessary packages #####

install.packages("embarcadero")
install.packages("terra") 
install.packages("fuzzySim")
install.packages("geodata")
install.packages("collinear")
install.packages("predicts")
install.packages("modEvA")
install.packages("blockCV")

library(embarcadero)
library(terra) 
library(fuzzySim)  
library(predicts)
library(collinear)
library(modEvA)
library(blockCV)
library(geodata)


#####Set up model #####
#Set working directory
dir.create("../outputs", showWarnings = FALSE)  
output_data_folder <- "/Users/danielvillar/Desktop/GreenCrabProject/Revised"

set.seed(101)
# import a worldmap to have geographic context and help with mapping:
countries <- geodata::world(path = output_data_folder)

my_species <- "Carcinus maenas" #Species name 

CountryMaps <- geodata::gadm(c("Canada", "United States of America"), level = 0, path = output_data_folder)
CountryBuffs <- terra::buffer(CountryMaps, width = 10000)
CountryBuffs<- aggregate(CountryBuffs)
plot(CountryBuffs)
#StudyExtent <- vect("/Users/danielvillar/Downloads/StudyRegion.shp") # I drew this rather arbitrarily around the Pacific Northwest, I can make a nicer looking polygon for aesthetic purposes but I do not think it will significantly change the result 
download_window <- ext(-179, -116,32, 72)
StudyExtent <- terra::crop(CountryBuffs, download_window)
plot(StudyExtent)
writeVector(StudyExtent, paste0(output_data_folder, "/StudyExtent.shp"), overwrite=TRUE)

gbif_raw <- read.csv("/Users/danielvillar/Desktop/GreenCrabProject/MegaSDM/All_Presences.csv", row.names = 1)

gbif_clean <- gbif_raw
plot(countries, ext = download_window + 2, col = "tan", background = "lightblue")
plot(download_window, border = "red", add = TRUE)
View(gbif_clean)


##New Bio-Oracle got published so I am redoing it with their latest data set, however this isn't readily accesible by the geodata R package
Aspect <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/Aspect.nc")
BathymetryMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/BathymetryMax.nc")
BathymetryMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/BathymetryMean.nc")
BathymetryMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/BathymetryMin.nc")
CurrentDirectionMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/CurrentDirectionMax.nc")
CurrentDirectionMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/CurrentDirectionMean.nc")
CurrentDirectionMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/CurrentDirectionMin.nc")
CurrentVelocityMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/CurrentVelocityMax.nc")
CurrentVelocityMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/CurrentVelocityMean.nc")
CurrentVelocityMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/CurrentVelocityMin.nc")
DissolvedOxygenMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/DissolvedOxygenMax.nc")  
DissolvedOxygenMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/DissolvedOxygenMean.nc")  
DissolvedOxygenMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/DissolvedOxygenMin.nc")  
IronMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/IronMax.nc")
IronMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/IronMean.nc")
IronMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/IronMin.nc")
NitrateMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/NitrateMax.nc")
NitrateMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/NitrateMean.nc")
NitrateMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/NitrateMin.nc")
OceanTempMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/OceanTempMax.nc")
OceanTempMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/OceanTempMean.nc")
OceanTempMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/OceanTempMin.nc")
pHMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/pHMax.nc")
pHMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/pHMean.nc")
pHMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/pHMin.nc")
PhosphateMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/PhosphateMax.nc")
PhosphateMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/PhosphateMean.nc")
PhosphateMin <-rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/PhosphateMin.nc")
PrimProdMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/PrimProdMax.nc")
PrimProdMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/PrimProdMean.nc")
PrimProdMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/PrimProdMin.nc")
SalinityMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/SalinityMax.nc")
SalinityMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/SalinityMean.nc")
SalinityMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/SalinityMin.nc")
SilicateMax <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/SilicateMax.nc")
SilicateMean <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/SilicateMean.nc")
SilicateMin <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/SilicateMin.nc")
Slope <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/Slope.nc")
TerrainRug <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/TerrainRuggednessIndex.nc")
TopPos <- rast("/Users/danielvillar/Desktop/GreenCrabProject/Contemporary Files/TopographicPositionIndex.nc")

ContemptEnvVars <- c(Aspect, BathymetryMax, BathymetryMean, BathymetryMin, CurrentDirectionMax, 
                     CurrentDirectionMean, CurrentDirectionMin, CurrentVelocityMax, CurrentVelocityMean, 
                     CurrentVelocityMin, DissolvedOxygenMax, DissolvedOxygenMean, DissolvedOxygenMin, 
                     IronMax, IronMean, IronMin, NitrateMax, NitrateMean, NitrateMin, OceanTempMax, 
                     OceanTempMean, OceanTempMin, pHMax, pHMean, pHMin, PhosphateMax, PhosphateMean, 
                     PhosphateMin, PrimProdMax, PrimProdMean, PrimProdMin, SalinityMax, SalinityMean, 
                     SalinityMin, SilicateMax, SilicateMean, SilicateMin, Slope, TerrainRug, TopPos)
crs(ContemptEnvVars)  <- "EPSG:4326" #Make sure everything has the same crs
summary(ContemptEnvVars)
terra::nlyr(ContemptEnvVars)

presences <- terra::vect(as.data.frame(gbif_clean), geom = c("longitude", "latitude"), crs = "EPSG:4326", keepgeom = TRUE)

plot(countries, ext = download_window + 2, col = "chocolate", lwd = 0.2, alpha = 0.3)
plot(presences, cex = 0.3, col = "darkblue", background = "lightblue", ext = terra::ext(presences) + 3, add =TRUE)


mod_region <- terra::crop(StudyExtent, download_window)
plot(download_window, border = "darkblue", add = TRUE)
plot(mod_region, border = "darkorange", lwd = 2, add = TRUE)

Contempvars_cut <- terra::crop(ContemptEnvVars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 

plot(Contempvars_cut[[1:4]])

plot(Contempvars_cut[[1]], main = my_species)
plot(countries, add = TRUE)
plot(mod_region, border = "darkorange", lwd = 2, add = TRUE)
plot(presences, col = "magenta", pch = 20, cex = 0.3, add = TRUE)

terra::res(Contempvars_cut)
source("https://raw.githubusercontent.com/AMBarbosa/unpackaged/master/pixelArea.R")
pixelArea(Contempvars_cut, unit = "km") # see roughly the size of each pixel, here on average each pixel is 17 km by 17 km 

vars_folder <- paste0(output_data_folder,  "/vars_cut")
dir.create(vars_folder, showWarnings = FALSE)
terra::writeRaster(Contempvars_cut, filename = paste0(vars_folder, "/vars_cut.tif"), gdal = c("COMPRESS=DEFLATE"), overwrite = TRUE)

Contgridded_data <- fuzzySim::gridRecords(rst = Contempvars_cut, pres.coords = presences, plot = TRUE) # grid the data, meaning that you now have one data point per pixel

bias_layer <- rast("/Users/danielvillar/Downloads/cumulative_impact_2010.tif") # GBIF presences have a bias to where people are; I am not too familiar with how best to measure this for marine species so went with cumulative human impact
bias_layer <- terra::project(bias_layer, Contempvars_cut)
plot(bias_layer)
plot(presences, col = "magenta", pch = 20, cex = 0.3, add = TRUE)

Contgridded_data$selected <- fuzzySim::selectAbsences(Contgridded_data, sp.cols = "presence", coord.cols = c("x", "y"), n = 10000 - sum(Contgridded_data$presence, na.rm = TRUE), df = FALSE, bias = bias_layer, seed = 1234)  # get pseudo-absences 

plot(countries, lwd = 0.3, add = TRUE)

table(Contgridded_data$selected)

nrow(Contgridded_data)  # should be the same as:
sum(terra::values(terra::noNA(Contempvars_cut)))

# map the gridded data and variables to check everything looks OK:
names(Contgridded_data)
plot(Contgridded_data, 5, main = names(Contgridded_data)[5], cex = 0.2, type = "continuous")
plot(countries, lwd = 0.2, add = TRUE)

plot(subset(Contgridded_data, Contgridded_data$selected == 1), "presence", cex = 0.2, col = c("pink2", "blue"), main = my_species)
plot(countries, lwd = 0.5, add = TRUE)
add_legend("bottomleft", legend = paste(c("N.abs =", "N.pres ="), table(data.frame(Contgridded_data)[Contgridded_data$selected, "presence"])), cex = 0.6, bg = "white")
write.csv(data.frame(Contgridded_data), paste0(output_data_folder, "/presences_gridded_revised.csv"), row.names = FALSE)
dat <- read.csv("/Users/danielvillar/Desktop/GreenCrabProject/Revised/presences_gridded_revised.csv")

nrow(dat)
head(dat)
names(dat)

# convert to SpatVector and map:
dat_sv <- terra::vect(dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")
plot(dat_sv, "presence", col = c("pink", "darkblue"), cex = 0.5)
plot(subset(dat_sv, dat_sv$selected == TRUE), "presence", col = c("pink", "darkblue"), cex = 0.5)

# define the modelling columns:
names(dat)
spc_col <- "presence"  # name of the species presence/absence column IN THE EXAMPLE DATASETS (change as appropriate!)
var_names <- names(Contempvars_cut)
var_names

table(dat[ , spc_col])  # number of presences and absences
table(dat[dat$selected, spc_col])  # number of presences and selected absences

constant <- sapply(dat[ , var_names], function(x) all(x == x[1]))
constant

var_names <- setdiff(var_names, var_names[constant]) # remove variables with no variation 
var_names

vars_uncorr <- collinear::collinear(df = dat, predictors = var_names, max_cor = 0.8, max_vif = 10, quiet = TRUE) # remove variables with are multicollinear 

dat_sel <- subset(dat, selected == TRUE)

#####Run Model#####
varsel_emb <- embarcadero::variable.step(x.data = dat_sel[ , vars_uncorr], y.data = dat_sel[ , spc_col])  # Stepwise elimination of variables
write.csv(varsel_emb, paste0(output_data_folder, "varsel_emb_revised.csv"), row.names = FALSE)

mod_varsel_emb <- dbarts::bart(x.train = dat_sel[ , varsel_emb], y.train = dat_sel[ , spc_col], keeptrees = TRUE, seed = 654)

summary(mod_varsel_emb)

embarcadero::varimp(mod_varsel_emb, plots = TRUE)
invisible(mod_varsel_emb$fit$state)  # see "Saving" section under ?bart Details
saveRDS(mod_varsel_emb, paste0(output_data_folder, "mod_varsel_emb.rds"))

source("https://raw.githubusercontent.com/AMBarbosa/unpackaged/master/predict_bart_df")  #Predict present distribution
# append BART predictions to the data frame:

preds <- predict_bart_df(mod_varsel_emb, dat, quantiles = c(0.05, 0.95))
preds$uncert <- preds[ , 3] - preds[ , 2]  # width of the credibility interval = uncertainty of the prediction at each site
names(preds) <- c("BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat <- data.frame(dat, preds)

# change to more self-explanatory column names:

dat$BART_F <- fuzzySim::Fav(pred = dat$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat$BART_F_lower <- fuzzySim::Fav(pred = dat$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat$BART_F_upper <- fuzzySim::Fav(pred = dat$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat$BART_F_uncert <- dat$BART_F_upper - dat$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

dat_sv <- terra::vect(dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

plot(dat_sv, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability Contemporary")

head(dat)

plot(dat_sv, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability Contemporary")

# save predictions to a CSV file:

head(dat)
names(dat)
pred_columns <- grep("cells|_P|_F", names(dat))
names(dat)[pred_columns]

# map the predictions:

# convert to spatial object:
head(dat)  # see names of spatial coordinate columns, to provide as 'geom' below
dat_sv <- terra::vect(dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

plot(dat_sv, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence probability")

plot(dat_sv, "BART_F", cex = 0.6, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat favourability")

plot(subset(dat_sv, dat_sv$presence == 1), col = "magenta", pch = 3, cex = 0.5, add = TRUE)


# map the predictions with credible intervals:

par(oma = c(0, 0, 1.5, 0))
plot(dat_sv, c("BART_F", "BART_F_uncert", "BART_F_lower", "BART_F_upper"), cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), mar = c(1.5, 1, 2.5, 1))
title(my_species, outer = TRUE)

writeVector(dat_sv,paste0(output_data_folder, "/ContemptBARTPredsGreenCrab_revised.shp"), overwrite=TRUE)

#####Run Spatial Model CrossValidation Model#####
set.seed(101)

pa_data <- sf::st_as_sf(dat, coords = c("x", "y"), crs = 4326)
sb1 <- cv_spatial(x = pa_data,
                  column = "presence", 
                  k = 5, 
                  size = 100000,
                  selection = "random",
                  iteration = 50,
                  hexagon = FALSE) 

dat$cvfolds <-sb1$folds_ids

dat_fold1 <- subset(dat, cvfolds != 1) 
dat_fold2 <- subset(dat, cvfolds != 2) 
dat_fold3 <- subset(dat, cvfolds != 3) 
dat_fold4 <- subset(dat, cvfolds != 4) 
dat_fold5 <- subset(dat, cvfolds != 5) 

mod_varsel_emb_1 <- dbarts::bart(x.train = dat_fold1[ , varsel_emb], y.train = dat_fold1[ , spc_col], keeptrees = TRUE, seed = 654)
mod_varsel_emb_2 <- dbarts::bart(x.train = dat_fold2[ , varsel_emb], y.train = dat_fold2[ , spc_col], keeptrees = TRUE, seed = 654)
mod_varsel_emb_3 <- dbarts::bart(x.train = dat_fold3[ , varsel_emb], y.train = dat_fold3[ , spc_col], keeptrees = TRUE, seed = 654)
mod_varsel_emb_4 <- dbarts::bart(x.train = dat_fold4[ , varsel_emb], y.train = dat_fold4[ , spc_col], keeptrees = TRUE, seed = 654)
mod_varsel_emb_5 <- dbarts::bart(x.train = dat_fold5[ , varsel_emb], y.train = dat_fold5[ , spc_col], keeptrees = TRUE, seed = 654)

preds1 <- predict_bart_df(mod_varsel_emb_1, dat, quantiles = c(0.05, 0.95))
preds1$uncert <- preds1[ , 3] - preds1[ , 2]  # width of the credibility interval = uncertainty of the prediction at each site
names(preds1) <- c("BART_P_f1", "BART_P_f1_lower", "BART_P_f1", "BART_P_f1_uncert")
dat <- data.frame(dat, preds1)

preds2 <- predict_bart_df(mod_varsel_emb_2, dat, quantiles = c(0.05, 0.95))
preds2$uncert <- preds2[ , 3] - preds2[ , 2]  # width of the credibility interval = uncertainty of the prediction at each site
names(preds2) <- c("BART_P_f2", "BART_P_f2_lower", "BART_P_f2", "BART_P_f2_uncert")
dat <- data.frame(dat, preds2)

preds3 <- predict_bart_df(mod_varsel_emb_3, dat, quantiles = c(0.05, 0.95))
preds3$uncert <- preds3[ , 3] - preds3[ , 2]  # width of the credibility interval = uncertainty of the prediction at each site
names(preds3) <- c("BART_P_f3", "BART_P_f3_lower", "BART_P_f3", "BART_P_f3_uncert")
dat <- data.frame(dat, preds3)

preds4 <- predict_bart_df(mod_varsel_emb_4, dat, quantiles = c(0.05, 0.95))
preds4$uncert <- preds4[ , 3] - preds4[ , 2]  # width of the credibility interval = uncertainty of the prediction at each site
names(preds4) <- c("BART_P_f4", "BART_P_f4_lower", "BART_P_f4", "BART_P_f4_uncert")
dat <- data.frame(dat, preds4)

preds5 <- predict_bart_df(mod_varsel_emb_5, dat, quantiles = c(0.05, 0.95))
preds5$uncert <- preds5[ , 3] - preds5[ , 2]  # width of the credibility interval = uncertainty of the prediction at each site
names(preds5) <- c("BART_P_f5", "BART_P_f5_lower", "BART_P_f5", "BART_P_f5_uncert")
dat <- data.frame(dat, preds5)

dat_train1 <- subset(dat, cvfolds != 1) 
dat_train2 <- subset(dat, cvfolds != 2) 
dat_train3 <- subset(dat, cvfolds != 3) 
dat_train4 <- subset(dat, cvfolds != 4) 
dat_train5 <- subset(dat, cvfolds != 5) 

dat_test1 <- subset(dat, cvfolds == 1) 
dat_test2 <- subset(dat, cvfolds == 2) 
dat_test3 <- subset(dat, cvfolds == 3) 
dat_test4 <- subset(dat, cvfolds == 4) 
dat_test5 <- subset(dat, cvfolds == 5) 

modEvA::AUC(obs = dat_train1$presence, pred = dat_train1$BART_P_f1, main = "Train")
modEvA::AUC(obs = dat_test1$presence, pred = dat_test1$BART_P_f1, main = "Test")

modEvA::AUC(obs = dat_train2$presence, pred = dat_train2$BART_P_f2, main = "Train")
modEvA::AUC(obs = dat_test2$presence, pred = dat_test2$BART_P_f2, main = "Test")

modEvA::AUC(obs = dat_train3$presence, pred = dat_train3$BART_P_f3, main = "Train")
modEvA::AUC(obs = dat_test3$presence, pred = dat_test3$BART_P_f3, main = "Test")

modEvA::AUC(obs = dat_train4$presence, pred = dat_train4$BART_P_f4, main = "Train")
modEvA::AUC(obs = dat_test4$presence, pred = dat_test4$BART_P_f4, main = "Test")

modEvA::AUC(obs = dat_train5$presence, pred = dat_train5$BART_P_f5, main = "Train")
modEvA::AUC(obs = dat_test5$presence, pred = dat_test5$BART_P_f5, main = "Test")


TSS1Train <- modEvA::threshMeasures(obs = dat_train1$presence, pred = dat_train1$BART_P_f1, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)
modEvA::threshMeasures(obs = dat_test1$presence, pred = dat_test1$BART_P_f1, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)

TSS2Train <- modEvA::threshMeasures(obs = dat_train2$presence, pred = dat_train2$BART_P_f2, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)
TSS22Test <- modEvA::threshMeasures(obs = dat_test2$presence, pred = dat_test2$BART_P_f2, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)

TSS3Train <- modEvA::threshMeasures(obs = dat_train3$presence, pred = dat_train3$BART_P_f3, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)
TSS32Test <- modEvA::threshMeasures(obs = dat_test3$presence, pred = dat_test3$BART_P_f3, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)

TSS4Train <- modEvA::threshMeasures(obs = dat_train4$presence, pred = dat_train4$BART_P_f4, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)
TSS42Test <- modEvA::threshMeasures(obs = dat_test4$presence, pred = dat_test4$BART_P_f4, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)

TSS5Train <- modEvA::threshMeasures(obs = dat_train5$presence, pred = dat_train5$BART_P_f5, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)
TSS52Test <- modEvA::threshMeasures(obs = dat_test5$presence, pred = dat_test5$BART_P_f5, thresh = "maxTSS", measures = c("CCR", "Sensitivity", "Specificity", "Precision", "Recall", "TSS", "kappa"), cex.axis = 0.7, plot=FALSE)


modEvA::MillerCalib(obs = dat_train1$presence, pred = dat_train1$BART_P_f1, main = "Train")
modEvA::MillerCalib(obs = dat_test1$presence, pred = dat_test1$BART_P_f1, main = "Test")

modEvA::MillerCalib(obs = dat_train2$presence, pred = dat_train2$BART_P_f2, main = "Train")
modEvA::MillerCalib(obs = dat_test2$presence, pred = dat_test2$BART_P_f2, main = "Test")

modEvA::MillerCalib(obs = dat_train3$presence, pred = dat_train3$BART_P_f3, main = "Train")
modEvA::MillerCalib(obs = dat_test3$presence, pred = dat_test3$BART_P_f3, main = "Test")

modEvA::MillerCalib(obs = dat_train4$presence, pred = dat_train4$BART_P_f4, main = "Train")
modEvA::MillerCalib(obs = dat_test4$presence, pred = dat_test4$BART_P_f4, main = "Test")

modEvA::MillerCalib(obs = dat_train5$presence, pred = dat_train5$BART_P_f5, main = "Train")
modEvA::MillerCalib(obs = dat_test5$presence, pred = dat_test5$BART_P_f5, main = "Test")

Miller_Avg <- mean(c(1.447362,1.371457,  0.6798355, 0.9461875, 1.932019 ))
AUC_Avg <- mean(c(0.9364833, 0.9907599, 0.992498, 0.8287957, 0.9465078))

#####Future Climate Predictions SSP1-1.9 #####
##2030
So2030SSP1 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2030/so_ssp119_2020_2100_depthmean_47a6_f19c_2216_U1763499214570.nc")
TheTaoMean2030SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2030/thetao_ssp119_2020_2100_depthmean_773f_eb2c_59ac_U1763599286650.nc')
PhycMean2030SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2030/phyc_ssp119_2020_2100_depthmean_7f72_0431_8307_U1763599288600.nc')

names(So2030SSP1) <- "so_min"
names(PhycMean2030SSP1) <- "phyc_mean"
names(TheTaoMean2030SSP1) <- "thetao_mean"

SSP12030Vars <- c(TheTaoMean2030SSP1, So2030SSP1, PhycMean2030SSP1)
SSP12030vars_cut <- terra::crop(SSP12030Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12030vars_cut <- raster::stack(SSP12030vars_cut) 

predsSSP12030 <- predict2.bart(mod_varsel_emb_5, SSP12030vars_cut, quantiles = c(0.05, 0.95))

predsSSP12030dat <- rasterToPoints(predsSSP12030)
predsSSP12030dat <- as.data.frame(predsSSP12030dat)
predsSSP12030dat$uncert <- predsSSP12030dat[ , 5] - predsSSP12030dat[ , 4]
names(predsSSP12030dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12030 <- terra::vect(predsSSP12030dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12030$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12030$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12030$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12030$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12030$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12030$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12030$BART_F_uncert <- dat_sv_SSP12030$BART_F_upper - dat_sv_SSP12030$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12030)

plot(dat_sv_SSP12030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030")
plot(dat_sv_SSP12030, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2030")

terra::writeVector(dat_sv_SSP12030,paste0(output_data_folder, "/outputs/SSP12/dat_sv_SSP12030_revised.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12030$BART_F)
fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12030$BART_F_upper)
fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12030$BART_F_lower)

##2040
So2040SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2040/so_ssp119_2020_2100_depthmean_7a9e_ce74_9069_U1763498386474.nc')
TheTaoMean2040SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2040/thetao_ssp119_2020_2100_depthmean_4551_d0ce_0d7e_U1763599413506.nc')
PhycMean2040SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2040/phyc_ssp119_2020_2100_depthmean_f82d_f5fa_5551_U1763599415524.nc')

names(So2040SSP1) <- "so_min"
names(PhycMean2040SSP1) <- "phyc_mean"
names(TheTaoMean2040SSP1) <- "thetao_mean"

SSP12040Vars <- c(TheTaoMean2040SSP1, PhycMean2040SSP1, So2040SSP1)
SSP12040vars_cut <- terra::crop(SSP12040Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12040vars_cut <- raster::stack(SSP12040vars_cut) 

predsSSP12040 <- predict2.bart(mod_varsel_emb, SSP12040vars_cut, quantiles = c(0.05, 0.95))

predsSSP12040dat <- rasterToPoints(predsSSP12040)
predsSSP12040dat <- as.data.frame(predsSSP12040dat)
predsSSP12040dat$uncert <- predsSSP12040dat[ , 5] - predsSSP12040dat[ , 4]
names(predsSSP12040dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12040 <- terra::vect(predsSSP12040dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12040$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12040$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12040$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12040$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12040$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12040$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12040$BART_F_uncert <- dat_sv_SSP12040$BART_F_upper - dat_sv_SSP12040$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12040)

plot(dat_sv_SSP12040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040")
plot(dat_sv_SSP12040, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2040")

terra::writeVector(dat_sv_SSP12040,paste0(output_data_folder, "/outputs/SSP12/dat_sv_SSP12040.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12040$BART_F)
fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12040$BART_F_upper)
fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12040$BART_F_lower)

## 2050
So2050SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2050/so_ssp119_2020_2100_depthmean_62a8_9347_1d5e_U1763499523890.nc')
TheTaoMean2050SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2050/thetao_ssp119_2020_2100_depthmean_6832_f862_ae1a_U1763599762133.nc')
PhycMean2050SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2050/phyc_ssp119_2020_2100_depthmean_fa0f_649b_1ee9_U1763599763954.nc')

names(So2050SSP1) <- "so_min"
names(PhycMean2050SSP1) <- "phyc_mean"
names(TheTaoMean2050SSP1) <- "thetao_mean"

SSP12050Vars <- c(PhycMean2050SSP1, TheTaoMean2050SSP1, So2050SSP1)
SSP12050vars_cut <- terra::crop(SSP12050Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12050vars_cut <- raster::stack(SSP12050vars_cut) 

predsSSP12050 <- predict2.bart(mod_varsel_emb, SSP12050vars_cut, quantiles = c(0.05, 0.95))

predsSSP12050dat <- rasterToPoints(predsSSP12050)
predsSSP12050dat <- as.data.frame(predsSSP12050dat)
predsSSP12050dat$uncert <- predsSSP12050dat[ , 5] - predsSSP12050dat[ , 4]
names(predsSSP12050dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12050 <- terra::vect(predsSSP12050dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12050$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12050$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12050$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12050$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12050$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12050$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12050$BART_F_uncert <- dat_sv_SSP12050$BART_F_upper - dat_sv_SSP12050$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12050)

plot(dat_sv_SSP12050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050")
plot(dat_sv_SSP12050, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2050")

terra::writeVector(dat_sv_SSP12050,paste0(output_data_folder, "/outputs/SSP12//dat_sv_SSP12050.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12050$BART_F)
fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12050$BART_F_upper)
fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12050$BART_F_lower)

## 2060
So2060SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2060/so_ssp119_2020_2100_depthmean_7fd7_3e3f_99e2_U1763499974550.nc')
TheTaoMean2060SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2060/thetao_ssp119_2020_2100_depthmean_fab4_0d97_70db_U1763600401257.nc')
PhycMean2060SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2060/phyc_ssp119_2020_2100_depthmean_bbd3_c363_f2b8_U1763600398256.nc')

names(So2060SSP1) <- "so_min"
names(PhycMean2060SSP1) <- "phyc_mean"
names(TheTaoMean2060SSP1) <- "thetao_mean"

SSP12060Vars <- c(PhycMean2060SSP1, TheTaoMean2060SSP1, So2060SSP1)
SSP12060vars_cut <- terra::crop(SSP12060Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12060vars_cut <- raster::stack(SSP12060vars_cut) 

predsSSP12060 <- predict2.bart(mod_varsel_emb, SSP12060vars_cut, quantiles = c(0.05, 0.95))

predsSSP12060dat <- rasterToPoints(predsSSP12060)
predsSSP12060dat <- as.data.frame(predsSSP12060dat)
predsSSP12060dat$uncert <- predsSSP12060dat[ , 5] - predsSSP12060dat[ , 4]
names(predsSSP12060dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12060 <- terra::vect(predsSSP12060dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12060$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12060$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12060$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12060$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12060$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12060$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12060$BART_F_uncert <- dat_sv_SSP12060$BART_F_upper - dat_sv_SSP12060$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12060)

plot(dat_sv_SSP12060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060")
plot(dat_sv_SSP12060, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2060")

terra::writeVector(dat_sv_SSP12060,paste0(output_data_folder, "/outputs/SSP12/dat_sv_SSP12060_revised.shp"), overwrite=TRUE)
fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12060$BART_F)
fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12060$BART_F_upper)
fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12060$BART_F_lower)

## 2070
So2070SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2070/so_ssp119_2020_2100_depthmean_6509_c1b9_41c4_U1763500418731.nc')
TheTaoMean2070SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2070/thetao_ssp119_2020_2100_depthmean_f633_8eec_08b9_U1763600776867.nc')
PhycMean2070SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2070/phyc_ssp119_2020_2100_depthmean_fe4b_e244_e378_U1763600773869.nc')


SSP12070Vars <- c(TheTaoMean2070SSP1, PhycMean2070SSP1, So2070SSP1)
SSP12070vars_cut <- terra::crop(SSP12070Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12070vars_cut <- raster::stack(SSP12070vars_cut) 

predsSSP12070 <- predict2.bart(mod_varsel_emb, SSP12070vars_cut, quantiles = c(0.05, 0.95))

predsSSP12070dat <- rasterToPoints(predsSSP12070)
predsSSP12070dat <- as.data.frame(predsSSP12070dat)
predsSSP12070dat$uncert <- predsSSP12070dat[ , 5] - predsSSP12070dat[ , 4]
names(predsSSP12070dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12070 <- terra::vect(predsSSP12070dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12070$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12070$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12070$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12070$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12070$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12070$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12070$BART_F_uncert <- dat_sv_SSP12070$BART_F_upper - dat_sv_SSP12070$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12070)

plot(dat_sv_SSP12070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070")
plot(dat_sv_SSP12070, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2070")

terra::writeVector(dat_sv_SSP12070,paste0(output_data_folder, "/outputs/SSP12//dat_sv_SSP12070.shp"), overwrite=TRUE)
fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12070$BART_F)
fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12070$BART_F_upper)
fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12070$BART_F_lower)

## 2080
So2080SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2080/so_ssp119_2020_2100_depthmean_1cda_562e_28c0_U1763500823249.nc')
TheTaoMean2080SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2080/thetao_ssp119_2020_2100_depthmean_2f56_f974_e9b6_U1763601182208.nc')
PhycMean2080SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2080/phyc_ssp119_2020_2100_depthmean_5fe3_639b_b6e9_U1763601183033.nc')

SSP12080Vars <- c(TheTaoMean2080SSP1, PhycMean2080SSP1, So2080SSP1)
SSP12080vars_cut <- terra::crop(SSP12080Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12080vars_cut <- raster::stack(SSP12080vars_cut) 

predsSSP12080 <- predict2.bart(mod_varsel_emb, SSP12080vars_cut, quantiles = c(0.05, 0.95))

predsSSP12080dat <- rasterToPoints(predsSSP12080)
predsSSP12080dat <- as.data.frame(predsSSP12080dat)
predsSSP12080dat$uncert <- predsSSP12080dat[ , 5] - predsSSP12080dat[ , 4]
names(predsSSP12080dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12080 <- terra::vect(predsSSP12080dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12080$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12080$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12080$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12080$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12080$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12080$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12080$BART_F_uncert <- dat_sv_SSP12080$BART_F_upper - dat_sv_SSP12080$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12080)

plot(dat_sv_SSP12080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080")
plot(dat_sv_SSP12080, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2080")

terra::writeVector(dat_sv_SSP12080,paste0(output_data_folder, "/outputs/SSP12/dat_sv_SSP12080.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12080$BART_F)
fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12080$BART_F_upper)
fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12080$BART_F_lower)

## 2090
So2090SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2090/so_ssp119_2020_2100_depthmean_1347_bf81_f077_U1763513360703.nc')
TheTaoMean2090SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2090/thetao_ssp119_2020_2100_depthmean_ba70_8832_c834_U1763601622947.nc')
PhycMean2090SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2090/phyc_ssp119_2020_2100_depthmean_6189_a8b0_a3bd_U1763601625956.nc')

SSP12090Vars <- c(TheTaoMean2090SSP1, PhycMean2090SSP1, So2090SSP1)
SSP12090vars_cut <- terra::crop(SSP12090Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12090vars_cut <- raster::stack(SSP12090vars_cut) 

predsSSP12090 <- predict2.bart(mod_varsel_emb, SSP12090vars_cut, quantiles = c(0.05, 0.95))

predsSSP12090dat <- rasterToPoints(predsSSP12090)
predsSSP12090dat <- as.data.frame(predsSSP12090dat)
predsSSP12090dat$uncert <- predsSSP12090dat[ , 5] - predsSSP12090dat[ , 4]
names(predsSSP12090dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12090 <- terra::vect(predsSSP12090dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12090$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12090$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12090$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12090$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12090$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12090$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12090$BART_F_uncert <- dat_sv_SSP12090$BART_F_upper - dat_sv_SSP12090$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12090)

plot(dat_sv_SSP12090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090")
plot(dat_sv_SSP12090, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2090")

terra::writeVector(dat_sv_SSP12090,paste0(output_data_folder, "/outputs/SSP12/dat_sv_SSP12090.shp"), overwrite=TRUE)

## 2100 
So2100SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2100/so_ssp119_2020_2100_depthmean_bea9_2da9_b722_U1763513743007.nc')
TheTaoMean2100SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2100/thetao_ssp119_2020_2100_depthmean_f973_3101_d79e_U1763601797254.nc')
PhycMean2100SSP1 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP1-1.9 /2100/phyc_ssp119_2020_2100_depthmean_f3a0_c72a_ef7d_U1763601795251.nc')

SSP12100Vars <- c(TheTaoMean2100SSP1, PhycMean2100SSP1, So2100SSP1)
SSP12100vars_cut <- terra::crop(SSP12100Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP12100vars_cut <- raster::stack(SSP12100vars_cut) 

predsSSP12100 <- predict2.bart(mod_varsel_emb, SSP12100vars_cut, quantiles = c(0.05, 0.95))

predsSSP12100dat <- rasterToPoints(predsSSP12100)
predsSSP12100dat <- as.data.frame(predsSSP12100dat)
predsSSP12100dat$uncert <- predsSSP12100dat[ , 5] - predsSSP12100dat[ , 4]
names(predsSSP12100dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP12100 <- terra::vect(predsSSP12100dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP12100$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP12100$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12100$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP12100$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12100$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP12100$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP12100$BART_F_uncert <- dat_sv_SSP12100$BART_F_upper - dat_sv_SSP12100$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP12100)

plot(dat_sv_SSP12100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100")
plot(dat_sv_SSP12100, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2100")

terra::writeVector(dat_sv_SSP12100,paste0(output_data_folder, "/outputs/SSP12/dat_sv_SSP12100.shp"), overwrite=TRUE)

## Change over time 

par(mfrow=c(2,4))
plot(dat_sv_SSP12030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2030 SSP1-1.9 ")
plot(dat_sv_SSP12040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2040 SSP1-1.9 ")
plot(dat_sv_SSP12050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2050 SSP1-1.9 ")
plot(dat_sv_SSP12060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2060 SSP1-1.9 ")
plot(dat_sv_SSP12070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2070 SSP1-1.9 ")
plot(dat_sv_SSP12080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2080 SSP1-1.9 ")
plot(dat_sv_SSP12090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2090 SSP1-1.9 ")
plot(dat_sv_SSP12100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2100 SSP1-1.9 ")

SSP1220to30 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12030$BART_F)
SSP1230to40 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12040$BART_F)
SSP1240to50 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12050$BART_F)
SSP1250to60 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12060$BART_F)
SSP1260to70 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12070$BART_F)
SSP1270to80 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12080$BART_F)
SSP1280to90 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12090$BART_F)
SSP1290to100 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP12100$BART_F)

SSP1220to30lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12030$BART_F_lower)
SSP1230to40lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12040$BART_F_lower)
SSP1240to50lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12050$BART_F_lower)
SSP1250to60lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12060$BART_F_lower)
SSP1260to70lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12070$BART_F_lower)
SSP1270to80lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12080$BART_F_lower)
SSP1280to90lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12090$BART_F_lower)
SSP1290to100lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP12100$BART_F_lower)

SSP1220to30upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12030$BART_F_upper)
SSP1230to40upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12040$BART_F_upper)
SSP1240to50upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12050$BART_F_upper)
SSP1250to60upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12060$BART_F_upper)
SSP1260to70upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12070$BART_F_upper)
SSP1270to80upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12080$BART_F_upper)
SSP1280to90upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12090$BART_F_upper)
SSP1290to100upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP12100$BART_F_upper)

SSP12Change <- data.frame(Decade = c(2030, 2040, 2050, 2060, 2070, 2080, 2090, 2100), 
                          DecadalChangeSSP12 = c(-0.20,0.23,0.30,0.28,0.33,0.35,0.31,0.32,          
                                                 -0.33,0.45,0.60,0.55,0.66,0.73,0.64,0.67,           
                                                 -0.16,0.13,0.17,0.16,0.18,0.18,0.17,0.17), 
                          Category = c("Average", "Average", "Average", "Average", "Average", "Average", "Average","Average", 
                                       "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", 
                                       "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile"))

SSP12Changeplot <- SSP12Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP12, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability Relative to 2020 under SSP1-1.9") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()


#####Future Climate Predictions SSP4-6.0#####
##2030
So2030SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2030/so_ssp245_2020_2100_depthmean_47a6_f19c_2216_U1763515872188.nc")
TheTaoMean2030SS4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2030/thetao_ssp460_2020_2100_depthmean_773f_eb2c_59ac_U1763602019629.nc")
PhycMean2030SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2030/phyc_ssp460_2020_2100_depthmean_7f72_0431_8307_U1763602021144.nc")

SSP42030Vars <- c(TheTaoMean2030SS4,So2030SSP4, PhycMean2030SSP4)
SSP42030vars_cut <- terra::crop(SSP42030Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42030vars_cut <- raster::stack(SSP42030vars_cut) 
predsSSP42030 <- predict2.bart(mod_varsel_emb, SSP42030vars_cut, quantiles = c(0.05, 0.95))

predsSSP42030dat <- rasterToPoints(predsSSP42030)
predsSSP42030dat <- as.data.frame(predsSSP42030dat)
predsSSP42030dat$uncert <- predsSSP42030dat[ , 5] - predsSSP42030dat[ , 4]
names(predsSSP42030dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42030 <- terra::vect(predsSSP42030dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42030$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42030$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42030$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42030$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42030$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42030$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42030$BART_F_uncert <- dat_sv_SSP42030$BART_F_upper - dat_sv_SSP42030$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42030)

plot(dat_sv_SSP42030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030")
plot(dat_sv_SSP42030, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2030")

terra::writeVector(dat_sv_SSP42030,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42030.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42030$BART_F)

##2040

So2040SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2040/so_ssp245_2020_2100_depthmean_7a9e_ce74_9069_U1763516206521.nc")
TheTaoMean2040SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2040/thetao_ssp460_2020_2100_depthmean_4551_d0ce_0d7e_U1763602352033.nc")
PhycMean2040SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2040/phyc_ssp460_2020_2100_depthmean_f82d_f5fa_5551_U1763602353076.nc")

SSP42040Vars <- c(PhycMean2040SSP4, TheTaoMean2040SSP4, So2040SSP4)
SSP42040vars_cut <- terra::crop(SSP42040Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42040vars_cut <- raster::stack(SSP42040vars_cut) 

predsSSP42040 <- predict2.bart(mod_varsel_emb, SSP42040vars_cut, quantiles = c(0.05, 0.95))

predsSSP42040dat <- rasterToPoints(predsSSP42040)
predsSSP42040dat <- as.data.frame(predsSSP42040dat)
predsSSP42040dat$uncert <- predsSSP42040dat[ , 5] - predsSSP42040dat[ , 4]
names(predsSSP42040dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42040 <- terra::vect(predsSSP42040dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42040$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42040$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42040$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42040$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42040$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42040$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42040$BART_F_uncert <- dat_sv_SSP42040$BART_F_upper - dat_sv_SSP42040$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42040)

plot(dat_sv_SSP42040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040")
plot(dat_sv_SSP42040, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2040")

terra::writeVector(dat_sv_SSP42040,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42040.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42040$BART_F)
## 2050
So2050SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2050/so_ssp245_2020_2100_depthmean_62a8_9347_1d5e_U1763516440374.nc")
TheTaoMean2050SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2050/thetao_ssp460_2020_2100_depthmean_6832_f862_ae1a_U1763602826675.nc")
PhycMean2050SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2050/phyc_ssp460_2020_2100_depthmean_fa0f_649b_1ee9_U1763602828520.nc")

SSP42050Vars <- c(TheTaoMean2050SSP4, PhycMean2050SSP4, So2050SSP4)
SSP42050vars_cut <- terra::crop(SSP42050Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42050vars_cut <- raster::stack(SSP42050vars_cut) 

predsSSP42050 <- predict2.bart(mod_varsel_emb, SSP42050vars_cut, quantiles = c(0.05, 0.95))

predsSSP42050dat <- rasterToPoints(predsSSP42050)
predsSSP42050dat <- as.data.frame(predsSSP42050dat)
predsSSP42050dat$uncert <- predsSSP42050dat[ , 5] - predsSSP42050dat[ , 4]
names(predsSSP42050dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42050 <- terra::vect(predsSSP42050dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42050$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42050$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42050$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42050$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42050$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42050$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42050$BART_F_uncert <- dat_sv_SSP42050$BART_F_upper - dat_sv_SSP42050$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42050)

plot(dat_sv_SSP42050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050")
plot(dat_sv_SSP42050, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2050")

terra::writeVector(dat_sv_SSP42050,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42050.shp"), overwrite=TRUE)

## 2060
So2060SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2060/so_ssp245_2020_2100_depthmean_7fd7_3e3f_99e2_U1763516656313.nc")
TheTaoMean2060SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2060/thetao_ssp460_2020_2100_depthmean_fab4_0d97_70db_U1763603248976.nc")
PhycMean2060SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2060/phyc_ssp460_2020_2100_depthmean_bbd3_c363_f2b8_U1763603251166.nc")

SSP42060Vars <- c(TheTaoMean2060SSP4, So2060SSP4, PhycMean2060SSP4)
SSP42060vars_cut <- terra::crop(SSP42060Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42060vars_cut <- raster::stack(SSP42060vars_cut) 

predsSSP42060 <- predict2.bart(mod_varsel_emb, SSP42060vars_cut, quantiles = c(0.05, 0.95))

predsSSP42060dat <- rasterToPoints(predsSSP42060)
predsSSP42060dat <- as.data.frame(predsSSP42060dat)
predsSSP42060dat$uncert <- predsSSP42060dat[ , 5] - predsSSP42060dat[ , 4]
names(predsSSP42060dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42060 <- terra::vect(predsSSP42060dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42060$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42060$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42060$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42060$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42060$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42060$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42060$BART_F_uncert <- dat_sv_SSP42060$BART_F_upper - dat_sv_SSP42060$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42060)

plot(dat_sv_SSP42060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060")
plot(dat_sv_SSP42060, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2060")

terra::writeVector(dat_sv_SSP42060,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42060.shp"), overwrite=TRUE)

## 2070
So2070SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2070/so_ssp245_2020_2100_depthmean_6509_c1b9_41c4_U1763517004166.nc")
TheTaoMean2070SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2070/thetao_ssp460_2020_2100_depthmean_f633_8eec_08b9_U1763603373321.nc")
PhycMean2070SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2070/phyc_ssp460_2020_2100_depthmean_fe4b_e244_e378_U1763603375368.nc")

SSP42070Vars <- c(TheTaoMean2070SSP4, So2070SSP4, PhycMean2070SSP4)
SSP42070vars_cut <- terra::crop(SSP42070Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42070vars_cut <- raster::stack(SSP42070vars_cut) 

predsSSP42070 <- predict2.bart(mod_varsel_emb, SSP42070vars_cut, quantiles = c(0.05, 0.95))

predsSSP42070dat <- rasterToPoints(predsSSP42070)
predsSSP42070dat <- as.data.frame(predsSSP42070dat)
predsSSP42070dat$uncert <- predsSSP42070dat[ , 5] - predsSSP42070dat[ , 4]
names(predsSSP42070dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42070 <- terra::vect(predsSSP42070dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42070$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42070$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42070$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42070$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42070$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42070$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42070$BART_F_uncert <- dat_sv_SSP42070$BART_F_upper - dat_sv_SSP42070$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42070)

plot(dat_sv_SSP42070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070")
plot(dat_sv_SSP42070, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2070")

terra::writeVector(dat_sv_SSP42070,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42070.shp"), overwrite=TRUE)

## 2080
So2080SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2080/so_ssp245_2020_2100_depthmean_1cda_562e_28c0_U1763517370539.nc")
TheTaoMean2080SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2080/thetao_ssp460_2020_2100_depthmean_2f56_f974_e9b6_U1763603520711.nc")
PhycMean2080SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2080/phyc_ssp460_2020_2100_depthmean_5fe3_639b_b6e9_U1763603522274.nc")

SSP42080Vars <- c(TheTaoMean2080SSP4, PhycMean2080SSP4, So2080SSP4)
SSP42080vars_cut <- terra::crop(SSP42080Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42080vars_cut <- raster::stack(SSP42080vars_cut) 

predsSSP42080 <- predict2.bart(mod_varsel_emb, SSP42080vars_cut, quantiles = c(0.05, 0.95))

predsSSP42080dat <- rasterToPoints(predsSSP42080)
predsSSP42080dat <- as.data.frame(predsSSP42080dat)
predsSSP42080dat$uncert <- predsSSP42080dat[ , 5] - predsSSP42080dat[ , 4]
names(predsSSP42080dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42080 <- terra::vect(predsSSP42080dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42080$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42080$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42080$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42080$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42080$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42080$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42080$BART_F_uncert <- dat_sv_SSP42080$BART_F_upper - dat_sv_SSP42080$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42080)

plot(dat_sv_SSP42080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080")
plot(dat_sv_SSP42080, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2080")

terra::writeVector(dat_sv_SSP42080,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42080.shp"), overwrite=TRUE)

## 2090
So2090SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2090/so_ssp245_2020_2100_depthmean_1347_bf81_f077_U1763517647754.nc")
TheTaoMean2090SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2090/thetao_ssp460_2020_2100_depthmean_ba70_8832_c834_U1763603651017.nc")
PhycMean2090SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2090/phyc_ssp460_2020_2100_depthmean_6189_a8b0_a3bd_U1763603653228.nc")

SSP42090Vars <- c(TheTaoMean2090SSP4, PhycMean2090SSP4,So2090SSP4)
SSP42090vars_cut <- terra::crop(SSP42090Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42090vars_cut <- raster::stack(SSP42090vars_cut) 

predsSSP42090 <- predict2.bart(mod_varsel_emb, SSP42090vars_cut, quantiles = c(0.05, 0.95))

predsSSP42090dat <- rasterToPoints(predsSSP42090)
predsSSP42090dat <- as.data.frame(predsSSP42090dat)
predsSSP42090dat$uncert <- predsSSP42090dat[ , 5] - predsSSP42090dat[ , 4]
names(predsSSP42090dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42090 <- terra::vect(predsSSP42090dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42090$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42090$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42090$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42090$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42090$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42090$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42090$BART_F_uncert <- dat_sv_SSP42090$BART_F_upper - dat_sv_SSP42090$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42090)

plot(dat_sv_SSP42090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090")
plot(dat_sv_SSP42090, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2090")

terra::writeVector(dat_sv_SSP42090,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42090.shp"), overwrite=TRUE)

## 2100 
So2100SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2100/so_ssp119_2020_2100_depthsurf_47a6_f19c_2216_U1763517800315.nc")
TheTaoMean2100SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2100/thetao_ssp460_2020_2100_depthmean_f973_3101_d79e_U1763603773960.nc")
PhycMean2100SSP4 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP4-6.0/2100/phyc_ssp460_2020_2100_depthmean_f3a0_c72a_ef7d_U1763603775578.nc")

SSP42100Vars <- c(TheTaoMean2100SSP4, So2100SSP4, PhycMean2100SSP4)
SSP42100vars_cut <- terra::crop(SSP42100Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP42100vars_cut <- raster::stack(SSP42100vars_cut) 

predsSSP42100 <- predict2.bart(mod_varsel_emb, SSP42100vars_cut, quantiles = c(0.05, 0.95))

predsSSP42100dat <- rasterToPoints(predsSSP42100)
predsSSP42100dat <- as.data.frame(predsSSP42100dat)
predsSSP42100dat$uncert <- predsSSP42100dat[ , 5] - predsSSP42100dat[ , 4]
names(predsSSP42100dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP42100 <- terra::vect(predsSSP42100dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP42100$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP42100$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42100$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP42100$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42100$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP42100$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP42100$BART_F_uncert <- dat_sv_SSP42100$BART_F_upper - dat_sv_SSP42100$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP42100)

plot(dat_sv_SSP42100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100")
plot(dat_sv_SSP42100, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2100")

terra::writeVector(dat_sv_SSP42100,paste0(output_data_folder, "/outputs/SSP4-6.0/dat_sv_SSP42100.shp"), overwrite=TRUE)

## Change over time 

par(mfrow=c(2,4))
plot(dat_sv_SSP42030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2030 SSP4-6.0 ")
plot(dat_sv_SSP42040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2040 SSP4-6.0 ")
plot(dat_sv_SSP42050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2050 SSP4-6.0 ")
plot(dat_sv_SSP42060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2060 SSP4-6.0 ")
plot(dat_sv_SSP42070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2070 SSP4-6.0 ")
plot(dat_sv_SSP42080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2080 SSP4-6.0 ")
plot(dat_sv_SSP42090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2090 SSP4-6.0 ")
plot(dat_sv_SSP42100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2100 SSP4-6.0 ")

SSP4220to30 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42030$BART_F)
SSP4230to40 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42040$BART_F)
SSP4240to50 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42050$BART_F)
SSP4250to60 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42060$BART_F)
SSP4260to70 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42070$BART_F)
SSP4270to80 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42080$BART_F)
SSP4280to90 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42090$BART_F)
SSP4290to100 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP42100$BART_F)

SSP4220to30lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42030$BART_F_lower)
SSP4230to40lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42040$BART_F_lower)
SSP4240to50lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42050$BART_F_lower)
SSP4250to60lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42060$BART_F_lower)
SSP4260to70lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42070$BART_F_lower)
SSP4270to80lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42080$BART_F_lower)
SSP4280to90lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42090$BART_F_lower)
SSP4290to100lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP42100$BART_F_lower)

SSP4220to30upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42030$BART_F_upper)
SSP4230to40upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42040$BART_F_upper)
SSP4240to50upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42050$BART_F_upper)
SSP4250to60upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42060$BART_F_upper)
SSP4260to70upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42070$BART_F_upper)
SSP4270to80upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42080$BART_F_upper)
SSP4280to90upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42090$BART_F_upper)
SSP4290to100upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP42100$BART_F_upper)

SSP42Change <- data.frame(Decade = c(2030, 2040, 2050, 2060, 2070, 2080, 2090, 2100), 
                          DecadalChangeSSP42 = c(0.17,0.26,0.40,0.46,0.72,0.86,1.01,1.30,          
                                                 0.30,0.51,0.79,0.86,1.44,1.78,2.13,2.32,           
                                                 0.10,0.15,0.22,0.26,0.39,0.46,0.53,0.70), 
                          Category = c("Average", "Average", "Average", "Average", "Average", "Average", "Average","Average", 
                                       "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", 
                                       "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile"))

SSP4Changeplot <- SSP42Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP42, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to 2020 under SSP4-6.0") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()

#####Future Climate Predictions  SSP2-4.5#####
##2030
So2030SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2030/so_ssp245_2020_2100_depthmean_47a6_f19c_2216_U1763518157261.nc")
TheTaoMean2030SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2030/thetao_ssp245_2020_2100_depthmean_773f_eb2c_59ac_U1763603976231.nc")
PhycMean2030SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2030/phyc_ssp245_2020_2100_depthmean_7f72_0431_8307_U1763603977823.nc")

SSP22030Vars <- c(TheTaoMean2030SSP2, So2030SSP2, PhycMean2030SSP2)
SSP22030vars_cut <- terra::crop(SSP22030Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22030vars_cut <- raster::stack(SSP22030vars_cut) 

predsSSP22030 <- predict2.bart(mod_varsel_emb, SSP22030vars_cut, quantiles = c(0.05, 0.95))

predsSSP22030dat <- rasterToPoints(predsSSP22030)
predsSSP22030dat <- as.data.frame(predsSSP22030dat)
predsSSP22030dat$uncert <- predsSSP22030dat[ , 5] - predsSSP22030dat[ , 4]
names(predsSSP22030dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22030 <- terra::vect(predsSSP22030dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22030$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22030$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22030$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22030$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22030$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22030$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22030$BART_F_uncert <- dat_sv_SSP22030$BART_F_upper - dat_sv_SSP22030$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22030)

plot(dat_sv_SSP22030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030")
plot(dat_sv_SSP22030, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2030")

terra::writeVector(dat_sv_SSP22030,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22030.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22030$BART_F)

##2040

So2040SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2040/so_ssp245_2020_2100_depthmean_7a9e_ce74_9069_U1763518364338.nc")
TheTaoMean2040SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2040/thetao_ssp245_2020_2100_depthmean_4551_d0ce_0d7e_U1763604097686.nc")
PhycMean2040SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2040/phyc_ssp245_2020_2100_depthmean_f82d_f5fa_5551_U1763604099814.nc")

SSP22040Vars <- c(TheTaoMean2040SSP2, PhycMean2040SSP2,So2040SSP2)
SSP22040vars_cut <- terra::crop(SSP22040Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22040vars_cut <- raster::stack(SSP22040vars_cut) 

predsSSP22040 <- predict2.bart(mod_varsel_emb, SSP22040vars_cut, quantiles = c(0.05, 0.95))

predsSSP22040dat <- rasterToPoints(predsSSP22040)
predsSSP22040dat <- as.data.frame(predsSSP22040dat)
predsSSP22040dat$uncert <- predsSSP22040dat[ , 5] - predsSSP22040dat[ , 4]
names(predsSSP22040dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22040 <- terra::vect(predsSSP22040dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22040$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22040$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22040$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22040$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22040$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22040$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22040$BART_F_uncert <- dat_sv_SSP22040$BART_F_upper - dat_sv_SSP22040$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22040)

plot(dat_sv_SSP22040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040")
plot(dat_sv_SSP22040, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2040")

terra::writeVector(dat_sv_SSP22040,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22040.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22040$BART_F)
## 2050
So2050SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2050/so_ssp245_2020_2100_depthmean_62a8_9347_1d5e_U1763518604632.nc")
TheTaoMean2050SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2050/thetao_ssp245_2020_2100_depthmean_6832_f862_ae1a_U1763604252845.nc")
PhycMean2050SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2050/phyc_ssp245_2020_2100_depthmean_fa0f_649b_1ee9_U1763604254778.nc")

SSP22050Vars <- c(TheTaoMean2050SSP2,PhycMean2050SSP2, So2050SSP2)
SSP22050vars_cut <- terra::crop(SSP22050Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22050vars_cut <- raster::stack(SSP22050vars_cut) 

predsSSP22050 <- predict2.bart(mod_varsel_emb, SSP22050vars_cut, quantiles = c(0.05, 0.95))

predsSSP22050dat <- rasterToPoints(predsSSP22050)
predsSSP22050dat <- as.data.frame(predsSSP22050dat)
predsSSP22050dat$uncert <- predsSSP22050dat[ , 5] - predsSSP22050dat[ , 4]
names(predsSSP22050dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22050 <- terra::vect(predsSSP22050dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22050$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22050$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22050$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22050$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22050$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22050$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22050$BART_F_uncert <- dat_sv_SSP22050$BART_F_upper - dat_sv_SSP22050$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22050)

plot(dat_sv_SSP22050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050")
plot(dat_sv_SSP22050, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2050")

terra::writeVector(dat_sv_SSP22050,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22050.shp"), overwrite=TRUE)

## 2060
So2060SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2060/so_ssp245_2020_2100_depthmean_7fd7_3e3f_99e2_U1763518770286.nc")
TheTaoMean2060SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2060/thetao_ssp245_2020_2100_depthmean_fab4_0d97_70db_U1763604530816.nc")
PhycMean2060SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2060/phyc_ssp245_2020_2100_depthmean_bbd3_c363_f2b8_U1763604532844.nc")

SSP22060Vars <- c(TheTaoMean2060SSP2,PhycMean2060SSP2,  So2060SSP2)
SSP22060vars_cut <- terra::crop(SSP22060Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22060vars_cut <- raster::stack(SSP22060vars_cut) 

predsSSP22060 <- predict2.bart(mod_varsel_emb, SSP22060vars_cut, quantiles = c(0.05, 0.95))

predsSSP22060dat <- rasterToPoints(predsSSP22060)
predsSSP22060dat <- as.data.frame(predsSSP22060dat)
predsSSP22060dat$uncert <- predsSSP22060dat[ , 5] - predsSSP22060dat[ , 4]
names(predsSSP22060dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22060 <- terra::vect(predsSSP22060dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22060$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22060$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22060$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22060$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22060$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22060$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22060$BART_F_uncert <- dat_sv_SSP22060$BART_F_upper - dat_sv_SSP22060$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22060)

plot(dat_sv_SSP22060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060")
plot(dat_sv_SSP22060, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2060")

terra::writeVector(dat_sv_SSP22060,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22060.shp"), overwrite=TRUE)

## 2070
So2070SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2070/so_ssp245_2020_2100_depthmean_6509_c1b9_41c4_U1763518905097.nc")
TheTaoMean2070SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2070/thetao_ssp245_2020_2100_depthmean_f633_8eec_08b9_U1763605017294.nc")
PhycMean2070SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2070/phyc_ssp245_2020_2100_depthmean_fe4b_e244_e378_U1763604934752.nc")

SSP22070Vars <- c(TheTaoMean2070SSP2, PhycMean2070SSP2, So2070SSP2)
SSP22070vars_cut <- terra::crop(SSP22070Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22070vars_cut <- raster::stack(SSP22070vars_cut) 

predsSSP22070 <- predict2.bart(mod_varsel_emb, SSP22070vars_cut, quantiles = c(0.05, 0.95))

predsSSP22070dat <- rasterToPoints(predsSSP22070)
predsSSP22070dat <- as.data.frame(predsSSP22070dat)
predsSSP22070dat$uncert <- predsSSP22070dat[ , 5] - predsSSP22070dat[ , 4]
names(predsSSP22070dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22070 <- terra::vect(predsSSP22070dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22070$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22070$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22070$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22070$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22070$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22070$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22070$BART_F_uncert <- dat_sv_SSP22070$BART_F_upper - dat_sv_SSP22070$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22070)

plot(dat_sv_SSP22070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070")
plot(dat_sv_SSP22070, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2070")

terra::writeVector(dat_sv_SSP22070,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22070.shp"), overwrite=TRUE)

## 2080
So2080SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2080/so_ssp245_2020_2100_depthmean_1cda_562e_28c0_U1763519029871.nc")
TheTaoMean2080SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2080/thetao_ssp245_2020_2100_depthmean_2f56_f974_e9b6_U1763604661069.nc")
PhycMean2080SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2080/phyc_ssp245_2020_2100_depthmean_5fe3_639b_b6e9_U1763604662948.nc")

SSP22080Vars <- c(TheTaoMean2080SSP2,So2080SSP2,PhycMean2080SSP2)
SSP22080vars_cut <- terra::crop(SSP22080Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22080vars_cut <- raster::stack(SSP22080vars_cut) 

predsSSP22080 <- predict2.bart(mod_varsel_emb, SSP22080vars_cut, quantiles = c(0.05, 0.95))

predsSSP22080dat <- rasterToPoints(predsSSP22080)
predsSSP22080dat <- as.data.frame(predsSSP22080dat)
predsSSP22080dat$uncert <- predsSSP22080dat[ , 5] - predsSSP22080dat[ , 4]
names(predsSSP22080dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22080 <- terra::vect(predsSSP22080dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22080$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22080$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22080$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22080$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22080$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22080$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22080$BART_F_uncert <- dat_sv_SSP22080$BART_F_upper - dat_sv_SSP22080$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22080)

plot(dat_sv_SSP22080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080")
plot(dat_sv_SSP22080, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2080")

terra::writeVector(dat_sv_SSP22080,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22080.shp"), overwrite=TRUE)

## 2090
So2090SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2090/so_ssp245_2020_2100_depthmean_1347_bf81_f077_U1763519174405.nc")
TheTaoMean2090SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2090/thetao_ssp245_2020_2100_depthmean_ba70_8832_c834_U1763605166797.nc")
PhycMean2090SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2090/phyc_ssp245_2020_2100_depthmean_6189_a8b0_a3bd_U1763605168741.nc")

SSP22090Vars <- c(TheTaoMean2090SSP2, PhycMean2090SSP2, So2090SSP2)
SSP22090vars_cut <- terra::crop(SSP22090Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22090vars_cut <- raster::stack(SSP22090vars_cut) 

predsSSP22090 <- predict2.bart(mod_varsel_emb, SSP22090vars_cut, quantiles = c(0.05, 0.95))

predsSSP22090dat <- rasterToPoints(predsSSP22090)
predsSSP22090dat <- as.data.frame(predsSSP22090dat)
predsSSP22090dat$uncert <- predsSSP22090dat[ , 5] - predsSSP22090dat[ , 4]
names(predsSSP22090dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22090 <- terra::vect(predsSSP22090dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22090$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22090$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22090$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22090$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22090$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22090$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22090$BART_F_uncert <- dat_sv_SSP22090$BART_F_upper - dat_sv_SSP22090$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22090)

plot(dat_sv_SSP22090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090")
plot(dat_sv_SSP22090, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2090")

terra::writeVector(dat_sv_SSP22090,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22090.shp"), overwrite=TRUE)

## 2100 
So2100SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2100/so_ssp245_2020_2100_depthmean_bea9_2da9_b722_U1763519290255.nc")
TheTaoMean2100SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2100/thetao_ssp245_2020_2100_depthmean_f973_3101_d79e_U1763605294369.nc")
PhycMean2100SSP2 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP2-4.5/2100/phyc_ssp245_2020_2100_depthmean_f3a0_c72a_ef7d_U1763605296807.nc")

SSP22100Vars <- c(TheTaoMean2100SSP2,PhycMean2100SSP2, So2100SSP2)
SSP22100vars_cut <- terra::crop(SSP22100Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP22100vars_cut <- raster::stack(SSP22100vars_cut) 

predsSSP22100 <- predict2.bart(mod_varsel_emb, SSP22100vars_cut, quantiles = c(0.05, 0.95))

predsSSP22100dat <- rasterToPoints(predsSSP22100)
predsSSP22100dat <- as.data.frame(predsSSP22100dat)
predsSSP22100dat$uncert <- predsSSP22100dat[ , 5] - predsSSP22100dat[ , 4]
names(predsSSP22100dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP22100 <- terra::vect(predsSSP22100dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP22100$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP22100$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22100$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP22100$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22100$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP22100$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP22100$BART_F_uncert <- dat_sv_SSP22100$BART_F_upper - dat_sv_SSP22100$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP22100)

plot(dat_sv_SSP22100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100")
plot(dat_sv_SSP22100, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2100")

terra::writeVector(dat_sv_SSP22100,paste0(output_data_folder, "/outputs/SSP2-4.5/dat_sv_SSP22100.shp"), overwrite=TRUE)

## Change over time 

par(mfrow=c(2,4))
plot(dat_sv_SSP22030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2030 SSP2-4.5 ")
plot(dat_sv_SSP22040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2040 SSP2-4.5 ")
plot(dat_sv_SSP22050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2050 SSP2-4.5 ")
plot(dat_sv_SSP22060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2060 SSP2-4.5 ")
plot(dat_sv_SSP22070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2070 SSP2-4.5 ")
plot(dat_sv_SSP22080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2080 SSP2-4.5 ")
plot(dat_sv_SSP22090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2090 SSP2-4.5 ")
plot(dat_sv_SSP22100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2100 SSP2-4.5 ")

SSP2220to30 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22030$BART_F)
SSP2230to40 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22040$BART_F)
SSP2240to50 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22050$BART_F)
SSP2250to60 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22060$BART_F)
SSP2260to70 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22070$BART_F)
SSP2270to80 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22080$BART_F)
SSP2280to90 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22090$BART_F)
SSP2290to100 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP22100$BART_F)

SSP2220to30lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22030$BART_F_lower)
SSP2230to40lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22040$BART_F_lower)
SSP2240to50lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22050$BART_F_lower)
SSP2250to60lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22060$BART_F_lower)
SSP2260to70lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22070$BART_F_lower)
SSP2270to80lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22080$BART_F_lower)
SSP2280to90lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22090$BART_F_lower)
SSP2290to100lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP22100$BART_F_lower)

SSP2220to30upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22030$BART_F_upper)
SSP2230to40upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22040$BART_F_upper)
SSP2240to50upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22050$BART_F_upper)
SSP2250to60upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22060$BART_F_upper)
SSP2260to70upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22070$BART_F_upper)
SSP2270to80upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22080$BART_F_upper)
SSP2280to90upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22090$BART_F_upper)
SSP2290to100upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP22100$BART_F_upper)

SSP22Change <- data.frame(Decade = c(2030, 2040, 2050, 2060, 2070, 2080, 2090, 2100), 
                          DecadalChangeSSP22 = c(0.19,0.24,0.41,0.48,0.65,0.72,0.92,0.97,          
                                                 0.39,0.46,0.83,1.04,1.39,1.52,2.01,2.13,           
                                                 0.10,0.14,0.22,0.25,0.34,0.38,0.49,0.51), 
                          Category = c("Average", "Average", "Average", "Average", "Average", "Average", "Average","Average", 
                                       "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", 
                                       "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile"))

SSP2Changeplot <- SSP22Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP22, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to 2020 under SSP2-4.5") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()

#####Future Climate Predictions SSP5-8.5 #####
##2030
So2030SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2030/so_ssp585_2020_2100_depthmean_47a6_f19c_2216_U1763519524450.nc')
TheTaoMean2030SSP8 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2030/thetao_ssp585_2020_2100_depthmean_773f_eb2c_59ac_U1763605436133.nc")
PhycMean2030SSP8 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2030/phyc_ssp585_2020_2100_depthmean_7f72_0431_8307_U1763605437814.nc")

SSP82030Vars <- c(TheTaoMean2030SSP8, So2030SSP8, PhycMean2030SSP8)
SSP82030vars_cut <- terra::crop(SSP82030Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82030vars_cut <- raster::stack(SSP82030vars_cut) 

predsSSP82030 <- predict2.bart(mod_varsel_emb, SSP82030vars_cut, quantiles = c(0.05, 0.95))

predsSSP82030dat <- rasterToPoints(predsSSP82030)
predsSSP82030dat <- as.data.frame(predsSSP82030dat)
predsSSP82030dat$uncert <- predsSSP82030dat[ , 5] - predsSSP82030dat[ , 4]
names(predsSSP82030dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82030 <- terra::vect(predsSSP82030dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82030$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82030$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82030$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82030$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82030$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82030$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82030$BART_F_uncert <- dat_sv_SSP82030$BART_F_upper - dat_sv_SSP82030$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82030)

plot(dat_sv_SSP82030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030")
plot(dat_sv_SSP82030, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2030")

terra::writeVector(dat_sv_SSP82030,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82030.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82030$BART_F)

##2040

So2040SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2040/so_ssp585_2020_2100_depthmean_7a9e_ce74_9069_U1763519770676.nc')
TheTaoMean2040SSP8 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2040/thetao_ssp585_2020_2100_depthmean_4551_d0ce_0d7e_U1763605566389.nc")
PhycMean2040SSP8 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2040/phyc_ssp585_2020_2100_depthmean_f82d_f5fa_5551_U1763605568192.nc")

SSP82040Vars <- c(TheTaoMean2040SSP8,PhycMean2040SSP8,  So2040SSP8)
SSP82040vars_cut <- terra::crop(SSP82040Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82040vars_cut <- raster::stack(SSP82040vars_cut) 

predsSSP82040 <- predict2.bart(mod_varsel_emb, SSP82040vars_cut, quantiles = c(0.05, 0.95))

predsSSP82040dat <- rasterToPoints(predsSSP82040)
predsSSP82040dat <- as.data.frame(predsSSP82040dat)
predsSSP82040dat$uncert <- predsSSP82040dat[ , 5] - predsSSP82040dat[ , 4]
names(predsSSP82040dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82040 <- terra::vect(predsSSP82040dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82040$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82040$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82040$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82040$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82040$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82040$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82040$BART_F_uncert <- dat_sv_SSP82040$BART_F_upper - dat_sv_SSP82040$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82040)

plot(dat_sv_SSP82040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040")
plot(dat_sv_SSP82040, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2040")

terra::writeVector(dat_sv_SSP82040,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82040.shp"), overwrite=TRUE)

fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82040$BART_F)
## 2050
So2050SSP8 <- rast("/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2050/so_ssp585_2020_2100_depthmean_62a8_9347_1d5e_U1763519974300.nc")
TheTaoMean2050SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2050/thetao_ssp585_2020_2100_depthmean_6832_f862_ae1a_U1763605749664.nc')
PhycMean2050SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2050/phyc_ssp585_2020_2100_depthmean_fa0f_649b_1ee9_U1763605752058.nc')

SSP82050Vars <- c(TheTaoMean2050SSP8, PhycMean2050SSP8, So2050SSP8)
SSP82050vars_cut <- terra::crop(SSP82050Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82050vars_cut <- raster::stack(SSP82050vars_cut) 

predsSSP82050 <- predict2.bart(mod_varsel_emb, SSP82050vars_cut, quantiles = c(0.05, 0.95))

predsSSP82050dat <- rasterToPoints(predsSSP82050)
predsSSP82050dat <- as.data.frame(predsSSP82050dat)
predsSSP82050dat$uncert <- predsSSP82050dat[ , 5] - predsSSP82050dat[ , 4]
names(predsSSP82050dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82050 <- terra::vect(predsSSP82050dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82050$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82050$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82050$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82050$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82050$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82050$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82050$BART_F_uncert <- dat_sv_SSP82050$BART_F_upper - dat_sv_SSP82050$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82050)

plot(dat_sv_SSP82050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050")
plot(dat_sv_SSP82050, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2050")

terra::writeVector(dat_sv_SSP82050,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82050.shp"), overwrite=TRUE)

## 2060
So2060SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2060/so_ssp585_2020_2100_depthmean_7fd7_3e3f_99e2_U1763520192644.nc')
TheTaoMean2060SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2060/thetao_ssp585_2020_2100_depthmean_fab4_0d97_70db_U1763605852565.nc')
PhycMean2060SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2060/phyc_ssp585_2020_2100_depthmean_bbd3_c363_f2b8_U1763605854379.nc')

SSP82060Vars <- c(TheTaoMean2060SSP8, PhycMean2060SSP8, So2060SSP8)
SSP82060vars_cut <- terra::crop(SSP82060Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82060vars_cut <- raster::stack(SSP82060vars_cut) 

predsSSP82060 <- predict2.bart(mod_varsel_emb, SSP82060vars_cut, quantiles = c(0.05, 0.95))

predsSSP82060dat <- rasterToPoints(predsSSP82060)
predsSSP82060dat <- as.data.frame(predsSSP82060dat)
predsSSP82060dat$uncert <- predsSSP82060dat[ , 5] - predsSSP82060dat[ , 4]
names(predsSSP82060dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82060 <- terra::vect(predsSSP82060dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82060$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82060$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82060$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82060$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82060$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82060$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82060$BART_F_uncert <- dat_sv_SSP82060$BART_F_upper - dat_sv_SSP82060$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82060)

plot(dat_sv_SSP82060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060")
plot(dat_sv_SSP82060, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2060")

terra::writeVector(dat_sv_SSP82060,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82060.shp"), overwrite=TRUE)

## 2070
So2070SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2070/so_ssp585_2020_2100_depthmean_6509_c1b9_41c4_U1763520691965.nc')
TheTaoMean2070SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2070/thetao_ssp585_2020_2100_depthmin_f633_8eec_08b9_U1763606283105.nc')
PhycMean2070SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2070/phyc_ssp585_2020_2100_depthmin_fe4b_e244_e378_U1763606285170.nc')

SSP82070Vars <- c(TheTaoMean2070SSP8, PhycMean2070SSP8, So2070SSP8)
SSP82070vars_cut <- terra::crop(SSP82070Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82070vars_cut <- raster::stack(SSP82070vars_cut) 

predsSSP82070 <- predict2.bart(mod_varsel_emb, SSP82070vars_cut, quantiles = c(0.05, 0.95))

predsSSP82070dat <- rasterToPoints(predsSSP82070)
predsSSP82070dat <- as.data.frame(predsSSP82070dat)
predsSSP82070dat$uncert <- predsSSP82070dat[ , 5] - predsSSP82070dat[ , 4]
names(predsSSP82070dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82070 <- terra::vect(predsSSP82070dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82070$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82070$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82070$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82070$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82070$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82070$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82070$BART_F_uncert <- dat_sv_SSP82070$BART_F_upper - dat_sv_SSP82070$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82070)

plot(dat_sv_SSP82070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070")
plot(dat_sv_SSP82070, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2070")

terra::writeVector(dat_sv_SSP82070,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82070.shp"), overwrite=TRUE)

## 2080
So2080SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2080/so_ssp585_2020_2100_depthmean_1cda_562e_28c0_U1763520503695.nc')
TheTaoMean2080SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2080/thetao_ssp585_2020_2100_depthmean_2f56_f974_e9b6_U1763607308333.nc')
PhycMean2080SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2080/phyc_ssp585_2020_2100_depthmean_5fe3_639b_b6e9_U1763607309915.nc')

SSP82080Vars <- c(TheTaoMean2080SSP8, PhycMean2080SSP8, So2080SSP8)
SSP82080vars_cut <- terra::crop(SSP82080Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82080vars_cut <- raster::stack(SSP82080vars_cut) 

predsSSP82080 <- predict2.bart(mod_varsel_emb, SSP82080vars_cut, quantiles = c(0.05, 0.95))

predsSSP82080dat <- rasterToPoints(predsSSP82080)
predsSSP82080dat <- as.data.frame(predsSSP82080dat)
predsSSP82080dat$uncert <- predsSSP82080dat[ , 5] - predsSSP82080dat[ , 4]
names(predsSSP82080dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82080 <- terra::vect(predsSSP82080dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82080$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82080$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82080$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82080$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82080$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82080$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82080$BART_F_uncert <- dat_sv_SSP82080$BART_F_upper - dat_sv_SSP82080$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82080)

plot(dat_sv_SSP82080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080")
plot(dat_sv_SSP82080, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2080")

terra::writeVector(dat_sv_SSP82080,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82080.shp"), overwrite=TRUE)

## 2090
So2090SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2090/so_ssp585_2020_2100_depthmean_1347_bf81_f077_U1763521000315.nc')
TheTaoMean2090SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2090/thetao_ssp585_2020_2100_depthmin_ba70_8832_c834_U1763607416302.nc')
PhycMean2090SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2090/phyc_ssp585_2020_2100_depthmin_6189_a8b0_a3bd_U1763607417980.nc')

SSP82090Vars <- c(So2090SSP8, TheTaoMean2090SSP8, PhycMean2090SSP8)
SSP82090vars_cut <- terra::crop(SSP82090Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82090vars_cut <- raster::stack(SSP82090vars_cut) 

predsSSP82090 <- predict2.bart(mod_varsel_emb, SSP82090vars_cut, quantiles = c(0.05, 0.95))

predsSSP82090dat <- rasterToPoints(predsSSP82090)
predsSSP82090dat <- as.data.frame(predsSSP82090dat)
predsSSP82090dat$uncert <- predsSSP82090dat[ , 5] - predsSSP82090dat[ , 4]
names(predsSSP82090dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82090 <- terra::vect(predsSSP82090dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82090$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82090$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82090$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82090$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82090$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82090$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82090$BART_F_uncert <- dat_sv_SSP82090$BART_F_upper - dat_sv_SSP82090$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82090)

plot(dat_sv_SSP82090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090")
plot(dat_sv_SSP82090, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2090")

terra::writeVector(dat_sv_SSP82090,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82090.shp"), overwrite=TRUE)

## 2100 
So2100SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2100/so_ssp585_2020_2100_depthmean_bea9_2da9_b722_U1763521105065.nc')
TheTaoMean2100SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2100/thetao_ssp585_2020_2100_depthmean_f973_3101_d79e_U1763607557117.nc')
PhycMean2100SSP8 <- rast('/Users/danielvillar/Desktop/GreenCrabProject/GreenCrabFuturEnFolders/SSP5-8.5   /2100/phyc_ssp585_2020_2100_depthmean_f3a0_c72a_ef7d_U1763607559086.nc')

SSP82100Vars <- c(TheTaoMean2100SSP8,PhycMean2100SSP8, So2100SSP8)
SSP82100vars_cut <- terra::crop(SSP82100Vars, mod_region, snap = "out", mask = TRUE) # crop layers to study region 
SSP82100vars_cut <- raster::stack(SSP82100vars_cut) 

predsSSP82100 <- predict2.bart(mod_varsel_emb, SSP82100vars_cut, quantiles = c(0.05, 0.95))

predsSSP82100dat <- rasterToPoints(predsSSP82100)
predsSSP82100dat <- as.data.frame(predsSSP82100dat)
predsSSP82100dat$uncert <- predsSSP82100dat[ , 5] - predsSSP82100dat[ , 4]
names(predsSSP82100dat) <- c("x", "y", "BART_P", "BART_P_lower", "BART_P_upper", "BART_P_uncert")

dat_sv_SSP82100 <- terra::vect(predsSSP82100dat, geom = c("x", "y"), keepgeom = TRUE, crs = "EPSG:4326")

dat_sv_SSP82100$BART_F <- fuzzySim::Fav(pred = dat_sv_SSP82100$BART_P, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82100$BART_F_lower <- fuzzySim::Fav(pred = dat_sv_SSP82100$BART_P_lower, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82100$BART_F_upper <- fuzzySim::Fav(pred = dat_sv_SSP82100$BART_P_upper, sample.preval = fuzzySim::prevalence(model = mod_varsel_emb))

dat_sv_SSP82100$BART_F_uncert <- dat_sv_SSP82100$BART_F_upper - dat_sv_SSP82100$BART_F_lower  # width of the credibility interval = uncertainty of the prediction at each site

head(dat_sv_SSP82100)

plot(dat_sv_SSP82100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100")
plot(dat_sv_SSP82100, "BART_P", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Presence Probability 2100")

terra::writeVector(dat_sv_SSP82100,paste0(output_data_folder, "/outputs/SSP5-8.5/dat_sv_SSP82100.shp"), overwrite=TRUE)

## Change over time 

par(mfrow=c(2,4))
plot(dat_sv_SSP82030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2030 SSP5-8.5 ")
plot(dat_sv_SSP82040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2040 SSP5-8.5 ")
plot(dat_sv_SSP82050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2050 SSP5-8.5 ")
plot(dat_sv_SSP82060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2060 SSP5-8.5 ")
plot(dat_sv_SSP82070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2070 SSP5-8.5 ")
plot(dat_sv_SSP82080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2080 SSP5-8.5 ")
plot(dat_sv_SSP82090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2090 SSP5-8.5 ")
plot(dat_sv_SSP82100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability \n 2100 SSP5-8.5 ")

SSP8220to30 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82030$BART_F)
SSP8230to40 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82040$BART_F)
SSP8240to50 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82050$BART_F)
SSP8250to60 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82060$BART_F)
SSP8260to70 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82070$BART_F)
SSP8270to80 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82080$BART_F)
SSP8280to90 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82090$BART_F)
SSP8290to100 <- fuzzyRangeChange(dat_sv$BART_F, dat_sv_SSP82100$BART_F)

SSP8220to30lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82030$BART_F_lower)
SSP8230to40lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82040$BART_F_lower)
SSP8240to50lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82050$BART_F_lower)
SSP8250to60lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82060$BART_F_lower)
SSP8260to70lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82070$BART_F_lower)
SSP8270to80lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82080$BART_F_lower)
SSP8280to90lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82090$BART_F_lower)
SSP8290to100lower <- fuzzyRangeChange(dat_sv$BART_F_lower, dat_sv_SSP82100$BART_F_lower)

SSP8220to30upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82030$BART_F_upper)
SSP8230to40upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82040$BART_F_upper)
SSP8240to50upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82050$BART_F_upper)
SSP8250to60upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82060$BART_F_upper)
SSP8260to70upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82070$BART_F_upper)
SSP8270to80upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82080$BART_F_upper)
SSP8280to90upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82090$BART_F_upper)
SSP8290to100upper <- fuzzyRangeChange(dat_sv$BART_F_upper, dat_sv_SSP82100$BART_F_upper)

SSP82Change <- data.frame(Decade = c(2030, 2040, 2050, 2060, 2070, 2080, 2090, 2100), 
                          DecadalChangeSSP82 = c(0.15,0.25,0.46,0.67,1.18,1.19,1.72,1.73,          
                                                 0.26,0.49,0.89,1.36,2.80,2.66,4.50,4.46,           
                                                 0.09,0.14,0.25,0.37,0.60,0.62,0.84,0.85), 
                          Category = c("Average", "Average", "Average", "Average", "Average", "Average", "Average","Average", 
                                       "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", "5th percentile", 
                                       "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile", "95th percentile"))

SSP82Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP82, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to 2020 under SSP5-8.5") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()


######Make Graphs ######
SSP1_Graph <- SSP12Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP12, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + scale_y_continuous(limits = c(-1, 5)) +
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to \n 2020 under SSP1-1.9") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()
SSP2_Graph <- SSP22Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP22, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to \n 2020 under SSP2-4.5") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()
SSP4_Graph <- SSP42Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP42, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to 2020 \n under SSP4-6.0") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()
SSP8_Graph <- SSP82Change %>%
  ggplot( aes(x=Decade, y=DecadalChangeSSP82, group=Category, colour = Category)) +
  geom_point(shape=21, color="black", fill = "#69b3a2", size=2) + 
  scale_x_continuous(breaks = scales::pretty_breaks(n = 8)) + 
  geom_line() + ggtitle("Change in Habitat Suitability relative to 2020 \n under SSP5-8.5") +
  ylab("Proportional Change") + xlab("Decade") + theme_classic()
ggarrange(SSP1_Graph, SSP2_Graph,SSP4_Graph, SSP8_Graph, nrow = 2, ncol = 2)

par(mfrow=c(3,2))

plot(dat_sv, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat favourability 2020")
plot(dat_sv, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat favourability 2020")
plot(dat_sv_SSP12030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030 SSP1-1.9 ")
plot(dat_sv_SSP22030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030 SSP2-4.5 ")
plot(dat_sv_SSP12040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040 SSP1-1.9 ")
plot(dat_sv_SSP22040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040 SSP2-4.5 ")

plot(dat_sv_SSP12050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050 SSP1-1.9 ")
plot(dat_sv_SSP22050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050 SSP2-4.5 ")
plot(dat_sv_SSP12060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060 SSP1-1.9 ")
plot(dat_sv_SSP22060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060 SSP2-4.5 ")
plot(dat_sv_SSP12070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070 SSP1-1.9 ")
plot(dat_sv_SSP22070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070 SSP2-4.5 ")

plot(dat_sv_SSP12080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080 SSP1-1.9 ")
plot(dat_sv_SSP22080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080 SSP2-4.5 ")
plot(dat_sv_SSP12090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090 SSP1-1.9 ")
plot(dat_sv_SSP22090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090 SSP2-4.5 ")
plot(dat_sv_SSP12100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100 SSP1-1.9 ")
plot(dat_sv_SSP22100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100 SSP2-4.5 ")

plot(dat_sv, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat favourability 2020")
plot(dat_sv, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat favourability 2020")
plot(dat_sv_SSP42030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030 SSP4-6.0 ")
plot(dat_sv_SSP82030, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2030 SSP5-8.5 ")
plot(dat_sv_SSP42040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040 SSP4-6.0 ")
plot(dat_sv_SSP82040, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2040 SSP5-8.5 ")

plot(dat_sv_SSP42050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050 SSP4-6.0 ")
plot(dat_sv_SSP82050, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2050 SSP5-8.5 ")
plot(dat_sv_SSP42060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060 SSP4-6.0 ")
plot(dat_sv_SSP82060, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2060 SSP5-8.5 ")
plot(dat_sv_SSP42070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070 SSP4-6.0 ")
plot(dat_sv_SSP82070, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2070 SSP5-8.5 ")

plot(dat_sv_SSP42080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080 SSP4-6.0 ")
plot(dat_sv_SSP82080, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2080 SSP5-8.5 ")
plot(dat_sv_SSP42090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090 SSP4-6.0 ")
plot(dat_sv_SSP82090, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2090 SSP5-8.5 ")
plot(dat_sv_SSP42100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100 SSP4-6.0 ")
plot(dat_sv_SSP82100, "BART_F", cex = 0.5, type = "continuous", col = hcl.colors(100), range = c(0, 1), main = "Habitat Favourability 2100 SSP5-8.5 ")
