整理了一下功能多样性指数的相关定义,并总结比较了一些相关的R包,可能会有所缺漏,欢迎指正!
术语
功能多样性(Functional Diversity):指生态群落中物种功能性状的多样化程度及其分布特征。
α功能多样性(Functional α-diversity):描述单个群落内物种功能性状的多样化程度,反映局域尺度的功能多样性。
β功能多样性(Functional β-diversity):衡量不同群落间功能组成的差异程度,反映群落间功能性状的更替。可以通过Jaccard和Sørensen两种指数来划分:Jaccard指数强调物种在功能空间中的绝对差异,而Sørensen指数则更注重功能性状的相对变化。
功能丰富度(FRic, Functional Richness):表征群落中物种所占据的功能空间体积,反映功能性状的范围大小。
功能分歧度(FDiv, Functional Divergence):描述物种在功能空间中偏离重心的程度,反映资源利用的互补性。
功能离散度(FDis, Functional Dispersion):量化物种到功能空间重心的平均距离,体现功能性状的分散程度。
功能均匀度(FEve, Functional Evenness):衡量功能空间中物种分布的规则性,反映资源利用的均匀程度。
功能身份(FIde, Functional Identity):基于物种丰度加权的群落功能性状平均值,反映优势物种的功能性状。
功能平均配对距离(FMPD, Functional Mean Pairwise Distance):量化群落中物种间功能性状的平均差异程度。
功能最近邻体距离(FNND, Functional Nearest Neighbor Distance):描述物种与其功能最相似物种之间的距离,反映功能冗余度。
功能独特性(FOri, Functional Originality):衡量物种功能性状的独特程度,反映功能性状的稀有性。它与功能冗余度(Fred,Functional Redundancy)呈互补关系,两者之和等于1,即Fred=1-Fori。
功能特化(FSpe, Functional Specialization):描述物种功能性状偏离群落平均水平的程度,反映功能特化程度。
功能Hill数(Functional Hill Numbers):整合物种丰度与功能差异的多样性度量方法,提供不同阶数的功能多样性指数。随着q值的增加,多样性值对常见物种的敏感度也会增加。当q=0时,物种丰度被忽略;q=1时,所有物种的丰度加权相同(即Shannon多样性);q=2,常见物种的权重高于稀有物种(即Simpson多样性的倒数)。
计算功能多样性指数的R包
(按时间线排序:有正式论文发布的按见刊时间,没有搜到论文的按CRAN上发布的第1个版本时间记录)
vegan包(2001年):提供了基于树的功能多样性计算(treedive函数),是生态分析中的基础包,被广泛使用,不过在功能多样性方面的计算比较少。
FD包(2009年):可计算FRic、FDiv、FDis、FEve和Rao's QE等指数,但文档和测试相对不够完善,是早期计算功能多样性指数比较专业的R包。
betapart包(2012年):专注于功能性β多样性的计算,在这一特定领域提供专业解决方案。
entropart包(2013年):专注于功能熵的计算,为多样性分析提供了可靠的熵测量工具。
hypervolume包(2014年):通过超体积测量方法计算功能多样性(类似于FRic),提供详细的使用指南,特别适合高维度的功能空间分析。
BAT包(2015年):支持α和β多样性计算,使用基于超体积的丰富度、分歧度和均匀度指数,并提供GitHub支持,便于用户交流。
hilldiv和hillR包(2018年):专注于Hill数的计算,其中hillR版本包含完整的测试,在这一专门领域提供可靠的分析工具。
TPD包(2019年):创新性地将FRic、FDiv、FEve指数应用于概率分布,提供完整的使用指南,为功能多样性分析提供了新的方法论视角。
adiv包(2020年):主要计算功能熵和冗余度,同时还可以计算物种和系统发育多样性。
mFD包(2021年):是一个综合性的功能多样性包,支持多种指数计算(FRic、FDiv、FDis、FEve、FIde、FMPD、FNND、FOri、FSpe、Hill Numbers等),同时支持α和β多样性分析,并提供详细文档。
fundiversity包(2023年):采用轻量级设计,支持并行计算,提供六个主要指数(FRic、FRic_intersect、FDiv、FEve、FDis、Q),文档完善且持续更新维护,代表了当前功能多样性分析工具的最新发展。
divraster包(2023年):利用分类(TD)、功能(FD)和系统发育(PD)维度的栅格进行α和β计算。空间和时间β多样性可划分为替代性和丰富性差异部分。还提供了计算功能和系统发育α多样性的标准化效应大小以及平均性状的功能。
R包使用建议
在众多与功能指数计算相关的R包中,截止当下比较推荐使用的是mFD包,其在计算功能指数计算方面更为全面,且功能较新。如果有其他具体的计算需求,也可考虑别的R包:如fundiversity包更适用时于计算大的数据量,divraster包更能满足计算栅格功能多样性指数的需求,adiv包还可以同时计算物种和系统发育多样性等。
示例代码
由于功能指数计算相关的R包众多,在这里就不一一介绍其具体代码了,就以综合性较强且功能较新的mFD包为例进行介绍。(divraster包可以查看之前的推文:实例教程 | 使用“divraster”包计算栅格的分类、功能和系统发育多样性)
需要三类基础数据:
物种性状数据(fruits_traits)
物种丰度数据(baskets_fruits_weights)
性状类型信息(fruits_traits_cat)
# install.packages("mFD")
# 加载mFD包
library(mFD)
# 导入示例数据
# 该数据集代表15个水果物种的6个性状值
# 注意:物种名称必须指定为数据框行名(而不是附加列名)
data('fruits_traits')
head(fruits_traits)
## Size Plant Climate Seed Sugar Use.raw Use.pastry Use.jam
## apple 5-10cm tree temperate pip 103.9 50 50 0
## apricot 3-5cm tree temperate pit 92.4 40 10 50
## banana 10-20cm tree tropical none 122.3 70 20 10
## currant 0-1cm shrub temperate pip 73.7 10 10 80
## blackberry 1-3cm shrub temperate pip 48.8 30 10 60
## blueberry 0-1cm forb temperate pip 100.0 10 40 50
# 该数据集表示10个篮子中25种水果的丰度
data('baskets_fruits_weights')
head(baskets_fruits_weights)
## apple apricot banana currant blackberry blueberry cherry grape grapefruit kiwifruit lemon lime litchi mango melon orange passion_fruit peach pear pineapple plum raspberry strawberry tangerine water_melon
## basket_1 400 0 100 0 0 0 150 0 0 0 200 0 0 0 200 0 100 0 600 0 0 0 250 0 0
## basket_2 200 0 400 0 0 0 250 0 0 0 100 0 0 0 500 0 100 0 200 0 0 0 250 0 0
## basket_3 200 0 500 0 0 0 250 0 0 0 100 0 0 0 400 0 100 0 200 0 0 0 250 0 0
## basket_4 300 0 0 0 0 0 0 0 0 100 100 0 0 0 0 400 0 300 400 0 200 0 0 200 0
## basket_5 200 0 0 0 0 0 0 0 0 300 300 0 0 0 0 300 0 300 300 0 200 0 0 100 0
## basket_6 100 0 200 0 0 0 0 0 0 0 0 200 200 500 0 100 0 0 0 500 0 0 0 0 200
# 该数据集汇总了 fruits_traits 数据集中使用的 6 个性状的信息
data('fruits_traits_cat')
# trait_name:给出性状名称的字符
# trait_type:给出性状类型的字符,O 表示顺序性状(Ordinal trait),N 表示名义性状(Nominal trait),Q 表示定量性状(Quantitative trait),F 表示模糊编码性状(Fuzzy-coded trait)
# fuzzy_name:给出 “子性状”(i.e. raw, pastry, and jam)所属的模糊编码性状(i.e. Use)名称的字符
# 如果数据集不包含模糊性状,则fuzzy_name列可以忽略,但前两列必须填写
head(fruits_traits_cat)
## trait_name trait_type fuzzy_name
## 1 Size O <NA>
## 2 Plant N <NA>
## 3 Climate O <NA>
## 4 Seed O <NA>
## 5 Sugar Q <NA>
## 6 Use.raw F Use
# 计算功能距离
sp_dist_fruits <- mFD::funct.dist(sp_tr = fruits_traits,
tr_cat = fruits_traits_cat,
metric = "gower",
scale_euclid = "scale_center",
ordinal_var = "classic",
weight_type = "equal",
stop_if_NA = TRUE)
sp_dist_fruits
# 计算功能空间质量,提取物种坐标矩阵
fspaces_quality_fruits <- mFD::quality.fspaces(
sp_dist = sp_dist_fruits,
maxdim_pcoa = 10,
deviation_weighting = 'absolute',
fdist_scaling = FALSE,
fdendro = 'average')
# 提取物种坐标矩阵
sp_faxes_coord_fruits <- fspaces_quality_fruits$details_fspaces$sp_pc_coord
sp_faxes_coord_fruits
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10
## apple 0.0265193144 -0.013054128 -0.043717435 -0.021211462 -0.148218537 0.040965006 0.039965979 -0.022577267 -0.012017348 -1.067572e-02
## apricot 0.1032240731 0.148535464 -0.084372792 -0.059069034 0.051197559 0.059097707 -0.027540550 0.056358883 -0.016901596 1.356995e-02
## banana -0.3346937349 -0.091371413 -0.070877547 0.069888722 -0.050000845 0.020752971 -0.041476147 -0.083039226 0.042337245 1.583090e-02
## currant 0.2941221208 0.002028080 0.059840313 0.027477102 0.036184138 0.005808690 -0.114447728 -0.019688896 -0.024109923 -1.297464e-02
## blackberry 0.2398366750 -0.002921130 0.096332589 0.012767053 0.063869252 0.035900843 -0.024364564 0.003797170 0.038186173 -9.737454e-03
## blueberry 0.3146904236 -0.065534392 -0.061375184 0.170320608 -0.043827091 -0.072940389 -0.011254549 0.007080864 -0.046110072 4.357324e-03
# 计算α多样性指数
alpha_fd_indices_fruits <- mFD::alpha.fd.multidim(
sp_faxes_coord = sp_faxes_coord_fruits[, c('PC1', 'PC2', 'PC3', 'PC4')],
asb_sp_w = baskets_fruits_weights,
ind_vect = c('fdis', 'fmpd', 'fnnd', 'feve', 'fric', 'fdiv',
'fori', 'fspe'),
scaling = TRUE,
check_input = TRUE,
details_returned = TRUE)
# 提取α多样性指数表
fd_ind_values_fruits <- alpha_fd_indices_fruits$functional_diversity_indices
fd_ind_values_fruits
## sp_richn fdis fmpd fnnd feve fric fdiv fori fspe fide_PC1 fide_PC2 fide_PC3 fide_PC4
## basket_1 8 0.4572320 0.6366416 0.5778912 0.648241 0.127034350 0.5385777 0.3789936 0.3931170 0.01899853 -0.02941357 -0.005068006 -0.018344605
## basket_2 8 0.6797564 0.7244031 0.8106286 0.797667 0.127034350 0.7974857 0.5320906 0.5687316 -0.01331858 -0.05692236 -0.023750910 -0.003179800
## basket_3 8 0.7002352 0.7308197 0.8261547 0.791014 0.127034350 0.7995983 0.5447687 0.5790966 -0.03243182 -0.05008021 -0.026841109 0.006822367
## basket_4 8 0.2854746 0.3351787 0.3259376 0.683059 0.004136639 0.6176418 0.2893770 0.2604065 -0.01050901 0.01509452 -0.024893697 -0.048687531
## basket_5 8 0.3213250 0.3509955 0.3546202 0.830008 0.004136639 0.6875893 0.3035437 0.3019012 -0.01540439 0.01115358 -0.006787842 -0.067223460
## basket_6 8 0.7577626 0.7829217 0.8741800 0.779539 0.110378639 0.8866375 0.7708788 0.7829723 -0.21168832 -0.07159069 -0.056906946 0.037226970
## basket_7 8 0.7907944 0.8111233 0.8785200 0.793622 0.110378639 0.8937828 0.7237701 0.7451308 -0.11454663 -0.14176088 -0.058487715 0.029260412
## basket_8 8 0.4190958 0.5149757 0.4450844 0.586306 0.014059458 0.6059633 0.3324008 0.6220539 0.20828315 0.01234992 0.047915332 0.039808906
## basket_9 8 0.5107095 0.5506783 0.5371850 0.787953 0.014059458 0.6705378 0.3759408 0.5785916 0.14913920 0.01500900 0.076594090 0.010513208
## basket_10 8 0.4825409 0.5352984 0.5167429 0.783877 0.031100594 0.7230460 0.3934059 0.4219834 0.02616413 -0.01620247 0.002831861 -0.068301807
# 获取发生数据框
asb_sp_fruits_summ <- mFD::asb.sp.summary(asb_sp_w = baskets_fruits_weights)
asb_sp_fruits_occ <- asb_sp_fruits_summ$'asb_sp_occ'
asb_sp_fruits_occ
## apple apricot banana currant blackberry blueberry cherry grape grapefruit kiwifruit lemon lime litchi mango melon orange passion_fruit peach pear pineapple plum raspberry strawberry tangerine water_melon
## basket_1 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0
## basket_2 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0
## basket_3 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0
## basket_4 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 0 1 0 0 1 0
## basket_5 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 0 1 0 0 1 0
## basket_6 1 0 1 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1
## basket_7 1 0 1 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1
## basket_8 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0
## basket_9 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0
## basket_10 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0
# 计算β功能多样性指数
beta_fd_fruits <- mFD::beta.fd.multidim(
sp_faxes_coord = sp_faxes_coord_fruits[, c('PC1', 'PC2', 'PC3', 'PC4')],
asb_sp_occ = asb_sp_fruits_occ,
check_input = TRUE,
beta_family = c('Jaccard'),
details_returned = TRUE)
# 在数据框中合并成对的β-多样性指数
dist.to.df(beta_fd_fruits$pairasb_fbd_indices)
## x1 x2 jac_diss jac_turn jac_nest
## 1 basket_1 basket_2 0.000000e+00 0.000000e+00 0.000000e+00
## 2 basket_1 basket_3 0.000000e+00 0.000000e+00 0.000000e+00
## 3 basket_1 basket_4 9.903938e-01 8.223456e-01 1.680483e-01
## 4 basket_1 basket_5 9.903938e-01 8.223456e-01 1.680483e-01
## 5 basket_1 basket_6 9.199830e-01 9.134231e-01 6.559808e-03
## 6 basket_1 basket_7 9.199830e-01 9.134231e-01 6.559808e-03
# 计算α功能多样性Hill数
baskets_alpha <- alpha.fd.hill(
asb_sp_w = baskets_fruits_weights,
sp_dist = sp_dist_fruits,
q = c(0, 1, 2),
tau = 'mean',
check_input = TRUE,
details_returned = TRUE)
baskets_alpha
# 计算β功能多样性Hill数
baskets_beta <- beta.fd.hill(
asb_sp_w = baskets_fruits_weights,
sp_dist = sp_dist_fruits,
q = c(0,1,2),
tau = 'mean',
beta_type = 'Jaccard',
check_input = TRUE,
details_returned = TRUE)
# 使用 mFD::dist.to.df 函数来简化结果的可视化
## q = 0:
mFD::dist.to.df(list_dist = list(FDq2 = baskets_beta$beta_fd_q$q0))
## q = 1:
mFD::dist.to.df(list_dist = list(FDq2 = baskets_beta$beta_fd_q$q1))
## q = 2:
mFD::dist.to.df(list_dist = list(FDq2 = baskets_beta$beta_fd_q$q2))
参考来源
Grenié, M. and Gruson, H. (2023), fundiversity: a modular R package to compute functional diversity indices. Ecography, 2023: e06585. https://doi.org/10.1111/ecog.06585 Magneville, Camille, Nicolas Loiseau, Camille Albouy, Nicolas Casajus, Thomas Claverie, Arthur Escalas, Fabien Leprieur, Eva Maire, David Mouillot, and Sébastien Villéger. 2022. “mFD: An R Package to Compute and Illustrate the Multiple Facets of Functional Diversity.” Ecography 2022 (1). https://doi.org/10.1111/ecog.05904. 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. Laliberté, Etienne, Pierre Legendre, and Bill Shipley. 2014. FD: Measuring Functional Diversity from Multiple Traits, and Other Tools for Functional Ecology. Baselga, Andrés, and C. David L. Orme. 2012. “Betapart: An R Package for the Study of Beta Diversity.” Methods in Ecology and Evolution 3 (5): 808–12. https://doi.org/10.1111/j.2041-210X.2012.00224.x. Cardoso, Pedro, François Rigal, and José C. Carvalho. 2015. “BAT Biodiversity Assessment Tools, an R Package for the Measurement and Estimation of Alpha and Beta Taxon, Phylogenetic and Functional Diversity.” Methods in Ecology and Evolution 6 (2): 232–36. https://doi.org/10.1111/2041-210X.12310. Villéger, Sébastien, Norman W. H. Mason, and David Mouillot. 2008. “New Multidimensional Functional Diversity Indices for a Multifaceted Framework in Functional Ecology.” Ecology 89 (8): 2290–2301. https://doi.org/10.1890/07-1206.1. 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. Blonder, B., Lamanna, C., Violle, C. and Enquist, B.J. (2014), The n-dimensional hypervolume. Global Ecology and Biogeography, 23: 595-609. https://doi.org/10.1111/geb.12146 Carmona, C. P., F. de Bello, N. W. H. Mason, and J. Lepš. 2019. Trait probability density (TPD): measuring functional diversity across scales based on TPD with R. Ecology 100(12):e02876. 10.1002/ecy.2876 Mota FMM, Alves-Ferreira G, Talora DC, Heming NM (2023). “divraster: an R package to calculate taxonomic, functional and phylogenetic diversity from rasters.” Ecography, e06905. doi:10.1111/ecog.06905.