生息地タイプのラスターマップをランダムに変更しますか?


12

スコットランドの特定の地域の生息地タイプのラスターがあります。生息地の変化を伴う将来の生息地シナリオを作成して、鳥種の個体群の生存率を評価する必要があります。

たとえば、将来的には、この地域の森林が10%増える可能性があります。特定のサイズのブロックで林業をランダムに追加して、現在のマップを変更したいと思います。私はこれまでのところ、林業が発生する可能性のある地域を特定するラスターからランダムなポイントを選択し、ある種のセルオートマトンを使用して正しいサイズのブロックを成長させるという方針に沿って考えています。

これはこれについて最善の方法のように思えますか?より良い方法はありますか?

これが最良の方法である場合、できればRでこれを行うにはどうすればよいですか?(私は現在、CellularAutomataパッケージと共に「spatstat」のrpoints関数を見ています)

また、GRASS、QGis、ArcMap 10のいずれかに簡単な方法があればアクセスできます。


rasterまだパッケージを見ましたか?ラスター(noo、rly?)データを操作するためのツールがたくさんあります。
ローマンルシュトリック

おかげで、ローマ。はい、これにより、ベースマップを読み取って操作するためのツールが提供されます。
マットギアリー

回答:


18

マルコフ連鎖の使用を考えたことがありますか?これは、事実上「確率的セルラーオートマトン」であり、それにより、望ましいランダム性を提供します。既存の世代のローカルネイバーに関して新しい世代を処方する代わりに、新しい世代の確率分布を指定します。その分布は、たとえば、同じまたは類似の領域の画像の時系列から推定できます。

直観的には、このモデルは、セルが必ずしも森林から非森林(またはその逆)に移行するとは限らないが、移行を行う可能性はその周囲の土地被覆に依存することを示しています。複数のクラスのカバー、近隣の複雑な構成を処理でき、土地被覆進化の最近の歴史を「記憶」するように一般化することもできます。

遷移は、マップ代数演算ステートメントを使用して実装できます。これにより、セルレベルのデータに直接または迅速にアクセスできない場合でも、この方法をあらゆるラスターベースのGISで実行できます。Rを使用すると、さらに簡単になります。

たとえば、白と黒の2つのクラスのみを持つこの初期構成を考えてみましょう。

土地被覆グリッド

何が起こり得るかを説明するために、確率1-q ^ kで黒への遷移が発生するパラメーター化モデル(データに基づいていない)を作成しました。ここで、kは3 x 3近傍内の黒セルの平均数(k = 0、1 / 9、2 / 9、...、1)。qが小さいか、近傍のほとんどが既に黒の場合、新しいセルは黒になります。以下は、0.25から0.05までの5つのqの値に対する第10世代の4つの独立したシミュレーションです。

結果の表

明らかに、このモデルには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はい、しかし、私はそれをお勧めしません。説明に使用したモデルは単純すぎます。しかし、より良い結果を導き出すことができます。発生した各近傍構成からの遷移の経験的頻度を調べることで、遷移が統計的に過去の進化をエミュレートする将来の進化のモデルを作成できます。遷移頻度が空間的に均一であり、未来が過去のように機能し続ける場合、これらのシミュレーションのいくつかを実行すると、未来が保持する可能性が高いものを明確に把握できます。
whuber

おかげで、これはまさに私が必要とすることを行うようです。変化する面積の割合に制限を設定することは可能でしょうか?
マットギアリー

@Mattはい、少なくとも確率的な意味で。この理論は、マルコフ連鎖が各状態の比率の漸近的に安定した混合に到達する方法を説明しています。これは動的な均衡です。各世代で多くのセルが変化している可能性がありますが、最終的な結果はグリッド内のセルの比率を同じに保つことです(わずかな偏差まで)。
whuber

1
私はひどいRプログラマーです。使用したMathematicaコードを共有できます。Rの適用機能を使用すると、うまく移植できるはずです。カーネル、遷移規則、およびそれらを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に適用します。たとえば、startから4世代をプロットするには、を使用しますArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.