Визначення, чи дерева в лісових розривах кластеруються за допомогою R?


14

Доданий набір даних показує приблизно 6000 саджанців приблизно в 50 лісових розривів змінних розмірів. Мені цікаво дізнатися, як ці саджанці ростуть у відповідних прогалинах (тобто кластеризовані, випадкові, розпорошені). Як ви знаєте, традиційним підходом було б керувати глобальним Мораном I. Однак, агрегація дерев в межах агрегації прогалин здається невідповідним використанням Moran's I. Я провів декілька статистичних тестів з Moran's I, використовуючи порогову відстань 50 метрів, що дало безглузді результати (тобто р-значення = 0,0000000 ...). Взаємодія між розривом сукупності, ймовірно, дасть ці результати. Я вважав, що створити сценарій, щоб провести цикл через окремі прогалини на балдахіні та визначити кластеризацію в межах кожного проміжку, хоча показ цих результатів для громадськості було б проблематичним.

Який найкращий підхід для кількісного визначення кластеризації в кластерах?

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


1
Аарон, ти кажеш, що ти спробував запустити I Морана, цікавишся ти, як оцінити, як атрибут саджанця порівнюється з атрибутами сусідніх саджанців (тобто ти маєш справу з маркованим точковим малюнком)? Заголовок начебто означає, що вас цікавить лише розташування саджанців відносно один одного, а не їх атрибути.
MannyG

@MannyG Так, мені цікаво лише визначити, чи саджанці кластеризовані відносно розташування інших саджанців у межах будь-якої лісової щілини. Цікавий лише один вид, і розмір саджанців не представляє інтересу.
Аарон

Відповіді:


7

У вас немає єдиного випадкового поля, тому спроба проаналізувати всі ваші дані одразу призведе до порушення припущень будь-якої статистики, яку ви вирішите вирішити. Повідомлення незрозуміло, чи ваші дані є позначеним точковим процесом (тобто діаметром або висотою, пов’язаною з кожним місцеположенням дерева). Якщо ці дані не представляють собою позначений процес, я не знаю, як ви застосували Moran's-I. Якщо дані представляють лише просторові локації, я рекомендую використовувати Ripley's-K з перетворенням Besag-L для стандартизації нульового очікування при нулі. Це дозволяє здійснювати багатомасштабну оцінку кластеризації. Якщо ваші дані мають пов’язане значення, то найкращим варіантом буде локальний Moran's-I (LISA). Я б насправді дивився на це з обома статистичними даними. Незалежно від вашого вибору, вам все одно доведеться прокручувати кожен окремий сайт, щоб отримати дійсні результати. Ось декілька прикладів R-коду для моделювання Монте-Карло для моделювання Ripley-K / Besag's-L за допомогою вбудованого набору даних про саджанці червоного дерева. Це має бути досить простим, щоб змінити це, щоб переглядати ваші веб-сайти та створювати графік для кожного.

# ADD REQUIRED PACKAGES
require(sp)
require(spatstat)
options(scipen=5)

# USE REDWOOD SAPLING DATASET
spp <- SpatialPoints(coords(redwood))

###################################################
###### START BESAG'S-L MONTE CARLO  ANALYSUS ######
###################################################
# CREATE CONVEX HULL FOR ANALYSIS WINDOW                       
W=ripras(coordinates(spp)) 

# COERCE TO spatstat ppp OBJECT
spp.ppp=as.ppp(coordinates(spp), W)                     
  plot(spp.ppp) 

# ESTIMATE BANDWIDTH
area <- area.owin(W)
lambda <- spp.ppp$n/area
 ripley <- min(diff(W$xrange), diff(W$yrange))/4
   rlarge <- sqrt(1000/(pi * lambda))
     rmax <- min(rlarge, ripley)
bw <- seq(0, rmax, by=rmax/10)  

# CALCULATE PERMUTED CROSS-K AND PLOT RESULTS       
Lenv <- envelope(spp.ppp, fun="Kest", r=bw, i="1", j="2", nsim=99, nrank=5, 
                 transform=expression(sqrt(./pi)-bw), global=TRUE)            
plot(Lenv, main="Besag's-L", xlab="Distance", ylab="L(r)", legend=F, col=c("white","black","grey","grey"), 
    lty=c(1,2,2,2), lwd=c(2,1,1,1) )
     polygon( c(Lenv$r, rev(Lenv$r)), c(Lenv$lo, rev(Lenv$hi)), col="lightgrey", border="grey")
       lines(supsmu(bw, Lenv$obs), lwd=2)
       lines(bw, Lenv$theo, lwd=1, lty=2)
         legend("topleft", c(expression(hat(L)(r)), "Simulation Envelope", "theo"), pch=c(-32,22),
                col=c("black","grey"), lty=c(1,0,2), lwd=c(2,0,2), pt.bg=c("white","grey"))

1
Але ви не можете просто використовувати опуклий корпус як вікно для вашого точкового шаблону! Пам'ятайте, що вікно - це область, в якій діє візерунок, який створює точки. Ви апріорі знаєте, що дерева ростуть лише в цих встановлених регіонах, і ви повинні встановити своє вікно, щоб це відобразило. Ви можете пом'якшити це, встановивши діапазон K (r) на щось дуже мале, розміром 0,3x розміру ваших полян, але ви отримаєте необ’єктивні результати через відсутність корекції крайового ефекту. Джефрі використовує розмір всієї досліджуваної області для визначення свого rmax.
Спайсмен

1
У моєму прикладі, так, я використовую весь регіон. Саме тому я рекомендував перебирати через кожний зразок (проміжок). Кожен раз, коли ви підміняєте певну область вибірки, ви повторювали б аналіз. Ви не можете розглядати всю досліджувану область як своє випадкове поле, оскільки у вас немає постійної вибірки. Маючи лише пробіли у вибірці, ви фактично маєте незалежні сюжети. Функція Kest, яку я закликаю, за замовчуванням використовує корекцію краю "кордону". Доступні й інші варіанти корекції краю. Я б заперечував, що ваш експериментальний підрозділ - це розрив навісу і його слід проаналізувати як такий.
Джефрі Еванс

1
Подумавши про це трохи більше. Ви дійсно повинні використовувати багатокутники, які представляють кожен проміжок як ваше вікно. Якщо ви поставите перед вашою проблемою відображення експериментальної одиниці, то CSR і K будуть упередженими, оскільки площа не відображає фактично розмір проміжку навісу. Це питання як в моїх, так і в @ Spacedman рекомендаціях.
Джефрі Еванс

2
Зауважте, мій розширений приклад використовував лише грубу сітку, оскільки це був досить простий спосіб створити щось із приблизно правильною структурою. Ваша маска повинна виглядати як карта ваших відкритих лісових масивів. Технічно неправильно намагатися визначити маску з даних!
Спайсмен

1
@Spacedman. Мені подобається ваш підхід, і він, безумовно, ефективний. Моє особливе занепокоєння полягає в тому, що прогалини під навісом є експериментальним підрозділом. У вашому підході, якщо два проміжки є проксимальними, пропускна здатність може правдоподібно включати спостереження з різних одиниць вибірки. Крім того, отримана статистика не повинна відображати "пул" експериментальних одиниць, але повинна бути репрезентативною для кожної одиниці та висновку про просторовий процес, що складається із загальних зразків для експериментальних одиниць. Якщо його розглядати по всьому світу, це представляє собою нестаціонарний процес інтенсивності, що порушує статистичні припущення.
Джефрі Еванс

4

У вас є точкова картина з вікном, що представляє собою ряд малих роз'єднаних полігональних областей.

Ви повинні мати можливість використовувати будь-який з тестів package:spatstatна КСВ до тих пір, поки ви подаєте їх у правильному вікні. Це може бути або кількість наборів пар (x, y), що визначають кожне очищення, або двійкової матриці значень (0,1) на простір.

Спочатку давайте визначимо щось, що трохи схоже на ваші дані:

set.seed(310366)
nclust <- function(x0, y0, radius, n) {
               return(runifdisc(n, radius, centre=c(x0, y0)))
             }
c = rPoissonCluster(15, 0.04, nclust, radius=0.02, n=5)
plot(c)

і давайте робити вигляд, що наші галявини - це квадратні комірки, які просто так:

m = matrix(0,20,20)
m[1+20*cbind(c$x,c$y)]=1
imask = owin(c(0,1),c(0,1),mask = t(m)==1 )
pp1 = ppp(x=c$x,y=c$y,window=imask)
plot(pp1)

Таким чином, ми можемо побудувати K-функцію цих точок у цьому вікні. Ми очікуємо, що це не буде КСВ, оскільки точки, здається, згруповані у клітинках. Зауважте, що я повинен змінити діапазон відстаней, щоб бути невеликим - порядку порядку розміру комірки - інакше K-функція оцінюється на відстані за розміром усього шаблону.

plot(Kest(pp1,r=seq(0,.02,len=20)))

Якщо ми генеруємо кілька точок CSR в одних і тих же осередках, ми можемо порівняти графіки K-функції. Цей має бути більше схожим на КСВ:

ppSim = rpoispp(73/(24/400),win=imask)
plot(ppSim)
plot(Kest(ppSim,r=seq(0,.02,len=20)))

два точкових візерунка у виправлених вікнах

Насправді ви не можете побачити точки, скупчені у клітинках у першому шаблоні, але якщо ви побудуєте їх самостійно у графічному вікні, його зрозуміло. Точки другого шаблону є рівномірними всередині комірок (і не існують у чорній області), і K-функція явно відрізняється від Kpois(r), КС-функція КС для кластеризованих даних і аналогічна для рівномірних даних.


2

Окрім посади Енді:

Те, що ви хочете обчислити, - це міра просторової однорідності (ерго гіпотеза: "Чи ваші точки згруповані?"), Такі як L та K функції Ріплі .

У цій публікації в блозі досить добре пояснюється практична робота в R. Виходячи з описаного коду, я спершу позначував би кожен кластер у вашому наборі даних, а потім обчислював у циклі для кожного кластера критичну оболонку через K Ripley's K


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