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