R语言 R包:mFD 计算与分析功能多样性的一站式综合性
功能性多样性(functional diversity, FD)是指生物体与其所处的生物环境或非生物环境之间互动的重要属性特征所形成的多样性。该指标自二十多年前首次提出以来,在生态学、生物地理学及保护生物学等领域逐渐得到广泛应用。尽管其内涵极为丰富多样,但目前仍尚未有一个统一的有效工具能够整合分析多种类型的FD指数及其具体内容。本研究旨在开发一个名为mFD(multifaceted functional diversity)的应用软件包,在R语言环境中实现这一目标。该软件通过利用物种集合矩阵和物种性状矩阵作为输入数据,能够计算大多数常见的功能多样性指标。
mFD主要用于生物特征数据的汇总。此外, mFD通过计算物种对之间的性状距离, 从而进一步分析多个层面的功能多样性. 为了便于用户选择合适的功能空间组合, mFD提供了两个评估函数来衡量每个功能空间的质量.
第三部分中包含了六个核心功能模块用于生成16个FD指数计算结果,默认基于性状距离矩阵、功能实体区域或物种定位数据进行分析处理。该软件还内置了ggplot绘图功能模块,默认采用高分辨率图形展示FD指数变化趋势,默认自动完成数据校正处理过程以确保结果准确性。为了方便不同层次的用户开展研究工作,默认提供了五套标准化操作指南网页版教学资源包,默认其中General Workflow介绍较为全面详尽,默认其余基础操作指南则聚焦于基础概念与具体操作步骤说明,请参考官方发布的在线使用手册获取详细指导链接:https://cloud.r-project.org/web/packages/mFD/mFD.pdf
mFD包内置了一组练习数据以“果篮中的水果”形式呈现。这些数据共计包含3个不同的数据集。第一个数据集详细记录了各类水果的具体形态特征(相当于物种学中的形态学特征)。第二个则聚焦于果篮中各类水果的数量及其种类分布(相当于群落学中的物种丰度分析)。第三个则是对上述形态特征进行了系统化的分类整理。具体的数据格式如图所示:


使用练习数据时,直接加载数据即可:
install.packages("mFD")#安装mFD包
library(mFD)#加载mFD包
data("fruits_traits",package="mFD")#加载性状数据
fruits_traits<-fruits_traits[,-c(6:8)]#6-8列是水果的主要用途,不算是真正意义上的性状,故选择删掉这三列,再进行后续分析
data("fruits_traits_cat",package="mFD")#加载性状分类数据
data("baskets_fruits_weights",package="mFD")#加载水果集合数据
AI助手
借助基础的数据统计手段,便于了解和把握数据的基本情况。为了更好地进行数据分析,请问具体包括哪些类型:
data("fruits_traits_cat",package="mFD")
fruits_traits_cat<-fruits_traits_cat[-c(6:8),]
head(fruits_traits_cat)
fruits_traits_cat<-fruits_traits_cat[,-3]
head(fruits_traits_cat)
knitr::kable(head(fruits_traits_cat),caption="Traits types based on **fruits & baskets**dataset")
AI助手
得结果如下,可以看到有多种类型的性状:

其次,可以对性状的值与分布情况进行统计:
fruits_traits_summ<-mFD::sp.tr.summary(
tr_cat=fruits_traits_cat,
sp_tr=fruits_traits,
stop_if_NA = TRUE)
fruits_traits_summ$"tr_types"
fruits_traits_summ$"mod_list"
AI助手
例如,基于此,可以看到每种性状的区间分布情况:

再次,可以统计群落中的物种组成情况:
asb_sp_fruits_summ<-mFD::asb.sp.summary(asb_sp_w=baskets_fruits_weights)
head(asb_sp_fruits_summ$asb_sp_occ,3)
asb_sp_fruits_occ<-asb_sp_fruits_summ$"asb_sp_occ"
head(asb_sp_fruits_occ)
asb_sp_fruits_summ$"sp_tot_w"
asb_sp_fruits_summ$"asb_tot_w"
asb_sp_fruits_summ$"asb_sp_richn"
asb_sp_fruits_summ$"asb_sp_nm"[[1]]
asb_sp_fruits_summ$"asb_sp_nm"[[8]]
asb_sp_fruits_summ$"asb_sp_nm"#展示每个群落中物种的名字
AI助手
例如,基于此,可以看到,每个篮子中分别有什么水果:

基于性状数据计算种间距离
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
)
round(sp_dist_fruits,2)#距离值保留两位小数
round(sp_dist_fruits,3)#距离值保留三位小数
AI助手

计算功能空间并评估其质量
fspaces_quality_fruits<-mFD::quality.fspaces(
sp_dist = sp_dist_fruits,
maxdim_pcoa = 10,
deviation_weighting = "absolute",
fdist_scaling = FALSE,
fdendro = "average"
)
round(fspaces_quality_fruits$"quality_fspaces",3)
mFD::quality.fspaces.plot(
fspaces_quality = fspaces_quality_fruits,
quality_metric = "mad",
fspaces_plot = c("tree_average","pcoa_2d","pcoa_3d","pcoa_4d","pcoa_5d","pcoa_6d"),
name_file = NULL,
range_dist = NULL,
range_dev = NULL,
range_qdev = NULL,
gradient_deviation = c(neg="darkblue",nul="grey80",pos="darkred"),
gradient_deviation_quality = c(low="yellow",high="red"),
x_lab = "Trait-based distance"
)
AI助手
由此得出以下结论表明,在本套数据集中4D的功能区域具有最佳的覆盖效果。进一步采用物种在四维空间坐标的数值搭建矩阵,并将其此方法应用于后续计算功能多样性

检验功能轴与性状的关系
fruit_tr_faxes<-mFD::traits.faxes.cor(
sp_tr=fruits_traits,
sp_faxes_coord = sp_faxes_coord_fruits[,c("PC1","PC2","PC3","PC4")],
plot=TRUE
)
AI助手
基于此,可得如下结果,说明PC1轴主要与气候、植物类型等性状相关:

可以将在每一轴上对物种位置有显著影响的性状绘图输出:
fruits_tr_faxes$"tr_faxes_stat"[which(fruits_tr_faxes$"tr_faxes_stat"$"p.value"<0.05),]
fruits_tr_faxes$"tr_faxes_plot"
AI助手

基于已选定的功能空间维度...能够呈现所有维度组合的二维功能空间图:
big_plot<-mFD::funct.space.plot(
sp_faxes_coord = sp_faxes_coord_fruits[,c("PC1","PC2","PC3","PC4")],
faxes=NULL,
name_file = NULL,
faxes_nm = NULL,
range_faxes = c(NA,NA),
color_bg = "grey95",
color_pool = "darkgreen",
fill_pool = "white",
shape_pool = 21,
size_pool = 1,
plot_ch = TRUE,
color_ch = "black",
fill_ch = "white",
alpha_ch = 0.5,
plot_vertices = TRUE,
color_vert = "blueviolet",
fill_vert = "blueviolet",
shape_vert = 23,
size_vert = 1,
plot_sp_nm = NULL,
nm_size = 3,
nm_color = "black",
nm_fontface = "plain",
check_input = TRUE
)
big_plot$patchwork
AI助手

利用上面已经筛选得到的四维空间可以计算alpha多样性指数,并绘图:
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("fric","feve","fdiv","fdis","fmpd","fnnd","fori","fspe","fide"),
scaling=TRUE,
check_input = TRUE,
details_returned = TRUE
)
fd_ind_values_fruits<-alpha_fd_indices_fruits$"functional_diversity_indices"
fd_ind_values_fruits
AI助手

可通过如下代码绘制功能多样性指数分布图:
mFD::alpha.multidim.plot(
output_alpha_fd_multidim = alpha_fd_indices_fruits,
plot_asb_nm = c("basket_1","basket_5"),
ind_nm = c("fric","feve","fdiv"),
faxes = NULL,
faxes_nm = NULL
)
AI助手
利用上面已经筛选得到的四维空间可以计算beta多样性指数,并绘图:
beta_fd_indices_fruits<-mFD::beta.fd.multidim(
sp_faxes_coord = sp_faxes_coord_fruits[,c("PC1","PC2","PC3","PC4")],
asb_sp_occ = asb_sp_fruits_occ,
beta_family = c("Jaccard")
)
mFD::beta.multidim.plot(
output_beta_fd_multidim = beta_fd_indices_fruits,
plot_asb_nm = c("basket_1","basket_5"),
beta_family = c("Jaccard"),
plot_sp_nm = c("apple","lemon","pear"),
faxes = paste0("PC",1:4),
check_input = TRUE
)
AI助手

