在特定滞后(以m为单位)下使用R中的空间自相关的问题



几天以来,我一直在努力进行一项新的具有挑战性的空间分析,其中包括R中的空间自相关:特别是,我对验证50米(或多或少)网格中设置的点之间的自相关感兴趣。我的目标是测试这些点(我收集数据的位置)之间的自相关,并验证自相关是否随着它们之间距离的增加而减少(这是意料之中的)。我的想法是在每个点(50米、100米、150米等等)周围生成不同的特定米半径,并测试莫兰I自相关指数。最后,我想使用ggplot来显示每个特定距离的MI结果(但一旦我有了MI输出,这很容易得到…)。

我的起始数据帧包含4个列:收集数据的点的ID,在特定点测量的值(z)一个带经度(x)的列和一个带纬度(y)的列,数据显示如下:

#install libraries
library(sp)
library(spdep)
library(splm)
library(ape)
ID<- c(1,2,3,4,5,6)
x<-c(20.99984,20.99889, 20.99806,20.99800,20.99700,20.99732)
y<-c(52.21511,52.21489,52.21464,52.21410,52.21327,52.21278)
z<-c(1.16,0.54,0.89,0.60,1.27,1.45)
data <- data.frame(ID,x,y,z)

我在网上读了很多东西,找到了这个教程https://mgimond.github.io/Spatial/spatial-autocorrelation-in-r.html#morans-i-as-a-function-of-a-dancee-band这实际上表明了我感兴趣的地方:然而,它并不是从真正的开始就起作用的,从我的坐标开始,我认为存在问题,我不知道如何将它们转换为R的正确格式。这是我收到的错误消息:

data <- data.frame(dataPOL$Long , dataPOL$Lat, dataPOL$Human_presence)
coordinates(data) <- c('x','y')`
proj4string(data) <- "+init=epsg:4326"
S.dist  <-  dnearneigh(coordinates, 0, 50) #radius of 50 meters
Error in dnearneigh(coordinates, 0, 50) : Data non-numeric

我没有收到任何答案,但我最终找到了一个解决方案:我发现,在R中处理空间自相关的最常用的包(在我的例子中,Moran I)是spdep和ape。

我两者都试过了:spdep还没起作用,但ape起作用了。以下是我针对具体案例所遵循的教程:

https://stats.idre.ucla.edu/r/faq/how-can-i-calculate-morans-i-in-r/

在计算莫兰指数之前,你应该生成一个距离矩阵,我用包"fields"中的"rdist.tearth"做了这个矩阵。此函数根据数据点的坐标测量每组数据点之间的距离。该函数识别世界不是平的,因此计算出所谓的大圆距离。我为我的具体情况指定了以公里为单位的距离。

为了计算莫兰I,我运行了以下程序:

库(猿)

pop.dists.1<-(popdists>0&popdists<=.06)#半径60米(记住现场数据包以公里或英里为单位)Moran.I(mydataframe$myzvariable,pop.dists.1)

这是我在这个特定半径得到的输出:

pop.dists.1<-(popdists>0&popdists<=.06)#60mMoran.I(dataPOL$Human_presence,pop.dists.1)观察到的$[1] 0.3841241#莫兰指数:在-1和1之间,这里60米以内的点是自相关

$应为[1] -0.009615385

$sd[1] 0.08767598

每股价值美元[1] 7.094019e-06

我重复了我感兴趣的距离的公式:它非常有效,随着距离的增加,Moran I指数接近0(这是我所期望的)。

我将一如既往地使用ggplot绘制单个输出,以便跟踪z变量的空间自相关趋势。

如果需要,希望这将有所帮助!

最新更新