☰
协同克里金法在ArcGIS中的实战:从协变量选择到交叉验证
2026/10/14 6:54:54 网站建设 项目流程

简介:这份ArcGIS教程文档面向地理信息、环境科学与资源管理领域的学习者与从业者,系统讲解协同克里金法这一空间插值技术。资源包内含1个docx文件,约43KB,以图文结合的方式梳理方法原理与操作要点。教程从自相关性与互相关性出发,说明如何借助协变量Z2、Z3提升目标变量Z1的预测精度,并介绍半变异函数、协方差与互协方差等关键统计量的作用。内容还覆盖普通协同克里金法的模型假设与随机误差处理,并延伸至泛协同克里金法、简单协同克里金法、指示协同克里金法、概率协同克里金法与析取协同克里金法等变体,同时涉及趋势移除与测量误差应对策略。目前已有3249人学习,适合希望深入掌握空间插值与预测、提升地理国情监测与资源评估分析能力的中高级用户参考。

1. 协同克里金法:当你的采样点不够用时,怎么借力打力

做空间插值的人迟早会撞上同一个尴尬:手头只有二十几个土壤采样点,却要出一张全场区重金属分布图。普通克里金跑出来的面要么平滑得像被熨斗烫过,要么在点位稀疏处直接摆烂。这时候协同克里金法(Co-Kriging)就该上场了——它的核心思路很朴素:既然主变量采样贵、采样少,那就找一个采样便宜、采样密、且和主变量有相关性的辅助变量来“帮衬”一把。在 ArcGIS 的 Geostatistical Analyst 里,这套逻辑被封装成了可交互的向导,但参数背后的门道远比点几下“下一步”复杂。这篇笔记面向已经会用普通克里金、想进一步压榨有限采样点价值的人,从协变量怎么选、半变异函数怎么配、到交叉验证怎么读,一步步把协同克里金法在 ArcGIS 里跑通。

2. 协同克里金法凭什么比普通克里金多算一层:协变量与互变异函数

协同克里金法不是把两个变量简单加权平均,它是在统计学的框架下,利用主变量和协变量之间的空间互相关性来约束预测。理解这一点,才能明白为什么有时候加了协变量反而更差。

2.1 主变量与协变量的相关性门槛

协同克里金法的前提是主变量和协变量之间存在显著的相关性。这个相关性不是随便拿两个图层算个皮尔逊系数就完事,它要求的是空间上的共变关系——在空间上距离近的地方,主变量和协变量的值变化趋势要一致。

我一般会先做两件事:

  1. 用“波段集统计”工具算主变量和协变量的相关系数。经验上,相关系数绝对值低于 0.5 时,协变量带来的信息增益非常有限,强行加入反而增加模型复杂度。
  2. 画散点图矩阵,肉眼确认是否存在非线性关系。如果散点图呈现明显的曲线形态,直接做协同克里金会低估协变量的贡献,需要先对协变量做变换(比如对数变换)。

注意:相关系数高不代表空间共变强。两个变量可能全局相关,但在局部空间上各走各的。所以下一步的互变异函数分析不能跳过。

2.2 互变异函数:协同克里金法真正的“黑匣子”

普通克里金只需要拟合一个半变异函数,协同克里金需要拟合三个:主变量的自变异函数、协变量的自变异函数、以及主变量和协变量之间的互变异函数。互变异函数刻画的是:当主变量在某个位置取某值时,协变量在距离 h 处取值的协方差。

在 ArcGIS 的 Geostatistical Analyst 向导里,互变异函数不会单独弹出一个面板让你拟合,它是在你选定协变量之后,由“半变异函数/协方差建模”工具统一处理的。但你需要理解它背后的约束:

  • 线性模型共区域化(Linear Model of Coregionalization, LMC):ArcGIS 默认使用 LMC 来保证三个变异函数之间的正定性。简单说,就是三个变异函数必须共享同一组变程和块金值,只是基台值不同。如果你在拟合时发现某个变异函数的变程和其他两个差太多,说明协变量可能不适合。
  • 互变异函数的形状:理想情况下,互变异函数应该从原点附近开始上升,到达某个变程后趋于平稳。如果它出现负值或者剧烈震荡,通常意味着主变量和协变量在空间上存在相位差,这时候要么换协变量,要么对协变量做空间平移。

2.3 在 ArcGIS 里配置协同克里金的最小步骤

下面是一套我常用的操作流程,假设你已经有一个主变量点图层(比如土壤重金属含量)和一个协变量栅格(比如高程或植被指数)。

第一步:准备协变量栅格

协变量必须是栅格格式,且与主变量点图层在同一坐标系下。如果协变量是矢量,先用“要素转栅格”或“克里金插值”把它栅格化。

# 用 ArcPy 检查主变量点图层和协变量栅格的坐标系是否一致 import arcpy main_points = r"C:\data\soil_heavy_metal.shp" covariate_raster = r"C:\data\elevation.tif" # 获取坐标系 sr_points = arcpy.Describe(main_points).spatialReference sr_raster = arcpy.Describe(covariate_raster).spatialReference if sr_points.name != sr_raster.name: print(f"坐标系不一致:点图层为 {sr_points.name},栅格为 {sr_raster.name}") # 实际项目中应统一投影,这里仅做检查 else: print("坐标系一致,可以继续")

这段代码的作用是避免最常见的翻车场景:点图层是地理坐标系,栅格是投影坐标系,插值结果会整体偏移。参数上,arcpy.Describe返回的spatialReference对象包含name属性,直接比较名称即可。如果名称不同,不要急着用“投影”工具,先确认哪个坐标系才是你分析所需的目标坐标系。

第二步:启动协同克里金向导

在 ArcGIS Pro 中,路径是:分析选项卡 → 地统计向导 → 克里金法/协同克里金法 → 选择“协同克里金法”。在 ArcMap 中,路径是:自定义 → 扩展模块 → 勾选 Geostatistical Analyst → 地统计向导 → 克里金法 → 协同克里金法。

第三步:指定主变量和协变量

在向导的“输入数据”页面,主变量选择你的点图层和对应的字段,协变量选择栅格图层。这里有一个容易忽略的选项:“协变量类型”。如果协变量是连续型(如高程),选“连续”;如果是分类型(如土地利用类型),选“分类”。分类协变量会生成指示变异函数,计算量更大。

第四步:拟合变异函数

点击“下一步”进入变异函数拟合页面。你会看到三个标签页:主变量、协变量、互变异函数。ArcGIS 会自动计算经验变异函数点,你需要手动调整模型类型(球状、指数、高斯等)和参数(块金值、基台值、变程)。

我一般会这样做:

  • 先看主变量的变异函数,确定一个合理的变程范围。
  • 再看协变量的变异函数,如果它的变程和主变量差一个数量级,考虑对协变量做聚合或重采样。
  • 最后看互变异函数,如果它没有明显的空间结构(比如一条水平线),说明协变量在这个尺度上帮不上忙。

第五步:交叉验证

拟合完成后,向导会要求你进行交叉验证。重点看三个指标:均方根误差(RMSE)、平均标准误差(MSE)、均方根标准化误差(RMSSE)。RMSSE 越接近 1 越好,如果大于 1 说明预测不确定性被低估,小于 1 说明被高估。

3. 协变量选不对,整个模型白费:三个筛选原则与两个替代方案

协变量的选择直接决定协同克里金法的成败。我见过太多人随便拿一个栅格就往里塞,结果交叉验证的 RMSSE 飙到 2.0 以上,还以为是变异函数没拟合好。

3.1 原则一:协变量必须覆盖整个预测区域

这是最硬性的要求。协同克里金法在预测时,需要知道每个预测位置上的协变量值。如果你的协变量栅格只覆盖了采样区的一半,另一半的预测值会直接报错或输出空值。

常见做法是:在插值前用“按掩膜提取”工具,把协变量裁剪到和主变量点图层的外接矩形一致的范围。如果协变量本身有缺失值,考虑用“焦点统计”做邻域填充,或者换一个覆盖完整的协变量。

3.2 原则二:协变量的空间分辨率不宜过粗

协变量的栅格分辨率如果比采样点间距还粗,那它提供的信息在空间上已经被平均掉了。举个例子:采样点平均间距 500 米,协变量栅格分辨率 1000 米,那么每个栅格像元里可能包含多个采样点,协变量值无法区分这些点之间的差异。

经验规则:协变量栅格分辨率应小于等于采样点平均间距的一半。如果达不到,可以对协变量做降尺度(比如用样条插值),但降尺度不会创造新信息,只是让栅格看起来更细。

3.3 原则三:协变量与主变量的相关性要在局部成立

全局相关系数高,不代表局部相关性强。我一般会做“移动窗口相关分析”:用一个圆形窗口在空间上滑动,计算每个窗口内主变量和协变量的相关系数,然后看这个相关系数的空间分布。如果某些区域相关系数很低甚至为负,说明协变量在这些区域可能引入噪声。

在 ArcGIS 里可以用“焦点统计”配合“波段集统计”近似实现,但更直接的方法是在 R 或 Python 里用mgcv或scipy做局部相关。如果发现局部相关不成立,可以考虑分区建模,或者换一个在整个区域都稳定的协变量。

3.4 替代方案一:用回归克里金代替协同克里金

如果协变量和主变量的关系是线性的,而且你不想折腾互变异函数,回归克里金(Regression Kriging)是更省事的替代方案。它的思路是:先用普通最小二乘或广义最小二乘建立主变量对协变量的回归,然后对回归残差做普通克里金,最后把回归预测值和残差插值结果相加。

在 ArcGIS 里没有直接的回归克里金工具,但可以用“普通最小二乘回归”+“克里金法”分两步实现。好处是回归部分可以用多个协变量,而且不需要拟合互变异函数。

3.5 替代方案二:用经验贝叶斯克里金处理不确定性

如果协变量本身也有测量误差,协同克里金法会低估预测的不确定性。这时候可以考虑经验贝叶斯克里金(EBK),它通过子集模拟来估计变异函数的不确定性,对协变量的误差也更稳健。ArcGIS Pro 的 Geostatistical Analyst 里有 EBK 工具,但它不支持协变量,所以这条路只适用于主变量单独建模的场景。

4. 避坑指南:协同克里金法在 ArcGIS 里的五个血泪教训

这一章记录的是我在实际项目中踩过的坑,每个都按“现象 → 原因 → 解决”写清楚。

4.1 交叉验证 RMSSE 远大于 1

现象:交叉验证结果里,均方根标准化误差(RMSSE)达到 1.8 甚至 2.0 以上,预测面看起来也过于平滑。

原因:最常见的原因是变异函数的块金值设得太小。协同克里金法在拟合互变异函数时,如果主变量的块金值被低估,模型会过度相信采样点之间的空间自相关,导致预测不确定性被低估。

解决:回到变异函数拟合页面,手动把主变量和协变量的块金值调大,重新拟合。如果调整后 RMSSE 仍然偏高,检查协变量是否在局部与主变量负相关——负相关区域会拉低整体预测精度。

4.2 预测结果出现条带状异常值

现象:输出的预测栅格上出现与协变量栅格纹理一致的条带或方块。

原因:协变量栅格本身存在条带噪声(比如遥感影像的扫描条带),协同克里金法把这个噪声当成了空间信号。

解决:在插值前对协变量做滤波处理。可以用“焦点统计”做均值滤波,或者用“主成分分析”提取协变量的主要成分,丢弃高频噪声成分。如果条带是系统性的,考虑换一个数据源。

4.3 向导卡在“计算互变异函数”不动

现象:点击“下一步”后,ArcGIS 长时间无响应,进度条卡在计算互变异函数。

原因:主变量采样点数量过多(比如超过 5000 个),或者协变量栅格分辨率过高,导致互变异函数的计算量爆炸。

解决:对主变量做空间抽稀,比如用“创建渔网”+“空间连接”保留每个网格内的一个点。或者对协变量做重采样,降低分辨率。协同克里金法本身对采样点数量不敏感,但对协变量的像元数量很敏感。

4.4 分类协变量导致内存溢出

现象:使用土地利用类型作为协变量时,ArcGIS 报内存不足错误。

原因:分类协变量会为每个类别生成一个指示变异函数,如果类别数超过 10 个,计算量呈指数增长。

解决:先对分类协变量做重分类,把类别数压缩到 5 个以内。或者改用连续型协变量,比如用“欧氏距离”工具计算每个点到某类用地的距离,作为连续变量输入。

4.5 预测范围超出协变量覆盖区域

现象:预测栅格在协变量边缘区域出现明显的边界效应,值突然跳变。

原因:协同克里金法在协变量缺失的区域无法计算互变异函数,只能退化为普通克里金,导致边界处预测值不连续。

解决:在插值前用“按掩膜提取”把预测范围严格限制在协变量覆盖区域内。如果必须预测边缘区域,考虑用“外推”方法单独处理,或者换一个覆盖更完整的协变量。

5. 从交叉验证到成品图:协同克里金法的参数微调与出图技巧

跑通协同克里金法只是第一步,真正决定成果能不能用的,是交叉验证之后的参数微调和出图设置。这一章讲几个我常用的进阶技巧。

5.1 用交叉验证的散点图判断系统性偏差

ArcGIS 的交叉验证结果里有一个“预测值 vs 实测值”的散点图。如果散点整体偏离 1:1 线,说明模型存在系统性偏差。具体来说:

  • 散点整体在 1:1 线下方:模型高估了低值区域,低估了高值区域。这时候可以尝试对主变量做对数变换,或者改用“普通克里金”的“对数”选项。
  • 散点整体在 1:1 线上方:模型低估了低值区域,高估了高值区域。这种情况比较少见,通常意味着协变量和主变量的关系是非单调的。

我一般会把这个散点图导出为表格,在 Excel 里算一下回归斜率。斜率在 0.9 到 1.1 之间可以接受,超出这个范围就需要调整变异函数模型。

5.2 变异函数模型的选型对比

ArcGIS 提供了球状、指数、高斯、线性等多种变异函数模型。协同克里金法对模型类型的选择比普通克里金更敏感,因为三个变异函数必须共享同一组变程和块金值。

我通常的做法是:先用“自动拟合”让 ArcGIS 选一个模型,然后手动改成球状模型再跑一次。球状模型在空间插值中是最稳健的选择,它对变程附近的突变不敏感。如果球状模型的交叉验证结果比自动拟合差很多,再考虑指数模型或高斯模型。

下面是一个用 ArcPy 批量比较不同变异函数模型的脚本框架:

# 批量比较不同变异函数模型的交叉验证结果 import arcpy from arcpy.ga import * # 输入数据 in_features = r"C:\data\soil_heavy_metal.shp" z_field = "Pb" covariate = r"C:\data\elevation.tif" out_folder = r"C:\data\ck_results" # 模型列表 models = ["SPHERICAL", "EXPONENTIAL", "GAUSSIAN"] for model in models: out_layer = f"{out_folder}\\ck_{model}.lyr" try: # 执行协同克里金法,指定变异函数模型 # 注意:ArcPy 的协同克里金法工具需要先创建地统计图层 arcpy.ga.GACoKriging( in_features, z_field, covariate, out_layer, "FULL", model, # 模型类型 "", "", "" # 其他参数省略,实际使用时需补全 ) print(f"{model} 模型执行成功") except Exception as e: print(f"{model} 模型失败:{e}")

这段代码的逻辑是遍历三种变异函数模型,分别生成协同克里金图层。参数上,GACoKriging的第四个参数是输出图层路径,第五个参数是搜索方向(“FULL”表示各向同性),第六个参数是变异函数模型类型。实际使用时需要补全块金值、基台值、变程等参数,或者先用“自动拟合”生成初始值。

5.3 出图时的分级与配色

协同克里金法的输出是一个连续栅格,直接出图往往看不出空间格局。我一般会做两步处理:

  1. 分级显示:用“重分类”工具把预测栅格分成 5 到 7 级,分级方法选“自然间断点”或“分位数”。自然间断点适合识别高值聚集区,分位数适合展示整体分布形态。
  2. 配色方案:主变量如果是污染物含量,用“红-黄-绿”渐变色,红色代表高值。协变量如果是高程,用“蓝-绿-棕”地形色。出图时把协变量作为底图,半透明叠加预测栅格,能直观看出预测值和协变量的空间对应关系。

5.4 一个我常用的验证习惯

每次跑完协同克里金法,我都会留出 20% 的采样点不参与插值,作为独立验证集。具体做法是:在插值前用“子集要素”工具把点图层分成训练集和验证集,插值完成后用“提取多值至点”工具把预测值提取到验证集上,然后算 RMSE 和 R²。

这个习惯帮我避免了很多次“交叉验证好看但实际不能用”的翻车。交叉验证用的是所有点,独立验证用的是没参与建模的点,后者更能反映模型在未知区域的预测能力。如果独立验证的 RMSE 比交叉验证的 RMSE 高出一倍以上,说明模型过拟合了,需要简化变异函数模型或者减少协变量。

希望这些参数和习惯能帮到你,少走几个我当年走过的弯路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询