Neighbors and Adjacency (Spatial Weight) Matrices

Important note

In what follows, I describe some modules for spatial data that were available before Stata introduced their own sp commands for the analysis of spatial data in version 15.

As far as I can judge, the modules I describe here are still available and working. For information about the inbuilt sp commands, see Stata's help system (help sp will provide access to the introductory remarks and an overview of all available commands).

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


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.

Reading weight matrices

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.


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.

Additional commands

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:

spmat summarize name-of-matrix, links detail

Matrices can be saved to disk:

spmat save name-of-matrix using name-for-saving.spmat

They may be exported to an ASCII file:

spmat export name-of-matrix using name-for-saving.txt

© W. Ludwig-Mayerhofer, Stata Guide | Last update: 19 Aug 2016