Orman boşluklarındaki ağaçların R?


14

Ekli veri kümesi yaklaşık 50 değişken boyutlu orman boşluğunda yaklaşık 6000 fidan gösterir. Bu fidanların kendi boşlukları içinde nasıl büyüdüğünü öğrenmekle ilgileniyorum (yani kümelenmiş, rastgele, dağınık). Bildiğiniz gibi, geleneksel bir yaklaşım Global Moran'ın I'sini çalıştırmak olacaktır. Ancak, boşlukların kümeleri içindeki ağaçların toplanması Moran I'in uygunsuz bir kullanımı gibi görünüyor. Moran'ın I ile 50 metre eşik mesafesi kullanarak bazı test istatistiklerini çalıştırdım, saçma sapan sonuçlar üretti (yani p değeri = 0.0000000 ...). Boşluk toplamaları arasındaki etkileşim muhtemelen bu sonuçları doğurmaktadır. Her ne kadar halka bu sonuçları görüntülemek sorunlu olsa da, bireysel gölgelik boşlukları döngü ve her boşluk içinde kümeleme belirlemek için bir komut dosyası oluşturmayı düşündüm.

Kümeler içinde kümelenmeyi ölçmek için en iyi yaklaşım nedir?

resim açıklamasını buraya girin


1
Aaron, Moran I'i çalıştırmayı denediğini söylüyorsun, bir fidan özniteliğinin komşu fidan öznitelikleriyle nasıl karşılaştırıldığını ölçmek ister misin (yani işaretli bir nokta modeliyle mi uğraşıyorsun )? Başlığı olduğunu ima etmek gibi görünüyor sadece ilgilenen konuma birbirlerine ve onların nitelikleri göreli fidan.
MannyG

@MannyG Evet, sadece fidanların herhangi bir orman boşluğundaki diğer fidanların konumlarına göre kümelenip kümelenmediğini belirlemekle ilgileniyorum. Sadece bir tür ilgi vardır ve fidanların büyüklüğü ilgi çekmez.
Aaron

Yanıtlar:


7

Tek tip rastgele bir alanınız olmadığından, tüm verilerinizi bir kerede analiz etmeye çalışmak, soruna atmayı seçtiğiniz herhangi bir istatistiğin varsayımlarını ihlal edecektir. Verilerinizin işaretli bir nokta işlemi olup olmadığı (yani, her bir ağaç konumuyla ilişkili çap veya yükseklik) gönderinizden belirsizdir. Eğer bu veriler işaretli bir nokta sürecini temsil etmiyorsa, bir Moran-I nasıl uyguladığınızı bilmiyorum. Veriler yalnızca uzamsal konumları temsil ediyorsa, sıfır beklentisini sıfırlamak için Besag-L dönüşümüyle bir Ripley's-K kullanmanızı öneririm. Bu, kümelenmenin çok ölçekli bir değerlendirmesine olanak tanır. Verileriniz ilişkili bir değere sahipse, en iyi seçeneğiniz yerel bir Moran'ın I (LISA) olmasıdır. Aslında her iki istatistikle de bakardım. Seçiminiz ne olursa olsun, geçerli sonuçlar elde etmek için yine de her bir sitede dolaşmanız gerekir. Yerleşik sekoya fidanı veri kümesini kullanarak Ripley's-K / Besag's-L'nin Monte Carlo simülasyonu için bazı örnek R kodu. Sitelerinizde dolaşmak ve her biri için bir grafik oluşturmak üzere bunu değiştirmek oldukça basit olmalıdır.

# 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
Ama dışbükey gövdeyi nokta modeliniz için pencere olarak kullanamazsınız! Pencere, noktaları üreten desenin çalıştığı alandır. A priori'yi biliyorsunuz, ağaçların sadece bu belirli bölgelerde büyüdüğünü ve pencerenizi bunu yansıtacak şekilde ayarlamanız gerektiğini biliyorsunuz. K (r) aralığını, açıklıklarınızın 0,3x büyüklüğünde çok küçük bir şeye ayarlayarak hafifletebilirsiniz, ancak kenar efekti düzeltmelerinin olmaması nedeniyle taraflı sonuçlar elde edersiniz. Jeffrey rmax değerini tanımlamak için tüm çalışma alanının büyüklüğünü kullanıyor.
Spacedman

1
Örneğimde, Evet tüm bölgeyi kullanıyorum. Bu tam olarak neden her örnek sitesi (boşluk) arasında döngü tavsiye. Belirli bir örnek alana her alt ayar yaptığınızda, analizi yeniden çalıştırabilirsiniz. Sürekli örneklemeniz olmadığından, çalışma alanının tamamını rastgele alanınız olarak değerlendiremezsiniz. Sadece örneklenmiş boşluklara sahip olmak, aslında, bağımsız arsalara sahiptir. Aradığım Kest işlevi, varsayılan olarak bir "kenar" kenar düzeltmesi kullanır. Başka kenar düzeltme seçenekleri de mevcuttur. Deney biriminizin kanopi boşluğu olduğunu ve bu şekilde analiz edilmesi gerektiğini savunuyorum.
Jeffrey Evans

1
Bunu biraz daha düşünürken. Gerçekten her boşluğu pencere olarak temsil eden çokgenler kullanmalısınız. Sorununuzu deney birimini yansıtacak şekilde alt kümeye ayarlarsanız, alan gerçek gölgelik boşluğu boyutunu yansıtmadığından CSR ve K önyargılı olur. Bu hem benim hem de @ Spacedman'ın önerilerinde bir sorundur.
Jeffrey Evans

2
Genişletilmiş örneğimin sadece kaba bir ızgara kullandığını unutmayın, çünkü kabaca doğru yapıya sahip bir şey oluşturmanın oldukça basit bir yoluydu. Maskeniz açık orman alanlarınızın haritası gibi görünmelidir. Maskeyi verilerden tanımlamaya çalışmak teknik olarak yanlış!
Spacedman

1
@Spacedman. Yaklaşımınızı seviyorum ve kesinlikle verimli. Benim özel endişem, kanopi boşluklarının deney ünitesi olmasıdır. Yaklaşımınızda, iki boşluk proksimal ise, bant genişliği muhtemelen farklı örnekleme birimlerinden gelen gözlemleri içerebilir. Ayrıca, ortaya çıkan istatistik, deneysel birimlerin "havuzunu" yansıtmamalı, her birimin temsili olmalı ve deneysel birimlerdeki ortak modellerden çizilen uzamsal süreçten çıkarım yapmalıdır. Küresel olarak tedavi edilirse, istatistiksel varsayımları ihlal eden durağan olmayan bir yoğunluk sürecini temsil eder.
Jeffrey Evans

4

Sahip olduğunuz bir dizi küçük bağlantısız çokgen bölge olan pencereli bir nokta deseni.

package:spatstatDoğru bir pencereyle beslediğiniz sürece CSR için yapılan testlerden herhangi birini kullanabilmeniz gerekir . Bu, her bir temizlemeyi tanımlayan bir dizi (x, y) çifti kümesi veya boşluk üzerinde (0,1) değerinde ikili bir matris olabilir.

Önce verilerinize benzeyen bir şey tanımlayalım:

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)

ve açıklıklarımızın şu anda gerçekleşen kare hücreler olduğunu varsayalım:

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)

Böylece bu pencerelerin bu noktalarının K fonksiyonunu çizebiliriz. Noktaların hücreler içinde kümelenmiş göründüğü için bunun KSS dışı olmasını bekliyoruz. Dikkat: Uzaklık aralığını, hücre boyutunun sırasına göre küçük olacak şekilde değiştirmek zorundayım, aksi takdirde K-fonksiyonu, tüm paternin büyüklüğü olan mesafeler boyunca değerlendirilir.

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

Aynı hücrelerde bazı CSR noktaları oluşturursak, K-fonksiyonu grafiklerini karşılaştırabiliriz. Bu daha çok KSS gibi olmalıdır:

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

düzensiz pencerelerde iki nokta deseni

İlk desende hücrelerde kümelenmiş noktaları gerçekten göremezsiniz, ancak bir grafik penceresinde kendi başına çizerseniz, bu açıktır. İkinci örüntüdeki noktalar hücreler içinde aynıdır (ve siyah bölgede mevcut değildir) ve K-fonksiyonu, Kpois(r)kümelenmiş veriler için CSR K-fonksiyonundan açıkça farklıdır ve muntazam veriler için benzerdir.


2

Andy'nin gönderisine ek olarak:

Hesaplamak istediğiniz şey, Ripley'in L ve K fonksiyonu gibi uzamsal homojenliğin bir ölçüsüdür (hipotez: "Puanlarınız kümelenmiş mi?") .

Bu blog gönderisi R'deki nasıl yapılacağını gayet iyi açıklıyor. Açıklanan koda dayanarak, ilk önce veri kümenizdeki her kümeyi etiketledim ve sonra her küme için kritik zarfı Ripley'nin K'sinden hesaplayın


Şu anda cevabımı sildim. Bazı kısa analizler, K-araçlarına dayanan parselleri fırsatçı olarak tanımlamanın, yerel istatistiklerin şans eseri önerilenden daha fazla kümelenmesini önermiş olduğunu öne sürdü. Bu cevap hala +1 olsa da geçerlidir (sadece verilerden pencerelerin oluşturulması orijinal cevabımın önerdiğinden daha sorunludur).
Andy W
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.