地理探测器学习与应用(二)
地理探测器学习与应用(二)
上一次推文中我们讲了地理探测器的一些基本原理,这次我们来尝试按照王老师论文中给的方法和数据进行一些应用。由于我对R比较熟悉,所以这次以R语言为例进行实验。
地理探测器R包
地理探测器已由徐成东老师主导,做好了一个R包(geodetector)发布在了CRAN,大家可以通过文末阅读原文跳转CRAN地理探测器包所在页面。
地理探测器R包安装
可以直接使用RStudio安装R包,具体的R语言安装可以参考下面的图片,跳转对应推文阅读。
地理探测器包所需的包
R语言中,一个包的功能往往还需要其它包来支撑,地理探测器包也不例外。地理探测器需要以下包的支持:
sp (≥ 1.2-7), rgeos (≥ 0.3-26), rgdal (≥ 1.2-16), maptools
正常情况下,R语言安装geodetector的时候会自动将所需的其它包安装上,但是有时候可能会因为一些错误无法完成安装,这个时候就需要我们手动先将上面的四个包安装完后,再安装geodetector
应用案例:新生儿神经管畸形空间变异的环境因子识别
这个案例是王老师论文中的第一个案例,同时对应的数据也打包到了R包里面,作为实例案例。接下来我们根据这个案例来看一看detector包是如何工作的。
加载包并查看数据
使用下面语句加载geodetector包,加载练习数据CollectData
library(geodetector)
data("CollectData")
加载数据后,我们发现,这是一个185行,4列的数据框
我截取了两行数据,进行了一下解释:
Y因变量 | X1自变量 | X2自变量 | X3自变量 |
---|---|---|---|
incidence | watershed | soiltype | elevation |
数值量 | 类型量 | 类型量 | 类型量 |
7.20 | 2 | 3 | 6 |
7.01 | 2 | 3 | 6 |
接下来我们一个一个看地理探测器的四个探测功能,为了和地理探测器学习与应用(一)文中介绍的顺序保持一致,我就不按R包帮助顺序讲了。好,我们一个一个看。
1. 分异及因子探测
下面的语句是单因子探测,针对CollectData数据框中的土壤类型(soiltype)自变量,探测对发病率(incidence)的解释力。
factor_detector("incidence","soiltype",CollectData)
运行完后,输出如下结果,可以看出,土壤类型的q值为0.3857168,p值较大,由此可知,土壤类型对发病率的解释力较低,土壤类型和新生儿神经管畸形发病率的关系不大。
地理探测器同时可以探测多个因子对于因变量的解释力,代码示例如下:
factor_detector (1,c(2,3,4),CollectData)
由下图可以看出,地理探测器给出了三个因子分别对于发病率的q值和p值,流域(watershed)的q值最大,p值最小,其次是高程(elevation)因素,由此我们可以推断,新生儿神经管畸形发病可能和水有关。
2. 交互作用探测
下面的代码可以计算三个因子和因变量之间的交互作用关系:
interaction_detector("incidence",c("soiltype","watershed","elevation"),CollectData)
计算结果如下:
最后一列为q(X1∩X2)的结果,但是没有比较,先以第一行为例说明一下吧,后续我再慢慢改进代码。
"soiltype" "watershed" "0.735680548139531"
这个是土壤和流域两个因子的相互作用,那么我们先对应找这俩因子各自的q值
q | p | id |
---|---|---|
0.638 | 0.000117 | watershed |
0.386 | 0.363 | soiltype |
结合上一篇文章中交互作用探测结果,我们发现,q(X1∩X2)大于q(X1)、q(X2)中最大的一个,满足第3个双因子增强关系。
3. 风险区探测
风险区探测同样可以由如下一条代码完成:
risk_detector(1,c(2,3,4),CollectData)
风险区探测计算结果如下图:
TRUE,通过零假设,两个子区域间属性均值不存在明显差异: FALSE,拒绝零假设,两个子区域间属性均值存在明显差异。
4. 生态探测
实例代码如下:
ecological_detector("incidence",c("soiltype","watershed","elevation"),CollectData)
用于比较两因子X1、X2对属性Y空间分布的影响是否有显著差异。生态探测结果如下:
TRUE,通过零假设,两因子X1、X2对属性Y空间分布无显著差异; FALSE,拒绝零假设,两因子X1、X2对属性Y空间分布有显著差异。
以上是R语言中运行地理探测器的实例和讲解,欢迎大家留言讨论。
参考文献
王劲峰, 徐成东. 地理探测器:原理与展望[J]. 地理学报, 2017, 72(001):116-134. https://cran.r-project.org/web/packages/geodetector/index.html