isomap {vegan}R Documentation

Isometric Feature Mapping Ordination


The function performs isometric feature mapping which consists of three simple steps: (1) retain only some of the shortest dissimilarities among objects, (2) estimate all dissimilarities as shortest path distances, and (3) perform metric scaling (Tenenbaum et al. 2000).


isomap(dist, ndim=10, ...)
isomapdist(dist, epsilon, k, path = "shortest", fragmentedOK =FALSE, ...)
## S3 method for class 'isomap':
summary(object, axes = 4, ...)
## S3 method for class 'isomap':
plot(x, net = TRUE, n.col = "gray", ...)
rgl.isomap(x, web = "white", ...)


dist Dissimilarities.
ndim Number of axes in metric scaling (argument k in cmdscale).
epsilon Shortest dissimilarity retained.
k Number of shortest dissimilarities retained for a point. If both epsilon and k are given, epsilon will be used.
path Method used in stepacross to estimate the shortest path, with alternatives "shortest" and "extended".
fragmentedOK What to do if dissimilarity matrix is fragmented. If TRUE, analyse the largest connected group, otherwise stop with error.
x, object An isomap result object.
axes Number of axes displayed.
net Draw the net of retained dissimilarities.
n.col Colour of drawn net segments.
web Colour of the web in rgl graphics.
... Other parameters passed to functions.


The function isomap first calls function isomapdist for dissimilarity transformation, and then performs metric scaling for the result. All arguments to isomap are passed to isomapdist. The functions are separate so that the isompadist transformation could be easily used with other functions than simple linear mapping of cmdscale.

Function isomapdist retains either dissimilarities equal or shorter to epsilon, or if epsilon is not given, at least k shortest dissimilarities for a point. Then a complete dissimilarity matrix is reconstructed using stepacross using either flexible shortest paths or extended dissimilarities (for details, see stepacross).

De'ath (1999) actually published essentially the same method before Tenenbaum et al. (2000), and De'ath's function is available in xdiss in package mvpart. The differences are that isomap introduced the k criterion, whereas De'ath only used epsilon criterion. In practice, De'ath also retains higher proportion of dissimilarities than typical isomap.

In addition to the standard plot function, function rgl.isomap can make dynamic 3D plots that can be rotated on the screen. The functions is based on ordirgl, but it adds the connecting lines. The function passes extra arguments to scores and ordirgl functions so that you can select axes, or define colours and sizes of points.


Function isomapdist returns a dissimilarity object similar to dist. Function isomap returns an object of class isomap with plot and summary methods. The plot function returns invisibly an object of class ordiplot. Function scores can extract the ordination scores.


Tenenbaum et al. (2000) justify isomap as a tool of unfolding a manifold (e.g. a 'Swiss Roll'). Even with a manifold structure, the sampling must be even and dense so that dissimilarities along a manifold are shorter than across the folds. If data do not have such a manifold structure, the results are very sensitive to parameter values.


Jari Oksanen


De'ath, G. (1999) Extended dissimilarity: a method of robust estimation of ecological distances from high beta diversity data. Plant Ecology 144, 191–199

Tenenbaum, J.B., de Silva, V. & Langford, J.C. (2000) A global network framework for nonlinear dimensionality reduction. Science 290, 2319–2323.

See Also

The underlying functions that do the proper work are stepacross, distconnected and cmdscale. Package mvpart provides a parallel (but a bit different) implementation (xdiss). Moreover, vegan function metaMDS may trigger stepacross transformation, but usually only for longest dissimilarities. The plot method of vegan minimum spanning tree function (spantree) has even more extreme way of isomapping things.


## The following examples also overlay minimum spanning tree to
## the graphics in red.
op <- par(mar=c(4,4,1,1)+0.2, mfrow=c(2,2))
dis <- vegdist(BCI)
tr <- spantree(dis)
pl <- ordiplot(cmdscale(dis), main="cmdscale")
lines(tr, pl, col="red")
ord <- isomap(dis, k=3)
pl <- plot(ord, main="isomap k=3")
lines(tr, pl, col="red")
pl <- plot(isomap(dis, k=5), main="isomap k=5")
lines(tr, pl, col="red")
pl <- plot(isomap(dis, epsilon=0.45), main="isomap epsilon=0.45")
lines(tr, pl, col="red")
## The following command requires user interaction
## Not run: 
rgl.isomap(ord, size=4, color="hotpink")
## End(Not run)

[Package vegan version 1.16-32 Index]