diff --git a/99_HIDDEN_functions.R b/99_HIDDEN_functions.R index b76a9d099e8d53a1f4d0940b4010c4f0c7f8708c..222457151b4639742eb03bd76452cc4ca87d9742 100644 --- a/99_HIDDEN_functions.R +++ b/99_HIDDEN_functions.R @@ -218,5 +218,62 @@ get.SES <- function(obs.df, perm.df, stat="RV") { ## Cracked version of matrix.x from SYNCSA to account for asymmetric binary variables in gowdis +matrix.x <- function (comm, traits, scale = TRUE, ranks = TRUE, ord, notification = TRUE, + ...) +{ + comm <- as.matrix(comm) + vartype <- var.type(traits) + if (any(vartype == "n")) { + stop("\n trait must contain only numeric, binary or ordinal variables \n") + } + if (missing(ord)) { + for (i in 1:length(vartype)) { + if (ranks & vartype[i] == "o") { + traits[, i] <- rank(traits[, i], na.last = "keep") + } + traits[, i] <- as.numeric(traits[, i]) + } + traits <- as.matrix(traits) + } + matrix.w <- sweep(comm, 1, rowSums(comm, na.rm = TRUE), "/") + w.NA <- apply(matrix.w, 2, is.na) + matrix.w[w.NA] <- 0 + if (notification) { + if (any(w.NA)) { + warning("Warning: NA in community data", call. = FALSE) + } + } + x.NA <- apply(traits, 2, is.na) + if (notification) { + if (any(x.NA)) { + warning("Warning: NA in traits matrix", call. = FALSE) + } + } + if (scale) { + dist.traits <- FD::gowdis(traits, ...) + similar.traits <- 1 - as.matrix(dist.traits) + matrix.traits <- 1/colSums(similar.traits, na.rm = TRUE) + matrix.u <- sweep(similar.traits, 1, matrix.traits, "*") + } + else { + dist.traits <- as.matrix(vegan::vegdist(traits, method = "euclidean", + diag = TRUE, upper = TRUE, na.rm = TRUE)) + similar.traits <- 1 - (dist.traits/max(dist.traits, na.rm = TRUE)) + matrix.traits <- 1/colSums(similar.traits, na.rm = TRUE) + matrix.u <- sweep(similar.traits, 1, matrix.traits, "*") + } + u.NA <- apply(matrix.u, 2, is.na) + if (notification) { + if (any(u.NA)) { + warning("Warning: NA in matrix U", call. = FALSE) + } + } + matrix.u[u.NA] <- 0 + matrix.X <- matrix.w %*% matrix.u + return(list(matrix.w = matrix.w, matrix.u = matrix.u, matrix.X = matrix.X)) +} + + +