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.
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
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)
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)
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")
We performed several models with different proxies for the population structure and the geography
#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
#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
#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
#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
##
## ──────────────────────────────────────────────────────────────────────────────
Comparison climate ok elevated populations to see if similar GO is causal or not