克里金法在 R 中返回相同的值

问题描述 投票:0回答:1

我有一个包含列

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)
,这段代码将为所有未观察到的位置返回完全相同的值。实际上,如果我绘制结果,我会得到以下结果:

r interpolation kriging
1个回答
0
投票

我怀疑问题在于试图将复杂的模型拟合到

fit <- fit.variogram(vgm, model = vgm(1, "Sph", 300, 1))
中的少量数据点。用更简单的模型替换它,例如
fit <- fit.variogram(vgm, model = vgm("Gau"))
,可能会得到更好的结果。

来自

?fit.variogram

在奇异模型拟合上:如果您的变异函数结果是平坦的, 水平线或倾斜线,然后拟合三参数模型,例如 因为带块金的指数或球形有点重:有一个 基台和范围的无限种可能的组合(两者都非常 大)以适应倾斜的线。在这种情况下,返回的单数 模型可能仍然有用:只需尝试绘制它即可。 Gstat 收敛于 参数值稳定,但情况可能并非如此。其他 当模型到达窗台时,就会发生奇异模型拟合的情况 (例如球形)与块金拟合,并且范围参数 开始,或收敛到小于距离的值 第二个样本变异函数估计。在这种情况下,又是无限的 本质上,通过拟合一条线会出现多种可能性 单个(第一个样本变异函数)点。在这两种情况下,修复一个或 更多变差函数模型参数可能会帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.