地理探测器R语言实现:geodetector
本文介绍基于R语言中的geodetector包,依据多张栅格图像数据,实现地理探测器(Geodetector)操作的详细方法。
需要说明的是,在R语言中进行地理探测器操作,可以分别通过geodetector包、GD包等2个包实现。其中,geodetector包是地理探测器模型的原作者团队早先开发的,其需要保证输入的自变量数据已经全部为类别数据;而GD包则是另外一位学者开发的,其可以自动实现自变量数据的最优离散化方法选取与执行——即我们可以直接把自变量带入这一包中,无需额外进行数据的离散化。本文介绍的是基于前者,即geodetector包实现地理探测器的具体操作;基于后者的方法,我们将在后期的博客中介绍。此外,如果希望基于Excel实现地理探测器,大家可以参考地理探测器Geodetector下载、使用、结果分析方法这篇文章。
1 包的配置与导入
首先,我们可以先到geodetector包在R语言中的官方网站,大致了解一下该包的简要介绍、开发团队、其他依赖包等基本信息;如下图所示。

随后,我们开始geodetector包的下载与安装。输入如下所示的代码,即可开始包的下载与安装过程。
install.packages("geodetector")
输入代码后,按下回车键,运行代码;如下图所示。

随后,将自动下载并配置geodetector包;此外,在安装geodetector包时,会自动将其所需依赖的其他包(如果在此之前没有配置过)都一并配置好,非常方便。

接下来,输入如下的代码,将geodetector包导入。
library(geodetector)
此时,在RStudio右下方的“Packages”中,可以看到geodetector包处于选中的状态,表明其已经配置成功,且完成导入。

2 栅格数据读取与预处理
接下来,我们首先依据基于R语言的raster包读取遥感影像中提到的方法,读取栅格数据。因为我们是要基于栅格数据完成地理探测器的分析,因此很显然是需要批量导入多张栅格数据的。
读取栅格数据完毕后,我们通过如下代码,基于getValues()函数,从原本的RasterStack格式的数据中,将栅格数据的像元数值提取出来;随后,基于View()函数显示出这一变量。
tif_file_all_matrix <- getValues(tif_file_all)
View(tif_file_all_matrix)
运行上述代码,将在RStudio的左上方看到变量tif_file_all_matrix的数据情况,如下图所示。可以看到,此时tif_file_all_matrix变量是一个3列、6377265行的矩阵(Matrix)数据;其中,每一列表示每一个图层的数据,每一行则是每一个图层在同一空间位置上各自像元的数值。此外,每一列的名称即为其所对应的图层的名称。

从上图可以看出,每一列数据中都有很多无效值(NA值),即原本栅格图像中的无效值(NoData值);由于在后期的地理探测器分析过程中,出现无效值会影响我们分析的结果,因此我们需要通过na.omit()函数将无效值去除。na.omit()是一个非常方便的函数,其可以将Matrix数据中存在NA值的行直接去除(只要这一行中存在至少一个NA,就将这一行去除)。
tif_matrix = na.omit(tif_file_all_matrix)
View(tif_matrix)
随后,我们再看得到的新变量,可以看到存在NA值的行都不复存在了;如下图所示。

接下来,由于geodetector包实现地理探测器操作时,需要保证输入数据为数据框(Data Frames)格式,因此我们需要将Matrix转为Data Frames;通过as.data.frame()函数即可实现这样的转换。
tif_frame <- as.data.frame(tif_matrix)
View(tif_frame)
运行上述代码,可以看到已经获取到Data Frames格式的变量tif_frame了;当然,从外观上看,其和Matrix格式的变量tif_matrix其实长得是一样的。

完成上述数据预处理操作,我们即可开始地理探测器操作。需要注意的是,本文开头也提到了,基于geodetector包实现地理探测器操作时,如果输入的自变量数据是连续数据,我们需要手动将连续数据转为类别数据。这一步骤可以通过ArcGIS的重分类等工具来实现,这里就不再赘述。
3 地理探测器分析
完成上述数据预处理操作,我们即可开始地理探测器的各项具体操作。需要注意的是,本文主要对分析的具体方法加以介绍;至于分析结果的详细研读方法,大家参考文章地理探测器Geodetector下载、使用、结果分析方法即可,我们这里只做简单的介绍。
3.1 分异及因子探测
首先,我们进行分异及因子探测。在geodetector包中,我们可以基于factor_detector()函数实现这一操作。其中,"A_LCCS0"是本文中的因变量,"DEM_Reclass"与"F_LCS0"则是本文中的自变量;tif_frame则是Data Frames格式变量的名称。
在这里需要注意,如果大家只需要分析一个自变量与因变量的影响关系,用下方第一句代码所示的格式即可;如果需要分析多个自变量与因变量的影响关系,则需要用下方第二句代码所示的格式,将多个自变量的名称通过c()函数,组成一个向量(Vector)格式的变量即可。
factor_detector("A_LCCS0", "F_LCS0", tif_frame)
factor_detector("A_LCCS0", c("DEM_Reclass", "F_LCS0"), tif_frame)
我们首先以上述第一句代码为例来运行,运行后稍等片刻(具体时长与数据量的大小有关),将会得到如下所示的分异及因子探测结果。

其次,再运行上述第二句代码,得到如下所示的结果。

可以看到,factor_detector()函数将会给出每一个自变量对于因变量的q值与p值。
3.2 交互作用探测
接下来,我们执行交互作用探测;这一操作通过interaction_detector()函数来执行即可。由于交互作用探测是需要对多个不同的自变量加以组合,所以很显然这一操作在只有一个自变量的情况下是没有办法执行的;因此我们需要用前述第二种代码格式,即通过c()函数,将多个自变量的名称组成一个向量(Vector)格式的变量后加以执行。
interaction_detector("DEM_Reclass", c("F_LCS0", "K_NDVI"), tif_frame)
运行上述代码,稍等片刻后将出现如下所示的结果。

可以看到,interaction_detector()函数将会给出每一种自变量组合方式对应的q值。但是这里有一个问题——上述结果只能看到不同组合对应的q值变化,但是似乎看不出这种组合方式到底属于非线性减弱、单因子非线性减弱、双因子增强、独立、非线性增强中的哪一种情况。
3.3 风险区探测
接下来,我们执行风险区探测;这一操作通过risk_detector()函数来实现即可,同样是具有一个自变量和多个自变量的情况。我们这里就直接以多个自变量的情况来展示代码与结果了。
risk_detector("A_LCCS0", c("DEM_Reclass", "F_LCS0"), tif_frame)
运行上述代码,稍等片刻后将出现如下所示的结果。

可以看到,risk_detector()函数首先将会给出每一种自变量的不同分级中,对应的因变量平均值——这里自变量的分级指的就是重分类后其的每一个分类;其次,其将给出每一种自变量的分级与分级对应的平均值之间,是否具有显著性差异。
3.4 生态探测
接下来,我们执行生态探测;这一操作通过ecological_detecto()函数来实现即可。由于生态探测是需要判断多个不同的自变量中,两两之间是否具有显著差异,所以很显然这一操作同样在只有一个自变量的情况下是没有办法执行的;因此我们需要用前述第二种代码格式,即通过c()函数,将多个自变量的名称组成一个向量(Vector)格式的变量后加以执行。
ecological_detector("A_LCCS0", c("DEM_Reclass", "F_LCS0"), tif_frame)
运行上述代码,稍等片刻后将出现如下所示的结果。

至此,我们就完成了基于R语言中的geodetector包,基于多张栅格图像数据,实现地理探测器(Geodetector)操作的完整流程。
地理探测器R语言实现:geodetector的更多相关文章
- R语言回归、anova方差分析、相关性分析 《精品购物指南》调研数据可视化|附代码数据
全文链接:http://tecdat.cn/?p=30990 最近我们被客户要求撰写关于回归.anova方差分析.相关性分析的研究报告,包括一些图形和统计输出. 在分析时,我们向客户演示了用R语言回归 ...
- 地理探测器简介(R语言)
地理探测器 1. 地理探测器原理 空间分异性是地理现象的基本特点之一.地理探测器是探测和利用空间分异性的工具.地理探测器包括4个探测器. 分异及因子探测:探测Y的空间分异性:以及探测某因子X多大程度上 ...
- R语言:克里金插值
基于空间自相关,R语言克里金插值 library(gstat) Warning message: In scan(file = file, what = what, sep = sep, quote ...
- R语言绘制空间热力图
先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...
- R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- openNLP是NLP中比较好的开源工具,R语 ...
- R语言 一套内容 从入门 到放弃
[怪毛匠子整理] 1.下载 wget http://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.0.1.tar.gz 2.解压: tar -zxvf R-3.0. ...
- R语言 ggplot2包
R语言 ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...
- 【转】R语言知识体系概览
摘要:R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢.本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言. 最近遇到很多的程序员都想转行到数据分析,于是就开 ...
- R语言和中国地图
上图是R语言绘制的按地域分布的数据图.更科学,更严谨,也更有质感的样子. 今天瞎写点东西,我在想数据分析的意义是什么,也许就是研究事物存在的形式.而事物存在的形式是什么样子呢,从最初的三维空间,爱因斯 ...
- R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标|附代码数据
全文下载链接:http://tecdat.cn/?p=27515 最*我们被客户要求撰写关于主成分PCA.因子分析.聚类的研究报告,包括一些图形和统计输出. 建立重庆市经济指标发展体系,以重庆市一小时 ...
随机推荐
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ 业务场景详解)--学习笔记
2.6.5 RabbitMQ -- 业务场景详解 异步处理 应用解耦 流量削锋 日志处理 异步处理 串行方式 并行方式 异步方式 串行方式 _userRepo.Add(user); _emailSer ...
- JS 前序遍历、中序遍历、后序遍历、层序遍历详解,深度优先与广度优先区别,附leetcode例题题解答案
壹 ❀ 引 按照一天一题的速度,不知不觉已经刷了快两多月的leetcode了,因为本人较为笨拙,一道简单的题有时候也会研究很久,看着提交了两百多次,其实也才解决了70来道简单题,对于二分法,双指针等也 ...
- zookeeper源码(08)请求处理及数据读写流程
ServerCnxnFactory 用于接收客户端连接.管理客户端session.处理客户端请求. ServerCnxn抽象类 代表一个客户端连接对象: 从网络读写数据 数据编解码 将请求转发给上层组 ...
- 使用yum查询系统安装的软件及可以更新的软件并单独指定升级某一个软件
Linux系统下yum命令查看安装了哪些软件包: $yum list installed //列出所有已安装的软件包 yum针对软件包操作常用命令: 1.使用YUM查找软件包 命令:yum searc ...
- 【Unity3D】屏幕深度和法线纹理简介
1 前言 1)深度纹理和法线纹理的含义 深度纹理本质是一张图片,图片中每个像素反应了屏幕中该像素位置对应的顶点 z 值相反数(观察坐标系),之所以用 "反应了" 而不是 & ...
- Linux下SQLPLUS替代工具rlwrap安装使用
rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [root@asm RedHat]# ...
- 代码+案例,实战解析BeautifulSoup4
本文分享自华为云社区<从HTML到实战:深入解析BeautifulSoup4的爬虫奇妙世界>,作者:柠檬味拥抱. 网络上的信息浩如烟海,而爬虫技术正是帮助我们从中获取有用信息的重要工具.在 ...
- 从零开始学Spring Boot系列-Hello World
欢迎来到从零开始学Spring Boot的旅程!在这个系列的第二篇文章中,我们将从一个非常基础但重要的示例开始:创建一个简单的Spring Boot应用程序,并输出"Hello World& ...
- js之以面向对象的形式书写贪吃蛇
此代码存在一定的小bug,当蛇出边界之后存在一定的小问题 分析贪吃蛇功能需求: 1.食物 (1)每次生成一个,位置随意但不可超出规定范围 (2)每次蛇吃到食物之后,前一个食物消失同时新的食物又生成 ( ...
- [golang] 概念: struct vs interface
struct vs interface go语言的简化哲学: class = struct + receiver method set 注意: go 语言的struct,在参数传递中,是值拷贝. st ...