通常のクリギングの例


8

geoRand gstat(およびautomap)の両方を使用した空間クリギングのチュートリアルをオンラインで実行しました。空間クリギングを実行でき、その背後にある主要な概念を理解しています。セミバリオグラムを作成する方法、モデルをそれに適合させる方法、および通常のクリギングを実行する方法を知っています。

私が理解していないのは、周囲の測定値の重みがどのように決定されるかです。私はそれらがセミバリオグラムから派生し、予測位置からの距離と測定された点の空間配置に依存していることを知っています。しかし、どうやって?

誰もが3つのランダムな測定点と1つの予測位置を使用して通常のクリギング(非ベイジアン)モデルを作成できますか?それは啓発的でしょう。


1
好奇心のために、ベイズの答えを見たくありませんか?Gaussian Processesを扱うと、物事がずっと簡単になります。
DeltaIV 2018

@DeltaIV最初に私は常習者の方法を学びたいので。ベイジアン統計はまだ曇っています
Pigna

1
私が理解していないのは、周囲の測定値の重みがどのように決定されるかです。」誰かが興味を持っている場合に備えて、それらを計算する方法についての例(gis.stackexchange.com/questions/270274/…)を含む回答をGIS SEに投稿しました。しかし、ここでの答えはすでに素晴らしいです!
Andre Silva

回答:


9

まず、通常のクリギングを3つの点で数学的に説明します。本質的に定常的なランダム場があると仮定します。

通常のクリギング

Z(x0)Z=(Z(x1),Z(x2),Z(x3))

Z^(x0)=λTZ
λ=(λ1,λ2,λ3)μλ1+λ2+λ3=1
minE(Z(X0)λTZ)2s.t.λT1=1.
j=13λjγ(xixj)+m=γ(xix0),i=1,2,3,
j=13λj=1,
mγ
  • μ
  • Z
  • 各重みは、他のすべてのポイントの場所に依存します。

ウェイトの正確な動作は、方程式だけではわかりにくいですが、次のように大まかに言うことができます。

  • x0
  • ただし、他のポイントに接近していると、重量も低くなります。
  • R

[0,1]2

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)

ここにいくつかの例があります

等距離の点x0

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)

https://i.imgur.com/MeuPvFT.png

負の重みを取得することが可能です

ここに画像の説明を入力してください

これでウェイトがどのように機能するかを感じていただければ幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.