## Computing the “Multivariate Environmental Similarity Surfaces” (MESS) index in R

***edit oct 03 2012 ***

The mess function is now part of the dismo package developped by Robert J. Hijmans, Steven Phillips, John Leathwick and Jane Elith (dismo 0.7-23)***

This post is about the computation of the “Multivariate Environmental Similarity Surfaces” aka MESS in R. The MESS index was proposed by Elith et al (2010) [Methods in Ecology & Evolution 2010, 1, 330–342]. MESS can be computed with the Maxent software but I wanted to perform all my data treatments within R/GRASS environment. For that reason I wrote a `R`

function called `mess.R`

.

Note that the function requires the `R`

package `raster`

developed by R. Hijmans and J. van Etten. Both the function and a tutorial can be downloaded for my site.

The present post provides some explanations, the `mess.R `

function and some examples.

**1- What is MESS?**

MESS stands for Multivariate Environmental Similarity Surfaces. It is an index of similarity reporting the closeness of a point described by a set of environmental attributes to the distribution of these attributes within a population of reference points. The MESS approach has been proposed by Elith et al (2010). It works as BIOCLIM does but provides negative values which allows one to differentiate levels of dissimilarity. This is particularly valuable when considering points associated to values lying outside the range of the reference points.

**2-The mess.R function**

mess<-function(X,V,full=TRUE) { messi<-function(p,v){ niinf<-length(which(v<=p)) f if(f==0) simi<-100*(p-min(v))/(max(v)-min(v)) if(0 if(50<=f & f<100) simi<-2*(100-f) if(f==100) simi<-100*(max(v)-p)/(max(v)-min(v)) return(simi) } E<-extract(x=X,y=1:ncell(X)) r_mess<-X for (i in 1:(dim(E)[2])) { e<-data.frame(E[,i]) ; v<-V[,i] r_mess[[i]][]<-apply(X=e, MARGIN=1, FUN=messi, v=v) } rmess<-r_mess[[1]] E<-extract(x=r_mess,y=1:ncell(r_mess[[1]])) rmess[]<-apply(X=E, MARGIN=1, FUN=min) if(full==TRUE) { out layerNames(out)<-c(layerNames(X),"mess") } if(full==FALSE) out return(out) }

The function `mess.R`

allows the computation of the MESS index for a set of raster objets. raster objects are defined within the package `raster`

developped by Hijmans & van Etten (2011). `mess.R`

therefore requires that the package `raster`

is properly installed and loaded using the command `library(raster)`

.

**3-Examples**

The following example uses the *Bradypus* data hosted in the package `dismo`

(Hijmans et al., 2012). As with `raster`

, `dismo`

must be installed and loaded.

library(dismo);library(raster) filename bradypus bradypus files ’/ex’, sep=’’), pattern=’grd’, full.names=TRUE ) predictors predictors<-dropLayer(x=predictors,i=9) reference_points<-extract(predictors,bradypus) mess.out<-mess(X=predictors,V=reference_points,full=TRUE) plot(mess.out)

This is the result:

**4-References**

Elith J., Kearney M., & Phillips S. 2010. The art of modelling range-shifting species. Met. Ecol. Evol 1 :330-342.

Hijmans R.J. & van Etten J. (2011). raster : Geographic analysis and modeling with raster data. R package version 1.9-58. http://CRAN.R-project.org/package=raster