如何实现二元Ripley的K函数?


9

随附的图像显示了一个森林间隙,赤松表示为圆圈,白松表示为十字架。我有兴趣确定两种松树之间是否存在正关联或负关联(即它们是否在同一地区生长)。我知道R spatstat套件中的Kcross和Kmulti。但是,由于我需要分析50个空白并且比R更熟悉python编程,因此我想找到一种使用ArcGIS和python的迭代方法。我也愿意接受R解决方案。

如何实现二元Ripley的K函数?

在此处输入图片说明


4
对于第二个查询,您可能会从此答案中汲取一些灵感。标签的改组在Python中应该很容易。对于Python中的空间统计,您可能需要查看PySAL
MannyG

Answers:


8

在ESRI文档的各个角落进行了大量搜索之后,我得出结论,没有合理的方法在Arcpy / ArcGIS中运行双变量Ripley的K函数。但是,我发现了使用R的解决方案:

# Calculates an estimate of the cross-type L-function for a multitype point pattern.
library(maptools)
library(spatstat)
library(sp)

# Subset certain areas within a points shapefile.  In this case, features are grouped by gap number
gap = 1

# Read the shapefile
sdata = readShapePoints("C:/temp/GapPoints.shp")  #Read the shapefile
data = sdata[sdata$SITE_ID == gap,]  # segregate only those points in the given cluster

# Get the convex hull of the study area measurements
gapdata = readShapePoints("C:/temp/GapAreaPoints_merged.shp")  #Read the shapefile that is used to estimate the study area boundary
data2 = gapdata[gapdata$FinalGap == gap,]  # segregate only those points in the given cluster
whole = coordinates(data2) # get just the coords, excluding other data
win = convexhull.xy(whole) # Convex hull is used to get the study area boundary
plot(win)

# Converting to PPP
points = coordinates(data) # get just the coords, excluding other data
ppp = as.ppp(points, win) # Convert the points into the spatstat format
ppp = setmarks(ppp, data$SPECIES) # Set the marks to species type YB or EH
summary(ppp) # General info about the created ppp object
plot(ppp) # Visually check the points and bounding area

# Plot the cross type L function
# Note that the red and green lines show the effects of different edge corrections
plot(Lcross(ppp,"EH","YB"))

# Use the Lcross function to test the spatial relationship between YB and EH
L <- envelope(ppp, Lcross, nsim = 999, i = "EH", j = "YB")
plot(L)

3
仅供参考,spatstat库具有双变量Ripley K的实现。通过点的凸包定义研究区域是不合适的,请参见ripras函数和引用的文献。
Andy W

2
请注意,您正在将零期望值标准化为零左右,从而得出Besag-L统计信息。
杰弗里·埃文斯

6

在ArcToolbox中的空间统计 - 分析模式工具集下,有一个内置的脚本工具,称为多距离空间聚类分析(Ripleys K函数)。如果进入工具的属性并找到“源”选项卡中使用的脚本,则可以阅读该工具的源代码。


如果有可能,如何将K作为Arc的双变量函数运行?
亚伦

1
我敢肯定这是有可能的,不过我无法告诉您该怎么做。您是否查看了内置工具的源代码以查看需要进行哪些修改?
blah238

源代码看起来很紧张。我选择探索R解决方案。
亚伦

3
我真的不会费心尝试修改ArcGIS Python代码。充其量是意大利面条代码,并且不执行正确的重要性测试。对于双变量点过程问题,执行蒙特卡洛重要性检验特别重要,该检验在R中可使用“包络”功能。
杰弗里·埃文斯

1
感谢Jeffrey,我不知道我在想什么,建议任何人查看ESRI源代码:)
blah238
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.