GIS在空间统计学中的应用:空间自相关(Moran’s I)

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

引言

《GIS在空间统计学中的应用:空间自相关(Moran’s I)》要解决的是一个很常见的问题:手里有一份行政区、网格或采样点数据,属性值看起来有高有低,但这些高值和低值到底是随机分布,还是存在空间集聚?空间自相关就是用来回答这个问题的核心方法之一。

在 GIS 分析中,Moran’s I 通常用于判断某个变量是否具有空间相关性。例如,房价高值是否集中在城市中心,污染浓度是否在某些区域形成高值集聚,人口密度是否存在明显的空间连续性。相比只看专题图,Moran’s I 能给出统计意义上的判断。

本文以 GIS 实务角度说明空间自相关的基本原理、Moran’s I 的计算思路、在 QGIS 和 ArcGIS Pro 中的典型操作流程,以及结果解读时最容易踩的坑。

背景

很多 GIS 初学者在做空间统计分析时,会先制作分级设色图或热力图,然后根据颜色判断“某些地方聚集”。这种判断直观,但存在两个问题:

  • 颜色分级受分类方法影响,例如自然断点、等距分级、分位数分级会得到不同视觉效果。
  • 肉眼看到的集聚不一定具有统计显著性,可能只是随机波动造成的。
  • 不同空间单元之间并不是独立的,相邻区域往往会相互影响。

空间自相关分析正是为了解决这类问题。它关注的是属性值与空间位置之间的关系:相近位置上的对象是否更可能具有相似的属性值。

在空间统计学中,Moran’s I 是最常用的全局空间自相关指标。它可以帮助我们判断整个研究区域内,某个变量总体上是呈现集聚、离散,还是接近随机分布。

GIS在空间统计学中的应用 空间自相关Moran’s I示意图
空间自相关 Moran’s I 用于判断属性值在空间上是集聚、离散还是随机分布。

原理

空间自相关的基本思想可以概括为一句话:距离更近或邻接的空间对象,其属性值是否更相似。

如果相邻地区的数值普遍相似,例如高值挨着高值、低值挨着低值,就称为正空间自相关。如果高值旁边经常是低值、低值旁边经常是高值,就可能是负空间自相关。如果空间位置和属性值之间没有明显关系,则接近随机分布。

Moran’s I 的取值通常可以按以下方式理解:

  • Moran’s I > 0:存在正空间自相关,说明相似值倾向于在空间上集聚。
  • Moran’s I < 0:存在负空间自相关,说明相邻对象倾向于出现高低交错。
  • Moran’s I 接近 0:空间格局接近随机分布。

需要注意的是,不能只看 Moran’s I 数值本身。实际分析中还要看 z-score 和 p-value。z-score 表示偏离随机分布的程度,p-value 表示这种偏离是否具有统计显著性。

例如,一个 Moran’s I 为 0.18 的结果,如果 p-value 很小,可能说明存在显著的正空间自相关;而一个 Moran’s I 为 0.30 的结果,如果样本量小或空间权重设置不合理,也不一定能直接得出可靠结论。

步骤

1. 准备适合做空间自相关的数据

做 Moran’s I 之前,首先要确认数据是否适合分析。常见数据包括行政区面数据、规则网格数据、道路事故点、监测站点、地块或小区边界。

建议至少检查以下内容:

  • 每个空间对象都有一个可分析的数值字段,例如人口密度、房价、污染浓度、犯罪数量。
  • 数据坐标系正确,最好使用适合研究区域的投影坐标系。
  • 研究范围明确,不要把空间关系完全不同的区域混在一起。
  • 异常值经过检查,确认不是录入错误或单位错误。

2. 明确分析变量

空间自相关分析不是对图层本身做判断,而是针对某个字段做判断。例如同一份区县边界数据,可以分别分析 GDP、人口密度、医院数量、耕地面积比例,每个变量的 Moran’s I 结果都可能不同。

在 GIS 项目中,建议优先选择有明确业务含义的字段,例如:

  • 环境 GIS:PM2.5 年均浓度、水质指数、噪声监测值。
  • 城市 GIS:房价、人口密度、公共服务设施可达性。
  • 灾害 GIS:滑坡点密度、洪涝风险指数、地震烈度。
  • 交通 GIS:事故发生次数、路网拥堵指数、公交站点覆盖率。

3. 构建空间权重矩阵

Moran’s I 的关键不是只比较属性值,而是要定义“谁和谁是邻居”。这个邻接关系通常用空间权重矩阵表示。

常见空间权重方式包括:

  • 邻接关系:适合面数据,例如区县之间共享边界或顶点即为邻居。
  • 距离阈值:适合点数据或中心点数据,例如 5 公里内的对象互为邻居。
  • K 近邻:每个对象选择最近的 K 个对象作为邻居,适合点分布不均匀的情况。
  • 反距离权重:距离越近权重越大,距离越远权重越小。

空间权重的选择会直接影响 Moran’s I 结果。做空间自相关时,不建议随便使用默认参数,而应结合数据类型、研究尺度和业务问题进行设置。

4. 在 QGIS 中计算 Moran’s I

QGIS 可以通过 Processing 工具箱和相关插件完成空间自相关分析。不同版本和插件环境中工具名称可能略有差异,但基本流程相同。

  1. 打开 QGIS,加载研究区域图层,例如区县边界或规则网格。
  2. 检查图层坐标系,距离型权重建议使用投影坐标系,而不是经纬度坐标系。
  3. 打开处理工具箱,搜索空间统计、Moran 或 spatial autocorrelation 相关工具。
  4. 选择输入图层和需要分析的数值字段。
  5. 设置空间权重方式,例如邻接、距离阈值或 K 近邻。
  6. 运行工具,查看 Moran’s I、z-score、p-value 等输出结果。
  7. 将结果与专题图结合,判断高值或低值是否具有空间集聚特征。

如果 QGIS 环境中没有现成的 Moran’s I 工具,也可以导出数据到 GeoPackage、Shapefile 或 GeoJSON,再使用 Python 的 GeoPandas 与 PySAL 进行计算。

5. 使用 Python 和 PySAL 计算 Moran’s I

对于需要重复分析、批量处理或写入报告的 GIS 项目,Python 更适合。下面是一个典型思路,使用 GeoPandas 读取空间数据,使用 PySAL 构建空间权重并计算 Moran’s I。

import geopandas as gpd
from libpysal.weights import Queen
from esda.moran import Moran

gdf = gpd.read_file("districts.gpkg")

# 建议使用投影坐标系,尤其是后续涉及距离分析时
# gdf = gdf.to_crs("EPSG:4547")

field = "pop_density"

# 删除空值,避免计算报错
gdf = gdf.dropna(subset=[field]).copy()

# Queen 邻接:共享边或共享点都视为邻居
w = Queen.from_dataframe(gdf)

# 行标准化权重
w.transform = "r"

y = gdf[field].values

mi = Moran(y, w)

print("Moran's I:", mi.I)
print("Expected I:", mi.EI)
print("z-score:", mi.z_norm)
print("p-value:", mi.p_norm)

这段代码适合面数据的全局 Moran’s I 分析。对于点数据,通常需要改用距离阈值权重或 K 近邻权重。对于存在孤立区域的面数据,还需要检查是否有对象没有任何邻居。

6. 在 ArcGIS Pro 中使用空间自相关工具

ArcGIS Pro 中可以使用 Spatial Statistics Tools 下的 Spatial Autocorrelation 工具,也就是常说的 Moran’s I 工具。

  1. 在 ArcGIS Pro 中加载待分析要素类。
  2. 打开 Geoprocessing 面板,搜索 Spatial Autocorrelation。
  3. 选择 Input Feature Class。
  4. 在 Input Field 中选择要分析的数值字段。
  5. 设置 Conceptualization of Spatial Relationships,例如 Contiguity、Fixed Distance Band 或 K Nearest Neighbors。
  6. 根据数据情况设置 Distance Band 或 Number of Neighbors。
  7. 运行工具并查看报告中的 Moran’s Index、z-score 和 p-value。

ArcGIS Pro 的优势是报告解释比较直观,适合教学、报告制作和快速验证。但如果需要大量变量循环计算,Python 脚本方式会更灵活。

常见坑

1. 把经纬度坐标直接用于距离权重

经纬度单位是度,不是米。若直接用经纬度坐标设置距离阈值,可能导致邻居关系错误。涉及距离的空间自相关分析,应优先投影到适合研究区的平面坐标系。

2. 只看 Moran’s I,不看显著性

Moran’s I 是方向和强度指标,但结果是否可靠还要看 z-score 和 p-value。一般来说,如果 p-value 较小且 z-score 绝对值较大,才说明空间格局显著偏离随机分布。

3. 空间权重设置不符合业务尺度

不同空间权重可能得到不同结论。以城市房价为例,500 米邻域、2 公里邻域和行政区邻接关系代表的空间过程并不一样。如果研究问题是步行生活圈,就不应直接使用过大的距离阈值。

4. 忽略孤立对象

某些岛屿、飞地或边缘区域可能没有邻居。孤立对象会影响权重矩阵构建,也可能导致工具警告或结果不稳定。分析前应检查每个对象的邻居数量。

5. 把全局 Moran’s I 当成局部热点分析

全局 Moran’s I 只能告诉你整个研究区域是否存在空间自相关,不能直接告诉你具体哪里是高值集聚或低值集聚。如果要定位具体区域,需要进一步使用 Local Moran’s I 或 Getis-Ord Gi* 热点分析。

方法比较

方法 主要用途 适合场景 注意事项
全局 Moran’s I 判断整体空间自相关 先判断变量是否存在总体集聚趋势 不能定位具体热点位置
Local Moran’s I 识别局部高高、低低、高低、低高关系 查找具体异常区或局部集聚区 需要关注多重检验和局部显著性
Getis-Ord Gi* 识别热点和冷点 制作热点图、风险区识别 更关注高值或低值集聚强度
半变异函数 分析空间连续性和距离衰减 地统计插值、克里金分析 更适合连续空间变量建模

如果你的目标是回答“这个变量整体上是否空间集聚”,优先使用全局 Moran’s I。如果目标是回答“哪些地方是高值集聚”,应进一步使用 Local Moran’s I 或热点分析。

检查清单

在正式解释空间自相关结果之前,建议按下面清单逐项检查:

  • 分析字段是否为数值型,且业务含义明确。
  • 是否处理了空值、异常值和明显录入错误。
  • 图层坐标系是否适合当前分析,特别是距离权重分析。
  • 空间权重方式是否符合研究对象的真实空间关系。
  • 每个要素是否至少有一个邻居,是否存在孤立对象。
  • 是否同时查看 Moran’s I、z-score 和 p-value。
  • 是否区分了全局空间自相关和局部热点分析。
  • 是否结合地图结果进行解释,而不是只引用一个统计数值。
  • 是否记录了软件版本、参数设置和空间权重规则,便于复现。

FAQ

Moran’s I 大于 0 就一定说明有空间集聚吗?

不一定。Moran’s I 大于 0 只是说明结果方向上偏向正空间自相关,还需要结合 z-score 和 p-value 判断是否显著。如果不显著,就不能轻易说存在可靠的空间集聚。

空间自相关分析适合点数据还是面数据?

两者都可以。面数据常用邻接权重,例如共享边界或共享顶点。点数据常用距离阈值或 K 近邻权重。关键是空间权重要符合研究问题。

为什么同一份数据在不同软件中 Moran’s I 结果不同?

最常见原因是空间权重设置不同,包括邻接方式、距离阈值、权重标准化、是否排除孤立对象等。比较不同软件结果时,应先确保参数完全一致。

全局 Moran’s I 和 Local Moran’s I 有什么区别?

全局 Moran’s I 判断整个研究区域是否存在总体空间自相关;Local Moran’s I 判断每个空间对象周围是否存在局部集聚或异常,例如高高集聚、低低集聚、高低异常和低高异常。

做 Moran’s I 之前一定要投影吗?

如果使用邻接关系,投影影响相对较小;如果使用距离阈值、K 近邻或反距离权重,建议使用投影坐标系。因为经纬度坐标单位是度,不适合直接表示真实距离。

Moran’s I 接近 0 是否说明数据没有意义?

不是。Moran’s I 接近 0 只说明该变量在当前空间权重和研究尺度下接近随机分布。它可能仍然受其他因素影响,也可能在更小尺度或更大尺度上存在空间结构。

结论

空间自相关 Moran’s I 是 GIS 空间统计分析中非常基础但实用的方法。它可以帮助我们从“地图看起来像集聚”进一步走向“统计上是否显著集聚”的判断。

实际使用时,最重要的不是机械运行工具,而是明确分析变量、选择合理空间权重、检查坐标系和孤立对象,并同时解读 Moran’s I、z-score 与 p-value。

对于 GIS 学生和初级 GIS 工程师来说,建议先用 QGIS 或 ArcGIS Pro 完成一次可视化操作,再用 Python 和 PySAL 复现计算过程。这样既能理解空间自相关的原理,也能掌握可复用的 GIS 空间统计工作流。