我有一个包含列
COORDS_X1
、COORDS_X2
、y
的数据框。该数据框有位于西班牙一个小区域的 14 个观测值,我想对该区域中未观测到的位置进行插值。这是我当前的数据集:
# A tibble: 14 × 3
COORDS_X1 COORDS_X2 y
<dbl> <dbl> <dbl>
1 280561. 4798452. 23
2 267718. 4804594. 19
3 270456. 4805417. 34
4 281943. 4824197. 25
5 283965. 4823130. 32
6 282627. 4796964. 20
7 286191. 4823939. 24.5
8 289349. 4794697. 23.5
9 267259. 4806210. 20
10 274674. 4792999. 24
11 284148. 4821649. 24
12 273031. 4809218. 38
13 282651. 4822399. 22
14 281779. 4798643. 38
我不是这方面的专家,但我发现克里格法是这方面的标准方法。所以我尝试使用以下代码:
df2 = df
coordinates(df) <- ~ COORDS_X1 + COORDS_X2
vgm <- variogram(y ~ 1, df)
fit <- fit.variogram(vgm, model = vgm(1, "Sph", 300, 1))
grd <- expand.grid(COORDS_X1 = seq(min(df$COORDS_X1), max(df$COORDS_X1), length.out = 100),
COORDS_X2 = seq(min(df$COORDS_X2), max(df$COORDS_X2), length.out = 100))
coordinates(grd) <- ~COORDS_X1 + COORDS_X2
gridded(grd) <- TRUE
krg <- krige(y ~ 1, df, grd, model = fit)
如果我看一下
as.data.frame(krg)
,这段代码将为所有未观察到的位置返回完全相同的值。实际上,如果我绘制结果,我会得到以下结果:
我怀疑问题在于试图将复杂的模型拟合到
fit <- fit.variogram(vgm, model = vgm(1, "Sph", 300, 1))
中的少量数据点。用更简单的模型替换它,例如fit <- fit.variogram(vgm, model = vgm("Gau"))
,可能会得到更好的结果。
来自
?fit.variogram
:
在奇异模型拟合上:如果您的变异函数结果是平坦的, 水平线或倾斜线,然后拟合三参数模型,例如 因为带块金的指数或球形有点重:有一个 基台和范围的无限种可能的组合(两者都非常 大)以适应倾斜的线。在这种情况下,返回的单数 模型可能仍然有用:只需尝试绘制它即可。 Gstat 收敛于 参数值稳定,但情况可能并非如此。其他 当模型到达窗台时,就会发生奇异模型拟合的情况 (例如球形)与块金拟合,并且范围参数 开始,或收敛到小于距离的值 第二个样本变异函数估计。在这种情况下,又是无限的 本质上,通过拟合一条线会出现多种可能性 单个(第一个样本变异函数)点。在这两种情况下,修复一个或 更多变差函数模型参数可能会帮助您。