案例分析:回归-克里金方法生成气温表面图(1)
,欢迎也在微信公众号查看。
背景知识
本部分内容主要是对气象站点的气温进行回归-克里金(regression-kriging,RK)插值生成气温表面图。RK方法是地统计中常用的方法,由趋势项和残差项构成。趋势项在该例中通过以气温为因变量,高程、站点到海岸线的距离为自变量,建立二着的线性模型,对残差建立克里金模型。使用RK的唯一要求是存在一个或多个与因变量显著相关的协变量。本例中将会用到七种回归算法,并利用10-fold CV来进行验证和均方根误差作为评估(Root-mean-square error,RMSE)。
10-fold CV(10-foldcross-validation),一种交叉验证方法,将数据集分成10份,轮流将其中9份用于训练,1份用于测试,循环10次,求准确度的平均值。
七种方法
- Interpolation:
- 普通克里金(Ordinary Kriging,OK)
- 相关参数说明(半变异函数、变程等)
- 可查看以下视频https://www.bilibili.com/video/BV13E411T74X/
- 普通克里金(Ordinary Kriging,OK)
- Regression:
- 广义线性模型(Generalized Linear Model,GLM)
- 广义加性模型 (Generalized Additive Models, GAM)
- 随机森林模型(Random Forest ,RF)
- Regression-kriging:
- GLM + OK of residuals
- GAM + OK of residuals
- RF + OK of residuals
案例实现
本例中的数据是1950-2000年95个站点每天的平均气温,辅助数据为Elevation (Elev in meters a.s.l.), Distance to the coastline (distCoast in degrees); Latitude (Lat in degrees), and, Longitude (Lon in degrees).
数据下载
https://raw.githubusercontent.com/joaofgoncalves/R_exercises_raster_tutorial/master/data/CLIM_DATA_PT.zip
数据解压至F:/test/data-raw
library(raster)
## Loading required package: sp
setwd("F:/test/data-raw")
fl <- list.files("climData/rst", pattern = ".tif$", full.names = TRUE)
# 创建栅格数据集合
rst <- stack(fl)
# 修改名字
names(rst) <- c("distCoast", "Elev", "Lat", "Lon")
plot(rst)
读入每个站点的气温及对应的其它变量值
climDataPT<-read.csv("climData/clim_data_pt.csv")
climDataPT<-na.omit(climDataPT)
knitr::kable(head(climDataPT,n=10))
StationName |
StationID |
Lat |
Lon |
Elev |
AvgTemp |
distCoast |
Sagres |
1 |
36.98 |
-8.95 |
40 |
16.3 |
0.0000000 |
Faro |
2 |
37.02 |
-7.97 |
8 |
17.0 |
0.0201246 |
Quarteira |
3 |
37.07 |
-8.10 |
4 |
16.6 |
0.0090000 |
Vila do Bispo |
4 |
37.08 |
-8.88 |
115 |
16.1 |
0.0360000 |
Praia da Rocha |
5 |
37.12 |
-8.53 |
19 |
16.7 |
0.0000000 |
Tavira |
6 |
37.12 |
-7.65 |
25 |
16.9 |
0.0458912 |
S. Br醩 de Alportel |
7 |
37.17 |
-7.90 |
240 |
15.9 |
0.1853213 |
Vila Real Sto. Ant髇io |
8 |
37.18 |
-7.42 |
7 |
17.1 |
0.0127279 |
Monchique |
9 |
37.32 |
-8.55 |
465 |
15.0 |
0.1980000 |
Zambujeira |
10 |
37.50 |
-8.75 |
106 |
15.0 |
0.0450000 |
将csv数据转为sp对象
proj4Str <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
statPoints <- SpatialPointsDataFrame(coords =climDataPT[,c("Lon","Lat")],
data= climDataPT,proj4string = CRS(proj4Str))
par(mfrow=c(1,2),mar=c(5,6,3,2))
plot(rst[["Elev"]], main="Elevation and weather stations",
xlab = "Longitude", ylab="Latitude")
plot(statPoints, add=TRUE)
hist(climDataPT$AvgTemp, xlab= "Temperature (ºC)", main="Annual avg. temperature")
从上面的左图可看出站点更多的分布在低纬沿海岸地区,右图反映出气温直方图是左偏的。接下来,我们通过计算相关系数矩阵来分析下气温与其它变量相关性强度。
library(corrplot)
corMat<-cor(climDataPT[,3:ncol(climDataPT)])
corrplot.mixed(corMat,number.cex=0.8,tl.cex=0.9,tl.col="black",
outline=F,mar = c(0,0,2,2),upper = "square",bg=NA)
相关系数图表明高程和纬度的相关性较大,与distCoast的相关性 较小,在建立模型的过和中,是可考虑将其删除的。
案例分析:回归-克里金方法生成气温表面图(1)相关推荐
- ArcGIS之克里金插值教学
本文来自:GIS科研实验室 基本概念 1.什么是克里金插值? 克里金插值又称空间局部插值法,是以半变异函数理论和结构分析为基础,在有限区域内对区域化变量进行无偏最优估计的一种方法,是地统计学的主要内容 ...
- 克里金插值法(kringing)与PHPnow集成开发环境
文章目录 摘要 1.克里金插值法 1.1 什么是克里金? 1.2 克里金法公式 1.3 公式推导 1.3.1 假设条件 1.3.2 半方差函数 1.3.3 代价函数 2.对普通克里金插值的思考 3.p ...
- GEE:克里金 Kriging 空间插值(以陕西省2013年生物量为例)
作者:CSDN @ _养乐多_ 本文记录了在Google Earth Engine(GEE)平台上进行 Kriging 插值的介绍和代码案例.本文通过选取的2013年陕西省生物量样本点数据为例,利用 ...
- [kriging](一)网上下载的kriging克里金的C++程序的初步调试
笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中. 初步 克里金法现在在许多软件都已经有集成了,据笔者所知: arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方 ...
- ArcGIS教程:克里金法的工作原理(二)
根据经验半变异函数拟合模型 下一步是根据组成经验半变异函数的点拟合模型.半变异函数建模是空间描述和空间预测之间的关键步骤.克里金法的主要应用是预测未采样位置处的属性值.经验半变异函数可提供有关数据集的 ...
- 克里金(Kriging)插值的原理与公式推导
转自:http://xg1990.com/blog/archives/222 学过空间插值的人都知道克里金插值,但是它的变种繁多.公式复杂,还有个半方差函数让人不知所云 本文讲简单介绍基本克里金插值的 ...
- MIKE水动力笔记13_数字化海图2之克里金插值
本文目录 前言 Step 1 调出地统计分析工具 Step 2 克里金插值设置 Step 3 调整图幅范围及裁剪 Step 4 转为栅格文件并保存 前言 在进行MIKE水动力建模之初,需要准备好水深数 ...
- matlab克里金插值法,克里金(Kriging)插值的原理与公式推导
学过空间插值的人都知道克里金插值,但是它的变种繁多.公式复杂,还有个半方差函数让人不知所云 本文讲简单介绍基本克里金插值的原理,及其推理过程,全文分为九个部分: 0.引言-从反距离插值说起 1.克里金 ...
- 15.4 普通克里金插值
1.加载数据 2.半方差云图分析 3.克里金插值,打开空间统计向导 用象限搜索 查看均方根误差 自动优化选择模型 各向异性 查看各项指标,衡量插值效果 4.导出结果 5.按边界掩膜提取 符号化配 ...
最新文章
- 23个CVPR 2020收录的新数据集,都在这里了!
- Linxu嵌入式汇编语言
- 【翻译】.NET 5 Preview8发布
- Multiple annotations found at this line: ---关于android string.xml %问题
- python安装各种插件
- truffle unbox react 出坑指南
- python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用
- Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)
- 无法复制_desktop:访问被拒绝的解决方法
- BGP(3):BGP 的路径优选
- Go语言实战-golang操作Mongodb
- linux 中meltdown指令,宇宙最强,meltdown论文中英文对照版(二)
- 最全UnityHub下载链接Unity2022~2017各版本+Unity5.x【间歇性更新】
- X上面有一道横线,怎么打出来?
- VIVADO中IO管脚分配 IO PLANING
- 如何扩充C盘空间,不需要删除其余盘的任何东西。
- Intellij IDEA2019版激活方式
- Python处理PDF——PyMuPDF的安装与使用(1)
- GDKOI2018爆炸记
- 221. k8s_v1.15addons插件部署