本篇接着上篇继续介绍克里金插值。首先加载相关工具包和上篇使用的示例数据:

library(gstat)
library(sf)
library(tidyverse)
library(readxl)
load("G:/RStudies/空间插值/wh.rdata")
load("G:/RStudies/空间插值/stations.rdata")
data <- read_xlsx("G:/RStudies/空间插值/站点数据.xlsx", 1)
data <- left_join(stations, data, by = c("点位名称" = "监测点位"))
grid <- st_make_grid(wh, n = c(100, 100)) %>%st_transform(st_crs(data)) %>% st_sf()

3 泛克里金

在普通克里金的假设下,属性值在各个空间位置的数学期望都是同一个常数,而与空间位置和其他属性无关。泛克里金(Universal Kriging)则允许属性的数学期望与空间位置或其他属性相关,如在实际中对空气污染浓度进行插值时不仅要考虑已知监测点的浓度,还可以考虑海拔、人口密度等因素的影响。

除了其他要素外,属性值还可能具有一定的空间趋势,即空间位置本身也可以作为影响变量。在介绍泛克里金之前,先对趋势面分析做一个简单介绍。

3.1 趋势面分析

计算已知点和待插值点的投影坐标:

coord_data <- st_coordinates(st_geometry(data))
coord_grid <- st_coordinates(st_geometry(grid)) %>%data.frame %>% unique() %>%group_by(L1, L2) %>%summarise(X = mean(X), Y = mean(Y))data$X = coord_data[,1]
data$Y = coord_data[,2]
grid$X = coord_grid$X
grid$Y = coord_grid$Y

趋势面分析可以使用回归模型来度量空间坐标与属性值之间的关系,这里使用最简单的线性回归(由于本篇使用的已知点过少,这里仅做演示):

lm.wh <- lm(可吸入颗粒物 ~ X + Y, data)
summary(lm.wh)##
## Call:
## lm(formula = 可吸入颗粒物 ~ X + Y, data = data)
##
## Residuals:
##     Min      1Q  Median      3Q     Max
## -4.5020 -0.8074  0.6665  0.8134  2.7700
##
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)  9.805e+02  4.928e+02   1.990   0.0938 .
## X            1.961e-04  9.466e-05   2.072   0.0837 .
## Y           -1.845e-04  1.305e-04  -1.414   0.2071
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.374 on 6 degrees of freedom
## Multiple R-squared:  0.5028, Adjusted R-squared:  0.3371
## F-statistic: 3.034 on 2 and 6 DF,  p-value: 0.1229

使用回归结果对待插值点的属性值进行预测:

grid$pred <- predict(lm.wh, grid)

对预测结果进行可视化:

lm.wh <- st_interp(grid, st_union(wh))
wh.border <- st_boundary(wh)ggplot() +geom_sf(data = lm.wh, aes(fill = pred), col = NA) +geom_sf(data = wh.border) +theme_bw() +theme(text = element_text(family = "mono")) +scale_fill_continuous(low = "white", high = "red", name = "PM10")

3.2 泛克里金

趋势面分析没有使用到半变异函数,因此不属于克里金插值。在泛克里金中,可以将趋势面分析融入其中。

泛克里金与普通克里金的主要差别就在于其表达式。在上篇介绍普通克里金的推文中,使用的表达式是可吸入颗粒物 ~ 1,即只有截距而没有解释变量,而在泛克里金中,可以在表达式右侧加入相应的解释变量,本篇使用的表达式是可吸入颗粒物 ~ X + Y(这里仅做技术演示,在实际中可加入地形、人口等因子)。

泛克里金的函数和插值步骤和普通克里金类似:

vg.wh <- variogram(可吸入颗粒物 ~ X + Y, data)
vgm.wh <- vgm(psill = 10, model = "Bes",range = 10000, nugget = 0)
fit.wh <- fit.variogram(vg.wh, vgm.wh)
plot(vg.wh, fit.wh)
  • variogram函数中的表达式为可吸入颗粒物 ~ X + Y

universal.wh <- krige(可吸入颗粒物 ~ X + Y,data, grid, fit.wh)
save(universal.wh, file = "31-1.universal.wh.rdata")## [using universal kriging]
  • krige函数中的表达式也为可吸入颗粒物 ~ X + Y

插值结果可视化:

load("31-1.universal.wh.rdata")
universal.wh <- st_interp(universal.wh, st_union(wh))ggplot() +geom_sf(data = universal.wh, aes(fill = var1.pred), col = NA) +geom_sf(data = wh.border) +theme_bw() +theme(text = element_text(family = "mono")) +scale_fill_continuous(low = "white", high = "red", name = "PM10")

4 简单克里金

简单克里金(Simple Kriging)与泛克里金的区别在于,其表达式中的截距和解释变量中的系数是已知的,在krige函数中使用beta参数表示。

这里通过对泛克里金的插值结果进行线性回归作为已知的系数:

lm(var1.pred ~ x + y, universal.wh)##
## Call:
## lm(formula = var1.pred ~ x + y, data = universal.wh)
##
## Coefficients:
## (Intercept)            x            y
##   1.290e+03    3.482e-04   -2.068e-04
simple.wh <- krige(可吸入颗粒物 ~ X + Y,data, grid, fit.wh, beta = c(1290, 0.0003482, -0.0002068))
save(simple.wh, file = "31-2.simple.wh.rdata")## [using simple kriging]

插值结果可视化:

load("31-2.simple.wh.rdata")
simple.wh <- st_interp(simple.wh, st_union(wh))ggplot() +geom_sf(data = simple.wh, aes(fill = var1.pred), col = NA) +geom_sf(data = wh.border) +theme_bw() +theme(text = element_text(family = "mono")) +scale_fill_continuous(low = "white", high = "red", name = "PM10")

对于普通克里金而言,当其截距已知时也变成了简单克里金。

这里使用监测点的平均浓度作为已知的截距:

mean(data$可吸入颗粒物)## [1] 26
vg2.wh <- variogram(可吸入颗粒物 ~ 1, data)
vgm2.wh <- vgm(psill = 10, model = "Bes",range = 10000, nugget = 0)
fit2.wh <- fit.variogram(vg2.wh, vgm2.wh)simple2.wh <- krige(可吸入颗粒物 ~ 1,data, grid, fit2.wh, beta = 26)
save(simple2.wh, file = "31-3.simple2.wh.rdata")## [using simple kriging]

插值结果可视化:

load("31-3.simple2.wh.rdata")
simple2.wh <- st_interp(simple2.wh, st_union(wh))ggplot() +geom_sf(data = simple2.wh, aes(fill = var1.pred), col = NA) +geom_sf(data = wh.border) +theme_bw() +theme(text = element_text(family = "mono")) +scale_fill_continuous(low = "white", high = "red", name = "PM10")

几种插值方法的结果比较:

想获取示例数据的读者请在公众号后台发送关键词“示例数据”(上篇已获取的读者无需重复获取)。


gstat | 空间插值(三)——克里金插值之泛克里金和简单克里金相关推荐

  1. gstat | 空间插值(四)——克里金插值之协同克里金和交叉验证

    本篇是介绍克里金插值的第三篇推文,也是最后一篇. 因为前面两篇使用的数据中已知点的样本太少,本篇使用gstat工具包说明文档中的数据集.该数据集来自sp工具包. 实际上,gstat工具包的方法对sp和 ...

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

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

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

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

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

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

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

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

  6. ArcGIS之克里金插值教学

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

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

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

  8. 克里金插值(Kriging)在MATLAB中的实现(克里金工具箱)

    一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文 ...

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

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

最新文章

  1. redis字符串匹配_Redis的数据类型和抽象概念介绍
  2. java三段式if_Java几种常用的断言风格你怎么选?
  3. 在CheckBox中,仅仅允许选择一项
  4. linux FreeImage安装编译
  5. Evaluation of Deep Learning Toolkits
  6. 基于依赖统计的方法——TPDA
  7. Quartz CronTrigger时间最完整配置说明
  8. pythonsocket自定义协议_Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器...
  9. 【模拟】NCPC 2014 E ceremony
  10. logback.xml 配置总结
  11. 数据之路 - Python爬虫 - Scrapy框架
  12. 查看User Profile的名称和显示名称
  13. jdbc和mysql做游戏排行榜_MySQL 和 JDBC编程
  14. pygame安装超详细讲解
  15. 计算机主要主机的组成部分包括什么作用,电脑的组成及其作用各是什么
  16. ie首页被篡改解决方法 ie浏览器 ie浏览器首页设置 iexplore.exe触犯注册表防护规则
  17. 上次的计网络课你是不是又旷课了
  18. XCode6如何创建Category
  19. Mybatis| Bug合集
  20. CycleGan脱衣服(男人)

热门文章

  1. Java设计模式学习总结(2)——创建型模式之工厂模式
  2. mysql生活使用方法_MySQL Workbench使用教程
  3. SpiderKeeper的使用
  4. 设置PYTHONIOENCODING
  5. 7 款 Python 可视化工具对比
  6. Git添加多个SSH key公钥
  7. 编程书籍阅读随谈(第一篇)
  8. shell字符串长度
  9. 瑞恩面试编程题:找出一个目录下所有的文件
  10. centos7查看python安装路径