我在 R 中更广泛地熟悉
gstat
和克里金法。最终目标是在我的空间网格中插入温度,并且我希望能够在不同时间点(几年的平均每日温度)执行此操作。因此,我一直在想象一种插值法来估计温度并将季节或年份等视为随机效应。我一直在探索通用克里金法,但我很难理解所设置的公式。
我已经包含了一些使用
meuse
数据的示例代码(来自 sp
)。当我分配变异函数时,我可以声明我的因变量是由其他变量预测的,并包括随机效应(而不是使用类似 zinc~1
的东西)。
但是,当我使用
krige()
执行此操作时,zinc~1
的唯一替代公式似乎是 zinc~x+y
。我相信公式 zinc~x+y
允许各向异性并避免平稳性假设,但为什么我不能像使用变差函数那样在此处包含其他数据?是因为它已经在变差函数中得到考虑,还是我对克里金法没有更普遍的理解?
library(sp)
library(gstat)
data(meuse)
coordinates(meuse) <- ~ x+y
data(meuse.grid)
coordinates(meuse.grid) <- ~ x+y
# assigning and fitting the variogram
sample.vgm <- variogram(zinc~copper+(1|dist.m), # the formula - copper is a fixed effect, dist.m is a random effect
meuse) # SPDF dataset
vgm.fit <- fit.variogram(sample.vgm, # the sample variogram
model=vgm(model="Sph")) # assigning a model type
# kriging
z.krige <- krige(zinc~x+y, # the formula
meuse, # the SPDF that has data
meuse.grid, # the SPDF to krige over
model=vgm.fit)
# this doesn't work if the formula is anything besides ~1 or ~x+y
z.krige2 <- krige(zinc~copper+(1|dist.m),
meuse,
meuse.grid,
model=vgm.fit)
我在 Windows 10 (x64) 上使用 R 版本 4.1.3。
基于这篇post,显然需要将解释变量加载到网格中以便克里金法找到它们。
dist
应该可以工作,因为它已经在 meuse
网格中:
# dist is in the grid
z.krige2 <- krige(zinc~dist,
meuse,
meuse.grid,
model=vgm.fit)
对于
copper
和 dist.m
,我刚刚在此处添加了随机值:
# add random values for copper and dist.m into the grid
meuse.grid$copper <- runif(nrow(meuse.grid))
meuse.grid$dist.m <- runif(nrow(meuse.grid))
# now copper and dist.m variables are available
z.krige2 <- krige(zinc~copper+(1|dist.m),
meuse,
meuse.grid,
model=vgm.fit)