实例教程 | 功能多样性指数的计算代码及相关R包的区别

文摘   科学   2024-10-29 17:02   江苏  

整理了一下功能多样性指数的相关定义,并总结比较了一些相关的R包,可能会有所缺漏,欢迎指正!

  • 术语

功能多样性(Functional Diversity):指生态群落中物种功能性状的多样化程度及其分布特征。

α功能多样性(Functional α-diversity):描述单个群落内物种功能性状的多样化程度,反映局域尺度的功能多样性。

β功能多样性(Functional β-diversity):衡量不同群落间功能组成的差异程度,反映群落间功能性状的更替。可以通过JaccardSø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):衡量物种功能性状的独特程度,反映功能性状的稀有性。它与功能冗余度(FredFunctional 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年):可计算FRicFDivFDisFEveRao's QE等指数,但文档和测试相对不够完善,是早期计算功能多样性指数比较专业的R包。

betapart包(2012年):专注于功能性β多样性的计算,在这一特定领域提供专业解决方案。

entropart包(2013年):专注于功能熵的计算,为多样性分析提供了可靠的熵测量工具。

hypervolume包(2014年):通过超体积测量方法计算功能多样性(类似于FRic),提供详细的使用指南,特别适合高维度的功能空间分析。

BAT包(2015年):支持αβ多样性计算,使用基于超体积的丰富度、分歧度和均匀度指数,并提供GitHub支持,便于用户交流。

hilldivhillR包(2018年):专注于Hill数的计算,其中hillR版本包含完整的测试,在这一专门领域提供可靠的分析工具。

TPD包(2019年):创新性地将FRicFDivFEve指数应用于概率分布,提供完整的使用指南,为功能多样性分析提供了新的方法论视角。

adiv包(2020年):主要计算功能熵和冗余度,同时还可以计算物种和系统发育多样性

mFD2021年):是一个综合性的功能多样性包,支持多种指数计算(FRicFDivFDisFEveFIdeFMPDFNNDFOriFSpeHill Numbers等),同时支持αβ多样性分析,并提供详细文档。

fundiversity2023年):采用轻量级设计,支持并行计算,提供六个主要指数(FRicFRic_intersectFDivFEveFDisQ),文档完善且持续更新维护,代表了当前功能多样性分析工具的最新发展。

divraster2023年):利用分类(TD)、功能(FD)和系统发育(PD)维度的栅格进行αβ计算。空间和时间β多样性可划分为替代性和丰富性差异部分。还提供了计算功能和系统发育α多样性的标准化效应大小以及平均性状的功能。

  • R包使用建议

在众多与功能指数计算相关的R包中,截止当下比较推荐使用的是mFD包,其在计算功能指数计算方面更为全面,且功能较新。如果有其他具体的计算需求,也可考虑别的R包:如fundiversity包更适用时于计算大的数据量,divraster包更能满足计算栅格功能多样性指数的需求,adiv包还可以同时计算物种和系统发育多样性等。

  • 示例代码

由于功能指数计算相关的R包众多,在这里就不一一介绍其具体代码了,就以综合性较强且功能较新的mFD包为例进行介绍。(divraster包可以查看之前的推文:实例教程 | 使用“divraster”包计算栅格的分类、功能和系统发育多样性

1. 数据准备

需要三类基础数据:

物种性状数据(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
2. 计算功能距离

# 计算功能距离 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
3. 构建功能空间

# 计算功能空间质量,提取物种坐标矩阵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_coordsp_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
4. 计算α功能多样性指数

# 计算α多样性指数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_indicesfd_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
5. 计算β功能多样性指数

# 获取发生数据框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
6. 计算α功能多样性Hill

# 计算α功能多样性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
7. 计算β功能多样性Hill

# 计算β功能多样性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))
  • 参考来源

  1. 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

  2. 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.

  3. 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.

  4. Laliberté, Etienne, Pierre Legendre, and Bill Shipley. 2014. FD: Measuring Functional Diversity from Multiple Traits, and Other Tools for Functional Ecology.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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

  10. 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

  11. 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.

Biodiversity Monitoring
生物多样性;监测保护;群落生态;生态统计;R语言;python。 主要分享一些前沿的文献和方法实例,更新看心情和时间。
 最新文章