Performance comparison with other functional diversity packages

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.

Other packages to compute FD indices

Main functions

FD::dbFD() is probably the most known function to compute functional diversity indices. It comes from the FD package proposed by Laliberté, Legendre, and Shipley (2014). It can compute many indices: functional richness, Rao’s quadratic entropy, community-weighted mean, functional divergence, functional dispersion, and functional group richness. This swiss-army knife of functional diversity indices has many options and compute several indices in a single run.

hillR::hill_func() comes from the hillR package that computes Hill numbers for taxonomic, functional, and functional diversity (Li 2018). It implements indices proposed by Chao, Chiu, and Jost (2014). It computes Rao’s quadratic entropy, the mean functional diversity per species, as well as the total functional diversity.

adiv::QE() comes from the adiv package which proposes a toolkit to analyze biodiversity (Pavoine 2020). This function computes Rao’s quadratic entropy.

SYNCSA::rao.diversity() comes from SYNCSA package which proposes a simulation framework for meta-communities (Debastiani and Pillar 2012). The function computes Rao’s quadratic entropy as well as functional redundancy.

Benchmark between packages

We will now benchmark the functions included in fundiversity with the corresponding function in other packages using the microbenchmark::microbenchmark() function.

tictoc::tic()
library(fundiversity)
data("traits_birds", package = "fundiversity")
data("site_sp_birds", package = "fundiversity")

dist_traits_birds <- dist(traits_birds)

With the fairly small (~220 species, 8 sites, 4 traits) provided dataset in fundiversity:

pkg_bench <- microbenchmark::microbenchmark(
  fundiversity = {
    fundiversity::fd_raoq(traits = NULL, site_sp_birds, dist_traits_birds)
  },
  adiv = {
    adiv::QE(site_sp_birds, dis = dist_traits_birds)
  },
  hillR = {
    hillR::hill_func(site_sp_birds, dist_traits_birds, traits_as_is = TRUE)[1, ]
  },
  SYNCSA = {
    SYNCSA::rao.diversity(site_sp_birds,
                          phylodist = as.matrix(dist_traits_birds),
                          standardize = FALSE)$PhyRao
  },
  FD = {
    suppressMessages(
      FD::dbFD(x = dist_traits_birds, a = site_sp_birds, stand.x = FALSE,
               calc.FRic = TRUE, calc.CWM = FALSE, calc.FDiv = FALSE,
               calc.FGR = FALSE, m = "max", stand.FRic = FALSE,
               messages = FALSE))
  },
  times = 30
)

ggplot2::autoplot(pkg_bench)

Performance comparison in computing Rao’s quadratic entropy between fundiversity and other packages

pkg_bench
#> Unit: milliseconds
#>          expr        min          lq        mean     median          uq         max neval cld
#>  fundiversity    2.10149    2.407032    2.772199    2.58316    3.180594    4.188936    30 a  
#>          adiv   14.14454   14.526534   18.580014   15.58279   19.739028   41.526147    30 a  
#>         hillR   20.08181   20.486426   24.078429   21.26945   27.074169   37.166011    30 a  
#>        SYNCSA   97.95745  104.834362  127.459092  112.78063  152.813453  173.017482    30  b 
#>            FD 3461.85925 3546.031242 3660.392313 3611.61166 3799.379164 3983.139659    30   c

Benchmark within fundiversity

We now proceed to the performance evaluation of functions within fundiversity with datasets of increasing sizes.

Increasing the number of species

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

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.

bench_sp_fric
#> Unit: milliseconds
#>            expr        min         lq       mean     median         uq         max neval cld
#>     species_200   7.272143   7.411224   7.658876   7.540434   7.753756    9.735028    30 a  
#>    species_1000  12.590664  12.676594  13.410967  12.867334  13.337207   22.803020    30 ab 
#>   species_10000  60.990697  61.555851  63.188452  62.458161  63.446947   69.778430    30  b 
#>  species_100000 558.459636 567.359063 630.938174 587.045995 594.408122 1106.065389    30   c

Functional Divergence

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.

bench_sp_fdiv
#> Unit: milliseconds
#>            expr        min         lq       mean     median         uq        max neval cld
#>     species_200   1.308150   1.366275   1.514663   1.475043   1.585562   2.020659    30  a 
#>    species_1000   2.311057   2.390231   3.481409   2.543436   2.674460  29.508233    30  a 
#>   species_10000  13.854787  14.041624  19.600057  14.401898  17.039658  92.884507    30  a 
#>  species_100000 153.926721 168.931658 203.582522 189.018758 193.780627 796.773948    30   b

Rao’s Quadratric Entropy

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.

bench_sp_raoq
#> Unit: milliseconds
#>           expr          min           lq         mean       median           uq         max neval cld
#>    species_200     2.506085     2.957308     5.552542     3.029693     3.099884    78.00615    30  a 
#>   species_1000    72.190369    73.178624    86.020321    77.906959   100.639918   105.29714    30  a 
#>  species_10000 14971.569058 15232.768228 15619.310519 15310.934087 15680.391170 19845.49740    30   b

Functional Evenness

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 = 30
)

ggplot2::autoplot(bench_sp_feve)

Performance comparison of fd_feve() with increasing number of species.

bench_sp_feve
#> Unit: milliseconds
#>           expr         min          lq        mean      median          uq         max neval cld
#>    species_200    11.19328    11.88348    14.84363    12.06712    12.36027    89.65001    30  a 
#>   species_1000   184.66731   220.70915   226.49291   231.81374   242.28208   260.33686    30  a 
#>  species_10000 37904.84293 38804.31548 40420.87227 40281.46665 41471.36177 43307.46388    30   b

Comparing between indices

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 enveloppes ares shown.

Increasing the number of sites

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

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 = 30
)

ggplot2::autoplot(bench_sites_fric)

Performance comparison of fd_fric() with increasing number of sites.

bench_sites_fric
#> Unit: milliseconds
#>         expr         min          lq        mean      median          uq         max neval  cld
#>     sites_10    7.305447    7.445469    7.549598    7.533808    7.647921    7.860385    30 a   
#>    sites_100   80.210260   81.066842   92.257676   82.121457   84.696237  361.829400    30  b  
#>   sites_1000  809.925861  823.238119  854.610355  830.041438  836.439195 1121.243669    30   c 
#>  sites_10000 8367.482831 8663.878974 8758.820707 8735.375594 8845.360245 9507.021444    30    d

Functional Divergence

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 = 30
)

ggplot2::autoplot(bench_sites_fdiv)

Performance comparison of fd_fdiv() with increasing number of sites.

bench_sites_fdiv
#> Unit: milliseconds
#>         expr        min         lq       mean     median         uq        max neval cld
#>     sites_10   1.250922   1.326626   1.369076   1.353131   1.405422    1.58647    30 a  
#>    sites_100   8.599306   8.736499  12.063633   8.875529   9.553400   92.76261    30 a  
#>   sites_1000  82.157591  83.767686  88.820837  84.738417  93.188557  106.82917    30  b 
#>  sites_10000 847.098025 857.706245 916.569146 937.506656 946.714497 1030.69874    30   c

Rao’s Quadratic Entropy

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 = 30
)

ggplot2::autoplot(bench_sites_raoq)

Performance comparison of fd_raoq() with increasing number of sites.

bench_sites_raoq
#> Unit: milliseconds
#>         expr        min         lq       mean     median         uq         max neval cld
#>     sites_10   2.268343   2.345637   5.103336   2.494283   2.660158   77.342800    30  a 
#>    sites_100   2.684232   2.845342   3.101127   2.944907   3.095696    6.122854    30  a 
#>   sites_1000   9.130793   9.426069  10.816771   9.710192  10.687696   18.381225    30  a 
#>  sites_10000 311.269798 385.830844 654.603178 476.463111 996.386282 1154.563048    30   b

Functional Evenness

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 = 30
)

ggplot2::autoplot(bench_sites_feve)

Performance comparison of fd_feve() with increasing number of sites

bench_sites_feve
#> Unit: milliseconds
#>         expr         min          lq       mean      median          uq         max neval cld
#>     sites_10    10.10186    10.93081    13.5463    11.16931    11.31644    45.76879    30 a  
#>    sites_100   101.64932   104.51565   113.6527   106.91265   109.81663   158.13017    30 a  
#>   sites_1000  1130.58600  1150.79428  1347.9058  1195.57099  1619.52820  1817.18369    30  b 
#>  sites_10000 11351.16595 12265.51630 12830.9226 12674.06901 13241.87966 16210.35681    30   c

Comparing between indices

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 enveloppes ares shown.

Session info of the machine on which the benchmark was ran and time it took to run
#>  seconds needed to generate this document: 2620.549 sec elapsed
#> ─ Session info ─────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value                       
#>  version  R version 3.6.3 (2020-02-29)
#>  os       Ubuntu 16.04.7 LTS          
#>  system   x86_64, linux-gnu           
#>  ui       RStudio                     
#>  language (EN)                        
#>  collate  en_US.UTF-8                 
#>  ctype    en_US.UTF-8                 
#>  tz       Europe/Berlin               
#>  date     2021-02-02                  
#> 
#> ─ Packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  !  package           * version    date       lib source        
#>     abind               1.4-5      2016-07-21 [3] CRAN (R 3.5.0)
#>     ade4                1.7-16     2020-10-28 [3] CRAN (R 3.6.3)
#>     adegenet            2.1.3      2020-05-10 [1] CRAN (R 3.6.3)
#>     adegraphics         1.0-15     2018-12-18 [1] CRAN (R 3.6.3)
#>     adephylo            1.1-11     2017-12-18 [3] CRAN (R 3.5.0)
#>     adiv                2.0.1      2020-08-26 [1] CRAN (R 3.6.3)
#>     ape                 5.4-1      2020-08-13 [3] CRAN (R 3.6.3)
#>     assertthat          0.2.1      2019-03-21 [3] CRAN (R 3.5.3)
#>     boot                1.3-26     2021-01-25 [4] CRAN (R 3.6.3)
#>     class               7.3-18     2021-01-24 [4] CRAN (R 3.6.3)
#>     classInt            0.4-3      2020-04-07 [3] CRAN (R 3.6.3)
#>     cli                 2.2.0      2020-11-20 [3] CRAN (R 3.6.3)
#>     cluster             2.1.0      2019-06-19 [4] CRAN (R 3.6.1)
#>     clusterGeneration   1.3.7      2020-12-15 [3] CRAN (R 3.6.3)
#>     coda                0.19-4     2020-09-30 [3] CRAN (R 3.6.3)
#>     codetools           0.2-18     2020-11-04 [4] CRAN (R 3.6.3)
#>     colorspace          2.0-0      2020-11-11 [3] CRAN (R 3.6.3)
#>     combinat            0.0-8      2010-08-05 [3] CRAN (R 3.5.0)
#>     crayon              1.3.4      2017-09-16 [3] CRAN (R 3.5.0)
#>     crosstalk           1.1.1      2021-01-12 [3] CRAN (R 3.6.3)
#>     DBI                 1.1.1      2021-01-15 [3] CRAN (R 3.6.3)
#>     deldir              0.2-9      2021-01-16 [3] CRAN (R 3.6.3)
#>     desc                1.2.0      2018-05-01 [3] CRAN (R 3.5.0)
#>     digest              0.6.27     2020-10-24 [3] CRAN (R 3.6.3)
#>     dplyr             * 1.0.3      2021-01-15 [3] CRAN (R 3.6.3)
#>     DT                  0.17       2021-01-06 [3] CRAN (R 3.6.3)
#>     e1071               1.7-4      2020-10-14 [3] CRAN (R 3.6.3)
#>     ellipsis            0.3.1      2020-05-15 [3] CRAN (R 3.6.3)
#>     evaluate            0.14       2019-05-28 [3] CRAN (R 3.6.0)
#>     expm                0.999-6    2021-01-13 [3] CRAN (R 3.6.3)
#>     FactoMineR          2.4        2020-12-11 [3] CRAN (R 3.6.3)
#>     fansi               0.4.2      2021-01-15 [3] CRAN (R 3.6.3)
#>     farver              2.0.3      2020-01-16 [3] CRAN (R 3.6.2)
#>     fastmap             1.1.0      2021-01-25 [3] CRAN (R 3.6.3)
#>     fastmatch           1.1-0      2017-01-28 [3] CRAN (R 3.5.0)
#>     FD                  1.0-12     2014-08-19 [1] CRAN (R 3.6.3)
#>     flashClust          1.01-2     2012-08-21 [3] CRAN (R 3.5.0)
#>     fundiversity      * 0.0.0.9000 2021-01-22 [1] local         
#>     future              1.21.0     2020-12-10 [3] CRAN (R 3.6.3)
#>     gdata               2.18.0     2017-06-06 [3] CRAN (R 3.5.0)
#>     generics            0.1.0      2020-10-31 [3] CRAN (R 3.6.3)
#>     geometry            0.4.5      2019-12-04 [3] CRAN (R 3.6.1)
#>     ggplot2           * 3.3.3      2020-12-30 [3] CRAN (R 3.6.3)
#>     ggrepel             0.9.1      2021-01-15 [3] CRAN (R 3.6.3)
#>     globals             0.14.0     2020-11-22 [3] CRAN (R 3.6.3)
#>     glue                1.4.2      2020-08-27 [3] CRAN (R 3.6.3)
#>     gmodels             2.18.1     2018-06-25 [3] CRAN (R 3.5.0)
#>     gtable              0.3.0      2019-03-25 [3] CRAN (R 3.5.3)
#>     gtools              3.8.2      2020-03-31 [3] CRAN (R 3.6.3)
#>     highr               0.8        2019-03-20 [3] CRAN (R 3.5.3)
#>     hillR               0.5.0      2020-07-07 [1] CRAN (R 3.6.3)
#>     hms                 1.0.0      2021-01-13 [3] CRAN (R 3.6.3)
#>     htmltools           0.5.1.1    2021-01-22 [3] CRAN (R 3.6.3)
#>     htmlwidgets         1.5.3      2020-12-10 [3] CRAN (R 3.6.3)
#>     httpuv              1.5.5      2021-01-13 [3] CRAN (R 3.6.3)
#>     httr                1.4.2      2020-07-20 [3] CRAN (R 3.6.3)
#>     igraph              1.2.6      2020-10-06 [3] CRAN (R 3.6.3)
#>     jpeg                0.1-8.1    2019-10-24 [3] CRAN (R 3.6.1)
#>     jsonlite            1.7.2      2020-12-09 [3] CRAN (R 3.6.3)
#>     KernSmooth          2.23-18    2020-10-29 [4] CRAN (R 3.6.3)
#>     knitr               1.31       2021-01-27 [3] CRAN (R 3.6.3)
#>     later               1.1.0.1    2020-06-05 [3] CRAN (R 3.6.3)
#>     lattice             0.20-41    2020-04-02 [4] CRAN (R 3.6.3)
#>     latticeExtra        0.6-29     2019-12-19 [3] CRAN (R 3.6.2)
#>     lazyeval            0.2.2      2019-03-15 [3] CRAN (R 3.5.3)
#>     leaps               3.1        2020-01-16 [3] CRAN (R 3.6.2)
#>     LearnBayes          2.15.1     2018-03-18 [3] CRAN (R 3.5.0)
#>     lifecycle           0.2.0      2020-03-06 [3] CRAN (R 3.6.3)
#>     listenv             0.8.0      2019-12-05 [3] CRAN (R 3.6.1)
#>     magic               1.5-9      2018-09-17 [3] CRAN (R 3.5.1)
#>     magrittr            2.0.1      2020-11-17 [3] CRAN (R 3.6.3)
#>     manipulateWidget    0.10.1     2020-02-24 [3] CRAN (R 3.6.3)
#>     maps                3.3.0      2018-04-03 [3] CRAN (R 3.5.0)
#>     MASS                7.3-53     2020-09-09 [4] CRAN (R 3.6.3)
#>     Matrix              1.3-2      2021-01-06 [4] CRAN (R 3.6.3)
#>     mgcv                1.8-33     2020-08-27 [4] CRAN (R 3.6.3)
#>     microbenchmark      1.4-7      2019-09-24 [1] CRAN (R 3.6.3)
#>     mime                0.9        2020-02-04 [3] CRAN (R 3.6.2)
#>     miniUI              0.1.1.1    2018-05-18 [3] CRAN (R 3.5.0)
#>     mnormt              2.0.2      2020-09-01 [3] CRAN (R 3.6.3)
#>     multcomp            1.4-15     2020-11-14 [3] CRAN (R 3.6.3)
#>     munsell             0.5.0      2018-06-12 [3] CRAN (R 3.5.0)
#>     mvtnorm             1.1-1      2020-06-09 [3] CRAN (R 3.6.3)
#>     nlme                3.1-151    2020-12-10 [4] CRAN (R 3.6.3)
#>     numDeriv            2016.8-1.1 2019-06-06 [3] CRAN (R 3.6.0)
#>     parallelly          1.23.0     2021-01-04 [3] CRAN (R 3.6.3)
#>     permute             0.9-5      2019-03-12 [3] CRAN (R 3.5.3)
#>     phangorn            2.5.5      2019-06-19 [3] CRAN (R 3.6.0)
#>     phylobase           0.8.10     2020-03-01 [3] CRAN (R 3.6.3)
#>     phytools            0.7-70     2020-09-19 [3] CRAN (R 3.6.3)
#>     pillar              1.4.7      2020-11-20 [3] CRAN (R 3.6.3)
#>  VP pkgconfig           2.0.2      2019-09-22 [3] CRAN (R 3.6.3)
#>     pkgload             1.1.0      2020-05-29 [3] CRAN (R 3.6.3)
#>     plotrix             3.8-1      2021-01-21 [1] CRAN (R 3.6.3)
#>     plyr                1.8.6      2020-03-03 [3] CRAN (R 3.6.3)
#>     png                 0.1-7      2013-12-03 [3] CRAN (R 3.5.0)
#>     prettyunits         1.1.1      2020-01-24 [3] CRAN (R 3.6.2)
#>     progress            1.2.2      2019-05-16 [3] CRAN (R 3.6.0)
#>     promises            1.1.1      2020-06-09 [3] CRAN (R 3.6.3)
#>     purrr               0.3.4      2020-04-17 [3] CRAN (R 3.6.3)
#>     quadprog            1.5-8      2019-11-20 [3] CRAN (R 3.6.1)
#>     R6                  2.5.0      2020-10-28 [3] CRAN (R 3.6.3)
#>     raster              3.4-5      2020-11-14 [3] CRAN (R 3.6.3)
#>     RColorBrewer        1.1-2      2014-12-07 [3] CRAN (R 3.5.0)
#>     Rcpp                1.0.6      2021-01-15 [1] CRAN (R 3.6.3)
#>     RcppArmadillo       0.10.1.2.2 2021-01-10 [3] CRAN (R 3.6.3)
#>     reshape2            1.4.4      2020-04-09 [3] CRAN (R 3.6.3)
#>     rgl                 0.104.16   2021-01-10 [1] CRAN (R 3.6.3)
#>     rlang               0.4.10     2020-12-30 [3] CRAN (R 3.6.3)
#>     rmarkdown           2.6        2020-12-14 [3] CRAN (R 3.6.3)
#>     rncl                0.8.4      2020-02-10 [3] CRAN (R 3.6.2)
#>     RNeXML              2.4.5      2020-06-18 [3] CRAN (R 3.6.3)
#>     rprojroot           2.0.2      2020-11-15 [3] CRAN (R 3.6.3)
#>     rstudioapi          0.13       2020-11-12 [3] CRAN (R 3.6.3)
#>     sandwich            3.0-0      2020-10-02 [3] CRAN (R 3.6.3)
#>     scales              1.1.1      2020-05-11 [3] CRAN (R 3.6.3)
#>     scatterplot3d       0.3-41     2018-03-14 [3] CRAN (R 3.5.0)
#>     seqinr              4.2-5      2020-12-17 [3] CRAN (R 3.6.3)
#>     sessioninfo         1.1.1      2018-11-05 [3] CRAN (R 3.5.1)
#>     sf                  0.9-7      2021-01-06 [3] CRAN (R 3.6.3)
#>     shiny               1.6.0      2021-01-25 [3] CRAN (R 3.6.3)
#>     sp                  1.4-5      2021-01-10 [3] CRAN (R 3.6.3)
#>     spData              0.3.8      2020-07-03 [3] CRAN (R 3.6.3)
#>     spdep               1.1-5      2020-06-29 [3] CRAN (R 3.6.3)
#>     stringi             1.5.3      2020-09-09 [3] CRAN (R 3.6.3)
#>     stringr             1.4.0      2019-02-10 [3] CRAN (R 3.5.2)
#>     survival            3.2-7      2020-09-28 [4] CRAN (R 3.6.3)
#>     SYNCSA              1.3.4      2020-01-09 [1] CRAN (R 3.6.3)
#>     testthat            3.0.1      2020-12-17 [3] CRAN (R 3.6.3)
#>     TH.data             1.0-10     2019-01-21 [3] CRAN (R 3.5.2)
#>     tibble              3.0.6      2021-01-29 [3] CRAN (R 3.6.3)
#>     tictoc              1.0        2014-06-17 [3] CRAN (R 3.5.0)
#>     tidyr               1.1.2      2020-08-27 [3] CRAN (R 3.6.3)
#>     tidyselect          1.1.0      2020-05-11 [3] CRAN (R 3.6.3)
#>     tmvnsim             1.0-2      2016-12-15 [3] CRAN (R 3.6.3)
#>     units               0.6-7      2020-06-13 [3] CRAN (R 3.6.3)
#>     uuid                0.1-4      2020-02-26 [3] CRAN (R 3.6.3)
#>     vctrs               0.3.6      2020-12-17 [3] CRAN (R 3.6.3)
#>     vegan               2.5-7      2020-11-28 [3] CRAN (R 3.6.3)
#>     webshot             0.5.2      2019-11-22 [3] CRAN (R 3.6.1)
#>     withr               2.4.1      2021-01-26 [3] CRAN (R 3.6.3)
#>     xfun                0.20       2021-01-06 [3] CRAN (R 3.6.3)
#>     XML                 3.99-0.3   2020-01-20 [3] CRAN (R 3.6.3)
#>     xml2                1.3.2      2020-04-23 [3] CRAN (R 3.6.3)
#>     xtable              1.8-4      2019-04-21 [1] CRAN (R 3.6.3)
#>     yaml                2.2.1      2020-02-01 [3] CRAN (R 3.6.2)
#>     zoo                 1.8-8      2020-05-02 [3] CRAN (R 3.6.3)
#> 
#> [1] /homes/ke76dimu/R/x86_64-pc-linux-gnu-library/3.6
#> [2] /usr/local/lib/R/site-library
#> [3] /usr/lib/R/site-library
#> [4] /usr/lib/R/library
#> 
#>  V ── Loaded and on-disk version mismatch.
#>  P ── Loaded and on-disk path mismatch.

References

Chao, Anne, Chun-Huo Chiu, and Lou Jost. 2014. “Unifying Species Diversity, Phylogenetic Diversity, Functional Diversity, and Related Similarity and Differentiation Measures Through Hill Numbers.” Annual Review of Ecology, Evolution, and Systematics 45 (1): 297–324. https://doi.org/10.1146/annurev-ecolsys-120213-091540.
Debastiani, Vanderlei J., and Valério D. Pillar. 2012. SYNCSAR Tool for Analysis of Metacommunities Based on Functional Traits and Phylogeny of the Community Components.” Bioinformatics 28 (15): 2067–68. https://doi.org/10.1093/bioinformatics/bts325.
Laliberté, Etienne, Pierre Legendre, and Bill Shipley. 2014. FD: Measuring Functional Diversity from Multiple Traits, and Other Tools for Functional Ecology.
Li, Daijiang. 2018. hillR: Taxonomic, Functional, and Phylogenetic Diversity and Similarity Through Hill Numbers.” Journal of Open Source Software 3 (31): 1041. https://doi.org/10.21105/joss.01041.
Pavoine, Sandrine. 2020. adiv: An r Package to Analyse Biodiversity in Ecology.” Methods in Ecology and Evolution 11 (9): 1106–12. https://doi.org/10.1111/2041-210X.13430.