r - 空间权重 : asymmetric adjacency matrix?

标签 r gis spatial adjacency-matrix

我正在创建一个邻接矩阵来在 R 中进行空间分析。数据是美国大陆的所有县。我从美国人口普查老虎文件中获得了县空间多边形。

我能够创建邻居列表,并且它是对称的。但是当我将其转换为邻接矩阵时,它不是对称的。这是一个问题,因为我的目标是使用 ngspatial::autologistic 运行空间自逻辑模型。 ,我得到一个错误,我必须提供一个对称的二进制邻接矩阵。

这是我创建邻接矩阵的 R 代码:

us<-readShapeSpatial("County_2010Census_DP1.shp")
#Trim out counties outside of continental US
us2<-us[!substr(us$GEOID10,1,2)%in%c('02','60','66','78','15','72'),]
us2.nb = poly2nb(us2)
is.symmetric.nb(us2.nb) #Comes out true
us2.adj = nb2mat(us2.nb, style="B",zero.policy=F)
isSymmetric(us2.adj) #comes out false

顺便说一句,我可以使用 splogit有了这个邻接矩阵没有问题。我不是空间分析专家,所以我不能说我知道这些命令中发生了什么。

最佳答案

矩阵us2.adj是对称的。问题出在测试上。事实证明

isSymmetric(us2.adj)

用途 all.equal(...)用它的转置测试矩阵的相等性,和 all.equal(...)检查属性以及值。 nb2mat(...)创建一个矩阵,行名称设置为多边形 ID,列名称未设置。所以all.equal(...)返回 FALSE因此isSymmetric(...)也是如此.显然,autologistic(...)函数使用相同的测试。
us2.adj <- nb2mat(us2.nb, style="B",zero.policy=F)
isSymmetric(us2.adj)
# [1] FALSE
isSymmetric(us2.adj,check.attributes=FALSE)
# [1] TRUE

简单的解决方案是将列名设置为行名,或者将行名设置为 NULL .
x <- us2.adj
colnames(x) <- rownames(x)
isSymmetric(x)
# [1] TRUE
y <- us2.adj
rownames(y) <- NULL
isSymmetric(y)
# [1] TRUE

顺便说一句,我认为这个问题在 18 小时内没有得到解答的原因是您没有提供指向 shapefile 的链接。如果您不提供可重复的示例,则成员倾向于忽略或否决该问题。见 this link说明

关于r - 空间权重 : asymmetric adjacency matrix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304797/

相关文章:

r - 更改地层图(即多面板图)上的 x 轴限制

r - 如何在 R 中的空间叠加中包含夏威夷和阿拉斯加

r - 如何使用 sf 按因子从点构造/绘制多边形的凸包?

r - 计算为分类变量调整的偏相关

r - 如何通过终端在 ubuntu 16.10 上安装 R?

r - 在同一个 ggplot 中绘制离散和连续尺度

javascript - 将图 block 的 xyz 坐标转换为经度/纬度

r - 使用另一个多边形裁剪/剪辑复杂的 SpatialPolygonsDataFrame 的最快方法

algorithm - 不同数据结构上最近邻查询的运行时间比较

正则表达式直到括号第一次出现为止