1 Introduction

The goal of this script is to perform variance partitioning to identify the variables that explain genetic variation. A secondary goal is to determine whether climatic variables account for some of the genomic variation, suggesting the presence of candidate loci for local adaptation across populations. One of the assumptions of GEA models is that environmental variables explain part of the genetic variation, and we aim to test this.

Additionally, variance partitioning helps visualise the extent of covariation between population structure, isolation by distance (IBD), and environmental factors. Since there is no single best proxy for ancestry or IBD, we employed several proxies for population structure and geographic distance.

To carry out this variance partitioning, we used RDA and pRDA analyses, which are explained in the script Redundancy_analyses_candidate_detection.

2 Data

2.1 DBMEMs analysis

To estimate geographic differences, we can use the geographical coordinates, but we can also use a more complex index, such as a matrix of geographical correlations along the study area between populations, known as Distance-Based Eigenvector Maps (dbMEM). dbMEM improves the detection of spatial autocorrelation patterns by capturing both large- and fine-scale autocorrelation.

dbMEM can be used in two ways:
- To estimate the autocorrelation of a variable (e.g., temperature) based on the geographical distances between sampled points.
- To estimate the autocorrelation of the sampled points directly, without using explanatory variables.

We calculated the autocorrelation using DBMEM.

meta_data_pop <- read.csv("C:/Users/tfrancisco/Documents/Thèse/Data/Espèces/Taxus_baccata/Populations/taxus_sample_29pop.csv",h=T,sep=";",dec=",")

#Data frame with only the coordinates
coord_data <- meta_data_pop[,c(4:5)] %>% 
  apply(2,as.numeric) %>% 
  data.frame()
row.names(coord_data) <-  meta_data_pop$Population

2.2 Distance matrix

Our input variables for the distance matrix are coordinates. We can calculate two types of distance matrices:
Euclidean: distance between two points in 2 dimensions
Geodesic: distance between two points in 3 dimensions, taking into account the curvature of the Earth

We used the geodesic distance because it is more accurate.

distance_matrice <- geodist(coord_data, measure= "geodesic") 
dist_matrix <- as.dist(distance_matrice)

2.3 dbMEM model

We then ran dbMEM on the distance matrix. We retained only axes with positive correlation to be used in variance partitioning. The threshold for truncating the geodesic distance was set to the length of the longest edge of the minimum spanning tree. We did not perform selection of eigenvectors (dbMEM axes) based on p-values; all axes with positive correlation were kept.

dbmem_results <- dbmem(dist_matrix, MEM.autocor = "positive")
## Warning in dudi.pco(matdist, scannf = FALSE, nf = 2): Non euclidean distance
#Plot spatial map for each eigenvector
plot(dbmem_results[,3])

meta_data_pop$Latitude <- as.numeric(meta_data_pop$Latitude)
meta_data_pop$Longitude <- as.numeric(meta_data_pop$Longitude)


plots <- lapply(1:ncol(dbmem_results), function(i) {
  ggplot() +
    geom_point(data = meta_data_pop, aes(x = Longitude, y = Latitude, color = dbmem_results[, i])) +
    scale_color_gradientn(colours = c("black", "grey", "red"), values = scales::rescale(c(-2, 0, 3))) +
    labs(title = paste("Eigenvector", i),color = "Eigenvalues") +
    theme_minimal()
  
})
pdf("C:/Users/tfrancisco/Documents/Thesis/Results/species/taxus/DBMEM/DBMEMaxes.pdf");print(plots);dev.off()
## [[1]]
## 
## [[2]]
## 
## [[3]]
## 
## [[4]]
## png 
##   2
#Print the plots
plots
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

Interpretation:
DBMEM1: longitudinal gradient
DBMEM2: extreme latitudes grouped together, intermediate latitudes in a separate group
DBMEM3 and 4: patterns are less clear

Save dbMEMs in a meta-file to be used in variance partitioning and GEA if the variables are relevant for explaining genetic variation.

#Final dataset
meta_data_dbmem_29pop_adapcon_gentree <- data.frame(meta_data_pop,dbmem_results)

meta_data_dbmem_29pop_adapcon_gentree_scale <- meta_data_dbmem_29pop_adapcon_gentree %>% 
    mutate(across(where(is.numeric), scale))

#Exportation
#write_xlsx(meta_data_dbmem_29pop_adapcon_gentree_scale,"C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/GEA/dbMEMs/meta_data_dbmem_29pop_adapcon_gentree_scale.xlsx")
#save(meta_data_dbmem_29pop_adapcon_gentree_scale,file="C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/GEA/dbMEMs/meta_data_dbmem_29pop_adapcon_gentree_scale.Rdata",force=T)

2.4 Datasets

Secondly, we load the other datasets. Since the goal is to disentangle the effects of ancestry, climate, and IBD (Isolation by Distance) on genetic variation, we used proxies for both ancestry and IBD. These proxies allow us to account for population structure and geographic factors when analysing the genetic data.

#Climatic data
##0.6 corr
Past_climatic_new_var <- read.csv("C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/Climatic_data/new_selection/Past_new_6_Climatic_data_scale_df.csv",sep=";",dec=",") 

#Ancestry proxies
##PCs axis
structure_PCs <- read.csv("C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/GEA/Structure_proxy/PCa_score_T_adapcon_gentree_scale.csv",sep=";",dec=",")

##STRUCTURE Groups
load("C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/GEA/Structure_proxy/Cluster_score_STRUCTURE_T_Adapcon_gentree.Rdata")
Structure_cluster <- Cluster_score_STRUCTURE_T_Adapcon_gentree

#IBD proxy
#dbMEMs
IBD_dbMEMs <- read.csv("C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/GEA/dbMEMs/meta_data_dbmem_29pop_adapcon_gentree_scale.csv",sep=";",dec=",")
#Genomic data
load("C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/genetic_new/data_allelic_frequencies_29pop_adapcon_gentree_475_8616.Rdata")
genomic_matrix <- data_allelic_frequencies_29pop_adapcon_gentree_475_8616
#New_var
Data_RDA <- merge(Past_climatic_new_var,structure_PCs[,c(1:3)],"Population") %>% merge(Structure_cluster,"Population") %>% merge(IBD_dbMEMs[,c(2,4,5,7:10)],"Population") 

#Scale coord
scale_coord <- Data_RDA[,c(14,15)] %>%
  apply(2,as.numeric) %>% scale()

Climatic_data_RDA_pRDA <- data.frame(Data_RDA[,-c(14,15)],scale_coord)

#Save for RDA, pRDA
save(Climatic_data_RDA_pRDA,file="C:/Users/tfrancisco/Documents/Thesis/Data/Species/Taxus_baccata/GEA_new_var/variance_partitioning/Climatic_data_RDA_pRDA.Rdata")

3 Models

We performed several models with different proxies for the population structure and the geography

3.1 Model: coords as IBD proxy and PCs as ancestry proxy

#total model
M_tot_coord <- rda(formula=genomic_matrix~Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+PC1+PC2+Longitude+Latitude,data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_tot_coord)
#anova.cca(M_tot_coord)

##partial_ancestry_model
M_ancestry_coord <- rda(formula = genomic_matrix ~ PC1+PC2 +Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +Longitude+Latitude), data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_ancestry_coord)
#anova.cca(M_ancestry_coord)

#partial_geo_model
M_geo_coord <- rda(formula = genomic_matrix ~ Longitude+Latitude+ Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+PC1+PC2), data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_geo_coord)
#anova.cca(M_geo_coord)

#partial_env_RDA
M_IBE_coord <- rda(formula = genomic_matrix ~  Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +Condition(PC1+PC2+Longitude+Latitude) , data = Climatic_data_RDA_pRDA,scale=T)
RsquareAdj(M_IBE_coord)
## $r.squared
## [1] 0.1780879
## 
## $adj.r.squared
## [1] 0.01964834
##summary(M_IBE_coord)
#anova.cca(M_IBE_coord)

Interpretation:
R^2 tot : 0.52 Adj R^2 tot : 0.25
R^2 ancestry: 0.13 Adj R^2 ancestry: 0.10
R^2 IBD : 0.06 Adj R^2 IDB : 0.01
R^2 climate : 0.18 Adj R^2 climate : 0.02

3.2 Model: dbMEMs as IBD proxy and Structure groups as ancestry proxy

#total model
M_tot_db <- rda(formula=genomic_matrix~Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+Group1+Group2+Group3+MEM1+MEM2+MEM3+MEM4,data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_tot_db)
#anova.cca(M_tot_db)

##partial_ancestry_model
M_ancestry_db <- rda(formula = genomic_matrix ~ Group1+Group2+Group3 +Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +MEM1+MEM2+MEM3+MEM4), data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_ancestry_db)
#anova.cca(M_ancestry_db)

#partial_geo_model
M_geo_db <- rda(formula = genomic_matrix ~ MEM1+MEM2+MEM3+MEM4+ Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+Group1+Group2+Group3), data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_geo_db)
#anova.cca(M_geo_db)

#partial_env_RDA
M_IBE_db <- rda(formula = genomic_matrix ~  Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +Condition(Group1+Group2+Group3+ MEM1+MEM2+MEM3+MEM4) , data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_IBE_db)
#summary(M_IBE_db)
#anova.cca(M_IBE_db)

Interpretation:
R^2 tot : 0.60 Adj R^2 tot : 0.26
R^2 ancestry: 0.12 Adj R^2 ancestry: 0.07
R^2 IBD : 0.13 Adj R^2 IDB : 0.04
R^2 climate : 0.19 Adj R^2 climate : 0.04

3.3 Model: coords as IBD proxy and Structure groups as ancestry proxy

#total model
M_tot_coord <- rda(formula=genomic_matrix~Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+Group1+Group2+Group3+Longitude+Latitude,data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_tot_coord)
#anova.cca(M_tot_coord)

##partial_ancestry_model
M_ancestry_coord <- rda(formula = genomic_matrix ~ Group1+Group2+Group3 +Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +Longitude+Latitude), data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_ancestry_coord)
#anova.cca(M_ancestry_coord)

#partial_geo_model
M_geo_coord <- rda(formula = genomic_matrix ~ Longitude+Latitude+ Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+Group1+Group2+Group3), data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_geo_coord)
#anova.cca(M_geo_coord)

#partial_env_RDA
M_IBE_coord <- rda(formula = genomic_matrix ~  Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +Condition(Group1+Group2+Group3+Longitude+Latitude) , data = Climatic_data_RDA_pRDA,scale=T)
#RsquareAdj(M_IBE_coord)
#summary(M_IBE_coord)
#anova.cca(M_IBE_coord)

Interpretation:
R^2 tot : 0.54 Adj R^2 tot : 0.24
R^2 ancestry: 0.15 Adj R^2 ancestry: 0.09
R^2 IBD : 0.06 Adj R^2 IDB : 0.01
R^2 climate : 0.18 Adj R^2 climate : 0.03

3.4 Model: dbMEMs as IBD proxy and PCs as ancestry proxy

#total model
M_tot_db <- rda(formula=genomic_matrix~Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+PC1+PC2+MEM1+MEM2+MEM3+MEM4,data = Climatic_data_RDA_pRDA,scale=T)
RsquareAdj(M_tot_db)
## $r.squared
## [1] 0.5863125
## 
## $adj.r.squared
## [1] 0.2760469
#anova.cca(M_tot_db)

##partial_ancestry_model
M_ancestry_db <- rda(formula = genomic_matrix ~ PC1+PC2 +Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +MEM1+MEM2+MEM3+MEM4), data = Climatic_data_RDA_pRDA,scale=T)
RsquareAdj(M_ancestry_db)
## $r.squared
## [1] 0.1049833
## 
## $adj.r.squared
## [1] 0.08286809
#anova.cca(M_ancestry_db)

#partial_geo_model
M_geo_db <- rda(formula = genomic_matrix ~ MEM1+MEM2+MEM3+MEM4+ Condition(Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality+PC1+PC2), data = Climatic_data_RDA_pRDA,scale=T)
RsquareAdj(M_geo_db)
## $r.squared
## [1] 0.1304038
## 
## $adj.r.squared
## [1] 0.03777476
#anova.cca(M_geo_db)

#partial_env_RDA
M_IBE_db <- rda(formula = genomic_matrix ~  Annual_Tc+Diurnal_range_Tc+Tc_Seasonality+Tc_driest_quarter+Annual_P+P_Seasonality +Condition(PC1+PC2+ MEM1+MEM2+MEM3+MEM4) , data = Climatic_data_RDA_pRDA,scale=T)
RsquareAdj(M_IBE_db)
## $r.squared
## [1] 0.1805867
## 
## $adj.r.squared
## [1] 0.03239584
#summary(M_IBE_db)
#anova.cca(M_IBE_db)

Interpretation:
R^2 tot : 0.59 Adj R^2 tot : 0.28
R^2 ancestry: 0.11 Adj R^2 ancestry: 0.08
R^2 IBD : 0.13 Adj R^2 IDB : 0.04
R^2 climate : 0.18 Adj R^2 climate : 0.03

Conclusion: We retained the model using dbMEMs as the proxy for IBD and PCs as the proxy for ancestry. This model explains the most genetic variation while maintaining a low number of variables, making it the most efficient and informative choice for our analysis.

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.3.2 (2023-10-31 ucrt)
##  os       Windows 11 x64 (build 26100)
##  system   x86_64, mingw32
##  ui       RTerm
##  language (EN)
##  collate  French_France.utf8
##  ctype    French_France.utf8
##  tz       Europe/Paris
##  date     2025-09-22
##  pandoc   3.1.1 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package      * version     date (UTC) lib source
##  ade4           1.7-22      2023-02-06 [1] CRAN (R 4.3.2)
##  adegenet       2.1.10      2023-01-26 [1] CRAN (R 4.3.2)
##  adegraphics    1.0-21      2023-10-13 [1] CRAN (R 4.3.3)
##  adephylo       1.1-16      2023-10-06 [1] CRAN (R 4.3.3)
##  adespatial   * 0.3-23      2023-10-18 [1] CRAN (R 4.3.3)
##  ape            5.7-1       2023-03-13 [1] CRAN (R 4.3.2)
##  boot           1.3-30      2024-02-26 [2] CRAN (R 4.3.2)
##  bslib          0.6.1       2023-11-28 [1] CRAN (R 4.3.2)
##  cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.1)
##  class          7.3-22      2023-05-03 [2] CRAN (R 4.3.2)
##  classInt       0.4-10      2023-09-05 [1] CRAN (R 4.3.2)
##  cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
##  cluster        2.1.6       2023-12-01 [2] CRAN (R 4.3.2)
##  colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.1)
##  crayon         1.5.3       2024-06-20 [1] CRAN (R 4.3.3)
##  DBI            1.2.2       2024-02-16 [1] CRAN (R 4.3.2)
##  deldir         2.0-4       2024-02-28 [1] CRAN (R 4.3.2)
##  devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.3)
##  digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
##  dplyr        * 1.1.4       2023-11-17 [1] CRAN (R 4.3.2)
##  e1071          1.7-14      2023-12-06 [1] CRAN (R 4.3.2)
##  ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.1)
##  evaluate       0.23        2023-11-01 [1] CRAN (R 4.3.2)
##  farver         2.1.2       2024-05-13 [1] CRAN (R 4.3.3)
##  fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.1)
##  fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
##  generics       0.1.4       2025-05-09 [1] CRAN (R 4.3.2)
##  geodist      * 0.0.8       2022-10-19 [1] CRAN (R 4.3.3)
##  ggplot2      * 3.5.2       2025-04-09 [1] CRAN (R 4.3.2)
##  glue           1.7.0       2024-01-09 [1] CRAN (R 4.3.2)
##  gtable         0.3.6       2024-10-25 [1] CRAN (R 4.3.3)
##  highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
##  hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.2)
##  htmltools      0.5.7       2023-11-03 [1] CRAN (R 4.3.2)
##  htmlwidgets    1.6.4       2023-12-06 [1] CRAN (R 4.3.2)
##  httpuv         1.6.13      2023-12-06 [1] CRAN (R 4.3.2)
##  httr           1.4.7       2023-08-15 [1] CRAN (R 4.3.2)
##  igraph         2.0.2       2024-02-17 [1] CRAN (R 4.3.2)
##  interp         1.1-6       2024-01-26 [1] CRAN (R 4.3.3)
##  jpeg           0.1-10      2022-11-29 [1] CRAN (R 4.3.1)
##  jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.1)
##  jsonlite       1.8.8       2023-12-04 [1] CRAN (R 4.3.2)
##  KernSmooth     2.23-22     2023-07-10 [2] CRAN (R 4.3.2)
##  knitr          1.45        2023-10-30 [1] CRAN (R 4.3.2)
##  labeling       0.4.3       2023-08-29 [1] CRAN (R 4.3.1)
##  later          1.3.2       2023-12-06 [1] CRAN (R 4.3.2)
##  lattice      * 0.22-5      2023-10-24 [2] CRAN (R 4.3.2)
##  latticeExtra   0.6-30      2022-07-04 [1] CRAN (R 4.3.3)
##  lifecycle      1.0.4       2023-11-07 [1] CRAN (R 4.3.2)
##  magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
##  MASS           7.3-60.0.1  2024-01-13 [2] CRAN (R 4.3.2)
##  Matrix         1.6-5       2024-01-11 [1] CRAN (R 4.3.2)
##  memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.1)
##  mgcv           1.9-1       2023-12-21 [2] CRAN (R 4.3.2)
##  mime           0.12        2021-09-28 [1] CRAN (R 4.3.1)
##  miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.2)
##  munsell        0.5.1       2024-04-01 [1] CRAN (R 4.3.3)
##  nlme           3.1-164     2023-11-27 [2] CRAN (R 4.3.2)
##  permute      * 0.9-7       2022-01-27 [1] CRAN (R 4.3.2)
##  phylobase      0.8.12      2024-01-30 [1] CRAN (R 4.3.3)
##  pillar         1.10.2      2025-04-05 [1] CRAN (R 4.3.3)
##  pkgbuild       1.4.3       2023-12-10 [1] CRAN (R 4.3.2)
##  pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.2)
##  pkgload        1.3.4       2024-01-16 [1] CRAN (R 4.3.2)
##  plyr           1.8.9       2023-10-02 [1] CRAN (R 4.3.2)
##  png            0.1-8       2022-11-29 [1] CRAN (R 4.3.1)
##  prettyunits    1.2.0       2023-09-24 [1] CRAN (R 4.3.2)
##  profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.2)
##  progress       1.2.3       2023-12-06 [1] CRAN (R 4.3.2)
##  promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.2)
##  proxy          0.4-27      2022-06-09 [1] CRAN (R 4.3.2)
##  purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.2)
##  R6             2.6.1       2025-02-15 [1] CRAN (R 4.3.3)
##  RColorBrewer   1.1-3       2022-04-03 [1] CRAN (R 4.3.1)
##  Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
##  remotes        2.5.0       2024-03-17 [1] CRAN (R 4.3.3)
##  reshape2       1.4.4       2020-04-09 [1] CRAN (R 4.3.2)
##  rlang          1.1.3       2024-01-10 [1] CRAN (R 4.3.2)
##  rmarkdown      2.25        2023-09-18 [1] CRAN (R 4.3.1)
##  rncl           0.8.7       2023-01-08 [1] CRAN (R 4.3.3)
##  RNeXML         2.4.11      2023-02-01 [1] CRAN (R 4.3.3)
##  rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.2)
##  s2             1.1.6       2023-12-19 [1] CRAN (R 4.3.2)
##  sass           0.4.8       2023-12-06 [1] CRAN (R 4.3.2)
##  scales         1.3.0       2023-11-28 [1] CRAN (R 4.3.2)
##  seqinr         4.2-36      2023-12-08 [1] CRAN (R 4.3.2)
##  sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.2)
##  sf             1.0-15      2023-12-18 [1] CRAN (R 4.3.2)
##  shiny          1.8.0       2023-11-17 [1] CRAN (R 4.3.2)
##  sp             2.1-3       2024-01-30 [1] CRAN (R 4.3.2)
##  spData         2.3.0       2023-07-06 [1] CRAN (R 4.3.3)
##  spdep          1.3-3       2024-02-07 [1] CRAN (R 4.3.3)
##  stringi        1.8.3       2023-12-11 [1] CRAN (R 4.3.2)
##  stringr        1.5.1       2023-11-14 [1] CRAN (R 4.3.2)
##  tibble         3.2.1       2023-03-20 [1] CRAN (R 4.3.2)
##  tidyr          1.3.1       2024-01-24 [1] CRAN (R 4.3.2)
##  tidyselect     1.2.1       2024-03-11 [1] CRAN (R 4.3.3)
##  units          0.8-5       2023-11-28 [1] CRAN (R 4.3.2)
##  urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.2)
##  usethis        2.2.3       2024-02-19 [1] CRAN (R 4.3.2)
##  uuid           1.2-0       2024-01-14 [1] CRAN (R 4.3.2)
##  vctrs          0.6.5       2023-12-01 [1] CRAN (R 4.3.2)
##  vegan        * 2.6-4       2022-10-11 [1] CRAN (R 4.3.2)
##  withr          3.0.2       2024-10-28 [1] CRAN (R 4.3.3)
##  wk             0.9.1       2023-11-29 [1] CRAN (R 4.3.2)
##  writexl      * 1.5.0       2024-02-09 [1] CRAN (R 4.3.2)
##  xfun           0.41        2023-11-01 [1] CRAN (R 4.3.2)
##  XML            3.99-0.16.1 2024-01-22 [1] CRAN (R 4.3.2)
##  xml2           1.3.6       2023-12-04 [1] CRAN (R 4.3.2)
##  xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.2)
##  yaml           2.3.8       2023-12-11 [1] CRAN (R 4.3.2)
## 
##  [1] C:/Users/tfrancisco/AppData/Local/R/win-library/4.3
##  [2] C:/Users/tfrancisco/AppData/Local/Programs/R/R-4.3.2/library
## 
## ──────────────────────────────────────────────────────────────────────────────

4 Draft

Comparison climate ok elevated populations to see if similar GO is causal or not