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

前面几节已经将spdep定义空间关系和转换为空间权重矩阵的方法及原理给大家做了个简单的介绍,本章将spdep中的其他几种空间关系做一个简单介绍,就当资讯存档了。

除去触点连接和距离范围(上一节描述的,触点连接加上范围限制,能够设定在一定距离范围内的要素为临近)以外,还有几种经典的空间关系,比如k临近和自然临近。

因为空间要素的特征,触点连接仅在面要素和线要素之间存储,点要素之间是没有触点这种说法的——点与点之间,只存在两种关系:分离与重合。所以除了距离范围方法以外,K临近和自然临近这两种关系就有很大的作用了。

下面我们来看看K临近:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第1张图片
K临近的K,指的是在中心要素旁边,需要指定多少个要素作为我的临近要素,由近至远选择:


这种关系忽略了距离,不管千山万水,一定要找到指定的数量,所以特别适用于点要素和有岛和空洞的面状要素。下面我们用中国省会的点要素作为数据来演示k临近空间关系。

数据如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第2张图片

绘图脚本如下:
library("sp")
library("maptools")
library("spdep")

path <- "E:\\workspace\\IDE\\Rworkspace\\空间分析\\空间权重矩阵\\china\\"

#将中国的省级行政区划读取为ploygon,省会读取成point
cnData <- readShapePoly(paste(path,"CNPG_S.shp",sep =""))
ctData <- readShapePoints(paste(path,"city_SH.shp",sep =""))
#定义投影为wgs84
proj4string(cnData) <- "+proj=longlat +datum=WGS84"
proj4string(ctData) <- "+proj=longlat +datum=WGS84"
#定义唯一标识符,用行政区划的编码
IDs <- ctData@data$ADCODE99
#将名称转换为gbk编码
ctData$NAME <- iconv(ctData$NAME,"UTF-8","GBK")
plot(cnData,border="grey")
plot(ctData,pch=19,cex=1,col='red',add=T)
text(ctData@coords[,1],ctData@coords[,2]+1,labels = ctData$NAME)


设定K=3,首先定义临近关系:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第3张图片

然后查看北京的临近要素:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第4张图片

在knn对象下面,有个叫做nn的数组,就是临近关系信息,表示谁与谁临近。下面将这个knn对象,转换为nb对象:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第5张图片

NB对象的结构,前几节已经说明了,大家有兴趣直接回去翻。

定义完成之后,就可以直接将NB对象给转换为空间权重矩阵了:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第6张图片

绘制关系如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第7张图片

定义及绘图语句如下:
#定义k临近关系,k=3:
kn1 <- knearneigh(ctData, k=3)
w_kn1 <- knn2nb(kn1, row.names=IDs)
w_kn1_mat <- nb2listw(w_kn1)
plot(cnData,border="grey")
plot(ctData,pch=19,cex=1,col='red',add=T)
plot(w_kn1_mat,ctData@coords,add=T,col='blue')
text(ctData@coords[,1],ctData@coords[,2]+1,labels = ctData$NAME)
title("K临近,K=3")

下面定义多个不同的K,来看看:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第8张图片


定义完之后,如果还需要进行反距离权重设定,只需要继续计算距离然后设定glist参数即可,可以参考上一节内容。

当然,这个方法也能够直接给面要素做临近关系矩阵,但是它用的是面状要素的中心点,效果如下:
白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近_第9张图片


但是实际上来说,在面要素中,设定K临近本来就是不太合理的,你怎么知道一个面最后与多少个面临近呢?所以更多时候,K临近主要给点状要素使用,还有的情况就是以面中的关键点来做为K临近进行设定,然后把这个关系再交付给面,比如用省会城市作为K临近设定,然后把临近关系转移给面要素来作为面要素的空间关系。(这个方法很简单,只要数据结构学的比较过关的同学,三五分钟就写完了,我在讲完所有的空间关系之后,将给出示例代码)

K临近就先写到这里,下面做个简单总结:

1、在R语言里面,K临近主要给的点要素来用,如果要对面要素进行K临近设定,需要用面要素的中心点做设定,也就是说,在方法里面,设定的参数,空间要素一定是要面要素的。
2、K临近的设定相对比较死板,用的时候需要特别关注。
3、可以用K临近配合自定义空间关系和距离权重来使用。


下一节,讲spdep中最后一种预设的空间关系:自然临域。
(待续未完)

你可能感兴趣的:(GIS,数据分析)