서식지 유형의 래스터 맵을 임의로 변경 하시겠습니까?


12

스코틀랜드의 특정 지역에 대한 서식지 유형의 래스터가 있습니다. 조류 종의 개체수 생존력을 평가하기 위해 서식지 변화로 미래의 서식지 시나리오를 만들어야합니다.

예를 들어, 장래에는이 지역에 10 % 더 많은 임업이있을 수 있습니다. 특정 크기의 블록으로 임업을 무작위로 추가하여 현재지도를 변경하고 싶습니다. 나는 지금까지 산림이 발생할 수있는 지역을 식별하고 어떤 종류의 세포 오토마타를 사용하여 올바른 크기의 블록을 성장시키는 래스터에서 임의의 점을 선택하는 선을 생각하고 있습니다.

이것이 가장 좋은 방법처럼 보입니까? 더 좋은 방법이 있습니까?

이것이 가장 좋은 방법이라면, 어떻게하면 R에서 어떻게 할 수 있습니까? (현재 CellularAutomata 패키지와 함께 "spatstat"의 rpoints 함수를보고 있습니다)

GRASS, QGis 및 ArcMap 10에 더 간단한 방법이 있다면 액세스 할 수 있습니다.


raster패키지를 아직 보셨습니까 ? 래스터 (noo, rly?) 데이터로 작업 할 수있는 많은 도구가 있습니다.
Roman Luštrik

고마워, 로마 예, 기본지도를 읽고 조작 할 수있는 도구가 필요합니다.
Matt Geary

답변:


18

Markov 체인 사용에 대해 생각해 보셨습니까 ? 이것은 효과적으로 "확률 적 셀룰러 오토 마톤"이므로, 원하는 랜덤 성을 제공한다. 기존 세대의 로컬 이웃 측면에서 새로운 세대를 처방하는 대신, 새로운 세대에 대한 확률 분포를 지정합니다. 이 분포는 동일하거나 유사한 영역의 이미지의 시간 시퀀스로부터 추정 될 수있다.

직관적으로,이 모델은 셀이 반드시 숲에서 숲이 아닌 곳으로 또는 그 반대로 전환 할 필요 는 없지만, 세포가 전환 될 가능성은 바로 그 주변의 토지 표지에 달려 있다고 말합니다. 그것은 여러 종류의 표지, 복잡한 이웃 구성을 처리 할 수 ​​있으며, 최근의 토지 표지 진화 이력을 "기억"하도록 일반화 될 수도 있습니다.

전이는 Map Algebra 문을 사용하여 구현할 수 있으므로 셀 수준 데이터에 직접 또는 빠르게 액세스 할 수없는 래스터 기반 GIS에서도이 방법을 실행할 수 있습니다. R을 사용하면 훨씬 쉬워집니다.

예를 들어, 흰색과 검은 색의 두 클래스만으로 시작 구성을 고려하십시오.

토지 표지 그리드

발생할 수있는 일을 설명하기 위해 검정으로의 전이가 1-q ^ k 확률로 발생하는 매개 변수화 된 모델 (데이터를 기반으로하지 않음)을 만들었습니다. 여기서 k는 3 x 3 근방의 평균 블랙 셀 수입니다 (k = 0, 1/9, 2/9, ..., 1). q가 작거나 이웃의 대부분이 이미 검은 색이면 새 셀이 검은 색이됩니다. 다음은 0.25에서 0.05 사이의 q 값 5 개에 대한 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를 도출 할 수 있습니까?
Kirk Kuykendall

2
@Kirk 예. 권장하지 않습니다. 일러스트레이션에 사용한 모델이 너무 단순합니다. 그러나 발생하는 각 이웃 구성에서 경험적 전환 빈도를 살펴보면 과거의 진화를 통계적으로 에뮬레이션하는 미래 진화 모델을 만들 수 있습니다. 전이 주파수가 공간적으로 균질하고 미래가 과거와 같이 계속 작동하는 경우, 이러한 시뮬레이션 중 일부를 실행하면 미래에 어떤 가능성이 있을지 명확하게 파악할 수 있습니다.
whuber

고마워, 이것은 내가 필요한 것을 정확하게하는 것 같습니다. 변화하는 지역의 비율을 제한 할 수 있습니까?
Matt Geary

@Matt 네, 적어도 확률 적으로 말입니다. 이 이론은 Markov 사슬이 각 상태의 비율에 따라 점진적으로 안정적인 혼합에 도달하는 방법을 설명합니다. 이것은 동적 평형입니다. 각 세대마다 많은 셀이 변경 될 수 있지만 그 결과는 그리드 내에서 비율을 동일하게 (최대 확률 편차까지) 유지하는 것입니다.
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}]배열에 적용 할 . 예를 들어 start 에서 4 세대를 표시 하려면을 사용하십시오 . ArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.