Як реалізувати функцію K двовимірного Ріплі?


9

На зображеному зображенні зображено лісову щілину з червоною сосною, представленою у вигляді кіл, а білу сосну, представлену у вигляді хрестів. Мені цікаво визначити, чи існує позитивна чи негативна зв'язок між двома видами сосен (тобто, ростуть вони чи ні в одних і тих же районах). Мені відомі Kcross і Kmulti в пакеті R spatstat. Однак, оскільки у мене є 50 прогалин для аналізу і я більш знайомий з програмуванням в python, ніж R, я хотів би знайти ітеративний підхід, використовуючи ArcGIS і python. Я також відкритий для R-рішень.

Як я можу реалізувати функцію K двовісної Ріплі?

введіть тут опис зображення


4
Для вашого другого запиту, ви можете отримати деякий натхнення з цієї відповіді . Переміщення етикеток повинно бути легко в Python. Для просторової статистики в Python ви можете подивитися на PySAL .
MannyG

Відповіді:


8

Після багатого пошуку в задніх куточках документації ESRI, я дійшов висновку, що немає розумного способу запустити функцію K двовимірного Ріплі в Arcpy / ArcGIS. Однак я знайшов рішення за допомогою 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
Також у FYI у бібліотеці шпателів є реалізація двовимірного К. Ріплі. Недоцільно визначати досліджувану область за допомогою опуклого корпусу точок, див. Функцію ripras та цитовану літературу.
Енді Ш

2
Зауважте, що ви стандартизуєте нульове очікування навколо нуля і, таким чином, отримуєте статистику Besag-L.
Джефрі Еванс

6

Існує вбудований інструмент сценарію під назвою Multi-Відстань Просторовий аналіз кластерів (K Функція Ripleys) при просторової статистики - Аналіз Patterns Toolset в ArcToolbox. Ви можете прочитати вихідний код інструменту, якщо зайти в його властивості та знайти скрипт, який використовується на вкладці Джерело.


Будь-яка ідея про те, як запустити K як біваріантну функцію в Arc, якщо це взагалі можливо?
Аарон

1
Я впевнений, що це можливо, але я не міг сказати, як це зробити. Ви подивилися вихідний код вбудованого інструменту, щоб побачити, які зміни потрібно внести?
blah238

Вихідний код виглядає досить інтенсивно. Я вирішив досліджувати R-рішення.
Аарон

3
Мені б дійсно не заважало намагатися змінити код ArcGIS Python. Це код спагетті в кращому випадку і не виконує тест на правильність. Для проблем, пов'язаних з двоваріантним точковим процесом, особливо важливо провести тест на значимість Монте-Карло, який доступний в R за допомогою функції «обволікання».
Джефрі Еванс

1
Дякую, Джеффрі, я не знаю, що я думав, рекомендуючи комусь подивитися вихідний код ESRI :)
blah238
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.