如何将数据帧转换为 R 中的 gstat 对象?特别是 gstatVariogram

How to convert a dataframe into a gstat object in R? Specifically a gstatVariogram

我想根据 R 中的一些半方差数据创建变异函数拟合。

我意识到变差函数拟合需要一个由 vgm 生成的对象,raw.vgm 由变差函数生成,例如:

x = seq(0,300,by=300/100)
y = seq(0,0.9,by=(0.9/100))
Z = seq(0.0,10.0,by=(10/100))
raw.dat = data.frame(x=x,y=y,Z=Z)

g <- gstat(formula=Z~1, locations=~x+y, data=raw.dat)
raw.vgm <- variogram(g)

vg.exp <- vgm(psill=0.8,model='Exp', range = 50)
fit.exp <- fit.variogram(raw.vgm , model = vg.exp)

但是,如果我已经有了 gamma(半方差)和距离值,我该如何从中获取 gstat 对象?

以下抛出错误:

dist = seq(0,30,by=0.3)
gamma = seq(0,0.9,by=(0.9/100))
raw.vgm = data.frame(dist=dist,gamma=gamma)
vg.exp <- vgm(psill=0.8,model='Exp',range=20)
fit.exp <- fit.variogram(raw.vgm, model=vg.exp)

错误如下:

Error in fit.variogram(raw.vgm, model = vg.exp) : 
  object should be of class gstatVariogram or variogramCloud

我只有伽玛和距离滞后。如何创建 gstatVariogram 或 variogramCloud?谢谢。

创建 raw.vgm 后,您必须通过

设置其 class
class(raw.vgm) = c("gstatVariogram", "data.frame")

然后,fit.variogram 还期望变差函数有一个 np 字段,其中包含使用的点对数;我通过

将其设置为 1
raw.vgm$np = rep(1, nrow(raw.vgm))

最后默认的 fit.method 假定您没有零距离的变差函数值,因此您可能想尝试其他值,例如

fit.exp <- fit.variogram(raw.vgm, model=vg.exp,fit.method=1)