[R] metaMDS using Dissimilarity matrix

Gavin Simpson gavin.simpson at ucl.ac.uk
Thu May 15 13:41:21 CEST 2008


On Thu, 2008-05-15 at 13:13 +0200, Birgit Lemcke wrote:
> Hello R-user community!
> 
> I am running R 2.7.0 on a Power Book (Tiger). (I am still R and  
> statistics beginner)
> 
> Presently I try to run the function metaMDS (vegan) using an existing  
> dissimilarity-matrix.

The help for metaMDS explicitly says that you can't do this; that is
what the error message says. (which would have been better if translated
into English so I didn't have to resort to reading the sources to see
what the error meant).

> 
> As I would like to start with this matrix I thought I could just give  
> the matrix using the x=  -argument
> 
> 	Test<-metaMDS(x=Dist.Gower)
> 	Fehler in inherits(comm, "dist") : Argument "comm" fehlt (ohne  
> Standardwert)
> 
> But obviously that is not the way it works.

It is not immediately obvious to the new user how to get this to work
where the distance function is not vegdist. (Jari or I should possibly
look to see if we can get metaMDS to work when a dissimilarity matrix is
present - although writing a simple wrapper that works is quite easy, so
maybe we just need an example?) This is compounded by the fact that, by
design, analogue:::distance returns the full dissimilarity matrix (I
should look to rectify that!)

A solution is the following wrapper:

foo <- function(x, method, ...) 
                as.dist(distance(x = x, method = method))

which creates a new local wrapper to distance that includes an explicit
call to as.dist().

We then call metaMDS like so, using the simple example dataset 'train'
from ?distance:

train <- data.frame(matrix(abs(runif(200)), ncol = 10))
rownames(train) <- LETTERS[1:20]
colnames(train) <- as.character(1:10)
metaMDS(train, distance = "mixed", distfun = foo)

So you see it works now.

> 
> The second problem is that it seems that I have zero distance value  
> between some objects what causes a problem in isoMDS (vegan)
> 
> 	Test<-isoMDS(Dist.GowerTest) Fehler in isoMDS(Dist.GowerTest)
> 	 : zero or negative distance between objects 240 and 241

isoMDS is in package MASS, *not* vegan (credit where credit is due!)

metaMDSdist contains argument 'zerodist' to handle this situation. If
you do zerodist = "add", a small amount will be added to 0
dissimilarities. metaMDS passes arguments to metaMDSdist so you could
do:

metaMDS(train, distance = "mixed", distfun = foo, zerodist = "add")

Although be careful to understand the implications of doing this!

HTH

G

> 
> 
> Sorry might be that I am just to stupid to understand the  
> documentation, but could somebody help me anyway.
> 
> Thanks in advance
> 
> B.
> 
> 
> Birgit Lemcke
> Institut für Systematische Botanik
> Zollikerstrasse 107
> CH-8008 Zürich
> Switzerland
> Ph: +41 (0)44 634 8351
> birgit.lemcke at systbot.uzh.ch
> 
> 175 Jahre UZH
> «staunen.erleben.begreifen. Naturwissenschaft zum Anfassen.»
> MNF-Jubiläumsevent für gross und klein.
> 19. April 2008, 10.00 Uhr bis 02.00 Uhr
> Campus Irchel, Winterthurerstrasse 190, 8057 Zürich
> Weitere Informationen http://www.175jahre.uzh.ch/naturwissenschaft
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list