Thay đổi ngẫu nhiên bản đồ raster của các loại môi trường sống?


12

Tôi có một raster các loại môi trường sống cho một khu vực cụ thể ở Scotland. Tôi cần tạo ra các kịch bản môi trường sống trong tương lai với những thay đổi trong môi trường sống để đánh giá khả năng sống của quần thể một loài chim.

Ví dụ, trong tương lai có thể có thêm 10% lâm nghiệp trong khu vực. Tôi muốn thay đổi bản đồ hiện tại bằng cách thêm ngẫu nhiên lâm nghiệp theo các khối có kích thước nhất định. Tôi, cho đến nay, suy nghĩ dọc theo các dòng chọn điểm ngẫu nhiên từ một raster xác định các khu vực nơi lâm nghiệp có thể xảy ra và phát triển các khối có kích thước chính xác bằng cách sử dụng một số loại automata di động.

Điều này có vẻ như là cách tốt nhất để đi về điều này? Có một phương pháp tốt hơn?

Nếu đây là cách tốt nhất có sẵn, làm thế nào tôi có thể làm điều này trong, tốt nhất là, R? (Tôi hiện đang xem xét chức năng rpoint trong "spatstat" cùng với gói CellularAutomata)

Tôi cũng có quyền truy cập vào GRASS, QGis và ArcMap 10 nếu có những cách đơn giản hơn trong bất kỳ cách nào trong số chúng.


Bạn đã xem rastergói chưa? Nó có rất nhiều công cụ để làm việc với dữ liệu raster (noo, rly?).
Roman Luštrik

Cảm ơn, La Mã. Vâng, điều này sẽ cho tôi các công cụ để đọc và thao tác trên bản đồ cơ sở của tôi.
Matt Geary

Câu trả lời:


18

Bạn đã nghĩ đến việc sử dụng chuỗi Markov ? Đây thực sự là một "thiết bị tự động di động xác suất", do đó cung cấp tính ngẫu nhiên mong muốn. Thay vì quy định thế hệ mới theo các nước láng giềng địa phương của thế hệ hiện tại, nó chỉ định phân phối xác suất cho thế hệ mới. Phân phối đó có thể được ước tính từ, giả sử, chuỗi thời gian của hình ảnh của cùng một khu vực hoặc tương tự.

Theo trực giác, mô hình này nói rằng một tế bào sẽ không nhất thiết thực hiện quá trình chuyển đổi từ rừng sang không có rừng (hoặc ngược lại ), nhưng khả năng nó sẽ thực hiện quá trình chuyển đổi phụ thuộc vào độ che phủ đất ngay lập tức xung quanh nó. Nó có thể xử lý nhiều lớp che phủ, cấu hình phức tạp của các khu phố và thậm chí được khái quát hóa để "ghi nhớ" lịch sử phát triển che phủ đất gần đây.

Việc chuyển đổi có thể được thực hiện bằng cách sử dụng các câu lệnh Đại số bản đồ, điều này làm cho phương pháp này có thể thực hiện được trong bất kỳ hệ thống GIS dựa trên raster nào, ngay cả những người không có quyền truy cập trực tiếp hoặc nhanh chóng vào dữ liệu cấp độ tế bào. Sử dụng R làm cho nó thậm chí dễ dàng hơn.

Ví dụ, hãy xem xét cấu hình bắt đầu này chỉ với hai lớp, trắng và đen:

Lưới che phủ đất

Để minh họa những gì có thể xảy ra, tôi đã tạo một mô hình được tham số hóa (không dựa trên bất kỳ dữ liệu nào) trong đó quá trình chuyển đổi sang màu đen xảy ra với xác suất 1 - q ^ k trong đó k là số lượng ô đen trung bình trong vùng lân cận 3 (3 = k = 0, 1/9, 2/9, ..., 1). Khi q nhỏ hoặc hầu hết vùng lân cận đã có màu đen, ô mới sẽ có màu đen. Dưới đây là bốn mô phỏng độc lập của thế hệ thứ mười cho năm giá trị của q, từ 0,25 xuống 0,05:

Bảng kết quả

Rõ ràng mô hình này có nhiều đặc điểm của CA nhưng nó cũng bao gồm một hiệu ứng ngẫu nhiên hữu ích để khám phá các kết quả thay thế.


Sau đây thực hiện mô phỏng trong R.

#
# Make a transition from state `x` using a kernel having `k.ft` as
# its Fourier transform.
#
transition <- function(x, k.ft, q=0.1) {
  k <- zapsmall(Re(fft(k.ft * fft(x), inverse=TRUE))) / length(x)
  matrix(runif(length(k)) > q^k, nrow=nrow(k))
}
#
# Create the zeroth generation and the fft of a transition kernel.
#
n.row <- 2^7 # FFT is best with powers of 2
n.col <- 2^7
kernel <- matrix(0, nrow=n.row, ncol=n.col)
kernel[1:3, 1:3] <- 1/9
kernel.f <- fft(kernel)

set.seed(17)
x <- matrix(sample(c(0,1), n.row*n.col, replace=TRUE, prob=c(599, 1)), n.row)
#
# Prepare to run multiple simulations.
#
y.list <- list()
parameters <- c(.25, .2, .15, .1, .05)
#
# Perform and benchmark the simulations.
#
i <- 0
system.time({
  for (q in parameters) {
    y <- x
    for (generation in 1:10) {
      y <- transition(y, kernel.f, q)
    }
    y.list[[i <- i+1]] <- y
  }
})
#
# Display the results.
#    
par(mfrow=c(1,length(parameters)))
invisible(sapply(1:length(parameters), 
       function(i) image(y.list[[i]], 
                         col=c("White", "Black"),
                         main=parameters[i])))

+1 Rất thú vị. Nếu bạn có dữ liệu lịch sử địa lý cho một khu vực cụ thể, có thể lấy được q và / hoặc k không?
Kirk Kuykendall

2
@Kirk Có, nhưng tôi không khuyến nghị: mô hình tôi sử dụng để minh họa quá đơn giản. Nhưng bạn có thể rút ra được điều gì đó tốt hơn: bằng cách xem xét các tần số chuyển đổi theo kinh nghiệm ra khỏi từng cấu hình lân cận đã xảy ra, bạn có thể tạo ra các mô hình tiến hóa trong tương lai có sự chuyển đổi mô phỏng theo tiến hóa trong quá khứ. Nếu tần số chuyển tiếp là đồng nhất về mặt không gian và nếu tương lai tiếp tục hành động như quá khứ, thì việc chạy một vài trong số các mô phỏng này có thể đưa ra một bức tranh rõ ràng về những gì tương lai có thể nắm giữ.
whuber

Cảm ơn, điều này dường như làm chính xác những gì tôi cần. Có thể đặt giới hạn cho tỷ lệ của khu vực thay đổi không?
Matt Geary

@Matt Có, ít nhất là trong một ý nghĩa xác suất. Lý thuyết mô tả làm thế nào chuỗi Markov đạt đến một hỗn hợp tỷ lệ ổn định tiệm cận của từng trạng thái. Đây là một trạng thái cân bằng động: ở mỗi thế hệ, rất nhiều tế bào có thể thay đổi, nhưng kết quả cuối cùng là giữ tỷ lệ của chúng trong lưới như nhau (độ lệch cơ hội nhỏ).
whuber

1
Tôi là một lập trình viên R khủng khiếp. Tôi có thể chia sẻ Mathematica mã tôi sử dụng; với các chức năng áp dụng của R, nó phải chuyển tốt. Bạn cần một hạt nhân, một quy tắc chuyển đổi và một quy trình để áp dụng chúng cho mảng 2D 0/1. Như vậy: kernel = ConstantArray[1/3^2, {3,3}]đối với nhân; transitionRule [k_] := With[{q = 0.1}, Boole[RandomReal[{0, 1}] > q^k]]cho quy tắc; và next[a_, kernel_, f_] := Map[f, ListConvolve[kernel, a, {1, 1}, 0], {2}]để áp dụng chúng cho một mảng a . Ví dụ, để âm mưu bốn thế hệ từ đầu , sử dụng ArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3].
whuber
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.