R: Find the minimal spanning tree

mstree {spdep} | R Documentation

## Find the minimal spanning tree

### Description

The minimal spanning tree is a connected graph with n nodes and n-1 edges. This is a smaller class of possible partitions of a graph by pruning edges with high dissimilarity. If one edge is removed, the graph is partioned in two unconnected subgraphs. This function implements the algorithm due to Prim (1987).

### Usage

    mstree(nbw, ini = NULL)

### Arguments

`nbw` | An object of `listw` class returned by `nb2listw` function. See this help for details.
`ini` | The initial node in the minimal spanning tree.

### Details

The minimum spanning tree algorithm.

Input a connected graph.

Begin a empty set of nodes.

Add an arbitrary note in this set.

While are nodes not in the set, find a minimum cost edge connecting a node in the set and a node out of the set and add this node in the set.

The set of edges is a minimum spanning tree.

### Value

A matrix with n-1 rows and tree columns. Each row is two nodes and the cost, i. e. the edge and it cost.

### Author(s)

Renato M. Assuncao and Elias T. Krainski

### References

R. C. Prim (1957) Shortest connection networks and some generalisations. In: Bell System Technical Journal, 36, pp. 1389-1401

### Examples

    ### loading data
    require(maptools)
    bh <- readShapePoly(system.file("etc/shapes/bhicv.shp",
          package="spdep")[1])
    ### data padronized
    dpad <- data.frame(scale(bh@data[,5:8]))

    ### neighboorhod list
    bh.nb <- poly2nb(bh)

    ### calculing costs
    lcosts <- nbcosts(bh.nb, dpad)

    ### making listw
    nb.w <- nb2listw(bh.nb, lcosts, style="B")

    ### find a minimum spanning tree
    system.time(mst.bh <- mstree(nb.w,5))

    dim(mst.bh)

    head(mst.bh)
    tail(mst.bh)

    ### the mstree plot
    par(mar=c(0,0,0,0))
    plot(mst.bh, coordinates(bh), col=2,
         cex.lab=.7, cex.circles=0.035, fg="blue")
    plot(bh, border=gray(.5), add=TRUE)

[Package spdep version 0.6-13 Index]