spdep (version 0.6-9)

ME: Moran eigenvector GLM filtering

Description

The Moran eigenvector filtering function is intended to remove spatial autocorrelation from the residuals of generalised linear models. It uses brute force eigenvector selection to reach a subset of such vectors to be added to the RHS of the GLM model to reduce residual autocorrelation to below the specified alpha value. Since eigenvector selection only works on symmetric weights, the weights are made symmetric before the eigenvectors are found (from spdep 0.5-50).

Usage

ME(formula, data, family = gaussian, weights, offset, listw, alpha=0.05, nsim=99, verbose=NULL, stdev=FALSE)

Arguments

formula
a symbolic description of the model to be fit
data
an optional data frame containing the variables in the model
family
a description of the error distribution and link function to be used in the model
weights
an optional vector of weights to be used in the fitting process
offset
this can be used to specify an a priori known component to be included in the linear predictor during fitting
listw
a listw object created for example by nb2listw
alpha
used as a stopping rule to choose all eigenvectors up to and including the one with a p-value exceeding alpha
nsim
number of permutations for permutation bootstrap for finding p-values
verbose
default NULL, use global option value; if TRUE report eigenvectors selected
stdev
if TRUE, p-value calculated from bootstrap permutation standard deviate using pnorm with alternative="greater", if FALSE the Hope-type p-value

Value

An object of class ME_res:

Details

The eigenvectors for inclusion are chosen by calculating the empirical Moran's I values for the initial model plus each of the doubly centred symmetric spatial weights matrix eigenvectors in turn. Then the first eigenvector is chosen as that with the lowest Moran's I value. The procedure is repeated until the lowest remaining Moran's I value has a permutation-based probability value above alpha. The probability value is either Hope-type or based on using the mean and standard deviation of the permutations to calculate ZI based on the stdev argument.

References

Dray S, Legendre P and Peres-Neto PR (2005) Spatial modeling: a comprehensive framework for principle coordinate analysis of neigbbor matrices (PCNM), Ecological Modelling; Griffith DA and Peres-Neto PR (2006) Spatial modeling in ecology: the flexibility of eigenfunction spatial analyses.

See Also

SpatialFiltering, glm

Examples

Run this code
## Not run: 
# example(columbus)
# lmbase <- lm(CRIME ~ INC + HOVAL, data=columbus)
# lagcol <- SpatialFiltering(CRIME ~ 1, ~ INC + HOVAL, data=columbus,
#  nb=col.gal.nb, style="W", alpha=0.1, verbose=TRUE)
# lagcol
# lmlag <- lm(CRIME ~ INC + HOVAL + fitted(lagcol), data=columbus)
# anova(lmlag)
# anova(lmbase, lmlag)
# set.seed(123)
# lagcol1 <- ME(CRIME ~ INC + HOVAL, data=columbus, family="gaussian",
#  listw=nb2listw(col.gal.nb), alpha=0.1, verbose=TRUE)
# lagcol1
# lmlag1 <- lm(CRIME ~ INC + HOVAL + fitted(lagcol1), data=columbus)
# anova(lmlag1)
# anova(lmbase, lmlag1)
# set.seed(123)
# lagcol2 <- ME(CRIME ~ INC + HOVAL, data=columbus, family="gaussian",
#  listw=nb2listw(col.gal.nb), alpha=0.1, stdev=TRUE, verbose=TRUE)
# lagcol2
# lmlag2 <- lm(CRIME ~ INC + HOVAL + fitted(lagcol2), data=columbus)
# anova(lmlag2)
# anova(lmbase, lmlag2)
# example(nc.sids)
# glmbase <- glm(SID74 ~ 1, data=nc.sids, offset=log(BIR74),
#  family="poisson")
# set.seed(123)
# MEpois1 <- ME(SID74 ~ 1, data=nc.sids, offset=log(BIR74),
#  family="poisson", listw=nb2listw(ncCR85_nb, style="B"), alpha=0.2, verbose=TRUE)
# MEpois1
# glmME <- glm(SID74 ~ 1 + fitted(MEpois1), data=nc.sids, offset=log(BIR74),
#  family="poisson")
# anova(glmME, test="Chisq")
# anova(glmbase, glmME, test="Chisq")
# data(hopkins)
# hopkins_part <- hopkins[21:36,36:21]
# hopkins_part[which(hopkins_part > 0, arr.ind=TRUE)] <- 1
# hopkins.rook.nb <- cell2nb(16, 16, type="rook")
# glmbase <- glm(c(hopkins_part) ~ 1, family="binomial")
# set.seed(123)
# MEbinom1 <- ME(c(hopkins_part) ~ 1, family="binomial",
#  listw=nb2listw(hopkins.rook.nb, style="B"), alpha=0.2, verbose=TRUE)
# glmME <- glm(c(hopkins_part) ~ 1 + fitted(MEbinom1), family="binomial")
# anova(glmME, test="Chisq")
# anova(glmbase, glmME, test="Chisq")
# ## End(Not run)

Run the code above in your browser using DataLab