Đầu tiên tôi sẽ mô tả kỹ thuật giết người thông thường với ba điểm toán học. Giả sử chúng ta có một trường ngẫu nhiên cố định thực chất.
Kriging thông thường
Z( x0)Z= ( Z( x1) , Z( x2) , Z( x3) )
Z^(x0)=λTZ
λ=(λ1,λ2,λ3)μλ1+λ2+λ3=1minE(Z(X0)−λTZ)2s.t.λT1=1.
∑j=13λjγ(xi−xj)+m=γ(xi−x0),i=1,2,3,
∑j=13λj=1,
mγ
- μ
- Z
- Mỗi trọng lượng phụ thuộc vào vị trí của tất cả các điểm khác.
Hành vi chính xác của các trọng số rất khó nhìn thấy chỉ từ phương trình, nhưng người ta có thể nói rất đại khái :
- x0
- Tuy nhiên, gần các điểm khác cũng làm giảm trọng lượng.
- 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)
}
Bạn có thể chơi với nó bằng clickppp
chức năng của spatstat :
library(spatstat)
points <- clickppp()
drawWeights(points$x,points$y)
Dưới đây là một vài ví dụ
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)
Các điểm gần nhau sẽ chia sẻ các trọng số
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)
Điểm gần đó "đánh cắp" trọng lượng
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)
Có thể nhận được trọng lượng tiêu cực
Hy vọng điều này mang lại cho bạn cảm giác về cách thức hoạt động của tạ.