--- title: "3. Performance Benchmark with other packages" output: rmarkdown::html_vignette bibliography: performance.bib vignette: > %\VignetteIndexEntry{3. Performance Benchmark with other packages} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- This vignette presents some performance tests ran between `fundiversity` and other functional diversity packages. Note that to avoid the dependency on other packages, this vignette is [**pre-computed**](https://ropensci.org/technotes/2019/12/08/precompute-vignettes/). # Other packages to compute FD indices ## Main functions Here is a table that summarizes the comparable functions (and their arguments) for functions included in `fundiversity`. Note that the package name is indicated before `::` followed by the function name. | Index Type | Index Name | Source | `fundiversity` function | Equivalent Functions | |:-----------------|:--------------------------------------------------|:------------------------------|:------------------------|----------------------| | α-diversity | Functional Dispersion (FDis) | @Laliberte_distancebased_2010 | `fd_fdis()` | ~~`BAT::dispersion()`~~ (doesn't compute FDis)
`FD::fdisp()`
~~`hillR::hill_func()`~~ (actually rely on `FD` for FDis computations and standardize the traits without telling the user)
`mFD::alpha.fd.multidim(..., ind_vect = "fdis")` | | α-diversity | Functional Divergence (FDiv) | @Villeger_New_2008 | `fd_fdiv()` | `mFD::alpha.fd.multidim(..., ind_vect = "fdiv")` | | α-diversity | Functional Evenness (FEve) | @Villeger_New_2008 | `fd_feve()` | `mFD::alpha.fd.multidim(..., ind_vect = "feve")` | | α-diversity | Functional Richness (FRic) | @Villeger_New_2008 | `fd_fric()` | `BAT::alpha()` (tree, not strictly equal)
`BAT::hull.alpha()` (hull)
`mFD::alpha.fd.multidim(..., ind_vect = "fric")` | | α-diversity | Rao's Quadratic Entropy (Q) | @Villeger_Decomposing_2013 | `fd_raoq()` | `adiv::QE()`
`BAT::rao()`
`hillR::hill_func()` (standardize traits without warning)
`mFD::alpha.fd.hill(..., q = 2, tau = "max")` (returns a slightly modified version of Q according to @Ricotta_Diversity_2009) | | β-diversity | Functional Richness Intersection (FRic_intersect) | @Rao_Diversity_1982 | `fd_fric_intersect()` | `betapart::functional.beta.pair()`
`hillR::hill_func_parti_pairwise()` | The other packages are thus: `adiv` [@Pavoine_adiv_2020], `BAT` [@Cardoso_BAT_2015], `betapart` [@Baselga_betapart_2012], `FD` [@Laliberte_FD_2014], `hillR` [@Li_hillR_2018], and `mFD` [@Magneville_mFD_2022]. For fairness of comparison, even if `FD::dbFD()` contains most indices we're not considering it as it computes all indices together for each call, and would necessarily be slower. ## Benchmark between packages We will now benchmark the functions included in `fundiversity` with the corresponding function in other packages using the `microbenchmark::microbenchmark()` function. We will use the fairly small (~220 species, 8 sites, 4 traits) provided dataset in `fundiversity`. ```r tictoc::tic() # Time execution of vignette library(fundiversity) data("traits_birds", package = "fundiversity") data("site_sp_birds", package = "fundiversity") dist_traits_birds <- dist(traits_birds) ``` ### Functional Dispersion (FDis) ```r fdis_bench <- microbenchmark::microbenchmark( fundiversity = { fundiversity::fd_fdis(traits_birds, site_sp_birds) }, FD = { FD::fdisp(dist_traits_birds, site_sp_birds) }, mFD = { mFD::alpha.fd.multidim( traits_birds, site_sp_birds, ind_vect = "fdis", scaling = FALSE, verbose = FALSE, details_returned = FALSE ) }, times = 30 ) ggplot2::autoplot(fdis_bench) + labs(title = "Functional Dispersion (FDis)") ``` ![plot of chunk bench-fdis](perf-bench-fdis-1.png) ### Functional Divergence (FDiv) ```r fdiv_bench <- microbenchmark::microbenchmark( fundiversity = fd_fdiv(traits_birds, site_sp_birds), mFD = mFD::alpha.fd.multidim( traits_birds, site_sp_birds, ind_vect = "fdiv", scaling = FALSE, verbose = FALSE ), times = 30 ) ggplot2::autoplot(fdiv_bench) + labs(title = "Functional Divergence (FDiv)") ``` ![plot of chunk bench-fdiv](perf-bench-fdiv-1.png) ### Functional Evenness (FEve) ```r feve_bench <- microbenchmark::microbenchmark( fundiversity = fd_feve(traits_birds, site_sp_birds), mFD = mFD::alpha.fd.multidim( traits_birds, site_sp_birds, ind_vect = "feve", scaling = FALSE, verbose = FALSE ), times = 30 ) ggplot2::autoplot(feve_bench) + labs(title = "Functional Evenness (FEve)") ``` ![plot of chunk bench-feve](perf-bench-feve-1.png) ### Functional Richness (FRic) ```r fric_bench <- microbenchmark::microbenchmark( fundiversity = fd_fric(traits_birds, site_sp_birds), BAT_tree = BAT::alpha( site_sp_birds, traits_birds ), BAT_alpha_hull = BAT::hull.alpha( BAT::hull.build(site_sp_birds, traits_birds) ), mFD = mFD::alpha.fd.multidim( traits_birds, site_sp_birds, ind_vect = "fric", scaling = FALSE, verbose = FALSE ), times = 30 ) ggplot2::autoplot(fric_bench) + labs(title = "Functional Richness (FRic)") ``` ![plot of chunk bench-fric](perf-bench-fric-1.png) ### Functional Richness Intersection (FRic_intersect) ```r fric_bench <- microbenchmark::microbenchmark( fundiversity = fd_fric_intersect(traits_birds, site_sp_birds) , betapart = betapart::functional.beta.pair( site_sp_birds, traits_birds ), hillR = hillR::hill_func_parti_pairwise( site_sp_birds, traits_birds, .progress = FALSE ), times = 30 ) ggplot2::autoplot(fric_bench) + labs(title = "Functional Richness Intersection (FRic)") ``` ![plot of chunk bench-fric-intersect](perf-bench-fric-intersect-1.png) ### Rao's Quadratic Entropy (Q) ```r raoq_bench <- fric_bench <- microbenchmark::microbenchmark( fundiversity = fd_raoq(traits_birds, site_sp_birds), adiv= adiv::QE( site_sp_birds, dist_traits_birds ), BAT_rao = BAT::rao( site_sp_birds, distance = traits_birds ), hillR_hill_func = hillR::hill_func( site_sp_birds, traits_birds, fdis = FALSE ), mFD_alpha_fd_hill = mFD::alpha.fd.hill( site_sp_birds, dist_traits_birds, q = 2, tau = "max" ), times = 30 ) ggplot2::autoplot(raoq_bench) + labs(title = "Rao's Quadatric Entropy (Q)") ``` ![plot of chunk bench-raoq](perf-bench-raoq-1.png) # Benchmark within `fundiversity` We now proceed to the performance evaluation of functions within `fundiversity` with datasets of increasing sizes. ## Increasing the number of species ```r make_more_sp <- function(n) { traits <- do.call(rbind, replicate(n, traits_birds, simplify = FALSE)) row.names(traits) <- paste0("sp", seq_len(nrow(traits))) site_sp <- do.call(cbind, replicate(n, site_sp_birds, simplify = FALSE)) colnames(site_sp) <- paste0("sp", seq_len(ncol(site_sp))) list(tr = traits, si = site_sp) } null_sp_1000 <- make_more_sp(5) null_sp_10000 <- make_more_sp(50) null_sp_100000 <- make_more_sp(500) ``` ### Functional Richness ```r bench_sp_fric <- microbenchmark::microbenchmark( species_200 = fd_fric( traits_birds, site_sp_birds), species_1000 = fd_fric( null_sp_1000$tr, null_sp_1000$si), species_10000 = fd_fric( null_sp_10000$tr, null_sp_10000$si), species_100000 = fd_fric(null_sp_100000$tr, null_sp_100000$si), times = 30 ) ggplot2::autoplot(bench_sp_fric) ``` ![Performance comparison of `fd_fric()` with increasing number of species.](perf-bench-species-fric-1.png) ```r bench_sp_fric #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> species_200 12.40461 12.86473 13.63794 13.65822 13.96949 15.64313 30 a #> species_1000 23.31024 23.98235 24.77462 24.52898 24.99526 32.20389 30 b #> species_10000 152.16972 153.69475 155.65197 154.41463 155.87235 167.39586 30 c #> species_100000 1538.24210 1552.02784 1573.05390 1571.92017 1587.70159 1629.76043 30 d ``` ### Functional Divergence ```r bench_sp_fdiv <- microbenchmark::microbenchmark( species_200 = fd_fdiv( traits_birds, site_sp_birds), species_1000 = fd_fdiv( null_sp_1000$tr, null_sp_1000$si), species_10000 = fd_fdiv( null_sp_10000$tr, null_sp_10000$si), species_100000 = fd_fdiv(null_sp_100000$tr, null_sp_100000$si), times = 30 ) ggplot2::autoplot(bench_sp_fdiv) ``` ![Performance comparison of `fd_fdiv()` with increasing number of species.](perf-bench-species-fdiv-1.png) ```r bench_sp_fdiv #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> species_200 38.18281 39.33241 41.03782 39.80735 40.19474 63.38092 30 a #> species_1000 52.21140 53.58856 54.88775 54.00482 54.58979 61.12244 30 a #> species_10000 215.96505 218.21261 227.32449 221.46767 231.33971 262.64920 30 b #> species_100000 1996.22764 2035.16809 2090.07993 2068.75306 2097.02749 2805.37816 30 c ``` ### Rao's Quadratic Entropy ```r bench_sp_raoq <- microbenchmark::microbenchmark( species_200 = fd_raoq( traits_birds, site_sp_birds), species_1000 = fd_raoq( null_sp_1000$tr, null_sp_1000$si), species_10000 = fd_raoq( null_sp_10000$tr, null_sp_10000$si), times = 30 ) ggplot2::autoplot(bench_sp_raoq) ``` ![Performance comparison of `fd_raoq()` with increasing number of species.](perf-bench-species-raoq-1.png) ```r bench_sp_raoq #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> species_200 1.537703 1.751935 1.954434 1.950017 2.041037 3.230497 30 a #> species_1000 31.957110 34.274255 39.128452 35.156704 37.556228 66.194976 30 a #> species_10000 9890.756358 10163.144236 11121.366410 11055.979331 11964.694993 13632.668874 30 b ``` ### Functional Evenness ```r bench_sp_feve <- microbenchmark::microbenchmark( species_200 = fd_feve( traits_birds, site_sp_birds), species_1000 = fd_feve( null_sp_1000$tr, null_sp_1000$si), species_10000 = fd_feve( null_sp_10000$tr, null_sp_10000$si), times = 15 ) ggplot2::autoplot(bench_sp_feve) ``` ![Performance comparison of `fd_feve()` with increasing number of species.](perf-bench-species-feve-1.png) ```r bench_sp_feve #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> species_200 22.25434 23.58857 26.28398 24.66652 25.41282 49.21613 15 a #> species_1000 133.12192 148.39296 167.29508 163.98844 186.30949 212.94652 15 a #> species_10000 26209.90991 27553.75296 28085.39492 28186.57578 28599.03918 29311.05335 15 b ``` ### Comparing between indices ```r all_bench_sp <- list(fric = bench_sp_fric, fdiv = bench_sp_fdiv, raoq = bench_sp_raoq, feve = bench_sp_feve) %>% bind_rows(.id = "fd_index") %>% mutate(n_sp = gsub("species_", "", expr) %>% as.numeric()) all_bench_sp %>% ggplot(aes(n_sp, time * 1e-9, color = fd_index)) + geom_point(alpha = 1/3) + geom_smooth() + scale_x_log10() + scale_y_log10() + scale_color_brewer(type = "qual", labels = c(fric = "FRic", fdiv = "FDiv", raoq = "Rao's Q", feve = "FEve")) + labs(title = "Performance comparison between indices", x = "# of species", y = "Time (in seconds)", color = "FD index") + theme_bw() + theme(aspect.ratio = 1) ``` ![Performance comparison between functions for distinct indices in `fundiversity` with increasing number of species. Smoothed trend lines and standard error envelopes ares shown.](perf-bench-species-compare-1.png) ## Increasing the number of sites ```r make_more_sites <- function(n) { site_sp <- do.call(rbind, replicate(n, site_sp_birds, simplify = FALSE)) rownames(site_sp) <- paste0("s", seq_len(nrow(site_sp))) site_sp } site_sp_100 <- make_more_sites(12) site_sp_1000 <- make_more_sites(120) site_sp_10000 <- make_more_sites(1200) ``` ### Functional Richness ```r bench_sites_fric <- microbenchmark::microbenchmark( sites_10 = fd_fric(traits_birds, site_sp_birds), sites_100 = fd_fric(traits_birds, site_sp_100), sites_1000 = fd_fric(traits_birds, site_sp_1000), sites_10000 = fd_fric(traits_birds, site_sp_10000), times = 15 ) ggplot2::autoplot(bench_sites_fric) ``` ![Performance comparison of `fd_fric()` with increasing number of sites.](perf-bench-sites-fric-1.png) ```r bench_sites_fric #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> sites_10 12.60195 13.45944 14.88054 13.96007 14.29602 21.66510 15 a #> sites_100 45.57530 47.25923 49.87524 48.75620 52.29567 56.19952 15 b #> sites_1000 372.72833 386.35628 400.43169 395.60903 408.99573 449.87164 15 c #> sites_10000 3833.05136 3885.11306 3921.60544 3919.29055 3942.32492 4016.96576 15 d ``` ### Functional Divergence ```r bench_sites_fdiv <- microbenchmark::microbenchmark( sites_10 = fd_fdiv(traits_birds, site_sp_birds), sites_100 = fd_fdiv(traits_birds, site_sp_100), sites_1000 = fd_fdiv(traits_birds, site_sp_1000), sites_10000 = fd_fdiv(traits_birds, site_sp_10000), times = 15 ) ggplot2::autoplot(bench_sites_fdiv) ``` ![Performance comparison of `fd_fdiv()` with increasing number of sites.](perf-bench-sites-fdiv-1.png) ```r bench_sites_fdiv #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> sites_10 38.17040 39.17880 40.79484 39.59029 42.08936 45.43952 15 a #> sites_100 85.09805 85.99399 94.77048 86.88365 96.33675 149.45931 15 b #> sites_1000 538.76135 545.03628 582.84610 564.85683 605.87486 677.86382 15 c #> sites_10000 5278.55172 5336.69296 5405.90861 5378.53730 5458.24597 5552.26594 15 d ``` ### Rao's Quadratic Entropy ```r bench_sites_raoq = microbenchmark::microbenchmark( sites_10 = fd_raoq(traits = NULL, site_sp_birds, dist_traits_birds), sites_100 = fd_raoq(traits = NULL, site_sp_100, dist_traits_birds), sites_1000 = fd_raoq(traits = NULL, site_sp_1000, dist_traits_birds), sites_10000 = fd_raoq(traits = NULL, site_sp_10000, dist_traits_birds), times = 15 ) ggplot2::autoplot(bench_sites_raoq) ``` ![Performance comparison of `fd_raoq()` with increasing number of sites.](perf-bench-sites-raoq-1.png) ```r bench_sites_raoq #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> sites_10 1.443757 1.717630 1.887153 1.861230 2.037991 2.518933 15 a #> sites_100 5.689849 6.004428 6.718675 6.178415 6.460348 13.786219 15 a #> sites_1000 158.130064 158.814848 160.907719 159.296631 163.977418 166.066294 15 a #> sites_10000 16296.391504 17530.369693 18080.130808 18193.538354 18411.571843 21033.249202 15 b ``` ### Functional Evenness ```r bench_sites_feve <- microbenchmark::microbenchmark( sites_10 = fd_feve(traits = NULL, site_sp_birds, dist_traits_birds), sites_100 = fd_feve(traits = NULL, site_sp_100, dist_traits_birds), sites_1000 = fd_feve(traits = NULL, site_sp_1000, dist_traits_birds), sites_10000 = fd_feve(traits = NULL, site_sp_10000, dist_traits_birds), times = 15 ) ggplot2::autoplot(bench_sites_feve) ``` ![Performance comparison of `fd_feve()` with increasing number of sites](perf-bench-sites-feve-1.png) ```r bench_sites_feve #> Unit: milliseconds #> expr min lq mean median uq max neval cld #> sites_10 20.26885 20.79379 25.80265 21.06491 21.39182 90.92815 15 a #> sites_100 113.64419 115.81009 123.60943 118.04145 123.54457 185.57582 15 a #> sites_1000 1034.37573 1107.36408 1146.78358 1119.68000 1134.07348 1668.68480 15 b #> sites_10000 10779.65515 10969.94333 11249.27062 11090.00824 11317.37080 12341.22800 15 c ``` ### Comparing between indices ```r all_bench_sites <- list(fric = bench_sites_fric, fdiv = bench_sites_fdiv, raoq = bench_sites_raoq, feve = bench_sites_feve) %>% bind_rows(.id = "fd_index") %>% mutate(n_sites = gsub("sites", "", expr) %>% as.numeric()) all_bench_sites %>% ggplot(aes(n_sites, time * 1e-9, color = fd_index)) + geom_point(alpha = 1/3) + geom_smooth() + scale_x_log10() + scale_y_log10() + scale_color_brewer(type = "qual", labels = c(fric = "FRic", fdiv = "FDiv", raoq = "Rao's Q", feve = "FEve")) + labs(title = "Performance comparison between indices", x = "# of sites", y = "Time (in seconds)", color = "FD index") + theme_bw() + theme(aspect.ratio = 1) ``` ![Performance comparison between functions for distinct indices in `fundiversity` with increasing number of sites. Smoothed trend lines and standard error envelopes ares shown.](perf-bench-sites-compare-1.png)
Session info of the machine on which the benchmark was ran and time it took to run ``` #> seconds needed to generate this document: 1691.449 sec elapsed #> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── #> setting value #> version R version 4.2.1 (2022-06-23) #> os Ubuntu 20.04.5 LTS #> system x86_64, linux-gnu #> ui RStudio #> language (EN) #> collate en_US.UTF-8 #> ctype en_US.UTF-8 #> tz Etc/UTC #> date 2022-11-15 #> rstudio 2022.02.0+443 Prairie Trillium (server) #> pandoc 2.17.1.1 @ /usr/lib/rstudio-server/bin/quarto/bin/ (via rmarkdown) #> #> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── #> package * version date (UTC) lib source #> abind 1.4-5 2016-07-21 [1] CRAN (R 4.2.0) #> ade4 1.7-19 2022-04-19 [1] CRAN (R 4.2.0) #> adegraphics 1.0-16 2021-09-16 [1] CRAN (R 4.2.1) #> adiv 2.2 2022-10-06 [1] CRAN (R 4.2.1) #> ape 5.6-2 2022-03-02 [1] CRAN (R 4.2.0) #> assertthat 0.2.1 2019-03-21 [3] CRAN (R 4.1.3) #> base64enc 0.1-3 2015-07-28 [1] CRAN (R 4.2.1) #> BAT 2.9.2 2022-11-08 [1] CRAN (R 4.2.1) #> betapart 1.5.6 2022-04-06 [1] CRAN (R 4.2.1) #> cachem 1.0.6 2021-08-19 [3] CRAN (R 4.1.3) #> caret 6.0-93 2022-08-09 [1] CRAN (R 4.2.1) #> class 7.3-20 2022-01-13 [5] CRAN (R 4.1.2) #> cli 3.4.1 2022-09-23 [1] CRAN (R 4.2.1) #> cluster 2.1.3 2022-03-28 [5] CRAN (R 4.1.3) #> clusterGeneration 1.3.7 2020-12-15 [1] CRAN (R 4.2.0) #> coda 0.19-4 2020-09-30 [1] CRAN (R 4.2.0) #> codetools 0.2-18 2020-11-04 [5] CRAN (R 4.0.3) #> colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.2.0) #> combinat 0.0-8 2012-10-29 [1] CRAN (R 4.2.0) #> crayon 1.5.1 2022-03-26 [1] CRAN (R 4.2.0) #> data.table 1.14.2 2021-09-27 [1] CRAN (R 4.2.0) #> DBI 1.1.2 2021-12-20 [3] CRAN (R 4.1.3) #> deldir 1.0-6 2021-10-23 [1] CRAN (R 4.2.1) #> dendextend 1.16.0 2022-07-04 [1] CRAN (R 4.2.1) #> digest 0.6.29 2021-12-01 [1] CRAN (R 4.2.0) #> doParallel 1.0.17 2022-02-07 [1] CRAN (R 4.2.1) #> doSNOW 1.0.20 2022-02-04 [1] CRAN (R 4.2.1) #> dplyr * 1.0.10 2022-09-01 [1] CRAN (R 4.2.1) #> e1071 1.7-12 2022-10-24 [1] CRAN (R 4.2.1) #> ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.0) #> evaluate 0.18 2022-11-07 [1] CRAN (R 4.2.1) #> expm 0.999-6 2021-01-13 [1] CRAN (R 4.2.0) #> fansi 1.0.3 2022-03-24 [1] CRAN (R 4.2.0) #> farver 2.1.0 2021-02-28 [1] CRAN (R 4.2.0) #> fastcluster 1.2.3 2021-05-24 [1] CRAN (R 4.2.1) #> fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.1) #> fastmatch 1.1-3 2021-07-23 [1] CRAN (R 4.2.0) #> FD 1.0-12.1 2022-05-02 [1] CRAN (R 4.2.0) #> foreach 1.5.2 2022-02-02 [1] CRAN (R 4.2.1) #> fundiversity * 0.2.1.9000 2022-04-12 [3] Github (bisaloo/fundiversity@87652ba) #> future 1.28.0 2022-09-02 [1] CRAN (R 4.2.1) #> future.apply 1.10.0 2022-11-05 [1] CRAN (R 4.2.1) #> generics 0.1.2 2022-01-31 [1] CRAN (R 4.2.0) #> geometry 0.4.6 2022-04-18 [1] CRAN (R 4.2.0) #> ggplot2 * 3.3.6 2022-05-03 [1] CRAN (R 4.2.0) #> globals 0.16.1 2022-08-28 [1] CRAN (R 4.2.1) #> glue 1.6.2 2022-02-24 [1] CRAN (R 4.2.0) #> gower 1.0.0 2022-02-03 [1] CRAN (R 4.2.1) #> gridExtra 2.3 2017-09-09 [1] CRAN (R 4.2.1) #> gtable 0.3.0 2019-03-25 [1] CRAN (R 4.2.0) #> hardhat 1.2.0 2022-06-30 [1] CRAN (R 4.2.1) #> here 1.0.1 2020-12-13 [3] CRAN (R 4.1.3) #> highr 0.9 2021-04-16 [1] CRAN (R 4.2.1) #> hillR 0.5.1 2021-03-02 [1] CRAN (R 4.2.0) #> hms 1.1.1 2021-09-26 [1] CRAN (R 4.2.0) #> htmltools 0.5.3 2022-07-18 [1] CRAN (R 4.2.1) #> htmlwidgets 1.5.4 2021-09-08 [1] CRAN (R 4.2.1) #> httr 1.4.4 2022-08-17 [1] CRAN (R 4.2.1) #> hypervolume 3.0.4 2022-05-28 [1] CRAN (R 4.2.1) #> igraph 1.3.2 2022-06-13 [1] CRAN (R 4.2.0) #> interp 1.1-3 2022-07-13 [1] CRAN (R 4.2.1) #> ipred 0.9-13 2022-06-02 [1] CRAN (R 4.2.1) #> iterators 1.0.14 2022-02-05 [1] CRAN (R 4.2.1) #> itertools 0.1-3 2014-03-12 [1] CRAN (R 4.2.1) #> jpeg 0.1-9 2021-07-24 [1] CRAN (R 4.2.1) #> jsonlite 1.8.3 2022-10-21 [1] CRAN (R 4.2.1) #> KernSmooth 2.23-20 2021-05-03 [5] CRAN (R 4.0.5) #> knitr 1.40 2022-08-24 [1] CRAN (R 4.2.1) #> ks 1.13.5 2022-04-14 [1] CRAN (R 4.2.1) #> lattice 0.20-45 2021-09-22 [3] CRAN (R 4.1.3) #> latticeExtra 0.6-30 2022-07-04 [1] CRAN (R 4.2.1) #> lava 1.7.0 2022-10-25 [1] CRAN (R 4.2.1) #> lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.2.1) #> listenv 0.8.0 2019-12-05 [1] CRAN (R 4.2.1) #> lpSolve 5.6.15 2020-01-24 [1] CRAN (R 4.2.0) #> lubridate 1.9.0 2022-11-06 [1] CRAN (R 4.2.1) #> magic 1.6-0 2022-02-09 [1] CRAN (R 4.2.0) #> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.2.0) #> maps 3.4.0 2021-09-25 [1] CRAN (R 4.2.0) #> MASS 7.3-58.1 2022-08-03 [3] CRAN (R 4.2.1) #> Matrix 1.4-1 2022-03-23 [3] CRAN (R 4.1.3) #> mclust 6.0.0 2022-10-31 [1] CRAN (R 4.2.1) #> memoise 2.0.1 2021-11-26 [3] CRAN (R 4.1.3) #> mFD 1.0.2 2022-11-08 [1] CRAN (R 4.2.1) #> mgcv 1.8-40 2022-03-29 [5] CRAN (R 4.1.3) #> microbenchmark 1.4.9 2021-11-09 [3] CRAN (R 4.1.3) #> mnormt 2.1.0 2022-06-07 [1] CRAN (R 4.2.0) #> ModelMetrics 1.2.2.2 2020-03-17 [1] CRAN (R 4.2.1) #> multcomp 1.4-19 2022-04-26 [1] CRAN (R 4.2.0) #> munsell 0.5.0 2018-06-12 [1] CRAN (R 4.2.0) #> mvtnorm 1.1-3 2021-10-08 [1] CRAN (R 4.2.0) #> nlme 3.1-159 2022-08-09 [3] CRAN (R 4.2.1) #> nls2 0.3-3 2022-05-02 [1] CRAN (R 4.2.1) #> nnet 7.3-17 2022-01-13 [5] CRAN (R 4.1.2) #> numDeriv 2016.8-1.1 2019-06-06 [1] CRAN (R 4.2.0) #> palmerpenguins 0.1.1 2022-08-15 [1] CRAN (R 4.2.1) #> parallelly 1.32.1 2022-07-21 [1] CRAN (R 4.2.1) #> patchwork 1.1.2 2022-08-19 [1] CRAN (R 4.2.1) #> pdist 1.2.1 2022-05-02 [1] CRAN (R 4.2.1) #> permute 0.9-7 2022-01-27 [1] CRAN (R 4.2.0) #> phangorn 2.9.0 2022-06-16 [1] CRAN (R 4.2.0) #> phylobase 0.8.10 2020-03-01 [1] CRAN (R 4.2.1) #> phytools 1.0-3 2022-04-05 [1] CRAN (R 4.2.0) #> picante 1.8.2 2020-06-10 [1] CRAN (R 4.2.1) #> pillar 1.7.0 2022-02-01 [1] CRAN (R 4.2.0) #> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.2.0) #> plotrix 3.8-2 2021-09-08 [1] CRAN (R 4.2.0) #> plyr 1.8.7 2022-03-24 [1] CRAN (R 4.2.0) #> png 0.1-7 2013-12-03 [1] CRAN (R 4.2.1) #> pracma 2.4.2 2022-09-22 [1] CRAN (R 4.2.1) #> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.2.0) #> pROC 1.18.0 2021-09-03 [1] CRAN (R 4.2.1) #> prodlim 2019.11.13 2019-11-17 [1] CRAN (R 4.2.1) #> progress 1.2.2 2019-05-16 [1] CRAN (R 4.2.0) #> proto 1.0.0 2016-10-29 [1] CRAN (R 4.2.1) #> proxy 0.4-27 2022-06-09 [1] CRAN (R 4.2.1) #> purrr 0.3.4 2020-04-17 [1] CRAN (R 4.2.0) #> quadprog 1.5-8 2019-11-20 [1] CRAN (R 4.2.0) #> R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.0) #> raster 3.6-3 2022-09-18 [1] CRAN (R 4.2.1) #> rcdd 1.5 2021-11-18 [1] CRAN (R 4.2.1) #> RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.2.0) #> Rcpp 1.0.8.3 2022-03-17 [1] CRAN (R 4.2.0) #> recipes 1.0.3 2022-11-09 [1] CRAN (R 4.2.1) #> reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.2.1) #> rgeos 0.5-9 2021-12-15 [1] CRAN (R 4.2.1) #> rgl 0.110.2 2022-09-26 [1] CRAN (R 4.2.1) #> rlang 1.0.6 2022-09-24 [1] CRAN (R 4.2.1) #> rmarkdown 2.13 2022-03-10 [3] CRAN (R 4.1.3) #> rncl 0.8.6 2022-03-18 [1] CRAN (R 4.2.1) #> RNeXML 2.4.8 2022-10-19 [1] CRAN (R 4.2.1) #> rpart 4.1.16 2022-01-24 [5] CRAN (R 4.1.2) #> rprojroot 2.0.3 2022-04-02 [1] CRAN (R 4.2.1) #> rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.1) #> sandwich 3.0-2 2022-06-15 [1] CRAN (R 4.2.0) #> scales 1.2.0 2022-04-13 [1] CRAN (R 4.2.0) #> scatterplot3d 0.3-41 2018-03-14 [1] CRAN (R 4.2.0) #> sessioninfo 1.2.2 2021-12-06 [3] CRAN (R 4.1.3) #> snow 0.4-4 2021-10-27 [1] CRAN (R 4.2.1) #> sp 1.5-0 2022-06-05 [1] CRAN (R 4.2.0) #> stringi 1.7.6 2021-11-29 [1] CRAN (R 4.2.0) #> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.2.0) #> survival 3.3-1 2022-03-03 [3] CRAN (R 4.1.3) #> terra 1.6-17 2022-09-10 [1] CRAN (R 4.2.1) #> TH.data 1.1-1 2022-04-26 [1] CRAN (R 4.2.0) #> tibble 3.1.7 2022-05-03 [1] CRAN (R 4.2.0) #> tictoc 1.0.1 2021-04-19 [3] CRAN (R 4.1.3) #> tidyr 1.2.1 2022-09-08 [1] CRAN (R 4.2.1) #> tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.2.1) #> timechange 0.1.1 2022-11-04 [1] CRAN (R 4.2.1) #> timeDate 4021.106 2022-09-30 [1] CRAN (R 4.2.1) #> utf8 1.2.2 2021-07-24 [1] CRAN (R 4.2.0) #> uuid 1.1-0 2022-04-19 [1] CRAN (R 4.2.1) #> vctrs 0.5.0 2022-10-22 [1] CRAN (R 4.2.1) #> vegan 2.6-2 2022-04-17 [1] CRAN (R 4.2.0) #> viridis 0.6.2 2021-10-13 [1] CRAN (R 4.2.1) #> viridisLite 0.4.0 2021-04-13 [1] CRAN (R 4.2.0) #> withr 2.5.0 2022-03-03 [1] CRAN (R 4.2.0) #> xfun 0.34 2022-10-18 [1] CRAN (R 4.2.1) #> XML 3.99-0.12 2022-10-28 [1] CRAN (R 4.2.1) #> xml2 1.3.3 2021-11-30 [1] CRAN (R 4.2.1) #> yaml 2.3.6 2022-10-18 [1] CRAN (R 4.2.1) #> zoo 1.8-10 2022-04-15 [1] CRAN (R 4.2.0) #> #> [1] /home/ke76dimu/R-library/4.2 #> [2] /usr/local/lib/R/site-library #> [3] /data/library/4.1 #> [4] /usr/lib/R/site-library #> [5] /usr/lib/R/library #> #> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ```
# References