Оценки видов вегана 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()
не пытается вычислить оценки видов; мог бы, если бы я правильно следовал коду. Также, это может просто отсутствовать функциональность.
На данный момент, NA
s ожидаемый результат от базового ordConstrained
функция, которая реализует все эти модели, и это то, что мы возвращаем, если анализ проводился по матрице различий, что было в отношении этой функции.