全局 Moran I 手动计算示例
上一章咱们聊了理论基础。说实话,光看公式总觉得隔着一层纱。我记得自己刚学时也是这样,翻来覆去看了好几遍,不如动手算一遍来得实在。这章我就带大家手算一遍——用一个小数据集,一步一步来。
准备数据
假设我们有5个乡镇的GDP数据,单位是亿元。这不是真实数据,我故意挑了个简单的,方便你看清每步在做什么。
| 乡镇 | GDP (亿元) |
|---|---|
| A | 10 |
| B | 15 |
| C | 12 |
| D | 8 |
| E | 20 |
嗯,这里要注意——计算Moran I之前,得先定义“邻居”。我个人习惯用最简单的相邻关系,也就是共享边界的算邻居。
| 乡镇 | 邻居 |
|---|---|
| A | B, C |
| B | A, C, D |
| C | A, B, D, E |
| D | B, C |
| E | C |
第一步:计算均值
所有计算的第一步,永远是把数据做标准化。先算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。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| A | 0 | 1 | 1 | 0 | 0 |
| B | 1 | 0 | 1 | 1 | 0 |
| C | 1 | 1 | 0 | 1 | 1 |
| D | 0 | 1 | 1 | 0 | 0 |
| E | 0 | 0 | 1 | 0 | 0 |
核心公式回忆
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 ≈ -0.161。这个值接近0,说明空间自相关性很弱。而且它是负值,表示高值和低值有点“抱团”的趋势——你看E是最高值(20),它的邻居C是12(中等),而D是最低值(8),邻居B是15(较高)和C(中等)。这就形成了一个高-低、低-高交错的现象。
嗯,你想想看,如果Moran I是正数,那么高值就应该挨着高值,低值挨着低值。正数越大,空间聚集越明显。但这里算出来是负数,而且绝对值又不大,说明数据没有明显的空间规律。
检验你有没有算对
Moran I的理论取值范围是[-1, 1]。如果你算出来超出这个区间,那一定是什么地方出错了。我见过有人把权重矩阵和偏差乘积搞混,结果算了个4.5出来——嗯,那是肯定不对的。
好了,这一套走下来,全局Moran I也就不神秘了。说白了就是空间上的“协方差”除以“方差”,再做个归一化。你心里有数就好。