miércoles, 24 de noviembre de 2010

Mapas de paisaje fractales con R: fieldsim.

¿Cómo simular paisajes fractales? Leyendo el artículo de Brouste et al. 2007 sobre el paquete fieldsim se me ocurrió una manera de generar paisajes controlando independientemente su composición (cantidad de celdas de un tipo deseado mediante un valor P) y configuración (agregación de dichas celdas, mediante el parámetro de Hurst). Primero generamos realizaciones de un cambo browniano con una rugosidad o parámetro de Hurst dado (figura 1) y luego cortamos los mapas (o los discretizamos) en un nivel dado que nos permita obtener un número P de celdas por encima de dicho nivel (figura 2).

A continuación les dejo el script con los resultados gráficos. ;)

######## GENERACIÓN DE MAPAS FRACTALES NEUTRALES P=20-90 y H=15-90 ######

###generamos realizaciones de campos brownianos fraccionarios de tamaño 65x65 celdas, con dos tipos de hábitat de valores 1 y 0 (habitable o no-habitable), según la agregación (H) y proporción (P) de sitios habitables.

HH<-c(0.9,0.75,0.6,0.45,0.3,0.15) #fragmentación espacial (H=índice de Hurst)

P<-c((2112-422-422-422),(2112-422-422),(2112-422),2212,(2112+422),(2112+422+422),(2112+422+422+422),(2112+422+422+422+422)) #proporción de hábitat (p=20-90%)

generacionMAPAS<-function(HH=HH,P=P)

{

MAPA<-NULL

for(j in 1:length(P))

{

p<-P[j]

mapa<-NULL

for(i in 1:length(HH))

{

HHH<-HH[i]

set.seed(626)

R <- function(x, H = HHH) {1/2*((x[1]^2 + x[2]^2)^H + (x[3]^2 + x[4]^2)^H-((x[1] - x[3])^2 + (x[2] - x[4])^2)^H)}

FBF09 <- fieldsim(R, Elevel = 2, Rlevel = 4, nbNeighbor = 8)

x <- FBF09$Zrow

y <- FBF09$Zcol

z <- FBF09$Z

prueba=FBF09$Z-min(FBF09$Z)

SORT=sort(prueba)

Ri=NULL

for(i in (length(prueba)-p):length(prueba))

{

R=which(prueba==SORT[i])

Ri=c(Ri,R)

}

prueba[Ri]<-1

prueba[-Ri]<-0

mapa<-cbind(mapa,as.vector(prueba))

}

dimnames(mapa)<-NULL; rownames(mapa)<-rownames(mapa,do.NULL=FALSE,prefix="celda.");colnames(mapa)<-HH

MAPA<-rbind(MAPA,mapa)

rm(list=c("prueba","x","FBF09","R","mapa"))

}

MAPA

}



#### Crear mapas

G<-generacionMAPAS(HH=HH,P=P) ;dim(G)

H09<-matrix(G[,1],nrow=4225,ncol=8);

H075<-matrix(G[,2],nrow=4225,ncol=8);

H06<-matrix(G[,3],nrow=4225,ncol=8)

H045<-matrix(G[,4],nrow=4225,ncol=8);

H03<-matrix(G[,5],nrow=4225,ncol=8);

H015<-matrix(G[,6],nrow=4225,ncol=8)

Pname<-c("20","30","40","50","60","70","80","90")

dimnames(H09)<-NULL;colnames(H09)<-Pname;dimnames(H075)<-NULL;colnames(H075)<-Pname;dimnames(H06)<-NULL;colnames(H06)<-Pname;

dimnames(H045)<-NULL;colnames(H045)<-Pname;dimnames(H03)<-NULL;colnames(H03)<-Pname;dimnames(H015)<-NULL;colnames(H015)<-Pname

#### Graficar los mapas

layout(matrix(1:(8*6), 8,6));layout.show(8*6)

par(mar=c(.5,.5,.5,.5),lwd=3,bty="l",cex=1);

image(matrix(H09[,1],65,65),axes=FALSE); image(matrix(H075[,1],65,65),axes=FALSE); image(matrix(H06[,1],65,65),axes=FALSE);

image(matrix(H045[,1],65,65),axes=FALSE); image(matrix(H03[,1],65,65),axes=FALSE); image(matrix(H015[,1],65,65),axes=FALSE)






Figura 1. Mapas de paisaje generados mediante Campos Brownianos Fractales (CBF) de 65x65 celdas, sobre un gradiente de agregación (índice de Hurst H) y simulados mediante el algoritmo de fieldsim en el software R-project.




Figura 2. Mapas de paisaje aleatorios y fractales (generados con el algoritmo fieldsim del programa R-project). Las filas presentan los niveles de proporción de sitios habitables P mientras que las columnas refieren a la agregación de los sitios H (índice Hurst). Se indica en amarillo las celdas habitables y en rojo la matriz no-habitable del paisaje.





Generamos mapas fractales mediante el algoritmo fieldsim (Brouste et al. 2007). Dicho algoritmo crea campos brownianos fraccionarios (CBF), los cuales son una generalización del mejor conocido proceso de movimiento Browniano. El CBF es un proceso estocástico dependiente de un parámetro H llamado "índice de Hurst" que mide la rugosidad del paisaje, donde a menores valores de H mayor rugosidad del fenómeno. El índice de Hurst es rápidamente convertible a un índice de fractalidad: D+H=n+1, donde D corresponde a la dimensión fractal para una superficie n-dimensional (Gneiting & Schlather 2004). Este proceso es auto-similar (invariante por cambio de escala) y en el caso H>1/2 los incrementos muestran dependencia de largo rango. Estas dos propiedades hacen que el CBF juegue un papel muy importante en la modelización. El algoritmo de construcción fieldsim es rápido y efectivo, válido no sólo para CBF sino también para cualquier campo gaussiano (restricción que presenta el algoritmo de punto medio para la generación de mapas fractales). Siguiendo la metodología empleada por Brouste, Istas & Lambert-Lacroix (2007), simulamos distintos CBF utilizando los parámetros de Hurst deseados y la función de covarianza R(M,M`) correspondiente a dicho campo:

R(M,M`)=1/2{|M|^2H+|M`|^2H-〖|M-M`|〗^2H},

donde el parámetro de Hurst H es un real que varía entre 0<1. h="1" n="2Elevel+Rlevel=" h="0.15,0.3,0.45,0.6,0.75,0.9)" style=";">