r - 自动克里金法和手动克里金法的不同结果

标签 r spatial sp kriging gstat

有人可以帮助我理解为什么我从自动克里金法和手动克里金法中得到如此不同的结果吗?我看到这两种算法使用的是不同的变差函数模型,但这是否是造成所有差异的唯一原因?我也对 autokrige 在没有数据的位置预测显着更高的值这一事实感到不安,例如网格的左下角和右下角。它是否与通过取幂将(对数转换的)克里格输出转换回来有关?此外,这两种方法预测的值都比数据低得多。看来我在其中一个或两个算法上做错了什么,非常感谢任何帮助。

编辑:GitHub link此处使用的数据(我使用了 this 共享 csv 文件的建议)。

library(sp)
library(gstat)
library(automap)

# get data
df <- read.csv("data.csv")
---------------------------
> head(df)
      long     lat n
1 -76.7116 39.2992 1
2 -76.7113 39.3553 1
3 -76.7113 39.3607 1
4 -76.7112 39.3126 2
5 -76.7110 39.2973 1
6 -76.7110 39.3364 1
---------------------------

# generate regular grid
coordinates(df) <- ~ long + lat
grd <- spsample(df, type = "regular", n = 10000)
colnames(grd@coords) <- c("long", "lat")        # rename coords as in data
gridded(grd) <- TRUE

# manual kriging
form <- as.formula("log(n) ~ long + lat")       # universal kriging formula
v <- variogram(object = form, locations = df)
vmfit <- fit.variogram(v,
                     model = vgm(model = c("Sph", "Exp", "Mat", "Gau", "Ste")))
-----------------------------------
> vmfit
  model     psill       range kappa
1   Ste 0.2886451 0.001786237   0.5
-----------------------------------
krg <- krige(formula = form, locations = df, newdata = grd, model = vmfit)
krg_df <- data.frame(krg@coords,                # extract kriged data
                     pred = exp(krg@data$var1.pred))

# auto kriging
krg2 <- autoKrige(formula = form, input_data = df, new_data = grd)
krg2_df <- data.frame(krg2$krige_output@coords,
                      pred = exp(krg2$krige_output@data$var1.pred))
-----------------------------------
> krg2$var_model
  model      psill      range
1   Nug 0.26473893 0.00000000
2   Sph 0.02574092 0.01657061
-----------------------------------

enter image description here

最佳答案

我认为问题出在您的公式上。应该是n ~ 1

示例数据

library(gstat)
library(automap)
data(meuse)
coordinates(meuse) =~ x+y
data(meuse.grid)
gridded(meuse.grid) =~ x+y

解决方法:

form <- zinc ~ 1

# manual
v <- variogram(form, meuse)
m <- fit.variogram(v, model=vgm(model=c("Sph", "Exp", "Mat", "Gau", "Ste")))
km <- krige(form, meuse, meuse.grid, model = m)

# auto
ka <- autoKrige(form, meuse, meuse.grid)

看看:

g <- cbind(km[,1], ka[[1]][,1])
names(g) <- c("manual", "auto")
spplot(g)

enter image description here

关于r - 自动克里金法和手动克里金法的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72325632/

相关文章:

c++ - boost 几何/空间查询形状

r - 更改 SF 对象的 CRS

r - R-在城市 map 上拟合网格并将数据输入到网格正方形中

用 dplyr 中的 data_frame() 替换 data.frame 并用 bind_cols() 替换 cbind

R CMD 检查不在 Rtools 目录中查找 gcc

r - 从数据框中提取字符串

python - python 与 R 中的数据整理比较(来自 Excel 工作表)

mysql - 包含 MySQL 函数 - 意外结果

r - 在城市上创建六边形网格并与经纬度相关联(在 R 中)

oracle - 无法加载 ROracle : unable to load shared object ROracle. 所以 : libclntsh. so.11.1 没有这样的文件或目录