Skip to content
Prev 2116 / 7420 Next

Is adonis the right test for me?

Hai Kari,

as far as i know SimPer is not available in vegan.

I have written some code for myself a few months ago to do this.
I think its doing the job, but coding is poor (3 for-loops...).


- Eduard


############################################################
######         SIMPER      , Clarke (1993)                           
            ########
###### V 0.3   29.04.2011  Sz?cs, Eduard                                 
########
############################################################


###############
#### Code #####
###############

simper <- function(comm, groups, select){
   group.a <- as.matrix(comm[groups == select[1], ])
   group.b <- as.matrix(comm[groups == select[2], ])
   n.a <- nrow(group.a)
   n.b <- nrow(group.b)
   P <- ncol(comm)
   me <- matrix(ncol = P)
   md <- matrix(ncol = P)
   contr <- matrix(ncol = P, nrow = n.a * n.b)
   for(j in 1:n.b) {
       for(k in 1:n.a) {
           for(s in 1:P) {
               md[s] <- abs(group.a[k, s] - group.b[j, s])
               me[s] <- group.a[k, s] + group.b[j, s]
               a <- rowSums(me)
               c <- md / a
               contr[(j-1)*n.a+k, ] <- md / a
   }}}
   av.contr <- apply(contr, 2, mean)*100
   ov.av.dis <- sum(av.contr)
   sdi <- apply(contr, 2, sd)
   sdi.av <- sdi / av.contr
   av.a <- colMeans(group.a)
   av.b <- colMeans(group.b)
   dat <- data.frame(av.contr, sdi, sdi.av, av.a, av.b)
   dat <- dat[order(dat$av.contr, decreasing = TRUE),]
   cum <-  cumsum(dat$av.contr / ov.av.dis)*100
   out <- data.frame(dat, cum)
   out
}


###############
#### Usage ####
###############

#  simper(comm, groups, select)

# Arguments :
############

#   * comm : commumity data. species in columns, observations in rows
#   * groups : vector containing treatment per observation
#   * select : vector with length 2, indicating the two groups to compare


# Output :
##########

#   * av.contr : average contribution to overall similarity
#   * sdi : standard deviation of contribution
#   * sdi.va : ratio mean / sd = sdi / av.contr.
#   * av.a : average abundance in first group
#   * av.b : average abundance in second group
#   * cum : cumulative contribution


#################
#### Example ####
#################

require(vegan)
data(dune)
data(dune.env)
adonis(dune ~ Management, data=dune.env, permutations=99)
levels(dune.env$Management)
simper(dune, dune.env$Management, c("BF", "SF"))




Am 29.04.2011 06:34, schrieb Kari Lintulaakso: