随机改变栖息地类型的栅格图?


12

我有一个苏格兰特定地区的栖息地类型栅格。我需要通过改变栖息地来创建未来的栖息地场景,以评估鸟类的种群生存力。

例如,将来该地区的林业可能会增加10%。我想通过以一定大小的块随机添加林业来更改当前地图。到目前为止,我正在沿着从栅格中选择随机点的思路进行思考,以识别可能发生林业的区域,并使用某种细胞自动机来生长正确大小的块。

这似乎是解决此问题的最佳方法吗?有没有更好的方法?

如果这是最好的方法,那么我该如何在R中做到这一点呢?(我目前正在与CellularAutomata包一起查看“ spatstat”中的rpoints函数)

如果它们中有更简单的方法,我也可以访问GRASS,QGis和ArcMap 10。


你看过raster包裹了吗?它有很多工具可以处理栅格(noo,rly?)数据。
RomanLuštrik2011年

谢谢,罗马。是的,这应该为我提供了读取和操纵基础地图的工具。
Matt Geary

Answers:


18

您是否考虑过使用马尔可夫链?这实际上是“概率细胞自动机”,从而提供了所需的随机性。它没有为现有一代的本地邻居规定新一代,而是为新一代指定了概率分布。该分布可以根据例如相同或相似区域的图像的时间序列来估计。

从直觉上讲,该模型表示一个单元不一定会从有林过渡到无林(反之亦然),但过渡的机会取决于周围的土地覆盖。它可以处理多种类型的覆盖物,复杂的邻里配置,甚至可以概括为“记住”土地覆盖物演变的最新历史。

可以使用Map Algebra语句来实现转换,这使得该方法在任何基于栅格的GIS中都可行,即使那些没有直接或快速访问像元级数据的GIS也是如此。使用R使其更加容易。

例如,考虑仅具有两个类别(白色和黑色)的此初始配置:

土地覆盖网格

为了说明可能发生的情况,我创建了一个参数化模型(不基于任何数据),其中向黑色的过渡发生的可能性为1-q ^ k,其中k是3 x 3邻域内黑电池的平均数目(k = 0、1 / 9、2 / 9,...,1)。当q小或大多数邻域已经为黑色时,新单元格将为黑色。这是第十代的四个独立模拟,其中q的五个值从0.25降至0.05:

结果表

显然,该模型具有CA的许多特征,但它也包括随机效应,可用于探索替代结果。


下面在中实现仿真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非常有趣。如果您具有特定地区的历史性土地覆被数据,是否可以得出q和/或k?
柯克·库肯达尔

2
@Kirk是的,但我不建议这样做:我用于说明的模型过于简单。但是,您可以得到更好的结果:通过查看已发生的每个邻域配置中的跃迁的经验频率,可以创建未来演化的模型,其跃迁在统计上模拟过去的演化。如果过渡频率在空间上是同质的,并且未来仍然像过去一样运行,那么进行一些这样的模拟就可以清楚地了解未来可能会发生什么。
ub

谢谢,这似乎正是我所需要的。可以对变化区域的比例设置限制吗?
Matt Geary

@Matt是的,至少在概率意义上。该理论描述了马尔可夫链如何达到每个状态的比例的渐近稳定混合。这是一种动态平衡:在每一代中,许多细胞都可能在变化,但是最终结果是保持它们在网格中的比例相同(最大机会偏差很小)。
Whuber

1
我是一个糟糕的R程序员。我可以分享我使用的Mathematica代码;使用R的apply函数,它应该移植得很好。您需要一个内核,一个转换规则和一个将它们应用于2D 0/1阵列的过程。因此:kernel = ConstantArray[1/3^2, {3,3}]对于内核;transitionRule [k_] := With[{q = 0.1}, Boole[RandomReal[{0, 1}] > q^k]]遵守规则 并将next[a_, kernel_, f_] := Map[f, ListConvolve[kernel, a, {1, 1}, 0], {2}]它们应用于数组a。例如,要从开始绘制四代,请使用ArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.