对非常稀疏的数据使用克里金法

机器算法验证 r 空间的
2022-03-17 02:18:38

我有一组非常稀疏的数量测量值,在一个大陆的不同位置大约有 10 个测量值。位置分布极不规则。我想将这些平滑成整个大陆上规则间隔的网格上的值。

实际上,我们对相关数量有更密集的一组观察结果,并且正在开发技术以使用两组测量结果创建第一个数量的地图。目的是使用留一法交叉验证来估计这种混合方法的准确性(依次测试 10 个站点中的每一个,并使用所有其他站点加上额外的测量值创建地图)。作为基线,我首先需要看看使用 LOOCV 的地图有多准确,该地图仅由 10 个站点的原始网络创建。我还应该指出,这个数量会随着时间尺度的变化而变化,我们希望近乎实时地生成地图。

我不是地理空间技术方面的专家,但我了解克里金法的基础知识,并且在检查了 CRAN 的任务视图之后,似乎 automap 包中的 autoKrige 将是一个合适的功能。我得到的结果与我预期的完全不同,因此我们将不胜感激。

以下是一组输入训练数据的示例(一个特定时间的所有可用数据):

   lat   lon      value
  -27.53 152.92   98
  -35.32 149.00   79
  -34.05 150.67   81
  -12.45 130.95   92
  -42.92 147.32   73
  -22.25 114.08   91
  -29.03 167.97  108
  -31.94 115.95   89

正如您所看到的,目标数量在大范围内具有一系列值。

我通过执行从包含 lat、lon 和值的数据框转换为 spatialPointsDataFrame

coordinates(xtrain) = ~lon + lat
coordinates(xtest) = ~lon + lat
proj4string(xtrain) <-CRS("")
proj4string(xtest) <-CRS("")

其中 xtest 包含我想要对地图进行采样的点网格。然后我使用 Krige

result <- autoKrige(value~1,xtrain,xtest) 

我绘制结果

plot(result)

并得到以下图像

克里金结果

如您所见,结果本质上是所有点的平均值。我的理解是 autoKrige 应该已经确定了 Kriging 参数的最佳值,并产生了比这更现实的东西。只是为了说明,网格上预测值的范围是 0.22,这显然比输入值中看到的 30 点散布要小得多。

那么,我哪里错了?我是在滥用 R 包,还是在尝试使用克里金法时我的问题更根本?

1个回答

从每对点之间的距离来看,从十个点开始,您的变异函数云中将有 45 (10*(10-1)/2) 个点。我认为,一旦系统对它进行了分箱,或者甚至没有分箱,它就会以噪声为主。获取变异函数云图以了解我的意思。

如果 autokrige 不能拟合出一个很好的平滑变异函数,那么它会做它所做的事情,并且只是去'见鬼,我无法仅用 10 个点计算与距离的相关性,我最好的猜测只是平均值'。它真的不能做得更好。

如果您希望某些东西看起来“逼真”,那么您可以为其提供更大范围的变异函数参数,这会使输出过度平滑。但是,如果你想要的只是一张漂亮的照片,你也可以只做反距离加权。克里金法的优点是它现实的。但它拒绝你的现实并用它自己的...

建议:

  • 获取变异函数云图
  • 获取更多数据:)
  • 使用两个不同的数据集为您的案例研究二元克里金法。我认为这个理论是存在的,甚至可能有它的代码......