地理探测器学习

一、为什么选择了地理探测器

(1)因变量Y和自变量x的两个空间分布的一致性也仅映了这两个变量的关联性,这种关联既包括线性部分,也包括非线性部分,可以用地理探测器度量这种关联性。线性回归模型和地理探测器的目的都是通过建立两个变量的统计关系,进而提示可能的因果关系。
(2)当线性回归显著时,地理探测器必然显著;当线性回归不显著时,地理探测器仍然可能显著;两变量只要有关系,地理探测器就能够探测出。

(3)地理探测器原理保证了其对多自变量共线性免疫。

二、地理探测器原理

地理探测器是分析空间分异性的工具,其核心思想是—如果某个自变量对某个因变量有影响,那么自变量的空间分布和因变量的空间分布应该趋干一致。
地理探测器括四个探测器:
(1)因子探测器:探测自变量多大程度上解释了因变量的空间分异;
(2)交互探测器:交互探测可以定量表征两个自变量对于因变量格局的作用关系;
(3)风险探测器:用于判断两个子区域间的属性均值是否有显著性的差别,揭示了哪些自变量是因变量显著的高值或低值,以t统计量来检验;
(4)生态探测器:用于比较两个自变量对因变量属性的空间分布的影响是否有显著的差异,即比较不同自变量解释力的相对重要性差异,以F统计量来衡量;

三、地理探测器应用

1、地理探测器(excel)下载地址:http://www.geodetector.cn/

2、地理探测器-R包“GD”使用应用:

(1)安装Rtool:shttps://cran.rstudio.com/bin/windows/Rtools

仅在源代码中使用C / C ++ / Fortran代码构建R软件包时才需要rtools。

(2)安装地理探测器-R包“GD”

> #安装GD包
> install.packages("GD") 
> #引用GD包
> library(GD) 

(3)地理探测器-R包“GD”应用代码

csv表格内只留了需要的自变量和因变量,且自变量均为数字类型,而其他多于的属性都删掉了,gdm才能运行gdm,不知道为什么。

> #读取文件
> data <- read.csv("E:/geodetector/data.csv", header = TRUE, sep = ",")
> #设置最优离散化的可选参数
> #可选方法:相等、自然、分位数、几何、sd和手动
> discmethod <- c("equal","natural","quantile","geometric","sd") 
> #空间数据离散化分成4~6类
> discitv <- c(4:6)
> #定义连续变量
> #进行空间数据离散化处理
> continuous_variable <- colnames(data)[-c(1,7)]
> #调用gdm函数
> result <- gdm(GKDM ~ ., continuous_variable = continuous_variable, data = data, discmethod = discmethod, discitv = discitv)
> #显示分析结果
> result
> #显示分析图表
> plot(result)

遇到的错误

(1)生成R包需要Rtools,但当前未安装,下载Rtools并重新启动RStudio。

Warning in install.packages :unable to access index for repository
https://cran.rstudio.com/src/contrib:无法打开URL’https://cran.rstudio.com/src/contrib/PACKAGES’
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

(2) 变量不是数字

Error in disc(x, f.itv, method = f.method) : var is not numeric

> #不想返工一下子将所有变量转数字
> testdata$GKDM=as.numeric(testdata$GKDM)
> testdata$POPU=as.numeric(testdata$POPU)
> testdata$GDP=as.numeric(testdata$GDP)
> testdata$ONE=as.numeric(testdata$ONE)
> testdata$TWO=as.numeric(testdata$TWO)
> testdata$THREE=as.numeric(testdata$THREE)
> testdata$GDZCTZ=as.numeric(testdata$GDZCTZ)

(3)需要TRUE/FALSE值的地方不可以用缺少值

Error in if (formula.vars[2] == “.”) { :
需要TRUE/FALSE值的地方不可以用缺少值

> #计算数据集中的缺失值总数
> sum(is.na(data))
> #当一笔数据是完整的,回传TRUE;当一笔数据有遗漏值,回传FALSE
> complete.cases(data)
> #返回缺失值的位置
> which(is.na(data))

在检查的过程中没有缺失值,也不懂为什么报错,当我把所有不要的变量删除后,就可以成功运行了。

【参考资料】
空间数据分析教程-王劲峰-科学出版社
地理探测器:原理与展望-王劲峰-地理学报
基于地理探测器的北京市居民宜居满意度影响机理-湛东升-地理科学进展
GD-参考手册

上一篇:Robots 题解(暴力bitset)


下一篇:关于文件的复制、重命名、移动、删除操作