-## mantel.test.R (2006-07-28)
+## mantel.test.R (2012-03-16)
## Mantel Test for Similarity of Two Matrices
-## Copyright 2002-2006 Ben Bolker and Julien Claude
+## Copyright 2002-2011 Ben Bolker and Julien Claude
## This file is part of the R-package `ape'.
## See the file ../COPYING for licensing issues.
lower.triang <- function(m)
{
- d <- dim(m)
- if (d[1] != d[2]) print("Warning: non-square matrix")
+ if (diff(dim(m))) print("Warning: non-square matrix")
m[col(m) <= row(m)]
}
-mantel.test <- function (m1, m2, nperm = 1000, graph = FALSE, ...)
+mantel.test <- function(m1, m2, nperm = 999, graph = FALSE,
+ alternative = "two.sided", ...)
{
+ alternative <- match.arg(alternative, c("two.sided", "less", "greater"))
n <- nrow(m1)
realz <- mant.zstat(m1, m2)
nullstats <- replicate(nperm, mant.zstat(m1, perm.rowscols(m2, n)))
- pval <- sum(nullstats > realz)/nperm
+ pval <- switch(alternative,
+ "two.sided" = 2 * min(sum(nullstats >= realz), sum(nullstats <= realz)),
+ "less" = sum(nullstats <= realz),
+ "greater" = sum(nullstats >= realz))
+ pval <- (pval + 1) / (nperm + 1) # 'realz' is included in 'nullstats'
if (graph) {
plot(density(nullstats), type = "l", ...)
abline(v = realz)
}
- list(z.stat = realz, p = pval)
+ list(z.stat = realz, p = pval, alternative = alternative)
}