Prediction

一步一步的普通克里金例子?

  • February 2, 2018

我已經按照在線教程學習了空間克里金法geoRgstat(以及automap)。我可以執行空間克里金法,並且了解其背後的主要概念。我知道如何構建半變異函數、如何擬合模型以及如何執行普通克里金法。

我不明白的是如何確定周圍測量值的權重。我知道它們來自半變異函數,並且取決於與預測位置的距離和測量點的空間排列。但是怎麼做?

任何人都可以製作一個具有 3 個隨機測量點和 1 個預測位置的普通克里金(非貝葉斯)模型嗎?這會很有啟發性。

除了這個答案之外,對於gis.stackexchange.com上的類似問題,還有一些不錯的附加答案

首先,我將在數學上用三點描述普通克里金法。假設我們有一個本質上靜止的隨機場。

普通克里金法

我們試圖預測價值 $ Z(x_0) $ 使用已知值 $ Z=(Z(x_1),Z(x_2),Z(x_3)) $ 我們想要的預測是形式 $$ \hat Z(x_0) = \lambda^T Z $$ 在哪裡 $ \lambda = (\lambda_1,\lambda_2,\lambda_3) $ 是插值權重。我們假設一個恆定的平均值 $ \mu $ . 為了獲得無偏的結果,我們修正 $ \lambda_1 + \lambda_2 + \lambda_3 = 1 $ . 然後我們得到以下問題: $$ \text{min} ; E(Z(X_0) - \lambda^T Z)^2 \quad \text{s.t.};; \lambda^T \mathbf{1} = 1. $$ 使用拉格朗日乘子法,我們得到方程: $$ \sum^3_{j=1} \lambda_j \gamma(x_i - x_j) + m = \gamma(x_i - x_0),;; i=1,2,3, $$ $$ \sum^3_{j=1} \lambda_j =1 , $$ 在哪裡 $ m $ 是拉格朗日乘數和 $ \gamma $ 是(半)變異函數。由此,我們可以觀察到幾件事:

  • 權重不依賴於平均值 $ \mu $ .
  • 權重不取決於 $ Z $ 一點也不。僅在坐標上(在各向同性情況下僅在距離上)
  • 每個權重取決於所有其他點的位置。

僅從方程式很難看出權重的精確行為,但可以非常粗略地說:

  • 點離得越遠 $ x_0 $ ,其權重越低(相對於其他點“更遠”)。
  • 然而,靠近其他點也會降低重量。
  • 結果很大程度上取決於變差函數的形狀、範圍,尤其是塊金效應。考慮克里金法會很有啟發性 $ \mathbb R $ 只有兩個點,看看結果如何隨著不同的變異函數設置而變化。

然而,我將專注於平面中點的位置。我寫了這個小 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)

這裡有幾個例子

等距的點 $ x_0 $ 並且從彼此

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

有可能得到負權重

在此處輸入圖像描述

希望這能讓您對權重的工作方式有所了解。

引用自:https://stats.stackexchange.com/questions/326480

comments powered by Disqus