Neighbors and Adjacency (Spatial Weight) Matrices

There are basically two commands: spatwmat and spmat (from the sppack package).

Spatwmat

This procedure, written by Maurizio Pisati, creates Stata matrices. It will create adjacency (or spatial weight) matrices in two ways: It can read either external files that contain the weights, or it creates the weights from variables (columns) in the current data set that specify the latitude and the longitude. Typically, this latter information will stem from the database file, as this file contains one row per case. Note that the latitude and longitude will represent the centroids of areas; therefore, only distance-based weights (but no weights based on neighborship) can be computed in this case.

spatwmat using "myweights.dta", name(name-of-matrix) eigenval(name-e-matrix) stand

This reads the external matrix myweights.dta and stores it as a standardized, i.e. row-normalized matrix in name-of-matrix; furthermore, a vector of eigenvalues is stored in name-e-matrix.

Creating weight matrices from latitude and longitude

spatwmat, stand name(name-of-matrix) xcoord(lat) ycoord(long) band(0 10)

This creates (standardized) matrix name-of-matrix from coordinates stored in variables lat and long. Option band(0 10) indicates that objects will be considered as neighbors only within the indicated range.

Note that "both the x-coordinate and the y-coordinate must be expressed in projected units, e.g., metres, kilometres, miles, or arbitrary digitizing units", as the help file states.

Spmat

Creating matrices

spmat permits the creation of both contiguity-based and distance-based matrices. They are special objects that, as for as I know, cannot be looked at interactively. However, they may be saved or exported to disk (see below).

spmat contiguity name-of-matrix using mycoord, id(id-var) norm(row)

This uses the coordinates file mycoord to create the row-normalized contiguity matrix name-of-matrix. Two other options for nomalization are available.

spmat idistance name-of-matrix LON LAT , id(id) norm(row)

This uses the current working file with variables LON (for longitude) and LAT (for latitude) to create the inverse distance matrix name-of-matrix.

Eigenvalues, by default, are not stored in separate matrices; rather, the information is added to the matrix. This is achieved with a separate command. Assuming that matrix mymatrix has been created, the following command will add eigenvalues:

spmat eigenvalues mymatrix

However, you can store the eigenvalues in a separate Mata vector as follows:

spmat eigenvalues(name-of-vector) mymatrix

You can obtain basic information about matrices created with spmat: