GIS在空间统计学中的应用:空间自相关(Moran’s I)
引言
《GIS在空间统计学中的应用:空间自相关(Moran’s I)》要解决的是一个很常见的问题:手里有一份行政区、网格或采样点数据,属性值看起来有高有低,但这些高值和低值到底是随机分布,还是存在空间集聚?空间自相关就是用来回答这个问题的核心方法之一。
在 GIS 分析中,Moran’s I 通常用于判断某个变量是否具有空间相关性。例如,房价高值是否集中在城市中心,污染浓度是否在某些区域形成高值集聚,人口密度是否存在明显的空间连续性。相比只看专题图,Moran’s I 能给出统计意义上的判断。
本文以 GIS 实务角度说明空间自相关的基本原理、Moran’s I 的计算思路、在 QGIS 和 ArcGIS Pro 中的典型操作流程,以及结果解读时最容易踩的坑。
背景
很多 GIS 初学者在做空间统计分析时,会先制作分级设色图或热力图,然后根据颜色判断“某些地方聚集”。这种判断直观,但存在两个问题:
- 颜色分级受分类方法影响,例如自然断点、等距分级、分位数分级会得到不同视觉效果。
- 肉眼看到的集聚不一定具有统计显著性,可能只是随机波动造成的。
- 不同空间单元之间并不是独立的,相邻区域往往会相互影响。
空间自相关分析正是为了解决这类问题。它关注的是属性值与空间位置之间的关系:相近位置上的对象是否更可能具有相似的属性值。
在空间统计学中,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 工具箱和相关插件完成空间自相关分析。不同版本和插件环境中工具名称可能略有差异,但基本流程相同。
- 打开 QGIS,加载研究区域图层,例如区县边界或规则网格。
- 检查图层坐标系,距离型权重建议使用投影坐标系,而不是经纬度坐标系。
- 打开处理工具箱,搜索空间统计、Moran 或 spatial autocorrelation 相关工具。
- 选择输入图层和需要分析的数值字段。
- 设置空间权重方式,例如邻接、距离阈值或 K 近邻。
- 运行工具,查看 Moran’s I、z-score、p-value 等输出结果。
- 将结果与专题图结合,判断高值或低值是否具有空间集聚特征。
如果 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 工具。
- 在 ArcGIS Pro 中加载待分析要素类。
- 打开 Geoprocessing 面板,搜索 Spatial Autocorrelation。
- 选择 Input Feature Class。
- 在 Input Field 中选择要分析的数值字段。
- 设置 Conceptualization of Spatial Relationships,例如 Contiguity、Fixed Distance Band 或 K Nearest Neighbors。
- 根据数据情况设置 Distance Band 或 Number of Neighbors。
- 运行工具并查看报告中的 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 空间统计工作流。