本篇是介绍克里金插值的第三篇推文,也是最后一篇。

因为前面两篇使用的数据中已知点的样本太少,本篇使用gstat工具包说明文档中的数据集。该数据集来自sp工具包。

实际上,gstat工具包的方法对sp和sf两种格式的空间矢量对象同样适用,且使用方法也一致。gstat的说明文档中是以sp为例的,而本系列的推文是以sf对象为例。

加载数据集:

library(sp)
data("meuse")
data("meuse.area")
class(meuse)## [1] "data.frame"names(meuse)##  [1] "x"       "y"       "cadmium" "copper"  "lead"    "zinc"    "elev"
##  [8] "dist"    "om"      "ffreq"   "soil"    "lime"    "landuse" "dist.m"

meuse是数据框结构,记录的是墨兹河附近区域的信息:

  • x和y:点的空间位置;

  • cadmium-zinc:镉、铜、铅、锌四种金属元素的含量;

  • elev:高度;

  • dist:距离墨兹河的距离。

前面已有推文介绍过通过数据框创建sf对象的方法了:

  • sf | 创建空间矢量对象及其投影设置

library(sf)
data <- st_as_sf(meuse, coords = c(x = "x",y = "y"))
class(meuse.area)## [1] "matrix"colnames(meuse.area)## [1] "x" "y"

meuse.area是矩阵结构,记录的是区域边界的点坐标。这里将其转换为sf线对象,作为插值边界:

border <- st_multilinestring(list(meuse.area))

创建插值网格、可视化锌含量的空间分布:

grid <- st_make_grid(border, n = c(100, 100))plot(data["zinc"], reset = F)
plot(border, add = T)

加载相关工具包:

library(gstat)
library(tidyverse)

5 协同克里金

协同克里金(Cokriging)假设多种属性值相互之间存在相关性,因此可以同时对多个属性变量进行插值。协同克里金使用的函数是gstat工具包的同名函数:

gstat(g, id, formula, locations, data, model = NULL, beta,nmax = Inf, nmin = 0, omax = 0, maxdist = Inf, force = FALSE,dummy = FALSE, set, fill.all = FALSE,fill.cross = TRUE, variance = "identity", weights = NULL, merge, degree = 0, vdist = FALSE, lambda = 1.0)

考虑到克里金插值要求变量满足空间平稳性,这里以四种金属元素含量的对数作为插值对象。计算已知点的协同半变异函数值的方法如下:

g <- gstat(NULL, "logCd", log(cadmium) ~ 1, data)
g <- gstat(g, "logCu", log(copper) ~ 1, data)
g <- gstat(g, "logPb", log(lead) ~ 1, data)
g <- gstat(g, "logZn", log(zinc) ~ 1, data)
vg <- variogram(g)plot(vg$dist, vg$gamma)

拟合协同半变异函数的方法如下:

vgm <- vgm(psill = 1, model = "Sph",range = 800, nugget = 1)
fit <- fit.lmc(vg, g, vgm)
plot(vg, fit)

插值过程使用predict函数:

cokrige <- predict(fit, grid)
save(cokrige, file = "32-1.cokrige.rdata")## Linear Model of Coregionalization found. Good.
## [using ordinary cokriging]

插值结果:

load("32-1.cokrige.rdata")
cokrige <- st_interp(cokrige, st_polygonize(border))
names(cokrige)##  [1] "x"               "y"               "logCd.pred"      "logCd.var"
##  [5] "logCu.pred"      "logCu.var"       "logPb.pred"      "logPb.var"
##  [9] "logZn.pred"      "logZn.var"       "cov.logCd.logCu" "cov.logCd.logPb"
## [13] "cov.logCu.logPb" "cov.logCd.logZn" "cov.logCu.logZn" "cov.logPb.logZn"
## [17] "geometry"
  • logCd.predlogCu.pred等即为插值结果,logCd.varlogCu.var等为相应的插值结果的方差。

以锌为例对插值结果进行可视化:

ggplot(data = cokrige) +geom_sf(aes(fill = exp(logZn.pred)), col = NA) +geom_sf(data = border) +theme_bw() +theme(text = element_text(family = "mono")) +scale_fill_continuous(low = "white", high = "red", name = "Zn")

6 交叉验证

可以使用交叉验证(Cross Validation,CV)对插值结果进行评价。常使用的k折交叉验证(K-fold cross-validation)将样本平均分为k份,其中k-1份作为训练样本,剩余1份作为验证样本,重复k次。

单变量克里金插值(即非协同克里金)的交叉验证函数为krige.cv

krige.cv(formula, locations, model = NULL, ..., beta = NULL, nmax = Inf, nmin = 0, maxdist = Inf,nfold = nrow(locations), verbose = interactive(), debug.level = 0)
  • nfold:k参数;

  • verbose:控制是否显示进度条的参数。

v.fit <- vgm(0.59, "Sph", 874, 0.04)
cv <- krige.cv(log(zinc) ~ 1, data, v.fit,nfold = 5, verbose = T)cor(cv$var1.pred, cv$observed)## [1] 0.8510259

协同克里金的交叉验证函数为gstat.cv

gstat.cv(object, nfold, remove.all = FALSE,verbose = interactive(), all.residuals = FALSE, ...)

gstat.cv函数默认只对第一个属性变量进行交叉验证:

  • object:gstat函数的输出结果;

  • all.residuals:若为TRUE,则生成所有变量的预测残差。

cv2 <- gstat.cv(g, verbose = T)
cor(cv2@data$logCd.pred, cv2@data$observed)## [1] 0.5563733

gstat | 空间插值(四)——克里金插值之协同克里金和交叉验证相关推荐

  1. ArcGIS中使用协同克里金插值(co-kriging interplotation )对气象数据插值

    ArcGIS中如何使用协同克里金插值(co-kriging interplotation )对气象数据插值 ANUSPLIN气象站点数据插值局限性 百度搜索ArcGIS 克里金插值 搭建梯子搜索Arc ...

  2. gstat | 空间插值(三)——克里金插值之泛克里金和简单克里金

    本篇接着上篇继续介绍克里金插值.首先加载相关工具包和上篇使用的示例数据: library(gstat) library(sf) library(tidyverse) library(readxl) l ...

  3. gstat | 空间插值(二)——克里金插值之普通克里金

    说明:昨天的推文误把可吸入颗粒物当作PM2.5,实应该为PM10,这里修正后重发. 从本篇开始计划分三篇介绍克里金插值.与反距离权重插值不同,克里金插值是无偏估计,其中也涉及到模型估计.本篇先对普通克 ...

  4. 克里金插值中重要参数变量

    ArcGIS中,克里金插值是地统计向导中地统计插值创建表面的一个重要模块,其中包括普通克里金.简单克里金.通用克里金.指示器克里金.概率克里金.析取克里金.经验贝叶斯克里金和面插值. 涉及到克里金插值 ...

  5. 基于主动学习和克里金插值的空气质量推测

    基于主动学习和克里金插值的空气质量推测 常慧娟, 於志文, 於志勇, 安琦, 郭斌 西北工业大学计算机学院,陕西 西安 710072 福州大学数学与计算机科学学院,福建 福州 350108    摘要 ...

  6. ArcGIS之克里金插值教学

    本文来自:GIS科研实验室 基本概念 1.什么是克里金插值? 克里金插值又称空间局部插值法,是以半变异函数理论和结构分析为基础,在有限区域内对区域化变量进行无偏最优估计的一种方法,是地统计学的主要内容 ...

  7. GNSS速度场简易MATLAB克里金插值

    引言   由于GPS观测点分布离散且不均匀,在进行应变计算和分析前,需要对速度场进行插值,获得均匀分布的速度场.一般采用Kriging 法估计在均匀网格节点上的速度值,需要下载克里金MATLAB工具箱 ...

  8. matlab 克里金插值,克里金插值(arcgis克里金插值步骤)

    1. 克里格方法概述 克里格方法(Kriging)又称空间局部插值法,是以变异函数理论和结构分析为基础, 在有限区域内对区域化变量进行无偏最优估计的一种方法,是地. 克里金差值最后的出来的克里金误差有 ...

  9. 普通克里金插值的详细计算步骤,适合初学者。

    普通克里金插值基本步骤: 1.衡量各点之间空间相关程度的测度是半方差,其计算公式为: h为样本点之间的距离:n为由h分开的成对样本点的数量:z为点的属性值(高程或其他属性值). 计算半方差时步骤如下: ...

最新文章

  1. Decode()函数使用技巧
  2. docker添加新的环境变量_Docker的安装及部署Spring Boot项目操作详解!
  3. 学习JS的正则表达式
  4. .NET对象克隆的深究(转)
  5. excel实战应用案例100讲(六)-社会判断理论:模型及应用
  6. 软引用、弱引用、虚引用
  7. 【动态规划】完全背包:存钱罐(恰好装满)
  8. Linux下udev详细介绍
  9. 文章采集代理ip怎么用?
  10. c语言 除法优化,【小课堂】汇编级除法优化
  11. 全网显示 IP 归属地,是怎么实现的?
  12. 华硕重装后进入bios_华硕电脑重装系统后开机直接进入BIOS原因分析及解决方法...
  13. 风袖第一阶段之每周上新
  14. 安卓跳转应用市场评论
  15. 怎么用python实现回归_手把手教你用Python进行回归(附代码、学习资料)-阿里云开发者社区...
  16. bugku ctf 你必须让他停下
  17. matlab仿真整流电路设计,基于MatlabGUI的整流电路仿真设计
  18. 161206 ANFIS 自适应模糊神经网络
  19. 任天堂计划在2021年升级交换机控制台和主要游戏
  20. 生活随记-四十年流水线

热门文章

  1. 云计算架构师分享:容器云在金融企业的落地方案 | 周末送资料(原题:某保险公司容器云PaaS平台建设实践经验分享)
  2. 消息中间件学习总结(12)——Kafka与RocketMQ的多Topic对性能稳定性的影响比较分析
  3. SVN学习总结(4)——解决Win10 SVN图标不显示问题
  4. 算法学习总结(1)——基本数据结构
  5. win 二进制门安装mysql_PG二进制包编译Windows下mysql_fdw
  6. php排序算法算法,PHP排序算法之基数排序(Radix Sort)实例详解
  7. unity的inputField文本框赋值问题
  8. iOS开发之UIApplication
  9. System Center 2012 R2实例3—SCOM之SharePoint全方位监视11—服务监视
  10. DAY04 WINDOWS 文件的共享以及FTP服务器的搭建