Skip to content
Snippets Groups Projects
Commit c4745830 authored by Francesco Sabatini's avatar Francesco Sabatini
Browse files

Cracked matrix.x from SYNCSA to account for asym.bin

parent 66b24bae
No related branches found
No related tags found
No related merge requests found
...@@ -218,5 +218,62 @@ get.SES <- function(obs.df, perm.df, stat="RV") { ...@@ -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 ## 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))
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment