It involves spatial dependency, but I do not know how right.
It involves spatial dependency, but I do not know how right.
The argument listw
is an object of class listw
created for example by nb2listw , as quoted in the comment by Tomás Barcellos .
Usage example:
nb2listw(neighbours, glist=NULL, style="W", zero.policy=FALSE)
Spatial weights for neighbors lists "Space Weights for Neighbor Lists"
The function complements a list of neighbors with spatial weights for the chosen encoding scheme.
The function complements a neighbors list with spatial weights for the chosen encoding scheme.
neighbors is an object of class nb
Example of using nb2listw:
data(columbus)
cards <- card(col.gal.nb)
col.w <- nb2listw(col.gal.nb)
plot(cards, unlist(lapply(col.w$weights, sum)),xlim=c(0,10),
ylim=c(0,10), xlab="number of links", ylab="row sums of weights")
col.b <- nb2listw(col.gal.nb, style="B")
points(cards, unlist(lapply(col.b$weights, sum)), col="red")
col.c <- nb2listw(col.gal.nb, style="C")
points(cards, unlist(lapply(col.c$weights, sum)), col="green")
col.s <- nb2listw(col.gal.nb, style="S")
points(cards, unlist(lapply(col.s$weights, sum)), col="blue")
legend(x=c(0, 1), y=c(7, 9), legend=c("W", "B", "C", "S"),
col=c("black", "red", "green", "blue"), pch=rep(1,4))
dlist <- nbdists(col.gal.nb, coords)
dlist <- lapply(dlist, function(x) 1/x)
col.w.d <- nb2listw(col.gal.nb, glist=dlist)
summary(unlist(col.w$weights))
summary(unlist(col.w.d$weights))
Example using multispati
:
if (require(spdep, quiet = TRUE) & require(ade4, quiet = TRUE)) {
data(mafragh)
maf.xy <- mafragh$xy
maf.flo <- mafragh$flo
maf.listw <- nb2listw(mafragh$nb)
if(adegraphicsLoaded()) {
g1 <- s.label(maf.xy, nb = mafragh$nb, plab.cex = 0.75)
} else {
s.label(maf.xy, neig = mafragh$neig, clab = 0.75)
}
maf.coa <- dudi.coa(maf.flo,scannf = FALSE)
maf.coa.ms <- multispati(
maf.coa,
maf.listw,
scannf = FALSE,
nfposi = 2,
nfnega = 2
)
maf.coa.ms
### detail eigenvalues components
fgraph <- function(obj){
# use multispati summary
sum.obj <- summary(obj)
# compute Imin and Imax
Ibounds <- moran.bounds(eval(as.list(obj$call)$listw))
Imin <- Ibounds[1]
Imax <- Ibounds[2]
I0 <- -1/(nrow(obj$li)-1)
# create labels
labels <- lapply(1:length(obj$eig),function(i) bquote(lambda[.(i)]))
# draw the plot
xmax <- eval(as.list(obj$call)$dudi)$eig[1]*1.1
par(las=1)
var <- sum.obj[,2]
moran <- sum.obj[,3]
plot(x=var,y=moran,type='n',xlab='Inertia',ylab="Spatial autocorrelation (I)",
xlim=c(0,xmax),ylim=c(Imin*1.1,Imax*1.1),yaxt='n')
text(x=var,y=moran,do.call(expression,labels))
ytick <- c(I0,round(seq(Imin,Imax,le=5),1))
ytlab <- as.character(round(seq(Imin,Imax,le=5),1))
ytlab <- c(as.character(round(I0,1)),as.character(round(Imin,1)),
ytlab[2:4],as.character(round(Imax,1)))
axis(side=2,at=ytick,labels=ytlab)
rect(0,Imin,xmax,Imax,lty=2)
segments(0,I0,xmax,I0,lty=2)
abline(v=0)
title("Spatial and inertia components of the eigenvalues")
}
fgraph(maf.coa.ms)
## end eigenvalues details
if(adegraphicsLoaded()) {
g2 <- s1d.barchart(maf.coa$eig, p1d.hori = FALSE, plot = FALSE)
g3 <- s1d.barchart(maf.coa.ms$eig, p1d.hori = FALSE, plot = FALSE)
g4 <- s.corcircle(maf.coa.ms$as, plot = FALSE)
G1 <- ADEgS(list(g2, g3, g4), layout = c(1, 3))
} else {
par(mfrow = c(1, 3))
barplot(maf.coa$eig)
barplot(maf.coa.ms$eig)
s.corcircle(maf.coa.ms$as)
par(mfrow = c(1, 1))
}
if(adegraphicsLoaded()) {
g5 <- s.value(maf.xy, -maf.coa$li[, 1], plot = FALSE)
g6 <- s.value(maf.xy, -maf.coa$li[, 2], plot = FALSE)
g7 <- s.value(maf.xy, maf.coa.ms$li[, 1], plot = FALSE)
g8 <- s.value(maf.xy, maf.coa.ms$li[, 2], plot = FALSE)
G2 <- ADEgS(list(g5, g6, g7, g8), layout = c(2, 2))
} else {
par(mfrow = c(2, 2))
s.value(maf.xy, -maf.coa$li[, 1])
s.value(maf.xy, -maf.coa$li[, 2])
s.value(maf.xy, maf.coa.ms$li[, 1])
s.value(maf.xy, maf.coa.ms$li[, 2])
par(mfrow = c(1, 1))
}
w1 <- -maf.coa$li[, 1:2]
w1m <- apply(w1, 2, lag.listw, x = maf.listw)
w1.ms <- maf.coa.ms$li[, 1:2]
w1.msm <- apply(w1.ms, 2, lag.listw, x = maf.listw)
if(adegraphicsLoaded()) {
g9 <- s.match(w1, w1m, plab.cex = 0.75, plot = FALSE)
g10 <- s.match(w1.ms, w1.msm, plab.cex = 0.75, plot = FALSE)
G3 <- cbindADEg(g9, g10, plot = TRUE)
} else {
par(mfrow = c(1,2))
s.match(w1, w1m, clab = 0.75)
s.match(w1.ms, w1.msm, clab = 0.75)
par(mfrow = c(1, 1))
}
maf.pca <- dudi.pca(mafragh$env, scannf = FALSE)
multispati.randtest(maf.pca, maf.listw)
maf.pca.ms <- multispati(maf.pca, maf.listw, scannf=FALSE)
plot(maf.pca.ms)
}
References: