r - 如何估算空间权重矩阵的缺失邻居(皇后邻接)

标签 r matrix spatial imputation neighbours

我有一个很大的形状文件,包含大约 180.000 个 250m^2 多边形。 我想创建一个空间权重矩阵(女王连续性)。 所以如果是邻居则为 1,否则为 0。 但是,有几个多边形没有任何邻居(岛屿)。

如何为那些没有任何直接邻居的单元估算最近邻居?

(在 R 中使用 sf 或 sp 包)

...................................................... ………………

使用数据样本并绘制它,它看起来像:

sample shape file

然后我可以使用以下代码创建一个 W 矩阵:

Create NB List
sample_queen_nb <- poly2nb(sp.sample, row.names=sp.sample$ID, queen=T)

# Create Weights/list
sample_W.list.queen <- nb2listw(sample_queen_nb, style="W", zero.policy = TRUE) 

# Create Matrix
sample_W.queen <- listw2mat(sample_W.list.queen)

并通过绘制它来检查其连接性:

# Plot ShpPolygons
plot(sp.sample)
# plot weightsmatrix to see connectivity
plot(sample_queen_nb, coords, add=TRUE, col="green", cex=0.5) 

得到这个:

Connectivity Matrix

如您所见 - 有一座未连接的岛屿。我想将这个岛网格单元的邻近单元归咎于该单元。我怎样才能做到这一点?

最佳答案

这就是我所说的制作示例数据集的意思:

> library(spdep);example(columbus)
> sp.sample = columbus[c(1:5,10,23),]
> plot(sp.sample)

首先让我们检查一下是否有断开连接的区域:

> coords = coordinates(sp.sample)
> queen_nb = poly2nb(sp.sample, row.names=sp.sample$ID, queen=TRUE)
> plot(sp.sample);plot(queen_nb, coords, add=TRUE)

enter image description here

这是一个函数,它接受一组区域,计算相同的邻接关系,然后如果有任何区域没有邻居,它会找到最近的邻居并将其添加到邻接对象中:

addnbs <- function(sp.sample){

    queen_nb <- poly2nb(sp.sample, row.names=sp.sample$ID, queen=TRUE)

    count = card(queen_nb)
    if(!any(count==0)){
        return(queen_nb)
    }

    ## get nearest neighbour index, use centroids:
    nnbs = knearneigh(coordinates(sp.sample))$nn

    no_edges_from = which(count==0)
    for(i in no_edges_from){
        queen_nb[[i]] = nnbs[i]
    }
    return(queen_nb)
}

让我们测试一下。

> n2 = addnbs(sp.sample)
> plot(sp.sample);plot(n2, coords, add=TRUE)

enter image description here

关于r - 如何估算空间权重矩阵的缺失邻居(皇后邻接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269254/

相关文章:

r - 安装从 CRAN 中删除的包

r - 查找数据中的连续天数

r - 对所有列应用乘法,但仅对具有正值的行应用乘法

opencv - OpenCV Mat访问和使用Mat_常见错误

php - 在 CakePHP 中保存空间数据

r - geom_point 点手动缩放

r - 带有ggplot2轴标签的下标和上标“-”或“+”? ( ionic 化学符号)

Python 和 scikit 学习 : replace matrix vector product during training with custom call

sql-server-2008 - 计算SQL Server 2008中几个Geometry对象的外边界

r - 通过使用并行处理和/或 plyr/dplyr 提高 gDistance 函数的速度/使用?