在 R 中使用 gstat 包进行变差函数拟合
Variogram fit using gstat package in R
以下代码用于使用 gstat 包在 R 中使用克里格法预测三个位置的 v 值。
library(gstat);
library(sp);
walk470 <- read.table("D:/kriging/walk470.txt",header=T)
attach(walk470)
coordinates(walk470) = ~x+y
walk.var1 <- variogram(v ~ x+y,data=walk470,width=10)
plot(walk.var1,xlab="Distance",ylab="Semivariance",main="Variogram for V, Lag Spacing = 5")
model1.out <- fit.variogram(walk.var1,vgm(70000,"Sph",40,20000))
plot(walk.var1, model=model1.out,xlab="Distance",ylab="Semivariance",main="Variogram for V, Lag Spacing = 10")
predpts <- matrix(c(60,190,225,50,110,185),ncol=2,byrow=T)
predpts.g <- data.frame(x=predpts[,1],y=predpts[,2])
coordinates(predpts.g) <- ~x+y
g <- gstat(NULL,"new.v",v~1,data=walk470,model=model1.out)
three.pred <- predict(g,predpts.g)
print(three.pred)
我想知道为什么要拟合变差函数模型,我们需要使用 vgm() 方法预先提供基台、块金和范围值。根据克里金理论,我认为我们必须通过最小化 WLS objective 函数来计算这些值。
~此致
钱丹
由于您的参数之一是球变函数模型的范围,WLS 解决的优化问题是非线性的。非线性优化通常需要初始值(参见 ?optim
),这就是您传递给初始 vgm
调用的内容。传递的实际值也有些重要:如果它远远超出合理值的范围(接近零或非常大),则拟合不会成功。
如果您只适合窗台和金块(将 fit.ranges=TRUE
传递给 fit.variogram
),问题将是线性的,原则上可以在没有初始值的情况下完成。在这种情况下,远在数据范围之外的任意值仍然有效。
以下代码用于使用 gstat 包在 R 中使用克里格法预测三个位置的 v 值。
library(gstat);
library(sp);
walk470 <- read.table("D:/kriging/walk470.txt",header=T)
attach(walk470)
coordinates(walk470) = ~x+y
walk.var1 <- variogram(v ~ x+y,data=walk470,width=10)
plot(walk.var1,xlab="Distance",ylab="Semivariance",main="Variogram for V, Lag Spacing = 5")
model1.out <- fit.variogram(walk.var1,vgm(70000,"Sph",40,20000))
plot(walk.var1, model=model1.out,xlab="Distance",ylab="Semivariance",main="Variogram for V, Lag Spacing = 10")
predpts <- matrix(c(60,190,225,50,110,185),ncol=2,byrow=T)
predpts.g <- data.frame(x=predpts[,1],y=predpts[,2])
coordinates(predpts.g) <- ~x+y
g <- gstat(NULL,"new.v",v~1,data=walk470,model=model1.out)
three.pred <- predict(g,predpts.g)
print(three.pred)
我想知道为什么要拟合变差函数模型,我们需要使用 vgm() 方法预先提供基台、块金和范围值。根据克里金理论,我认为我们必须通过最小化 WLS objective 函数来计算这些值。
~此致 钱丹
由于您的参数之一是球变函数模型的范围,WLS 解决的优化问题是非线性的。非线性优化通常需要初始值(参见 ?optim
),这就是您传递给初始 vgm
调用的内容。传递的实际值也有些重要:如果它远远超出合理值的范围(接近零或非常大),则拟合不会成功。
如果您只适合窗台和金块(将 fit.ranges=TRUE
传递给 fit.variogram
),问题将是线性的,原则上可以在没有初始值的情况下完成。在这种情况下,远在数据范围之外的任意值仍然有效。