R语言geodetector包基于栅格图像实现地理探测器操作

简介: R语言geodetector包基于栅格图像实现地理探测器操作

  本文介绍基于R语言中的geodetector包,依据多张栅格图像数据,实现地理探测器Geodetector)操作的详细方法。

  需要说明的是,在R语言中进行地理探测器操作,可以分别通过geodetector包、GD包等2个包实现。其中,geodetector包是地理探测器模型的原作者团队早先开发的,其需要保证输入的自变量数据已经全部为类别数据;而GD包则是另外一位学者开发的,其可以自动实现自变量数据的最优离散化方法选取与执行——即我们可以直接把自变量带入这一包中,无需额外进行数据的离散化。本文介绍的是基于前者,即geodetector包实现地理探测器的具体操作;基于后者的方法,大家可以参考R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散化https://blog.csdn.net/zhebushibiaoshifu/article/details/128538199)。此外,如果希望基于Excel实现地理探测器,大家可以参考Geodetector软件下载、地理探测器的应用实践与结果解读https://blog.csdn.net/zhebushibiaoshifu/article/details/124526189)这篇文章。

1 包的配置与导入

  首先,我们可以先到geodetector包在R语言中的官方网站https://cran.r-project.org/web/packages/geodetector/index.html),大致了解一下该包的简要介绍、开发团队、其他依赖包等基本信息;如下图所示。

  随后,我们开始geodetector包的下载与安装。输入如下所示的代码,即可开始包的下载与安装过程。

install.packages("geodetector")

  输入代码后,按下回车键,运行代码;如下图所示。

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

  接下来,输入如下的代码,将geodetector包导入。

library(geodetector)

  此时,在RStudio右下方的“Packages”中,可以看到geodetector包处于选中的状态,表明其已经配置成功,且完成导入。

2 栅格数据读取与预处理

  接下来,我们首先依据R语言raster包批量读取单一或大量栅格图像https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中提到的方法,读取栅格数据。因为我们是要基于栅格数据完成地理探测器的分析,因此很显然是需要批量导入多张栅格数据的。

  读取栅格数据完毕后,我们通过如下代码,基于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软件下载、地理探测器的应用实践与结果解读https://blog.csdn.net/zhebushibiaoshifu/article/details/124526189)即可,我们这里只做简单的介绍。

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)操作的完整流程。

欢迎关注:疯狂学习GIS

相关文章
|
3月前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
21天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
40 3
|
2月前
|
数据采集
基于R语言的GD库实现地理探测器并自动将连续变量转为类别变量
【9月更文挑战第9天】在R语言中,可通过`gd`包实现地理探测器。首先,安装并加载`gd`包;其次,准备包含地理与因变量的数据框;然后,使用`cut`函数将连续变量转换为分类变量;最后,通过`gd`函数运行地理探测器,并打印结果以获取q值等统计信息。实际应用时需根据数据特点调整参数。
126 8
|
6月前
【R语言实战】——fGARCH包在金融时序上的模拟应用
【R语言实战】——fGARCH包在金融时序上的模拟应用
|
6月前
|
存储 算法 Windows
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(下)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
5月前
|
Python
R语言遍历文件夹求取其中所有栅格文件的平均值
通过NAvalue(tif_file_all) <- -10000这句代码,将值为-10000的像元作为NoData值的像元,防止后期计算平均值时对结果加以干扰。   接下来,我们通过file.path()函数配置一下输出结果的路径——其中,结果遥感影像文件的名称就可以直接以其所对应的条带号来设置,并在条带号后添加一个_mean后缀,表明这个是平均值的结果图像;但此外,这个仅仅是文件的名字,还需要将文件名与路径拼接在一起,才可以成为完整的保存路径,因此需要用到file.path()函数。最后,将结果图像通过writeRaster()函数加以保存即可,这句代码的解释大家同样参考R语言求取大量遥感
179 0
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据分享|R语言对论文作者研究机构、知识单元地理空间数据可视化
数据分享|R语言对论文作者研究机构、知识单元地理空间数据可视化
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为

热门文章

最新文章