空间分析中的Moran’s I和Geary’s C两种检验方法之间有什么异同?

XY 好硬核的问题啊,这个要讲通俗似乎有点难,我尽量吧。。。

先说主问题,题主问的是全局,那我就说全局好了。

Moran’s I和Geary’s C都是空间自相关(spatial autocorrelation)的统计方法(或者说统计量)。这估计说了等于没说,通俗一点就是:研究某事物『近朱者赤、近墨者黑』的程度,即你的分布模式是『物以类聚』型的、『随心所欲』型的还是『异性相吸』型的。

举个栗子,某个岛上有20个山洞,每个山洞里都住着一定数量的刘看山。那么,山洞就是我们要研究的对象,山洞的经纬度坐标就是该对象的空间属性,而山洞里刘看山的数量就是对象的非空间属性。现在我们有个设想:离得近的山洞里,刘看山的数量也比较接近,而离得远的山洞之间,刘看山的数量也差别很大。要研究这个设想对不对,我们就要用到空间自相关的方法。

Moran’s I和Geary’s C都是常用的空间自相关统计量。它们之间当然也是有区别的。接下来我会放一些以前在UMich讲课(2014年秋季学期GSP/UC 270,社会学研究中的GIS应用)的时候用的PPT。

Moran’s I和Geary’s C的大致对比如下:

总结一下就是:

第一:计算方法不同。Moran’s I关注的是相邻数据点和平均值之间关系的比较,而Geary’s C关注的是相邻数据点本身数据之间的比较。

比如,A山洞、B山洞和C山洞是相邻的。如果用Moran’s I,就会说,你看,A山洞里有50只刘看山,B山洞里有55只刘看山,而整个岛上每个山洞平均有30只刘看山,那么A山洞比平均多出20只刘看山,B山洞比平均多出25只刘看山。再看C山洞,里面只有1只刘看山,比平均值少了29只(多出-29只)刘看山。我们计算好每个山洞刘看山数量和平均数的差值,再把它们两两配对,一对一对地把差值乘起来,A和B的乘积是正的,A和C、B和C的乘积是负的。根据这种思路,把所有互相靠得近的山洞都遍历一遍,就能根据数的正负程度,来判断我们假设中的那个问题:离得近的山洞里,刘看山的数量是否也比较接近。

如果用Geary’s C的方法,则是另一种做法。我们直接把A山洞的刘看山数减去B山洞的刘看山数,再平方一下(保持为正),就能找到体现A山洞和B山洞之间差距的方法(或者叫差距代理,difference proxy)。同样地我们也给A和C、B和C进行相减再平方。A山洞和B山洞之间差了5只刘看山,这么一算, A和B之间的关系就是25。A和C之间相差了49只刘看山,所以它们的关系值是2401,而B和C之间的关系值是2916。由此可见,当它们之间刘看山数量差距越大,关系值也就越大。当遍历了岛上所有相邻山洞之后,经过这样的计算(再进行标准化),也能用来判断我们假设中的问题。

第二:取值范围不同,也就是PPT里的那个小问题。取值范围不同的根本原因也是因为计算方法不同。经过标准化以后,Moran’s I的值域是-1到1之间,其中1表示完全地『近朱者赤、近墨者黑』,而-1表示完全地『近朱者黑、近墨者赤』,0表示随机分布;而Geary’s C的值在0到2之间,其中0表示完全地『近朱者赤、近墨者黑』,而2表示完全地『近朱者黑、近墨者赤』,1表示随机分布。这个其实很好理解,Geary’s C测算的是『邻居之间的差距』,差距越小,所得值就越小,如果所有相邻山洞的刘看山都是一样多的,那它们之间的差都是0,那么最后得到的结果也是0。而Moran’s I是相邻数据和平均数的对比,如果两边都高于平均数或低于平均数,也就是说相邻山洞的刘看山数量相似,那么它们和平均数之差再相乘,会得到正数结果;而如果一边高于平均数,一边低于平均数,也就是说相邻山洞并不相似,那么它会得到负数结果。

另外就是Geary’s C没有很好地去运用到空间权重,因此它的可靠度不及Moran’s I。这需要从公式上来解释了,那就正好回答一下题主在描述里的小问题,怎样去理解和记忆全局Moran’s I和Geary’s C的非常『壮观』的计算公式。

要尝试去分析空间自相关的公式,首先得弄清空间自相关到底是个啥,以及为什么它很重要。前面山洞里的刘看山的例子只是一个思路上的说明,并不是做空间自相关的正规步骤和方法。所以,按照定义,空间自相关是什么?它是对『空间要素中非空间属性的空间分布模式』的研究。稍微通俗一点就是,一个数据点(目标数据点)周围有许多别的数据点,空间自相关就是研究这些『别的数据点』和我们的目标数据点之间的相似度有多大,以及这种相似度在整个空间全局中是怎样分布的。

空间自相关有正相关、负相关和不相关三种情况,如下图所示。在正相关(positive spatial autocorrelation)里,数据呈『聚团式分布』(clustered),也就是完全地『近朱者赤、近墨者黑』。在负相关(negative spatial autocorrelation)里,数据呈『分散式分布』(dispersed)。图中那种完全的负相关分布(英文里俗称chessboard distribution,即国际象棋棋盘式分布)在现实中非常罕见。而不相关(no spatial autocorrelation)的情况下,数据呈随机分布(randomly distributed)。

那么,这些分布有什么意义,或者说,我们为什么要在做空间分析或者和空间有关的统计的时候,要考虑空间自相关呢?这是因为,在统计学上,我们一般默认数据样本是随机的,但在现实世界里,一旦样本和空间扯上关系,那很可能就不随机了。这就是Tobler的地理学第一定律:

所有的事物之间都是由关系的,靠得近的事物之间的关系比离得远的事物之间的关系明显。

这是因为,空间上的数据很有可能受到其它因素的影响。比较典型的例子就是天气了。在同一天里,费城和纽约的天气可能很相似,因为它们距离近,很可能处于同一个高压/低压区域内,受到同一条锋线或同一个飓风的影响。而芝加哥、丹佛、洛杉矶的天气条件和费城就可能很不一样了,因为它们离费城很远,很可能处在不同的气象区域内。

正因为如此,我们需要在分析有空间属性的数据的时候,考虑进行空间自相关的分析。而说到空间,就不得不说到距离。距离也是空间分析乃至地理学最重要的要素之一。在空间自相关中,如何定义『相邻』或『邻域』是很关键的。根据不同的数据类型,我们会有不同的定义邻域的方法。如果你要分析的数据是点状的,那么我们可以采用自然的距离来定义邻域。具体操作就是,我设定一个阈值(threshold或者叫bar),比如20km,然后我以目标数据点为圆心,20km为半径画一个圆,所有落在这个圆里面的点,都是我的目标点的『相邻点』,而落在这个圈以外的,就不是相邻点。

当然,有时候会有比较特殊的情况。以上这种画圆的方法采用的是欧几里得距离,是根据欧几里得几何来的。得知两个点的经纬度坐标之后,就可以采用勾股定理计算它们之间的欧几里得距离。但有的时候,欧几里得距离并不是最适用的,比如下图这种情况:

像曼哈顿、费城,也包括北京、西安和成都这种平原上的大城市的市中区,经常会出现『豆腐块』类型的街道。这种情况下,比欧几里得距离更加适用的定义距离的方式被称为『曼哈顿距离』,如左图中的红、蓝、黄三条线所示。当然,有更特殊的时候,你还可以自己定义距离。比如现在到了网络时代,很多时候现实中的距离还不如网络流量管用,因此也有人开始用两点之间的数据流量来定义它们之间的距离。不管是欧几里得还是曼哈顿还是你自己新定义的距离,只要一个点相对你的目标点,其距离小于你规定的阈值,那么它们之间就被定义为相邻或邻域。反之,则它们并非邻域。在之后会提到的二元邻接矩阵中,邻域之间的点的关系会被记录为1,而非邻域的点之间的关系会被记录为0。

那么如果我的研究对象不是点状的,而是多边形怎么办?首先,你也可以把多边形转化成它的重心或其它某个代表性的点,然后再用上述方法来定义邻域。不过这样做会有一些缺陷。更常见的方法是要用到如下图所示的空间二元邻接矩阵(spatial contiguity matrix)。

利用这种矩阵,我们有3种定义多边形邻域的方法:车(rook)、相(bishop)和皇后(queen),这三个名字都来源于国际象棋。国际象棋里,车可以横着走、竖着走,放到这个矩阵上就是,如果两个多边形共享了任何边线,那么按照rook的定义法,它们就是相邻的。相可以斜着走对角线,因此按照bishop的定义法,两个多边形如果共享了一个端点,则是相邻的。皇后最厉害,又可以横着走、竖着走,又可以斜着走对角线,因此如果按照queen的定义法,两个多边形共享了一个端点或一条边,则为相邻的。

以上画了很大的篇幅介绍邻域的定义,因为它在Moran’s I中会起到很关键的作用。那么,Moran’s I是怎么计算的呢?我们就举一个例子,一步一步地看。

这是澳大利亚的各个州(一级行政区划),一共7个(省略了首都特区),在简化之后得到右图。要对它做Moran’s I分析,我们需要找出每一个州都有哪些邻州。要达到这个目的,我们就要建立一个二元邻接矩阵,如下图所示:

我们开始填充这个矩阵。因为澳大利亚各州的形状比较简单,所以用rook或者queen没什么差别(bishop在现实中用得很少,在这里也不适用)。我们就按rook来吧。首先我们看西澳大利亚州(WA),和它相邻的有北部地区(NT)和南澳大利亚州(SA),而剩下的州和它不相邻。因此在矩阵里的第一行(WA所在的行),我们再NT和SA对应的地方填上1,表示它们是相邻的,而在别的地方都填上0,表示它们是不相邻的。对于WA自己,也要填上0。

接下来,我们把剩下的每一个州都来一遍,把这个矩阵填满。

下一步,我们数一数每一个州一共都有几个邻州,把结果放在每一行的后面。这是为计算『行标准化权重矩阵』做准备。并且我们可以计算出『一共有多少对邻域』,这个例子里一共有20对。

接下来就是计算行标准化权重矩阵了。它的做法就是,让每一行所有的1去除以每一行的总邻域数。标准化之后,我们还能计算出新的『标准化后邻域总数』,这里是7。其实在这里,除非出现和所有别的区域都不相邻的区域(比如,如果我没有把塔斯马尼亚岛给拼到维多利亚州上),否则都是等于区域的个数。

这一步的权重是什么意思?它其实就是把每个数据点的相邻点个数进行标准化。比如西澳大利亚州(WA)有2个邻州,而北部地区(NT)有3个邻州。如果WA的邻州之一是一个异常值(outlier),而NT也有一个邻州是异常值,那么如果我们不进行标准化,则异常值对WA和NT的影响是相同的,这对于NT来说不公平,因为相邻的州越多,就越容易遇到异常值。如果我们进行了标准化,即考虑了邻域权重,则就能消减这种不公平。现在,虽然NT遇到异常值的机会多,但异常值对它影响的权重被降低了。

在某些情况下,二元邻接矩阵可以直接使用,不需要再计算行标准化权重矩阵。这在后面的公式计算中会有些差别,这里暂且不展开了。

好了,我们现在准备完毕,可以开始看公式了。Moran’s I的公式如下所示:

我们把公式不同部分拆开,看它们到底代表了什么,这样才有助于记忆。上图中,绿色高亮的N代表的是一共有几个数据点。在澳大利亚的例子中,这就是7,因为一共有7个州(多边形)。在刘看山的例子中,这应该是20,因为有20个山洞。

N下面的分母对应的是『矩阵数值之和』。前面说了,在某些情况下,二元邻接矩阵可以直接使用,不需要再计算行标准化权重矩阵。需要注意的是,如果计算了行标准化权重矩阵,则计算行标准化权重矩阵的和,也就是7(澳大利亚的例子)。如果没有计算行标准化权重矩阵,而是直接用的二元邻接矩阵,则用二元邻接矩阵计算,这个例子中就是20。它们的区别就是具体在哪一步进行标准化。如果计算了行标准化权重矩阵,则该公式的前半部分永远等于1,因为在矩阵中就已经标准化了。如果没有计算行标准化权重矩阵,则前半部分不等于1,相当于是计算完后半部分之后再乘以前半部分,而前半部分本身的作用就是用来标准化的。大部分情况下,还是计算行标准化权重矩阵更好的。

接下来就是遍历每个数据点(或多边形)中的非空间属性了。比如在澳大利亚这个例子里,每一个州有一个非空间属性,如图所示(记得当年讲课的时候,我说的是这是每个州里独角兽的数量233)。我们可以先不考虑两个州是否相邻,而是先做计算。首先要算出独角兽数量在各州的平均值,这里是2.29。然后我们就能用排列组合的方式(相当于两层嵌套的for循环)去计算出上图中灰色的部分。在图上的例子中,i遍历到新南威尔士州,j遍历到维多利亚州,因此Xi=2(新南威尔士州有2只独角兽),Xj=4(维多利亚州有4只独角兽),那么(Xi-Xbar)*(Xj-Xbar)就等于(2-2.29)*(4-2.29)= -0.4959。我们可以新建一个矩阵,把这个数填在相应的位置。然后我们遍历所有的州的组合,把这个新矩阵填满。

然后我们把上一步得到的结果分别乘以行标准化权重矩阵(或二元邻接矩阵,如果前面没有做标准化的话)的对应位置,再把结果相加。这一步其实就是将非邻域之间的计算结果给过滤掉。因为如果两个州不相邻,那么在矩阵中(不管是哪个矩阵)它们对应的权重(或邻域值)是0,这样就把它们之间的计算值给清除掉了。最后是下方的红色部分,是又一个标准化步骤,目的是把最终的结果控制在-1和1之间。

这样一来,我们就计算出了-1和1之间的Moran’s I统计值。它越靠近1,说明该数据的分布聚团程度越高,越接近于0,说明它的分布越随机。当然,Moran’s I自己还不能完全说明问题,我们还需要给它进行配套的下一步分析,即把它和随机模式中的I值进行比较,然后进行假设检验(假设刘看山/独角兽/任何X是随机分布的),与我们得到的Moran’s I进行对比,来核实Moran’s I的可靠程度(即类似统计学上的Z检验,查看当p值小于0.05或其它标准时,Z检验值的置信区间,从而查看统计是否显著)。这和Moran’s I本身的公式无关,就不展开了。

Moran’s I还有一种常见的可视化方法,就是做成X-self vs. X-neighbor的散点图:

还是以澳大利亚的独角兽为例,比如这里的横轴是每个州独角兽的数量,而纵轴是该州的邻州的独角兽数量,而所谓的Moran’s I其实可以看做是它的拟合线的斜率。如上图所示,当一个州的独角兽数量较少时,它的邻州的独角兽数量通常也不多,落在Low-Low范围内;而当一个州的独角兽数量较多时,它的邻州的独角兽数量通常也多,落在High-High范围内。这种情况下,我们会得到一条斜率为正的线,因此Moran’s I是正的。

想象一下,如果独角兽是随机分布的,那么这个散点图拟合线的斜率就会接近于0(接近于一条水平线),因此Moran’s I也会接近于0。而如果独角兽太奇葩了,都落在了Low-High和High-Low的范围内,那么我们就会得到一条向右俯冲的拟合线,Moran’s I就是负的。

注意:这张图我是乱画的,其实严格来说有不对的地方,因此当时在UMich上课被同学提了一个很好的问题:会不会出现所有的点都在Low-Low和Low-High的情况?答案是不会。为什么呢?因为这样一来,就会出现『每个州的独角兽都很少,但有的州有独角兽很多的邻州』,那么这些邻州是从哪里冒出来的呢?所以严格来说这些散点是应该有某种对称的形状的,不会出现只位于Low-Low和Low-High的情况,这也是为什么Moran’s I的取值范围是-1到1之间了,拟合线的斜率不会大于1或小于-1的(不会太陡)。

接下来我们简单看看Geary’s C。我就不从头一步一步推了,大体上它的思路和Moran’s I差不多,我们重点通过公式来看看操作计算上的具体区别:

上图中,第一个公式是Geary’s C,第二个公式是Moran’s I,它们长得很像吧,主要的区别我已经标出来了。黄色部分和绿色部分的区别,就是我在前面刘看山的例子里说的区别,黄色部分是任意两个山洞之间刘看山数量之差再平方,而绿色部分是任意两个山洞的刘看山数量和平均刘看山数量的差的乘积。另一个差别是红色的地方。Moran’s I在大部分情况下是要计算行标准化权重矩阵的,因此wij这里通常指的是行标准化权重矩阵,而这也是Moran’s I相对Geary’s C的一个优势。Geary’s C是不计算行标准化权重矩阵的,这里的Cij指的是二元邻接矩阵。也就是说,Moran’s I大多数情况下会在遍历之前就先计算空间权重从而进行标准化,而Geary’s C不考虑空间权重,只考虑是否为邻域。根据前面讨论过的空间权重矩阵的意义(异常值那一段),我们就能知道为什么现在偏爱Moran’s I的人会比较多,而很多人觉得Geary’s C的可靠性不及Moran’s I了。如今Geary’s C的使用率似乎都赶不上Getis-Ord G了。

顺便简单提一下Getis-Ord G,毕竟也是全局空间自相关的重要计算方法:

Moran’s I和Geary’s C有个共同的缺陷,就是只能分辨出『近朱者赤、近墨者黑』的程度,但并不能分别出你到底是赤还是黑。这个功能就交给了Getis-Ord G检验了。这其中的Getis指的就是它的发明者之一,《地理学与生活》的作者亚瑟·格迪斯(很多人只知道他写科普畅销书,都忘了他在空间分析方面的这个重大贡献了)。

Getis-Ord G的公式如图,其分子分母很像,主要区别在于分子多了一个wij矩阵,这个矩阵和二元邻接矩阵比较像,不过它通常会用自然距离来定义邻域。这样一来,分子其实就是所有邻域观察值,而分母是遍历了所有的观察值。对于某个数据来说,分母是固定的,而分子会随着wij定义的变化而变化。如果临近的观察值都偏大,则最后的G会偏大,如果临近的观察值都偏小,则最后的G会偏小,这样一来就能发现数据中的cluster到底是偏冷(偏小)还是偏热(偏大),因此有时候他也被称为『热点分析』(尤其是它的变体——被用于寻找局部聚类时所用的Gi*检验,就被叫做热点分析)。

不过尺有所短、寸有所长,如果一套数据里面,既有冷点,也有热点,那么它们就会相互抵消,全局的Getis-Ord G检验就不灵了,得重新用Moran’s I或者Geary’s C来进行验证。我的一个Getis-Ord G检验的应用:https://www.zhihu.com/question/19698677/answer/456689280

来源:知乎 www.zhihu.com

作者:叶山Shan Ye

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载
延伸阅读:
遗传算法(GA)做全局优化的收敛速度如何?

怎么得到DEM数字高程模型的数据?