# resample and scaled values for POenv_100k_unscaled <- terra::resample(env, latam_raster, method='bilinear') %>%classify(cbind(NaN, NA))env_100k_resampled <- env_100k_unscaled %>%scale() # scaled values to 0 mean and sd of 1
# calculate area in each raster cellPO_cthous.area <- terra::cellSize(PO_cthous_time1_raster[[1]], unit='m', transform=F) %>%classify(cbind(NaN, NA)) %>% terra::values()# calculate coordinates for each raster cellPO_cthous.coords <- terra::xyFromCell(PO_cthous_time1_raster, cell=1:ncell(PO_cthous_time1_raster)) %>%as.data.frame()names(PO_cthous.coords) <-c('X', 'Y')# number of cells in the rasters (both the same)PO_cthous.cell <-1:ncell(PO_cthous_time1_raster)# with the environmental variables values for each cellPO_cthous.env <- env_100k_resampled[] # scaled values# with the mean accessibility value for each cellPO_cthous.acce <- acce_100k_resampled # scaled values# calculate point count in each raster cellPO_cthous_time1.count <- PO_cthous_time1_raster %>%classify(cbind(NaN, NA)) %>% terra::values() %>% as_tibble %>% dplyr::select(count)PO_cthous_time2.count <- PO_cthous_time2_raster %>%classify(cbind(NaN, NA)) %>% terra::values() %>% as_tibble %>% dplyr::select(count)PO_cthous.countries <- latam_countries %>%classify(cbind(NaN, NA))# save time1 and time2 datasets PO_cthous_time1.model.data <-data.frame(PO_cthous.coords,pixel = PO_cthous.cell[],area = PO_cthous.area,pt.count = PO_cthous_time1.count,env = PO_cthous.env,acce = PO_cthous.acce[], country = PO_cthous.countries[])PO_cthous_time2.model.data <-data.frame(PO_cthous.coords,pixel = PO_cthous.cell[],area = PO_cthous.area,pt.count = PO_cthous_time2.count,env = PO_cthous.env,acce = PO_cthous.acce[], country = PO_cthous.countries[])
Check data
Code
head(PO_cthous_time1.model.data) %>%kable()
X
Y
pixel
area
count
env.bio_16
env.bio_19
env.npp
env.tree
acce
countries
-4357686
3867905
1
1e+10
NA
NA
NA
NA
NA
NA
NA
-4257686
3867905
2
1e+10
NA
NA
NA
NA
NA
NA
NA
-4157686
3867905
3
1e+10
0
-0.9146447
0.2152231
-1.194929
-1.055997
0.0115694
47
-4057686
3867905
4
1e+10
0
-0.9552867
0.6444218
-1.597718
-1.303418
0.0209173
47
-3957686
3867905
5
1e+10
NA
-0.7612649
0.8823676
-1.786366
-1.391160
0.0270081
NA
-3857686
3867905
6
1e+10
NA
-0.8330892
0.8484078
-1.858230
-1.407916
0.0456958
NA
Code
head(PO_cthous_time2.model.data) %>%kable()
X
Y
pixel
area
count
env.bio_16
env.bio_19
env.npp
env.tree
acce
countries
-4357686
3867905
1
1e+10
NA
NA
NA
NA
NA
NA
NA
-4257686
3867905
2
1e+10
NA
NA
NA
NA
NA
NA
NA
-4157686
3867905
3
1e+10
0
-0.9146447
0.2152231
-1.194929
-1.055997
0.0115694
47
-4057686
3867905
4
1e+10
0
-0.9552867
0.6444218
-1.597718
-1.303418
0.0209173
47
-3957686
3867905
5
1e+10
NA
-0.7612649
0.8823676
-1.786366
-1.391160
0.0270081
NA
-3857686
3867905
6
1e+10
NA
-0.8330892
0.8484078
-1.858230
-1.407916
0.0456958
NA
Presence-absence data
Code
# calculate area, coordinates, and point count in each raster cellPA_cthous.area.time1 <-as.numeric(PA_cthous_time1_blobs$blobArea) PA_cthous.area.time2 <-as.numeric(PA_cthous_time2_blobs$blobArea) PA_cthous.coords.time1 <-st_coordinates(st_centroid(PA_cthous_time1_blobs)) %>%as_tibble()PA_cthous.coords.time2 <-st_coordinates(st_centroid(PA_cthous_time2_blobs)) %>%as_tibble()PA_cthous.pixel.time1 <- terra::cells(PO_cthous_time1_raster, vect(st_centroid(PA_cthous_time1_blobs))) PA_cthous.pixel.time2 <- terra::cells(PO_cthous_time2_raster, vect(st_centroid(PA_cthous_time2_blobs))) # mode to calculate the most frequent value for the blob - this needs to be changed to getting the %are for each landcovermode_raster <-function(x, na.rm =FALSE) {if(na.rm){ x = x[!is.na(x)]} ux <-unique(x)return(ux[which.max(tabulate(match(x, ux)))])}PA_cthous.env.time1 <- terra::extract(x = env, y =vect(PA_cthous_time1_blobs), fun = mean, na.rm=TRUE) %>%mutate(across(where(is.numeric), ~ifelse(is.nan(.), NA, .))) %>%scale()PA_cthous.env.time2 <- terra::extract(x = env, y =vect(PA_cthous_time2_blobs), fun = mean, na.rm=TRUE) %>%mutate(across(where(is.numeric), ~ifelse(is.nan(.), NA, .))) %>%scale()PA_cthous_time1.model.data <-data.frame(pixel = PA_cthous.pixel.time1, PA_cthous.coords.time1,area = PA_cthous.area.time1,presabs = PA_cthous_time1_blobs$presence,effort = PA_cthous_time1_blobs$effort,env = PA_cthous.env.time1[,2:5])PA_cthous_time2.model.data <-data.frame(pixel = PA_cthous.pixel.time2, PA_cthous.coords.time2,area = PA_cthous.area.time2,presabs = PA_cthous_time2_blobs$presence,effort = PA_cthous_time2_blobs$effort,env = PA_cthous.env.time2[,2:5])
The range (and interquartile range) of values for each covariate that is sampled by each dataset
Code
getRangeIQR <-function(env_PX){ env_PX.df <-tibble(env=character(),range =numeric(),iqr =numeric(),stringsAsFactors=FALSE)for (i in1:ncol(env_PX)){ df <-tibble(env =names(env_PX[i]),range =range(env_PX[[i]], na.rm=T)[2],iqr=IQR(env_PA[[i]], na.rm = T)) env_PX.df <-rbind(env_PX.df, df) }return(env_PX.df)}# covariates for PAenv_PA <- terra::extract(x = env, y =rbind(vect(PA_cthous_time1_blobs), vect(PA_cthous_time2_blobs)), fun = mean, na.rm=TRUE) %>%mutate(across(where(is.numeric), ~ifelse(is.nan(.), NA, .))) summary(env_PA[-1])
bio_16 bio_19 npp tree
Min. :-9.938 Min. : 0.8405 Min. : 0 Min. : 0.2019
1st Qu.: 9.595 1st Qu.:17.0648 1st Qu.: 6963 1st Qu.: 19.7279
Median :12.088 Median :20.2466 Median : 9498 Median : 37.9586
Mean :13.080 Mean :20.3751 Mean : 9781 Mean : 44.8148
3rd Qu.:16.787 3rd Qu.:23.8671 3rd Qu.:12746 3rd Qu.: 65.9958
Max. :22.600 Max. :29.0108 Max. :21085 Max. :200.0000
Code
env_PA.RangeIQR <-getRangeIQR(env_PA[-1]) %>%mutate(data='PA')for (i in2:ncol(env_PA)){ range <-range(env_PA[[i]], na.rm=T)[2] iqr <-IQR(env_PA[[i]], na.rm = T)print(str_glue('PA {names(env_PA[i])} -> range: {range} - IQR: {iqr}'))}
PA bio_16 -> range: 22.6000003814697 - IQR: 7.19196185126157
PA bio_19 -> range: 29.01082732813 - IQR: 6.80222331451684
PA npp -> range: 21085.2897600446 - IQR: 5783.17029000419
PA tree -> range: 200 - IQR: 46.2679435287136
bio_16 bio_19 npp tree
Min. :-9.787 Min. : 0.8727 Min. : 1.935 Min. : 0.1423
1st Qu.: 5.157 1st Qu.:16.0414 1st Qu.: 4567.937 1st Qu.: 14.4756
Median :14.076 Median :22.3359 Median : 8232.417 Median : 29.7706
Mean :11.862 Mean :20.1836 Mean : 7782.353 Mean : 35.7296
3rd Qu.:18.966 3rd Qu.:25.5338 3rd Qu.:10876.451 3rd Qu.: 57.8680
Max. :22.770 Max. :28.7862 Max. :17393.445 Max. :111.9899
Code
env_PO.RangeIQR <-getRangeIQR(env_PO) %>%mutate(data='PO')for (i in1:ncol(env_PO)){ range <-range(env_PO[[i]], na.rm=T)[2] iqr <-IQR(env_PO[[i]], na.rm = T)print(str_glue('PO {names(env_PO[i])} -> range: {range} - IQR: {iqr}'))}
PO bio_16 -> range: 22.7698287963867 - IQR: 13.8090486526489
PO bio_19 -> range: 28.7862033843994 - IQR: 9.49241542816162
PO npp -> range: 17393.4453125 - IQR: 6308.51477050781
PO tree -> range: 111.989860534668 - IQR: 43.3923239707947