Modelagem de Distribuição de Espécies

Passo a passo do processo de modelagem

Professora: Marinez Ferreira de Siqueira

Andrea Sánchez-Tapia
Pablo Viany Prieto
Felipe Sodré
Rafael Oliveira

2014

Primeiro passo: Habilitar os pacotes a serem usados:

library(dismo)

Os dados básicos para a modelagem potencial de espécies são:

  • Dados bióticos
  • Dados abióticos

Para facilitar, utilizaremos dados bióticos (bradypus.csv) e abióticos existentes no paco DISMO.

Dados Bióticos:

file <- paste(system.file(package="dismo"), "/ex/bradypus.csv", sep="")
bradypus <- read.table(file, header=TRUE, sep= ",")
head(bradypus)
              species    lon    lat
1 Bradypus variegatus -65.40 -10.38
2 Bradypus variegatus -65.38 -10.38
3 Bradypus variegatus -65.13 -16.80
4 Bradypus variegatus -63.67 -17.45
5 Bradypus variegatus -63.85 -17.40
6 Bradypus variegatus -64.42 -16.00
#Deixaremos o objeto 'bradypus' apenas com as coordenadas
bradypus <- bradypus[,2:3]

Dados abióticos

##dados abióticos (ambientais)
#criamos o caminho para os rasters
files2 <- list.files(path=paste(system.file(package="dismo"),
'/ex', sep=''), pattern='grd', full.names=TRUE )
#Definimos os rasters como objeto 'predictors'
predictors <- stack(files2)
plot(predictors)

plot of chunk unnamed-chunk-4

Uma vez que temos como camada ambiental a informação de bioma e esta não será utilizada na modelagem, vamos desconsidera-la.

pred_nf <- dropLayer(predictors,'biome')

Vamos visualizar os dados bióticos espacializados sobre uma das camadas preditoras:

plot(pred_nf, 1)
points(bradypus, bg='red', cex=1,pch=21)

plot of chunk unnamed-chunk-6

Agora que temos os dados bióticos e abióticos, precisamos extrair os valores ambientais das localidades onde há registros de ocorrência, usando a função 'extract'. A tais valores daremos o nome de 'presvals':

presvals <- extract(pred_nf, bradypus)

Faremos então a divisão dos nossos dados de bradypus em 5 grupos diferentes para utilizarmos 4 para treino e apenas um para teste

group <- kfold(bradypus, 5)
pres_train <- bradypus[group != 1, ]
pres_test <- bradypus[group == 1, ]

Agora criaremos pontos leatórios, como bakcground e os dividiremos em 5 grupos diferentes: 4 para treino e um para teste:

ext <- extent(-90, -32, -33, 23)
backg <- randomPoints(pred_nf, n=1000, ext=ext, extf = 1.25)
colnames(backg) = c( 'lon' ,  'lat' )
##Criando e separando as partições:
group <- kfold(backg, 5)
backg_train <- backg[group != 1, ]
backg_test <- backg[group == 1, ]

Para visualizar onde estão as ocorrências de bradypus e onde estão os pontos aleatórios: bradypus

r<- raster(pred_nf, 1)
plot(!is.na(r), col=c( 'white' ,  'light grey' ), legend=FALSE)
plot(ext, add=TRUE, col= 'red' , lwd=2)
points(pres_train, pch=  '+' , col= 'green' )
points(pres_test, pch= '+' , col= 'blue' )

plot of chunk unnamed-chunk-10

E os dados aleatórios

plot(!is.na(r), col=c( 'white' ,  'light grey' ), legend=FALSE)
plot(ext, add=TRUE, col= 'red' , lwd=2)
points(backg_train, pch= '-' , cex=0.5, col= 'yellow' )
points(backg_test, pch= '-' ,  cex=0.5, col= 'black' )

plot of chunk unnamed-chunk-11

Rodando a modelagem:

bc <- bioclim(pred_nf, pres_train)

Avaliando o modelo gerado, usando o conjunto de presença deixada para teste e os aleatórios de teste:

e <- evaluate(pres_test, backg_test, bc, pred_nf) 
e
class          : ModelEvaluation 
n presences    : 23 
n absences     : 200 
AUC            : 0.7116 
cor            : 0.1267 
max TPR+TNR at : 0.03216 

Definindo um threshold:

threshold <- e@t[which.max(e@TPR + e@TNR)]
threshold
[1] 0.03216
pb <- predict(pred_nf, bc, ext=ext, progress=''  )
pb
class       : RasterLayer 
dimensions  : 112, 116, 12992  (nrow, ncol, ncell)
resolution  : 0.5, 0.5  (x, y)
extent      : -90, -32, -33, 23  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0.7312  (min, max)

Visualizando o resultado no espaço geográfico:

par(mfrow=c(1,2))
plot(pb, main= 'Bioclim, raw values' )
plot(pb > threshold, main= 'presence/absence ')
points(pres_train, pch= '+' )

plot of chunk unnamed-chunk-16

Modelo Original
plot of chunk unnamed-chunk-17

Mapa binários
plot of chunk unnamed-chunk-18