Оценки видов вегана dbrda являются пустыми, несмотря на предоставленную матрицу сообщества

Я выполнил "Анализ избыточности на основе расстояния" (dbRDA) в R с использованием пакета экологического сообщества веганов. Я хотел бы показать относительный вклад трофических групп (рыб) в различие между образцами (данные об изобилии рыбных комплексов трофического уровня) на графике ординации результатов dbRDA. Т.е. накладывать стрелки и имена групп трофических уровней на график ординации, где длина линии стрелки указывает на относительный вклад в различие. Это должно быть доступно через vegan::scores() функция или хранится вместе с dbrda.model$CCA$v объект, как я понимаю.

Тем не менее, оценки видов являются пустыми (NA) при использовании dbrda(), Я понимаю, что функция dbrda требует, чтобы матрица сообщества была определена внутри функции для обеспечения оценки видов. Я определил это как таковой, но все еще не в состоянии произвести оценки вида. Что меня озадачивает то, что когда я использую capscale() в веганском пакете, с теми же данными о видовом сообществе и переменной окружающей среды и сформулированными в рамках соответствующих функций, составляются оценки видов. Является dbrda в вегане умеет производить видовые оценки? Как эти оценки отличаются от полученных capscale (когда используются те же данные и формула)? Я привожу пример моих данных и использованную формулу. (Я вполне уверен в том, что на самом деле составляю оценки видов после получения, поэтому ограничиваю код созданием оценок видов.)

#Community data matrix (comm.dat): site names = row names, trophic level = column names
>head(comm.dat[1:5,1:4])

            algae/invertebrates corallivore  generalist carnivore herbivore
h_m_r_3m_18                   1           0                    3         0              
h_m_r_3m_22                   6           4                    8        26                     
h_m_r_3s_19                   0           0                    4         0                      
h_m_r_3s_21                   3           0                    7         0                      
l_pm_r_2d_7                   1           0                    5         0   

> str(comm.dat)

num [1:47, 1:8] 1 6 0 3 1 8 11 2 6 9 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:47] "h_m_r_3m_18" "h_m_r_3m_22" "h_m_r_3s_19" "h_m_r_3s_21" ...
..$ : chr [1:8] "algae/invertebrates" "corallivore" "generalist carnivore" "herbivore" ...

# environmental data (env.dat): Already standardised env data.
>head(env.dat[1:5,1:3])

      depth   water.level  time.in
-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

# Dissimilarity distance: Modified Gower (AltGower) with logbase 10 transformation of the community data matrix

> dis.comm.mGow <- vegan::vegdist(x = decostand(comm.dat, "log", logbase = 10), method = "altGower")

# Distance based RDA model: Trophic level data logbase transformed modified Gower distance, constrained against the interaction of dept and water level (tide), and the interaction of depth and time of day sampled`

> m.dbrda <- dbrda(formula = dis.comm.mGow ~ depth*water.level + depth*time.in, data = env.dat, scaling = 2, add = "lingoes", comm = decostand(comm.dat, "log", logbase = 10), dfun = "altGower")

# Check species scores: PROBLEM: No species level scores available

> m.dbrda$CCA$v

      dbRDA1 dbRDA2 dbRDA3 dbRDA4 dbRDA5
[1,]     NA     NA     NA     NA     NA

# OR pull species scores using scores(): Also does not show species scores...

>scrs <- scores(m.dbrda,display="species"); scrs

       dbRDA1 dbRDA2
spe1     NA     NA
attr(,"const")
[1] 6.829551

# when replacing dbrda with capscale, species scores are produced, e.g.


> m.cap <- capscale(formula = dis.comm.mGow ~ depth*water.level + depth*time.in, data = env.dat, scaling = 2, add = "lingoes", comm = decostand(comm.dat, "log", logbase = 10), dfun = "altGower")

> m.cap$CCA$v[1:5,1:3]

                         CAP1        CAP2        CAP3
algae/invertebrates    0.2044097 -0.04598088 -0.37200097
corallivore            0.3832594  0.06416886 -0.27963122
generalist carnivore   0.1357668 -0.08566365 -0.06789812
herbivore              0.5745226 -0.45647341  0.73085661
invertebrate carnivore 0.1987651  0.68036211 -0.19174283

2 ответа

Решение

dbrda() Функция действительно не получает оценки видов. Однако, если бы у нас была следующая функция в vegan, вы могли бы добавить эти оценки:

#' 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
}

Я не знаю, будет ли у нас эта функция (с другими методами), но вы можете использовать ее, если будете использовать ее в своем сеансе.

Это похоже на ошибку в документации или отсутствующую функцию, и я расскажу об этом с Jari на Github.

Тем не менее, обратите внимание, что dbrda() не имеет аргументов comm и следовательно прохождение этого фактически ничего не делает. comm для capscale только.

Если это ошибка документации, то она возникает, потому что мы документируем оба capscale() а также dbrda() на той же странице, но capscale() существовал первым и dbrda() только прибыл позже, и документация была обновлена, чтобы приспособиться к последнему, но это, возможно, не было сделано совершенно, следовательно беспорядок о том, что dbrda() это или не задокументировано, чтобы сделать.

Как он стоит, код позади dbrda() не пытается вычислить оценки видов; мог бы, если бы я правильно следовал коду. Также, это может просто отсутствовать функциональность.

На данный момент, NAs ожидаемый результат от базового ordConstrained функция, которая реализует все эти модели, и это то, что мы возвращаем, если анализ проводился по матрице различий, что было в отношении этой функции.

Другие вопросы по тегам