Xác định xem cây trong khoảng trống rừng có được phân cụm bằng R không?


14

Bộ dữ liệu đính kèm cho thấy khoảng 6000 cây con trong khoảng 50 khoảng trống rừng có kích thước thay đổi. Tôi quan tâm đến việc tìm hiểu làm thế nào những cây con này phát triển trong các khoảng trống tương ứng của chúng (tức là phân cụm, ngẫu nhiên, phân tán). Như bạn đã biết, một cách tiếp cận truyền thống sẽ là chạy Global Moran's I. Tuy nhiên, tập hợp các cây trong các khoảng trống dường như là cách sử dụng không phù hợp với Moran's I. Tôi đã chạy một số thống kê thử nghiệm với Moran I sử dụng khoảng cách ngưỡng 50 mét, tạo ra kết quả vô nghĩa (ví dụ p-value = 0,0000000 ...). Sự tương tác giữa các tập hợp khoảng cách có khả năng tạo ra những kết quả này. Tôi đã xem xét việc tạo một tập lệnh để lặp qua các khoảng trống tán riêng lẻ và xác định phân cụm trong mỗi khoảng trống, mặc dù việc hiển thị các kết quả này cho công chúng sẽ có vấn đề.

Cách tiếp cận tốt nhất để định lượng phân cụm trong các cụm là gì?

nhập mô tả hình ảnh ở đây


1
Aaron, bạn nói rằng bạn đã thử chạy Moran's I, bạn có quan tâm đến việc đo lường làm thế nào thuộc tính của một cây con so sánh với các thuộc tính của cây con lân cận (tức là bạn đang xử lý một mẫu điểm được đánh dấu )? Tiêu đề dường như ngụ ý rằng bạn chỉ quan tâm đến vị trí của cây non so với nhau và không thuộc tính của chúng.
MannyG

@MannyG Có, tôi chỉ quan tâm đến việc xác định xem các cây con có được phân cụm liên quan đến vị trí của các cây con khác trong bất kỳ khoảng trống rừng nào không. Chỉ có một loài quan tâm và kích thước của cây non không được quan tâm.
Aaron

Câu trả lời:


7

Bạn không có trường ngẫu nhiên thống nhất, do đó, việc cố gắng phân tích tất cả dữ liệu của bạn cùng một lúc sẽ vi phạm các giả định của bất kỳ thống kê nào bạn chọn để đưa ra vấn đề. Không rõ từ bài đăng của bạn nếu dữ liệu của bạn là một quá trình điểm được đánh dấu (nghĩa là đường kính hoặc chiều cao được liên kết với từng vị trí của cây). Nếu dữ liệu này không đại diện cho một quy trình điểm được đánh dấu, tôi không biết bạn đã áp dụng Moran's-I như thế nào. Nếu dữ liệu chỉ đại diện cho các vị trí không gian, tôi khuyên bạn nên sử dụng Ripley's-K với phép biến đổi Besag-L để chuẩn hóa kỳ vọng null ở mức 0. Điều này cho phép đánh giá nhiều cụm. Nếu dữ liệu của bạn có giá trị liên quan, thì tùy chọn tốt nhất của bạn là Moran's-I (LISA). Tôi thực sự sẽ nhìn vào nó với cả hai số liệu thống kê. Bất kể sự lựa chọn của bạn, bạn vẫn sẽ cần phải lặp qua từng trang web riêng lẻ để tạo ra kết quả hợp lệ. Dưới đây là một số ví dụ mã R cho mô phỏng Monte Carlo của Ripley's-K / Besag's-L bằng cách sử dụng bộ dữ liệu nhựa cây gỗ đỏ tích hợp. Nó khá đơn giản để sửa đổi điều này để lặp qua các trang web của bạn và tạo một biểu đồ cho mỗi trang.

# 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
Nhưng bạn không thể chỉ sử dụng thân lồi làm cửa sổ cho mẫu điểm của mình! Hãy nhớ rằng, cửa sổ là khu vực mà mô hình tạo ra các điểm hoạt động. Bạn biết a-prori rằng cây chỉ mọc ở những khu vực được đặt này và bạn phải đặt cửa sổ của mình để phản ánh điều đó. Bạn có thể giảm thiểu điều này bằng cách đặt phạm vi K (r) thành một mức rất nhỏ, với kích thước 0,3 lần kích thước khoảng trống của bạn, nhưng bạn sẽ nhận được kết quả sai lệch do thiếu hiệu chỉnh cạnh. Jeffrey đang sử dụng kích thước của toàn bộ khu vực nghiên cứu để xác định rmax của mình.
Spainedman

1
Trong ví dụ của tôi, Có, tôi đang sử dụng toàn bộ khu vực. Bởi đây chính xác là lý do tại sao tôi khuyên bạn nên lặp qua từng trang web mẫu (gap). Mỗi lần bạn tập hợp vào một khu vực mẫu cụ thể, bạn sẽ chạy lại phân tích. Bạn không thể coi toàn bộ khu vực nghiên cứu là lĩnh vực ngẫu nhiên của mình vì bạn không lấy mẫu liên tục. Chỉ có lấy mẫu khoảng cách bạn, có hiệu lực, có âm mưu độc lập. Theo mặc định, hàm Kest tôi đang gọi sử dụng hiệu chỉnh cạnh "viền". Có các tùy chọn điều chỉnh cạnh khác có sẵn. Tôi sẽ lập luận rằng đơn vị thử nghiệm của bạn là khoảng cách tán và nên được phân tích như vậy.
Jeffrey Evans

1
Trong suy nghĩ về điều này nhiều hơn một chút. Bạn thực sự nên sử dụng các đa giác đại diện cho mỗi khoảng cách làm cửa sổ của bạn. Nếu bạn đặt vấn đề của mình để phản ánh đơn vị thử nghiệm thì CSR và K sẽ bị sai lệch vì khu vực không phản ánh kích thước khoảng cách tán thực sự. Đây là một vấn đề trong cả khuyến nghị của tôi và @ Spacesman.
Jeffrey Evans

2
Lưu ý ví dụ mở rộng của tôi chỉ sử dụng một lưới thô vì đó là một cách khá đơn giản để tạo ra một cái gì đó với cấu trúc gần đúng. Mặt nạ của bạn sẽ trông giống như một bản đồ của các khu vực rừng mở của bạn. Đó là sai về mặt kỹ thuật để thử và xác định mặt nạ từ dữ liệu!
Spainedman

1
@ Spacesman. Tôi thích cách tiếp cận của bạn và nó chắc chắn là hiệu quả. Mối quan tâm cụ thể của tôi là khoảng trống tán là đơn vị thử nghiệm. Theo cách tiếp cận của bạn, nếu hai khoảng trống là gần nhất thì băng thông có thể bao gồm các quan sát từ một đơn vị lấy mẫu khác nhau. Ngoài ra, thống kê kết quả không được phản ánh "nhóm" các đơn vị thử nghiệm mà nên đại diện cho từng đơn vị và suy luận về quá trình không gian được rút ra từ các mẫu chung trên các đơn vị thử nghiệm. Nếu được xử lý trên toàn cầu, nó đại diện cho một quá trình cường độ không cố định, vi phạm các giả định thống kê.
Jeffrey Evans

4

Những gì bạn có là một mẫu điểm với một cửa sổ là một số vùng đa giác nhỏ bị ngắt kết nối.

Bạn sẽ có thể sử dụng bất kỳ thử nghiệm nào trong package:spatstatCSR miễn là bạn cung cấp nó với một cửa sổ chính xác. Đây có thể là một số bộ (x, y) xác định mỗi lần xóa hoặc ma trận nhị phân của (0,1) giá trị trên không gian.

Trước tiên, hãy xác định một cái gì đó trông giống như dữ liệu của bạn:

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)

và cho phép giả vờ rõ ràng của chúng tôi là các ô vuông xảy ra như thế này:

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)

Vì vậy, chúng ta có thể vẽ đồ thị hàm K của các điểm đó trong cửa sổ đó. Chúng tôi hy vọng đây không phải là CSR vì các điểm dường như được nhóm lại trong các ô. Lưu ý rằng tôi phải thay đổi phạm vi khoảng cách thành nhỏ - theo thứ tự kích thước ô - nếu không thì hàm K được đánh giá qua khoảng cách kích thước của toàn bộ mẫu.

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

Nếu chúng ta tạo một số điểm CSR trong cùng một ô, chúng ta có thể so sánh các ô chức năng K. Điều này sẽ giống như CSR:

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

mô hình hai điểm trong cửa sổ chắp vá

Bạn thực sự không thể nhìn thấy các điểm được nhóm trong các ô trong mẫu đầu tiên, nhưng nếu bạn tự vẽ nó trong một cửa sổ đồ họa thì rõ ràng. Các điểm trong mẫu thứ hai là đồng nhất trong các ô (và không tồn tại trong vùng đen) và hàm K khác biệt rõ ràng với Kpois(r)hàm K CSR cho dữ liệu được nhóm và tương tự cho dữ liệu thống nhất.


2

Ngoài bài đăng của Andy:

Những gì bạn muốn tính toán là thước đo độ đồng nhất không gian (giả thuyết giả thuyết: "Điểm của bạn có bị co cụm không?") Chẳng hạn như hàm L và K của Ripley .

Bài đăng trên blog này giải thích cách làm trong R khá tốt. Dựa trên mã được mô tả, trước tiên tôi sẽ gắn nhãn cho mỗi cụm trong tập dữ liệu của bạn và sau đó tính toán trong một vòng lặp cho mỗi cụm, đường bao quan trọng thông qua K của Ripley


Hiện tại tôi đã xóa câu trả lời của mình. Một số phân tích ngắn gọn cho rằng việc xác định cơ hội các lô dựa trên K có nghĩa là thiên vị các số liệu thống kê cục bộ sẽ được phân cụm nhiều hơn so với đề xuất tình cờ. Câu trả lời này vẫn được áp dụng mặc dù +1, (chỉ việc tạo các cửa sổ từ dữ liệu có vấn đề hơn câu trả lời ban đầu của tôi sẽ đề xuất).
Andy W
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.