niche.width <-
function(mat, method = c("shannon", "levins")) {
### Leven 1968 = inverse simpson
niche.width.levins <-
function(mat) {
Bi <- c()
for (i in 1:ncol(mat)) {
nij <- mat[, i]
nij <- nij[nij > 0]
pij <- nij / sum(nij)
Bi[i] <- 1 / sum(pij^2)
}
Bi <- as.data.frame(t(Bi))
colnames(Bi) <- colnames(mat)
return(Bi)
}
### Shannon
niche.width.shannon <-
function(mat) {
Bi <- c()
for (i in 1:ncol(mat)) {
nij <- mat[, i]
nij <- nij[nij > 0]
pij <- nij / sum(nij)
Bi[i] <- -sum(pij * log(pij))
}
Bi <- as.data.frame(t(Bi))
colnames(Bi) <- colnames(mat)
return(Bi)
}
match.arg(method)
mat <- na.omit(mat)
if (!is.data.frame(mat)) {
mat <- as.data.frame(mat)
}
if (ncol(mat) < 2) {
stop("The input dataset contains less than two species, cannot compute niche overlap")
}
match.arg(method)
if (method == "shannon") {
result <- niche.width.shannon(mat)
} else {
if (method == "levins") {
result <- niche.width.levins(mat)
}
}
return(result)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.