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