関数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)