Skip to content

Commit

Permalink
Merge branch 'feat/global-landcover' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrieldansereau committed Feb 14, 2020
2 parents 4f2eae5 + 6679b1a commit 9d4ee02
Show file tree
Hide file tree
Showing 70 changed files with 128 additions and 99 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
tags
assets/landcover/landcover_copernicus_global_100m*
Binary file removed assets/landcover/lc_bare-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_bare_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_bare_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_crops-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_crops_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_crops_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_grass-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_grass_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_grass_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_moss-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_moss_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_moss_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_shrub-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_shrub_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_shrub_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_snow-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_snow_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_snow_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_tree-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_tree_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_tree_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_urban-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_urban_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_urban_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_water-permanent-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_water-permanent_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_water-permanent_5m.tif
Binary file not shown.
Binary file removed assets/landcover/lc_water-seasonal-5m.tif
Binary file not shown.
Binary file modified assets/landcover/lc_water-seasonal_10m.tif
Binary file not shown.
Binary file added assets/landcover/lc_water-seasonal_5m.tif
Binary file not shown.
Binary file modified fig/06_relationship_lcbd-richness-transf.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified fig/06_relationship_lcbd-richness.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added fig/quantiles/03_raw_richness_quantiles.pdf
Binary file not shown.
Binary file modified fig/quantiles/03_sdm_richness_quantiles.pdf
Binary file not shown.
Binary file added fig/quantiles/05_raw_lcbd-transf_quantiles.pdf
Binary file not shown.
Binary file added fig/quantiles/05_raw_lcbd_quantiles.pdf
Binary file not shown.
Binary file modified fig/quantiles/05_sdm_lcbd-transf_quantiles.pdf
Binary file not shown.
Binary file modified fig/quantiles/05_sdm_lcbd_quantiles.pdf
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added fig/quantiles/07_raw_endemism_quantiles.pdf
Binary file not shown.
Binary file modified fig/quantiles/07_sdm_endemism_quantiles.pdf
Binary file not shown.
Binary file modified fig/raw/01_raw_sp-Setophaga_petechia.pdf
Binary file not shown.
Binary file modified fig/raw/01_raw_sp-Setophaga_townsendi.pdf
Binary file not shown.
Binary file modified fig/raw/02_raw_Y-rowcolsorted.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified fig/raw/03_raw_richness.pdf
Binary file not shown.
Binary file modified fig/raw/04_raw_diversity-pielou.pdf
Binary file not shown.
Binary file modified fig/raw/04_raw_diversity-pielou2.pdf
Binary file not shown.
Binary file modified fig/raw/05_raw_lcbd-transf.pdf
Binary file not shown.
Binary file modified fig/raw/05_raw_lcbd.pdf
Binary file not shown.
Binary file added fig/raw/07_raw_endemism.pdf
Binary file not shown.
Binary file modified fig/sdm/01_sdm_sp-Setophaga_petechia.pdf
Binary file not shown.
Binary file modified fig/sdm/01_sdm_sp-Setophaga_townsendi.pdf
Binary file not shown.
Binary file modified fig/sdm/02_sdm_Y-rowcolsorted.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified fig/sdm/03_sdm_richness.pdf
Binary file not shown.
Binary file modified fig/sdm/04_sdm_diversity-pielou.pdf
Binary file not shown.
Binary file modified fig/sdm/04_sdm_diversity-pielou2.pdf
Binary file not shown.
Binary file modified fig/sdm/05_sdm_lcbd-transf.pdf
Binary file not shown.
Binary file modified fig/sdm/05_sdm_lcbd.pdf
Binary file not shown.
Binary file modified fig/sdm/07_sdm_endemism.pdf
Binary file not shown.
58 changes: 13 additions & 45 deletions src/00b_data_landcover-copernicus.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,52 +5,20 @@ using Distributed
## Conditional arguments
# save_figures = true # should figures be overwritten (optional)

## Bash commands to download & prepare data, to run in terminal in ../landcover/
#=
cd ~/github/landcover/
# Download Copernicus land cover data, many downloads to cover whole extent
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W160N80_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W160N80.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W160N60_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W160N60.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W160N40_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W160N40.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W140N80_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W140N80.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W140N60_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W140N60.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W140N40_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W140N40.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W120N80_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W120N80.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W120N60_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W120N60.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W120N40_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W120N40.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W100N80_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W100N80.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W100N60_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W100N60.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W100N40_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W100N40.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W080N80_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W080N80.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W080N60_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W080N60.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W080N40_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W080N40.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W060N80_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W060N80.zip
wget https://s3-eu-west-1.amazonaws.com/vito-downloads/ZIPfiles/W060N60_ProbaV_LC100_epoch2015_global_v2.0.1_products_EPSG-4326.zip -O landcover_W060N60.zip
# Unzip files in separate directories
for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done
# Delete zip files
rm *.zip
# Create repositories if needed
mkdir coverfraction
(cd coverfraction; mkdir bare crops grass moss shrub snow tree urban water-permanent water-seasonal)
# Batch commands for each land cover variable
for i in $(ls coverfraction/)
do
# Copy landcover data in 1 folder per variable
for j in landcover*; do cp "$j"/*"$i"-coverfraction-layer* coverfraction/"$i"/; done
# Set resolution to 10 arc-minutes & merge all layers in one
gdalwarp -tr 0.166667 0.166667 -r average coverfraction/"$i"/W*.tif ../BioClim/assets/landcover/lc_"$i"_10m.tif
# Set resolution to 5 arc-minutes & merge all layers in one
gdalwarp -tr 0.0833333 0.0833333 -r average coverfraction/"$i"/W*.tif ../BioClim/assets/landcover/lc_"$i"-5m.tif
done
=#

## Test landcover variables
## Run bash scripts to download & coarsen landcover data from Zenodo (if files missing)
lc_files = readdir("assets/landcover/")
# Check if landcover files are missing
if any(startswith.(lc_files, r"^lc_"))
# Check if full resolution files are missing
if any(startswith.(lc_files, r"^landcover_copernicus_global_100m"))
# Download full resolution files
run(`bash src/bin/landcover_download.sh`)
end
# Coarsen resolution
run(`bash src/bin/landcover_coarsen.sh`)
end

## Test landcover variables
# Define coordinates range
lon_range = (-145.0, -50.0)
lat_range = (20.0, 75.0)
Expand Down
17 changes: 5 additions & 12 deletions src/01_distributions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,12 @@ lat_range_obs = extrema(df.latitude)

## Get environmental data (with different training resolutions)
# WorldClim data
@time wc_vars = map(x -> worldclim(x, resolution = "10")[lon_range, lat_range], [1,12]);
wc_vars = map(x -> worldclim(x, resolution = "10")[lon_range, lat_range], [1,12]);
# Landcover data
@time lc_vars = pmap(x -> landcover(x, resolution = "10")[lon_range, lat_range], 1:10);
lc_vars = map(x -> landcover(x, resolution = "10")[lon_range, lat_range], 1:10);
# Training data with finer resolution
if outcome == "raw"
# Set resolution to 10 # CAN'T BE FINER FOR RAW ANALYSES FOR NOW
@time wc_vars_train = map(x -> worldclim(x, resolution = "10")[lon_range_obs, lat_range_obs], [1,12]);
@time lc_vars_train = map(x -> landcover(x, resolution = "10")[lon_range, lat_range], 1:10)
elseif outcome == "sdm"
# Set resolution to 5
@time wc_vars_train = map(x -> worldclim(x, resolution = "5")[lon_range_obs, lat_range_obs], [1,12]);
@time lc_vars_train = map(x -> landcover(x, resolution = "5")[lon_range, lat_range], 1:10)
end
wc_vars_train = map(x -> worldclim(x, resolution = "5")[lon_range_obs, lat_range_obs], [1,12]);
lc_vars_train = map(x -> landcover(x, resolution = "5")[lon_range_obs, lat_range_obs], 1:10);

# Combine environmental data
env_vars = vcat(wc_vars, lc_vars)
Expand All @@ -70,7 +63,7 @@ if (@isdefined create_distributions) && create_distributions == true
# @time distributions = @showprogress pmap(x -> presence_absence(x, env_vars_train[1], full_range = true, binary = false), warblers)
elseif outcome == "sdm"
# Get sdm distributions (with different training resolutions)
@time distributions = @showprogress pmap(x -> bioclim(x, env_vars, train_vars = env_vars_train), warblers);
@time distributions = @showprogress pmap(x -> bioclim(x, env_vars, training_layers = env_vars_train), warblers);
end
end

Expand Down
4 changes: 2 additions & 2 deletions src/06_relationship_lcbd-richness.jl
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,15 @@ relationtr_plot = scatter(vec(rel_richness[1]), vec(raw.LCBD[2].grid),
grid=:none)
scatter!(relationtr_plot, vec(rel_richness[2]), vec(sdm.LCBD[1].grid),
markersize = 3, c = :orange, msw = 0, label = "SDM predictions")
relationdbtr_plot = scatter(vec(rel_richness[1]), vec(raw.LCBD[3].grid),
relationdbtr_plot = scatter(vec(rel_richness[1]), vec(raw.LCBD[2].grid),
markersize = 2,
c = :skyblue,
msw = 0,
label = "Raw occurrence data",
legend = :topright,
xlabel = "Species richness (\\alpha\\/\\gamma)", ylabel = "LCBD (relative to maximum)",
grid=:none)
scatter!(relationdbtr_plot, vec(rel_richness[2]), vec(sdm.LCBD[3].grid),
scatter!(relationdbtr_plot, vec(rel_richness[2]), vec(sdm.LCBD[2].grid),
markersize = 3, c = :orange, msw = 0, label = "SDM predictions")

## Save result
Expand Down
32 changes: 32 additions & 0 deletions src/bin/landcover_coarsen.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash

## Bash commands to download & prepare landcover data from Zenodo
# Just run following in bash terminal:
# bash src/bin/landcover_coarsen.sh

# Make sure file is executable. If not (e.g. Permission denied error), run:
# chmod +x src/bin/landcover_coarsen.sh

####

## Go to landcover directory
cd assets/landcover/

## Coarsen resolution
# BEWARE, can be very long and will take 10 cores, took 30 min and ~ 16GB of RAM in my case
landcover_variables=(bare crops grass moss shrub snow tree urban water-permanent water-seasonal)
for i in "${landcover_variables[@]}"
do
# Set resolution to 10 arc-minutes
gdalwarp -tr 0.166667 0.166667 -r average --config GDAL_CACHEMAX 500 -wm 500 -multi landcover_copernicus_global_100m_v2.0.2_"$i".tif lc_"$i"_10m.tif &
done
wait
echo "10 arc-minutes - All done"

for i in "${landcover_variables[@]}"
do
# Set resolution to 5 arc-minutes
gdalwarp -tr 0.0833333 0.0833333 -r average --config GDAL_CACHEMAX 500 -wm 500 -multi landcover_copernicus_global_100m_v2.0.2_"$i".tif lc_"$i"_5m.tif &
done
wait
echo "5 arc-minutes - All done"
25 changes: 25 additions & 0 deletions src/bin/landcover_download.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

## Bash commands to download & prepare landcover data from Zenodo
# Just run following in bash terminal:
# bash src/bin/landcover_download.sh

# Make sure file is executable. If not (e.g. Permission denied error), run:
# chmod +x src/bin/landcover_download.sh

####

## Go to landcover directory
cd assets/landcover/

## Download Copernicus global land cover data from Zenodo
# BEWARE, can be very long, 25 GB of data in total
# Launching downloads in parallel, 1 core/variable = 10 cores at most, not much RAM needed
landcover_variables=(bare crops grass moss shrub snow tree urban water-permanent water-seasonal)
for i in "${landcover_variables[@]}"
do
wget https://zenodo.org/record/3243509/files/ProbaV_LC100_epoch2015_global_v2.0.2_"$i"-coverfraction-layer_EPSG-4326.tif -O landcover_copernicus_global_100m_v2.0.2_"$i".tif &
done
wait
echo "Downloads - All done"
rm wget-log*
63 changes: 30 additions & 33 deletions src/lib/bioclim.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,48 @@

# import SimpleSDMLayers: bioclim

# 1st part of BIOCLIM model for single environmental variables
function bioclim_singlevar(occ::Union{GBIFRecords,DataFrame}, pred_vars::SimpleSDMLayer; train_vars::SimpleSDMLayer=pred_vars)
# Small internal function for BIOCLIM. Ensures values are equal for both tails and between 0-1
bcscore(x) = isnan(x) ? NaN : (x > 0.5 ? 2*(1-x) : 2x)

# 1st part of BIOCLIM model for single environmental layer
function bioclim_layer(occ::Union{G,D}, layer::T; training_layer::T=layer) where {T <: SimpleSDMLayer, D <: DataFrame, G <: GBIFRecords}
# occ: occurences of a single species as a DataFrame with latitude and longitude columns
# pred_vars: environmental variables used for prediction
# train_vars: optional, training environmental variables, can use a different resolution
# layer: layer of environmental variables used for prediction
# training_layer: optional, training environmental layer, can use a different resolution

# Get observed environmental values (training values)
observed_values = train_vars[occ]
# Create ECDF function to extract quantile value
qfinder = ecdf(observed_values)
# Create empty array for local quantile values
lq = zeros(Float64, size(pred_vars))
# Loop for all sites (prediction values)
for i in eachindex(pred_vars.grid)
if isnan(pred_vars.grid[i])
# Set value to NaN if env value is already NaN
local_quantile = NaN
else
# Get quantile rank if not NaN
local_quantile = qfinder(pred_vars.grid[i])
# Replace values greater than 0.5 to set both tails equal
if local_quantile > 0.5
local_quantile = 1.0-local_quantile
end
# Scale back between 0 and 1
local_quantile = 2.0 * local_quantile
end
# Collect quantile values
lq[i] = local_quantile
obs = training_layer[occ]
filter!(!isnan, obs)
# Create empty layer for predictions
pred = similar(layer)
# Make predictions
if length(unique(obs)) <= 1 # special case if 1 unique value only
# If 1 unique value only, set 1.0 as prediction for all sites with this value
pred.grid = replace(x -> x == obs[1] ? 1.0 : 0.0, layer.grid)
else
# Create ECDF function to extract quantile values
qfinder = ecdf(obs)
# Get prediction score
pred.grid = bcscore.(qfinder.(layer.grid))
end
# Restore NaNs from original layer
for idx in findall(isnan, layer.grid)
pred.grid[idx] = NaN
end
# Convert to SimpleSDMLayer, with same coordinates as prediction layer
prediction = SimpleSDMResponse(lq, pred_vars.left, pred_vars.right, pred_vars.bottom, pred_vars.top)
return pred
end

# Complete BIOCLIM model on all environmental variables, including 1st part function
function bioclim(occ, pred_vars; train_vars=pred_vars, binary=true, with_threshold=false, threshold::Float64=0.05)
# Complete BIOCLIM model on all environmental layers, including 1st part function
function bioclim(occ, layers; training_layers=layers, binary=true, with_threshold=false, threshold::Float64=0.05)
# occ: occurences of a single species as a DataFrame with latitude and longitude columns
# pred_vars: environmental variables used for prediction
# train_vars: optional, training environmental variables, can use a different resolution
# layers: layers of environmental variables used for prediction
# training_layers: optional, training environmental layers, can use a different resolution
# binary: optional, convert result to binary presence-absence values
# with_threshold: optional, apply threshold to remove lower predictions
# threshold: optional, set threshold to use (default = 0.05)

# Apply 1st part of BIOCLIM on each environmental variable
predictions = [bioclim_singlevar(occ, pred_vars[i], train_vars = train_vars[i]) for i in 1:length(pred_vars)];
predictions = [bioclim_layer(occ, layers[i], training_layer = training_layers[i]) for i in eachindex(layers)];
# Reduce to single layer with minimum values
prediction = reduce(minimum, predictions);
# Apply threshold (if requested, default is false)
Expand Down
17 changes: 13 additions & 4 deletions src/lib/landcover.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,19 @@ function landcover(layers::Vector{Int64}; resolution::AbstractString="10", path:
landcover_mat = [permutedims(v[:,end:-1:1]) for v in values_int]
# Replace 255 (default no data values) by NaN
[replace!(l, 255 => NaN) for l in landcover_mat]
# Add additionnal line of NaNs down South (coordinates prime did not exactly match)
landcover_mat = [vcat(fill(NaN, (1, size(l, 2))), l) for l in landcover_mat]
# Convert to SDMLayers
landcover_layers = SimpleSDMPredictor.(landcover_mat, -160.0, -40.0, 20.0, 80.0)

# Fill missing latitudes with NaNs (latitude extent is only (-60,80) for landcover data)
nlat, nlon = size(landcover_mat[1])
slim, nlim = abs(-60), 80
res = Int64(nlat/(nlim+slim))
south_nans = fill(NaN, ((90-slim)*res, nlon))
north_nans = fill(NaN, ((90-nlim)*res, nlon))
landcover_grids = [vcat(south_nans, l, north_nans) for l in landcover_mat]

# Convert to SimpleSDMLayers
landcover_layers = SimpleSDMPredictor.(landcover_grids, -180.0, 180.0, -90.0, 90.0)

return landcover_layers
end

"""
Expand Down
3 changes: 3 additions & 0 deletions src/lib/presence-absence.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ function presence_absence(species::DataFrame, copy_layer::SimpleSDMLayer; full_r
# full_range: return species full range, even outside range of interest
# binary: convert to binary presence-absence values per site

# Extract coordinates
lon_range = (copy_layer.left, copy_layer.right)
lat_range = (copy_layer.bottom, copy_layer.top)
# Filter observations to range of interest (default)
if full_range == false
filter!(x -> lon_range[1] < x[:longitude] < lon_range[2], species)
Expand Down
7 changes: 4 additions & 3 deletions src/master.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
#### Master file - Raw observations
## NOT TESTED

import Pkg; Pkg.activate(".")
using Distributed
@time @everywhere include("src/required.jl")
Expand All @@ -16,7 +14,7 @@ using Distributed

## 0b. Landcover data preparation (if needed)
# save_figures = true # should figures be overwritten (optional)
@time include("00a_data_ebd-preparation.jl")
@time include("00b_data_landcover-copernicus.jl")

#### Analyses

Expand Down Expand Up @@ -44,3 +42,6 @@ outcome = "raw" # desired outcome (required)

## 6. Run LCBD-richness relationship analysis
@time include("06_relationship_lcbd-richness.jl")

## 7. Run endemism analysis
@time incluce("07_endemism.jl")

0 comments on commit 9d4ee02

Please sign in to comment.