基于R语言的GD库实现地理探测器并自动将连续变量转为类别变量
<p> 本文介绍基于<strong>R</strong>语言中的<code>GD</code>包,依据<strong>栅格影像</strong>数据,实现自变量<strong>最优离散化方法</strong>选取与执行,并进行<strong>地理探测器</strong>(<strong>Geodetector</strong>)操作的方法。</p><p> 首先,在<strong>R</strong>语言中进行<strong>地理探测器</strong>操作,可通过<code>geodetector</code>包、<code>GD</code>包等<code>2</code>个包实现。其中,<code>geodetector</code>包是<strong>地理探测器模型</strong>的原作者团队开发的,其需要保证输入的<strong>自变量数据</strong>已经全部为<strong>类别数据</strong>;其具体操作方法大家可以参考地理探测器R语言实现:geodetector。而<code>GD</code>包则是另一位学者开发的,其可自动实现<strong>自变量数据</strong>的<strong>最优离散化方法</strong>选取与执行;本文介绍的就是基于<code>GD</code>包实现<strong>地理探测器</strong>的具体操作。此外,如果希望基于<strong>Excel</strong>实现<strong>地理探测器</strong>,大家可以参考地理探测器Geodetector下载、使用、结果分析方法。</p>
<h1 id="1-包的安装与导入">1 包的安装与导入</h1>
<p> 首先,我们可以先到<code>GD</code>包在<strong>R</strong>语言中的官方网站,大致了解一下该包的简要介绍、开发团队等基本信息。</p>
<p> 随后,我们开始<code>GD</code>包的下载与安装。输入如下所示的代码,即可开始包的下载与安装过程。</p>
<pre><code class="language-r">install.packages("GD")
</code></pre>
<p> 输入代码后,按下<code>回车</code>键,运行代码;如下图所示。在安装<code>GD</code>包时,会自动将其所需依赖的其他包(如果在此之前没有配置过)都一并配置好,非常方便。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092408810-291045765.png"></p>
<p> 接下来,输入如下的代码,将<code>GD</code>包导入。</p>
<pre><code class="language-r">library("GD")
</code></pre>
<p> 输入代码后,按下<code>回车</code>键,运行代码;如下图所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092342004-842886467.png"></p>
<h1 id="2-数据读取与预处理">2 数据读取与预处理</h1>
<p> 接下来,我们需要读取栅格图像数据,并将其转为<code>GD</code>包可以识别的<strong>数据框</strong>(<code>Data Frames</code>)格式。</p>
<p> 其中,读取栅格数据的方法,大家参考基于R语言的raster包读取遥感影像即可;关于数据格式的转换,大家参考地理探测器R语言实现:geodetector即可。这一部分的内容本文就不再赘述。</p>
<h1 id="3-地理探测器执行">3 地理探测器执行</h1>
<p> 接下来,我们就可以开始地理探测器的具体分析;强烈建议大家基于<code>GD</code>包中的<code>gdm()</code>函数,实现一步到位的地理探测器分析操作。</p>
<p> 首先,如果大家输入数据中的<strong>自变量</strong>数据具有<strong>连续变量</strong>,需要将其转换为<strong>类别变量</strong>;<code>gdm()</code>函数可以实现<strong>连续变量</strong>的<strong>离散化方式寻优</strong>与<strong>自动执行</strong>。其中,我们可以选择的<strong>离散化方式</strong>包括<strong>相等间隔法</strong>、<strong>自然间断点法</strong>、<strong>分位数分类法</strong>、<strong>几何间隔法</strong>与<strong>标准差法</strong>等<code>5</code>种不同的方法,分别对应以下第一句代码中的<code>"equal"</code>、<code>"natural"</code>、<code>"quantile"</code>、<code>"geometric"</code>与<code>"sd"</code>等<code>5</code>个选项。此外,我们还可以依据数据的特征,对自变量离散化的类别数量加以限定,具体代码如下所示。</p>
<pre><code class="language-r">discmethod <- c("equal", "natural", "quantile", "geometric", "sd")
discitv <- c(4:10)
</code></pre>
<p> 其中,上述第一句代码表示,我们后续将从<strong>相等间隔法</strong>、<strong>自然间断点法</strong>、<strong>分位数分类法</strong>、<strong>几何间隔法</strong>与<strong>标准差法</strong>等<code>5</code>种不同的方法中,找到<strong>每一个连续变量</strong>对应的<strong>最优离散化方法</strong>;第二句代码则表示,在后续寻找最优离散化方法的同时,还需要对每一个变量的<strong>分类数量</strong>加以寻优——<code>c(4:10)</code>就表示我们分别将<strong>每一个连续变量</strong>分为<code>4</code>类、<code>5</code>类、<code>6</code>类,以此类推,一直到<code>10</code>类,从其中找到最优结果对应的<strong>类别数量</strong>。</p>
<p> 接下来,我们即可调用<code>gdm()</code>函数,执行<strong>地理探测器</strong>分析的具体操作;其中,<code>my_gd</code>为保存地理探测器结果的变量;函数的第一个参数,表示因变量与自变量的关系,<code>~</code>前的变量即为<strong>因变量</strong>,<code>~</code>后的变量即为<strong>自变量</strong>,多个<strong>自变量</strong>之间通过<code>+</code>相连接;第二个参数表示<strong>自变量</strong>中的<strong>连续变量</strong>,程序将自动对这些<strong>连续变量</strong>加以<strong>离散化方法寻优与执行</strong>;第三个参数表示存储自变量与因变量数据的<strong>数据框</strong>(<code>Data Frames</code>)格式的变量;最后两个变量,即为前面我们选择的<strong>离散化方法</strong>与<strong>类别数量</strong>。</p>
<pre><code class="language-r">my_gd <- gdm(A_LCCS0 ~ C_SlopeS0 + D_AspectS0 + DEM_Reclass + F_LCS0,
continuous_variable = c("C_SlopeS0", "D_AspectS0"),
data = tif_frame,
discmethod = discmethod,
discitv = discitv)
</code></pre>
<p> 这里需要注意,如果大家不是通过脚本运行的<strong>R</strong>语言,而是每次写一句代码然后按下<code>回车</code>键运行一下,那么上述代码中的换行就需要通过同时按下<code>Shift</code>键与<code>回车</code>键实现。输入上述代码后,如下图所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092342108-1743858422.png"></p>
<p> 随后,即可运行代码。稍等片刻(具体时长与数据量有关),即可得到地理探测器的结果<code>my_gd</code>。这一变量的具体结构、内容如下图所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092341988-851147321.png"></p>
<p> 我们可以输入如下的代码,将变量<code>my_gd</code>打印出来。</p>
<pre><code class="language-r">my_gd
</code></pre>
<p> 所得结果如下图所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092342126-1792196158.png"></p>
<p> 可以看到,<code>my_gd</code>变量包含了<strong>每一个连续变量</strong>在离散化后,对应的最优<strong>离散化方法</strong>与<strong>类别数量</strong>,以及<strong>地理探测器</strong>的各个分析结果。具体结果的含义与研读方法,大家参考地理探测器Geodetector下载、使用、结果分析方法,以及地理探测器R语言实现:geodetector这两篇文章即可,这里就不再赘述。</p>
<p> 此外,我们可以通过如下的代码,将上述结果加以可视化。</p>
<pre><code class="language-r">plot(my_gd)
</code></pre>
<p> 运行上述代码,结果如下图所示。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092342078-330732584.png"></p>
<p> 此时,在<strong>RStudio</strong>软件的右下方“<strong>Plots</strong>”中,即可看到可视化结果,如下图所示。其中,我们可以通过下图中红色方框内的箭头,实现不同图片的切换显示。</p>
<p><img src="https://img2024.cnblogs.com/blog/3080295/202403/3080295-20240325092342171-1560419479.png"></p>
<p> 上述结果包含<code>7</code>张图像,其分别与<strong>上上图</strong>中的<code>7</code>项输出内容对应——第一张图是<strong>最优离散化方法</strong>的选取过程,第二张图则是所选出的最优离散化方法对应的<strong>分类情况</strong>;后<code>5</code>张图就是地理探测器的分析结果图,即上上图中最后<code>5</code>个<code>plot</code>分别对应的结果。</p>
<p> 至此,我们就完成了基于<strong>R</strong>语言中的<code>GD</code>包,依据多张<strong>栅格图像</strong>数据,实现类别变量的自动离散化,并进行<strong>地理探测器</strong>(<strong>Geodetector</strong>)操作的完整流程。</p><br><br>
来源:https://www.cnblogs.com/fkxxgis/p/18093713
頁:
[1]