全局 Moran I 手动计算示例

上一章咱们聊了理论基础。说实话,光看公式总觉得隔着一层纱。我记得自己刚学时也是这样,翻来覆去看了好几遍,不如动手算一遍来得实在。这章我就带大家手算一遍——用一个小数据集,一步一步来。

准备数据

假设我们有5个乡镇的GDP数据,单位是亿元。这不是真实数据,我故意挑了个简单的,方便你看清每步在做什么。

乡镇GDP (亿元)
A10
B15
C12
D8
E20

嗯,这里要注意——计算Moran I之前,得先定义“邻居”。我个人习惯用最简单的相邻关系,也就是共享边界的算邻居。

乡镇邻居
AB, C
BA, C, D
CA, B, D, E
DB, C
EC

第一步:计算均值

所有计算的第一步,永远是把数据做标准化。先算GDP的均值:

均值 = (10 + 15 + 12 + 8 + 20) / 5 = 65 / 5 = 13

第二步:计算每个乡镇的偏差

偏差就是每个值减去均值。说白了,就是看这个乡镇有多“特别”。

A: 10 - 13 = -3
B: 15 - 13 =  2
C: 12 - 13 = -1
D:  8 - 13 = -5
E: 20 - 13 =  7

第三步:构建空间权重矩阵

这步容易让人迷糊。我建议用一个表格来列:行是乡镇i,列是邻居j,相邻就填1,不相邻填0。当然自己和自己是0。

ABCDE
A01100
B10110
C11011
D01100
E00100

核心公式回忆

Moran I = (n / S₀) × (ΣᵢΣⱼ wᵢⱼ (xᵢ - x̄)(xⱼ - x̄)) / (Σᵢ (xᵢ - x̄)²)

其中 n=5,S₀是所有权重之和。

第四步:逐对计算交叉乘积

这步有点繁琐,但耐心算下去就通了。我们只算邻居对,不相邻的乘积为0,不用管。

A的邻居:B, C

A-B: w=1, (A偏差)×(B偏差) = -3 × 2 = -6
A-C: w=1, (A偏差)×(C偏差) = -3 × -1 = 3

B的邻居:A, C, D

B-A: w=1, 2 × -3 = -6 (已算过,但公式中需算两次,因为是ΣᵢΣⱼ)
B-C: w=1, 2 × -1 = -2
B-D: w=1, 2 × -5 = -10

C的邻居:A, B, D, E

C-A: w=1, -1 × -3 = 3
C-B: w=1, -1 × 2 = -2
C-D: w=1, -1 × -5 = 5
C-E: w=1, -1 × 7 = -7

D的邻居:B, C

D-B: w=1, -5 × 2 = -10
D-C: w=1, -5 × -1 = 5

E的邻居:C

E-C: w=1, 7 × -1 = -7

第五步:计算分子

把所有交叉乘积加起来:

分子 = (-6) + 3 + (-6) + (-2) + (-10) + 3 + (-2) + 5 + (-7) + (-10) + 5 + (-7)

分组加一下:
(-6) + (-6) + (-10) + (-10) = -32
3 + 3 + 5 + 5 = 16
(-2) + (-2) = -4
(-7) + (-7) = -14

合计:-32 + 16 - 4 - 14 = -34

第六步:计算分母

这步简单,就是把所有偏差平方后求和:

(-3)² + (2)² + (-1)² + (-5)² + (7)²
= 9 + 4 + 1 + 25 + 49
= 88

第七步:计算S₀

S₀是所有空间权重之和。从权重矩阵中一行一行加:

A行:1+1 = 2
B行:1+1+1 = 3
C行:1+1+1+1 = 4
D行:1+1 = 2
E行:1 = 1

S₀ = 2 + 3 + 4 + 2 + 1 = 12

第八步:代入公式

这下所有零件都齐了:

n = 5
S₀ = 12
分子 = -34
分母 = 88

Moran I = (5 / 12) × (-34 / 88)
       = (5 × -34) / (12 × 88)
       = -170 / 1056
       ≈ -0.161

我的一点心得

刚算出来是负值时,你可能觉得奇怪。我在项目中头一回也算出负的,那时还怀疑算错了。其实负值说明空间上是离散格局——高值和低值倾向于相邻,这在人口密度、房价这些数据里很常见。

Moran I 手动计算流程 准备数据与邻居定义 计算均值与偏差 构建空间权重矩阵 逐对计算交叉乘积 代入Moran I 公式

我曾经在这步上翻过车

符号很容易搞错。我建议每算完一对,就做个记号,别凭记忆叠加。当年我用纸笔算一个大区域的Moran I,就是因为漏了一对,结果符号反了,导致结论完全错误。

结果解读

Moran I ≈ -0.161。这个值接近0,说明空间自相关性很弱。而且它是负值,表示高值和低值有点“抱团”的趋势——你看E是最高值(20),它的邻居C是12(中等),而D是最低值(8),邻居B是15(较高)和C(中等)。这就形成了一个高-低、低-高交错的现象。

嗯,你想想看,如果Moran I是正数,那么高值就应该挨着高值,低值挨着低值。正数越大,空间聚集越明显。但这里算出来是负数,而且绝对值又不大,说明数据没有明显的空间规律。

检验你有没有算对

Moran I的理论取值范围是[-1, 1]。如果你算出来超出这个区间,那一定是什么地方出错了。我见过有人把权重矩阵和偏差乘积搞混,结果算了个4.5出来——嗯,那是肯定不对的。

好了,这一套走下来,全局Moran I也就不神秘了。说白了就是空间上的“协方差”除以“方差”,再做个归一化。你心里有数就好。