白话空间统计十九:热点分析(下):结果解读以及用R语言实现

时间:2022-05-01 01:29:32

白话空间统计十九:热点分析(下):结果解读以及用R语言实现

 

前文再续,书接上一回。

 

上回说到通过Getis-OrdGi*2004年美国大选进行热点分析,得出了这样一张结果:

白话空间统计十九:热点分析(下):结果解读以及用R语言实现

如果没有看前面文章,就有人会掐指虾神的脖子问:为毛这么难看!人家百度的热点图多

漂亮啊!你这个为毛会这么丑!

 

好吧,再次强调一个说法:百度那个叫做热度图,是专门用来表示人员密集度的,和专业

的热点分析没有关系。

 

英文的HotSpot最早是起源于地质学中的“地幔柱”,专业的解释如下:

 

从软流圈或深部地幔涌起并穿透岩石圈的一股固体物质热塑性流,呈圆柱状者称地幔柱

(热柱),呈羽缕状者称地幔羽(热羽)。地幔柱(热羽柱)在洋底或地表出露时即

为热点,热点(hot spots)是地幔柱(mantle plume)的一种表现。热点上的地热

流值大大高于周围广大地区,甚至会形成孤立的火山。

 

好吧,我知道你们不懂。。。因为我不懂……不过,下面这张图片,就是一个著名

的热点爆发的效果:

白话空间统计十九:热点分析(下):结果解读以及用R语言实现

 

 

看见了吧……哪里有一点点多的意思?概念里面的几个关键字:“在地表露出时”

、“表现”,可以看出,所谓的Hot Spot其实是一种深层次(地底几千公里)的

现象的表现。通过它,地质学家用来研究大陆板块。那么在空间统计里面,我们

也是通过它,来对某些隐藏的信息进行挖掘。


如果说这个概念太专业的话,第二个热点的说明就是你百度第一个出来的东西

“无线热点”,如下图:

白话空间统计十九:热点分析(下):结果解读以及用R语言实现

 

看到这个概念,你再问问自己,用手机连接wifi的时候,是点越多越好么?你一次

能连多少个wifi点?作为一个潜伏在GIS圈子里面的二流计算机专业码农,虾神可以

很负责任的告诉你——你手机搜索到的wifi热点越多,就说那么地方通信质量越差

……信号之间的干扰就越严重!

 

所以,看过这篇博客的同学,从今天开始,再也不要把热点分析和热度图放在一起来聊了。


那么如何解读空间统计中的热点图呢?还是看我们昨天做的那张图:

白话空间统计十九:热点分析(下):结果解读以及用R语言实现

 

我在图片上显著的标识出了一个“热点区域”(红色的)一个“冷点区域”(蓝色)的,

这个热点是什么意思呢?他的意思是,他不但本身的数值很高,而且他周边的数值也很

高,是高值和高值的聚集区。同样的,冷点表示什么呢?冷点表示的是不但本身的值很

低,旁边的值也很低,就是所谓的低值和低值的聚集区。

 

那么可能就有同学问我,冷点,是不是表示小布什的票数目很少呢?看下面这张图:

白话空间统计十九:热点分析(下):结果解读以及用R语言实现

红色表示小布什获胜的区域,蓝色表示克里获胜的区域。

 

当两张图进行对比的时候,我们发现热点和获胜(选票的多少)是没有任何关系的,

唯一的关系,就是热点区域表示没有杂质的获胜。用通俗的话来说,就是:

在这个区域内,只要任何一个区域获胜,那么就可以推定,周边的区域一样会获胜。

同理,冷区也是如此。

 

另外,我们看看在热区和冷区中间,也就是美国中东部地区,基本上是红蓝相间,所

以在热点图上,偏向白色的“随机区域”也就是说,在这个区域内,任何一个区获得

了胜利,周边的区域依然是胜负未定状态。

 

好了,下面来解析一下用R语言如何生成这样的热点分析图:

 

#加载sp包,此包在本脚本中主要用于空间可视化。

library(sp)

 

#加载spdep包,此包用于定义空间关系和实现Getis-Ord Gi* 算法

library(spdep)

 

#生成空间关系矩阵

W_cont_el <- poly2nb(data, queen=T)

#定义空间关系为共点共边即为邻近,即Queen's Case

W_cont_el_mat <- nb2listw(W_cont_el, style="W", zero.policy=TRUE)

 

#定义数据投影为WGS84(EPSG:4326)

proj4string(data) <- CRS("+init=EPSG:4326")

 

#执行Getis-Ord Gi*算法,这里叫做localG,全称就是(local Getis-Ord G 局部Getis-ord G指数)

lg1 <- localG(data$Bush_pct, listw=W_cont_el_mat, zero.policy=T)

 

#将计算完成的Getis-Ord Gi*指数(Z得分)赋值给数据里面的lg1属性

data$lg1 <- lg1[]

 

#定义可视化色带,这里用蓝色-白色-红色这样的色带图

lm.palette <- colorRampPalette(c("blue","white", "red"), space = "rgb")

 

#可视化图形

spplot(data, zcol="lg1", col.regions=lm.palette(20), main="Getis-Ord Gi* (z scores)", pretty=T)

 

最后数据和脚本,在以下地址:

 

http://ncportal.esrichina.com.cn/arcgis/home/item.html?id=8902a0c95de34deaa2db82dc8b4c31f8