我已经按照在线教程学习了空间克里金法geoR
和gstat
(以及automap
)。我可以执行空间克里金法,并且了解其背后的主要概念。我知道如何构建半变异函数、如何拟合模型以及如何执行普通克里金法。
我不明白的是如何确定周围测量值的权重。我知道它们来自半变异函数,并且取决于与预测位置的距离以及测量点的空间排列。但是怎么做?
任何人都可以制作一个具有 3 个随机测量点和 1 个预测位置的普通克里金(非贝叶斯)模型吗?这会很有启发性。
我已经按照在线教程学习了空间克里金法geoR
和gstat
(以及automap
)。我可以执行空间克里金法,并且了解其背后的主要概念。我知道如何构建半变异函数、如何拟合模型以及如何执行普通克里金法。
我不明白的是如何确定周围测量值的权重。我知道它们来自半变异函数,并且取决于与预测位置的距离以及测量点的空间排列。但是怎么做?
任何人都可以制作一个具有 3 个随机测量点和 1 个预测位置的普通克里金(非贝叶斯)模型吗?这会很有启发性。
除了这个答案之外,对于gis.stackexchange.com上的类似问题,还有一些不错的附加答案
首先,我将在数学上用三点描述普通克里金法。假设我们有一个本质上静止的随机场。
普通克里金法
我们尝试使用已知值我们想要的预测形式为
其中是插值权重。我们假设一个恒定的平均值。为了获得无偏的结果,我们固定。然后我们得到以下问题:
使用拉格朗日乘子法,我们得到方程:
其中是拉格朗日乘数,是(半)变异函数。由此,我们可以观察到几件事:
仅从方程式很难看出权重的精确行为,但可以非常粗略地说:
然而,我将专注于平面中点的位置。我编写了这个小 R 函数,它从中获取点并绘制克里金权重(对于具有零块金的指数协方差函数)。
library(geoR)
# Plots prediction weights for kriging in the window [0,1]x[0,1] with the prediction point (0.5,0.5)
drawWeights <- function(x,y){
df <- data.frame(x=x,y=y, values = rep(1,length(x)))
data <- as.geodata(df, coords.col = 1:2, data.col = 3)
wls <- variofit(bin1,ini=c(1,0.5),fix.nugget=T)
weights <- round(as.numeric(krweights(data$coords,c(0.5,0.5),krige.control(obj.mod=wls, type="ok"))),3)
plot(data$coords, xlim=c(0,1), ylim=c(0,1))
segments(rep(0.5,length(x)), rep(0.5,length(x)),x, y, lty=3 )
text((x+0.5)/2,(y+0.5)/2,labels=weights)
}
您可以使用 spatstat 的功能来玩它clickppp
:
library(spatstat)
points <- clickppp()
drawWeights(points$x,points$y)
这里有几个例子
和彼此等距的点
deg <- seq(0,2*pi,length.out=4)
deg <- head(deg,length(deg)-1)
x <- 0.5*as.numeric(lapply(deg, cos)) + 0.5
y <- 0.5*as.numeric(lapply(deg, sin)) + 0.5
drawWeights(x,y)
彼此靠近的点将共享权重
deg <- c(0,0.1,pi)
x <- 0.5*as.numeric(lapply(deg, cos)) + 0.5
y <- 0.5*as.numeric(lapply(deg, sin)) + 0.5
drawWeights(x,y)
附近点“窃取”权重
deg <- seq(0,2*pi,length.out=4)
deg <- head(deg,length(deg)-1)
x <- c(0.6,0.5*as.numeric(lapply(deg, cos)) + 0.5)
y <- c(0.6,0.5*as.numeric(lapply(deg, sin)) + 0.5)
drawWeights(x,y)
有可能得到负权重
希望这能让您对权重的工作方式有所了解。