isomap {vegan} | R Documentation

## Isometric Feature Mapping Ordination

### Description

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 dissimilarites as shortest path distances, and (3) perform metric scaling (Tenenbaum et al. 2000).

### Usage

    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", ...)

### Arguments

`dist` | Dissimilariies.
`ndim` | Number of axes in metric scaling (argument `k` in `cmdscale`).
`epsilon` | Shortest dissimilarity retained.
`k` | Number of shortest dissimilariteis 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.
`...` | Other parameters passed to functions.

### Details

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`.

### Value

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.

### Note

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.

### Author(s)

Jari Oksanen

### References

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.

### Examples

    ## 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))
    data(BCI)
    dis <- vegdist(BCI)
    tr <- spantree(dis)
    pl <- ordiplot(cmdscale(dis), main="cmdscale")
    lines(tr, pl, col="red")
    ord <- isomap(dis, k=3)
    ord
    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")
    par(op)

[Package vegan version 1.8-8 Index]