尽管提供了社区矩阵,但纯素dbrda物种分数为空

尽管提供了社区矩阵,但纯素dbrda物种分数为空,r,vegan,rda,R,Vegan,Rda,我已经使用素食社区生态学软件包在R中执行了“基于距离的冗余分析”(dbRDA)。我想在dbRDA结果的排序图中显示(鱼类)营养类群对样本之间差异的相对贡献(营养级鱼类组合的丰度数据)。即,将箭头和营养级组名称覆盖在排序图上,其中箭头线的长度表示差异的相对贡献。据我所知,这应该可以通过vegan::scores()函数访问,或者与dbrda.model$CCA$v对象一起存储 但是,使用dbrda()时,物种分数为空(NA)。我理解dbrda函数要求在函数中定义群落矩阵,以便提供物种分数。我已经给

我已经使用素食社区生态学软件包在R中执行了“基于距离的冗余分析”(dbRDA)。我想在dbRDA结果的排序图中显示(鱼类)营养类群对样本之间差异的相对贡献(营养级鱼类组合的丰度数据)。即,将箭头和营养级组名称覆盖在排序图上,其中箭头线的长度表示差异的相对贡献。据我所知,这应该可以通过
vegan::scores()
函数访问,或者与
dbrda.model$CCA$v
对象一起存储

但是,使用
dbrda()
时,物种分数为空(NA)。我理解dbrda函数要求在函数中定义群落矩阵,以便提供物种分数。我已经给它下了定义,但仍然无法得出物种分数。让我困惑的是,当我在纯素套餐中使用
capscale()
时,使用相同的物种群落和环境变量数据,并在各自的功能中制定相同的公式,就会产生物种分数。素食者中的dbrda是否能够产生物种分数?这些分数与
capscale
(使用相同的数据和公式时)产生的分数有何不同?我提供了一个我的数据示例,以及使用的公式。(一旦获得物种分数,我对实际绘制物种分数相当有信心——因此将代码限制为生成物种分数。)

社区数据矩阵(comm.dat):站点名称=行名称,营养级别=列名 >头部(通讯数据[1:5,1:4]) 藻类/无脊椎动物珊瑚食肉动物食草动物 h_m_r_3m_18 1 0 3 0 h_m_r_3m_22 6 4 8 26 h_m_r_3s_19 0 4 0 h_m_r_3s_21 3 0 7 0 l_pm_r_2d_7 1 0 5 0 >str(通信数据) 数字[1:47,1:8]160 3 1 8 11 2 6 9。。。 -属性(*,“dimnames”)=2个列表 …$:chr[1:47]“h_m_r_3m_18”“h_r_3m_22”“h_m_r_3s_19”“h_r_3s_21”。。。 ..$:chr[1:8]“藻类/无脊椎动物”“珊瑚动物”“多面手食肉动物”“食草动物”。。。 #环境数据(环境数据):已经标准化的环境数据。 >头部(环境数据[1:5,1:3]) 水深、水位、时间 -0.06017376 1.3044232 -1.7184415 -0.67902862 1.3044232 -1.7907181 -0.99619174 1.3044232 -1.7569890 -1.06581291 1.3044232 -1.7762628 2.39203863 -0.9214933 0.1703884 #相异距离:修改的Gower(AltGower)和社区数据矩阵的logbase 10转换 >dis.comm.mGow m.dbrda m.dbrda$CCA$v dbRDA1 dbRDA2 dbRDA3 dbRDA4 dbRDA5 [1,]NA-NA-NA #或使用分数()提取物种分数:也不显示物种分数。。。 >scrs m.cap m.cap$CCA$v[1:5,1:3] 第1章第2章第3章 藻类/无脊椎动物0.2044097-0.04598088-0.37200097 珊瑚虫0.3832594 0.06416886-0.27963122 多面手食肉动物0.1357668-0.08566365-0.06789812 食草动物0.5745226-0.45647341 0.73085661 无脊椎动物食肉动物0.1987651 0.68036211-0.19174283
这看起来像是文档中的一个bug或缺少功能,我将在Github上向Jari提出这个问题

但是,请注意,
dbrda()
没有参数
comm
,因此传递它实际上没有任何作用<代码>通信仅用于
capscale

如果这是一个文档错误,那么它就会出现,因为我们在同一页上同时记录了
capscale()
dbrda()
,但是
capscale()
首先存在,而
dbrda()
只是在之后才到达,文档被更新以适应后者,但这可能做得并不完美,因此,关于
dbrda()
是做什么的,还是不做什么的问题就变得很混乱

目前,
dbrda()
背后的代码没有试图计算物种得分;如果我正确地遵循代码,它可以。因此,这可能只是缺少功能

目前,
NA
s是实现所有这些模型的底层
ordConstrained
函数的预期结果,并且是如果分析是在相异矩阵上,我们返回的结果,就这个函数而言,它是。

dbrda()
函数实际上没有得到物种分数。但是,如果我们在素食者中具有以下功能,您可以添加这些分数:

#' Add Species Scores to Ordination Results
#'
#' @param object Ordination object
#' @param comm Community data
#'
#' @return Function returns the ordination object amended with species
#'     scores.
#'
#' @rdname specscores
#' @export
`specscores` <-
    function(object, comm)
{
    UseMethod("specscores")
}
#' importFrom vegan decostand
#'
#' @rdname specscores
#' @export
`specscores.dbrda` <-
    function(object, comm)
{
    comm <- scale(comm, center = TRUE, scale = FALSE)
    if (!is.null(object$pCCA) && object$pCCA$rank > 0) {
        comm <- qr.resid(object$pCCA$QR, comm)
    }
    if (!is.null(object$CCA) && object$CCA$rank > 0) {
        v <- crossprod(comm, object$CCA$u)
        v <- decostand(v, "normalize", MARGIN = 2)
        object$CCA$v <- v
        comm <- qr.resid(object$CCA$QR, comm)
    }
    if (!is.null(object$CA) && object$CA$rank > 0) {
        v <- crossprod(comm, object$CA$u)
        v <- decostand(v, "normalize", MARGIN = 2)
        object$CA$v <- v
    }
    object
}
将物种得分添加到排序结果中 #' #“@param对象排序对象” #“@param comm社区数据 #' #“@return函数返回用物种修改的排序对象 #“得分。 #' #“@rdname specscores” #“@出口
`specscores`In
vegan_2.5-0
缺失物种得分记录在
?cca.object
中(可能不是第一个查看的地方)。我确实没有在
dbrda
中实现物种分数,因为我不知道这是否可以正确实现(这同样适用于
capscale
,但我计划用物种分数来否定
capscale
)。物种分数可以通过复制
capscale
code轻松实现,但我不确定是否应该这样做。亲爱的Gavin和Jari。谢谢你的回答,完美地回答了我的问题。排序图中的物种分数有助于诊断组合之间的基本差异。许多使用R或Primer的出版物以及数字生态学等书籍中都使用了R,这表明社区更依赖于此功能
#' Add Species Scores to Ordination Results
#'
#' @param object Ordination object
#' @param comm Community data
#'
#' @return Function returns the ordination object amended with species
#'     scores.
#'
#' @rdname specscores
#' @export
`specscores` <-
    function(object, comm)
{
    UseMethod("specscores")
}
#' importFrom vegan decostand
#'
#' @rdname specscores
#' @export
`specscores.dbrda` <-
    function(object, comm)
{
    comm <- scale(comm, center = TRUE, scale = FALSE)
    if (!is.null(object$pCCA) && object$pCCA$rank > 0) {
        comm <- qr.resid(object$pCCA$QR, comm)
    }
    if (!is.null(object$CCA) && object$CCA$rank > 0) {
        v <- crossprod(comm, object$CCA$u)
        v <- decostand(v, "normalize", MARGIN = 2)
        object$CCA$v <- v
        comm <- qr.resid(object$CCA$QR, comm)
    }
    if (!is.null(object$CA) && object$CA$rank > 0) {
        v <- crossprod(comm, object$CA$u)
        v <- decostand(v, "normalize", MARGIN = 2)
        object$CA$v <- v
    }
    object
}