J'ai un raster de types d'habitats pour une zone spécifique en Ecosse. Je dois créer de futurs scénarios d'habitat avec des changements d'habitat pour évaluer la viabilité de la population d'une espèce d'oiseau.
Par exemple, à l'avenir, il pourrait y avoir 10% de foresterie en plus dans la région. Je voudrais modifier la carte actuelle en ajoutant au hasard la forêt en blocs d'une certaine taille. Jusqu'à présent, je pense à la sélection de points aléatoires dans un raster qui identifie les zones où la foresterie pourrait se produire et à la croissance des blocs de taille correcte à l'aide d'une sorte d'automates cellulaires.
Cela semble-t-il être la meilleure façon de procéder? Existe-t-il une meilleure méthode?
Si c'est le meilleur moyen disponible, comment pourrais-je le faire dans, de préférence, R? (Je regarde actuellement la fonction rpoints dans "spatstat" avec le package CellularAutomata)
J'ai également accès à GRASS, QGis et ArcMap 10 s'il existe des moyens plus simples dans l'un d'eux.
raster
paquet? Il a beaucoup d'outils pour travailler avec des données raster (noo, rly?).Réponses:
Avez-vous pensé à utiliser une chaîne Markov ? Il s'agit effectivement d'un "automate cellulaire probabiliste", fournissant ainsi le caractère aléatoire souhaité. Au lieu de prescrire la nouvelle génération en termes de voisins locaux de la génération existante, elle spécifie une distribution de probabilité pour la nouvelle génération. Cette distribution peut être estimée, disons, à partir de séquences temporelles d'images de zones identiques ou similaires.
Intuitivement, ce modèle dit qu'une cellule ne fera pas nécessairement une transition de boisée à non boisée (ou vice versa ), mais les chances qu'elle fera que la transition dépendra de la couverture terrestre immédiatement autour d'elle. Il peut gérer plusieurs classes de couvertures, des configurations complexes de quartiers et même être généralisé pour «se souvenir» de l'histoire récente de l'évolution de la couverture terrestre.
Les transitions peuvent être implémentées à l'aide d'instructions d'algèbre de carte, ce qui rend cette méthode praticable dans tout SIG basé sur raster, même ceux sans accès direct ou rapide aux données au niveau de la cellule. L'utilisation de R le rend encore plus facile.
Par exemple, considérez cette configuration de départ avec seulement deux classes, blanc et noir:
Pour illustrer ce qui peut arriver, j'ai créé un modèle paramétré (non basé sur des données) dans lequel la transition vers le noir se produit avec la probabilité 1 - q ^ k où k est le nombre moyen de cellules noires dans le voisinage 3 x 3 (k = 0, 1/9, 2/9, ..., 1). Lorsque q est petit ou que la majeure partie du quartier est déjà noire, la nouvelle cellule sera noire. Voici quatre simulations indépendantes de la dixième génération pour cinq valeurs de q allant de 0,25 à 0,05:
Évidemment, ce modèle présente de nombreuses caractéristiques d'une AC, mais il inclut également un effet aléatoire utile pour explorer d'autres résultats.
Code
Ce qui suit implémente la simulation dans
R
.la source
kernel = ConstantArray[1/3^2, {3,3}]
pour le noyau;transitionRule [k_] := With[{q = 0.1}, Boole[RandomReal[{0, 1}] > q^k]]
pour la règle; etnext[a_, kernel_, f_] := Map[f, ListConvolve[kernel, a, {1, 1}, 0], {2}]
de les appliquer à un tableau a . Par exemple, pour tracer quatre générations depuis le début , utilisezArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
.