当我使用函数spdep::cell2nb时, lag.listw 会创建不正确的空间滞后值。我有一个栅格文件,想创建一个新的栅格,其中每个像元都有其相邻像元的平均值(空间滞后值)。
下面的代码创建
- 从头开始的新栅格和
- 使用cell2nb计算邻域矩阵。
- nb2listw构造符合每个邻居值的权重。
- lag.listw创建相邻值的向量
- 最后我使用这个向量来创建一个新的栅格。
代码:
library(raster)
library(spdep)
##raster
r<-raster(nrows=7, ncols=8)
##raster values
v<-rep(0,ncell(r))
i<-sample(1:ncell(r),1)
v[i]<-1
values(r)<-v
plot(r)
##neighbor values
#neighbor list
nb<-cell2nb(nrow=nrow(r),ncol=ncol(r),type="queen")
#spatial weights matrix
nb.w<-nb2listw(nb,style="W", zero.policy=T)
#lagged values
nb.v<-lag.listw(nb.w,values(r),zero.policy=T,NAOK=T)
##new raster
nb.r<-r
values(nb.r)<-nb.v
plot(nb.r)
比较这两个图像很明显,这个方法的值是错误的。
仅当给定的栅格/单元矩阵具有相同数量的行和列时,上述代码才有效。测试:
##raster
r<-raster(nrows=8, ncols=8)
##raster values
v<-rep(0,ncell(r))
i<-sample(1:ncell(r),1)
v[i]<-1
values(r)<-v
plot(r)
##neighbor values
#neighbor list
nb<-cell2nb(nrow=nrow(r),ncol=ncol(r),type="queen")
#spatial weights matrix
nb.w<-nb2listw(nb,style="W", zero.policy=T)
#lagged values
nb.v<-lag.listw(nb.w,values(r),zero.policy=T,NAOK=T)
##new raster
nb.r<-r
values(nb.r)<-nb.v
plot(nb.r)