Matrix exponential spatial lag model
The function fits a matrix exponential spatial lag model, using optim
to find the value of alpha
, the spatial coefficient.
lagmess(formula, data = list(), listw, zero.policy = NULL, na.action = na.fail, q = 10, start = -2.5, control=list(), method="BFGS", verbose=NULL, use_expm=FALSE)
formula |
a symbolic description of the model to be fit. The details
of model specification are given for |
data |
an optional data frame containing the variables in the model. By default the variables are taken from the environment which the function is called. |
listw |
a |
zero.policy |
default NULL, use global option value; if TRUE assign zero to the lagged value of zones without
neighbours, if FALSE assign NA - causing |
na.action |
a function (default |
q |
default 10; number of powers of the spatial weights to use |
start |
starting value for numerical optimization, should be a small negative number |
control |
control parameters passed to |
method |
default |
verbose |
default NULL, use global option value; if TRUE report function values during optimization |
use_expm |
default FALSE; if TRUE use |
The underlying spatial lag model:
y = rho W y + X beta + e
where rho is the spatial parameter may be fitted by maximum likelihood. In that case, the log likelihood function includes the logartithm of cumbersome Jacobian term |I - rho W|. If we rewrite the model as:
S y = X beta + e
we see that in the ML case S y = (I - rho W) y. If W is row-stochastic, S may be expressed as a linear combination of row-stochastic matrices. By pre-computing the matrix [y Wy, W^2y, ..., W^{q-1}y], the term S y (alpha) can readily be found by numerical optimization using the matrix exponential approach. alpha and rho are related as rho = 1 - exp(alpha), conditional on the number of matrix power terms taken q
.
The function returns an object of class Lagmess
with components:
lmobj |
the |
alpha |
the spatial coefficient |
alphase |
the standard error of the spatial coefficient using the numerical Hessian |
rho |
the value of |
bestmess |
the object returned by |
q |
the number of powers of the spatial weights used |
start |
the starting value for numerical optimization used |
na.action |
(possibly) named vector of excluded or omitted observations if non-default na.action argument used |
nullLL |
the log likelihood of the aspatial model for the same data |
Roger Bivand Roger.Bivand@nhh.no and Eric Blankmeyer
J. P. LeSage and R. K. Pace (2007) A matrix exponential specification. Journal of Econometrics, 140, 190-214; J. P. LeSage and R. K. Pace (2009) Introduction to Spatial Econometrics. CRC Press, Chapter 9.
#require(spdep, quietly=TRUE) data(baltimore, package="spData") baltimore$AGE <- ifelse(baltimore$AGE < 1, 1, baltimore$AGE) lw <- spdep::nb2listw(spdep::knn2nb(spdep::knearneigh(cbind(baltimore$X, baltimore$Y), k=7))) obj1 <- lm(log(PRICE) ~ PATIO + log(AGE) + log(SQFT), data=baltimore) spdep::lm.morantest(obj1, lw) spdep::lm.LMtests(obj1, lw, test="all") system.time(obj2 <- lagmess(log(PRICE) ~ PATIO + log(AGE) + log(SQFT), data=baltimore, listw=lw)) (x <- summary(obj2)) coef(x) system.time(obj2a <- lagmess(log(PRICE) ~ PATIO + log(AGE) + log(SQFT), data=baltimore, listw=lw, use_expm=TRUE)) summary(obj2a) obj3 <- lagsarlm(log(PRICE) ~ PATIO + log(AGE) + log(SQFT), data=baltimore, listw=lw) summary(obj3) data(boston, package="spData") lw <- spdep::nb2listw(boston.soi) gp2 <- lagsarlm(log(CMEDV) ~ CRIM + ZN + INDUS + CHAS + I(NOX^2) + I(RM^2) + AGE + log(DIS) + log(RAD) + TAX + PTRATIO + B + log(LSTAT), data=boston.c, lw, method="Matrix") summary(gp2) gp2a <- lagmess(CMEDV ~ CRIM + ZN + INDUS + CHAS + I(NOX^2) + I(RM^2) + AGE + log(DIS) + log(RAD) + TAX + PTRATIO + B + log(LSTAT), data=boston.c, lw) summary(gp2a)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.