白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

时间:2021-08-03 22:42:33

在ArcGIS里面,空间权重矩阵很容易做,但是遗留下来的浓浓的C时代的风采,让数据的存储变成了不可读的二进制,所以想看看效果,还得通过各种手段来实现。

所以今天我们专门来讲讲用R语言如何做空间权重矩阵,首先给出的一个好消息:R语言的空间权重矩阵是明码,是明码的,是明码的!(重要的消息说三遍,此处应有掌声)

不但空间权重矩阵是明码标识,可以阅读,R语言还提供非常简单可行的可视化方法,下面我们来看一个例子:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

如果是纯粹的共点共边的空间关系的话,*和海南与大陆没有接壤,所以就变成了孤岛,那么我们就需要手动增加*与浙江、福建、广东的关系,以及海南与广东广西的关系,最后形成了第二幅增加自定义关系的空间权重矩阵。

那么下面来简单介绍一下R语言的空间权重矩阵是怎么做的。

R语言的空间权重矩阵主要采用的包是“spdep”这个包,包的全称是:Spatial Dependence(空间相关性),主要就是用来进行空间统计中空间相关性的研究的包,包括了空间权重、全局及局部莫兰指数、聚类与离散分析等的一些功能。是R语言中空间统计相关内容里面最关键的一个包。大家有兴趣的去cran-r的官网上去看它想相应介绍:
https://cran.r-project.org/web/packages/spdep/

这个包非常强大(嗯,也非常大,文档就有230多页,能打出一本书来了)……所以我们本次仅极少空间权重矩阵部分。

首先介绍做简单的面要素空间关系里面的共点共边,表示如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

i的临近要素,是所有的j,他们之间的只要共有一个点或者一条边,都被认为是临近要素。也就是我上面图1里面的共点共边。

代码片段方法如下(具体实现的代码和数据,可以通过关注公众号,发消息获取邮箱,然后通过发送邮件获取):
#将中国的省级行政区划读取为ploygondata <- readShapePoly(paste(path,"CNPG_S.shp",sep =""))
#定义投影为wgs84
proj4string(data) <- "+proj=longlat +datum=WGS84"
#定义唯一标识符,用省级行政区划的编码
IDs <- data@data$Code
#获取每个面状要素的中心点
map_crd <- coordinates(data)
#绘制面要素和各省面要素的中心点
plot(data)
points(map_crd,col='red',pch='*')

#使用poly2nb方法,定义空间关系,现在共点共边(queen =T)
w_cn <- poly2nb(data, queen=T)

绘制出来的中国地图和中心点如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

设置queen = T,表示采用的就是共点共边(也叫作queen's Case,用的国际象棋里面的皇后的走法),定义好了空间权重关系矩阵之后,w_cn对象如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

w_cn是一个nb对象(neighbours list object ),实际上是一个整型矢量的列表,里面的结构如下:
要素序列[临近数量]:每个临近要素的序列号

比如北京的序列是1,然后获取北京的序列,利用北京的序列去获取它的临近要素
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

计算出来的nb对象,还仅仅是一个临近要素列表,还并非空间权重矩阵,所以还需要通过一个命令,把这个列表转换问空间权重矩阵:
w_cn_mat <- nb2listw(w_cn, style="W", zero.policy=TRUE)

运行完了之后,会生成以个空间权重矩阵对象,这个对象结构如下:
第一部分,是空间关系列表:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

这个内容,与前面的nb对象是一样。

第二部分,是对象的一些属性,可以当成描述信息来看:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

第三部分,就是空间权重部分了:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

因为采用的是共点共边,认为每个临近要素的权重是一样的,这里的空间权重就是对有多少个临近要素进行均分。

那么这个空间权重矩阵就可以直接通过plot进行绘制了,如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)

整个空间关系和空间权重矩阵表示,在R语言里面的定义和显示就完成了,如何自定义直接的空间权重矩阵和关系,我们下节继续。