Professora: Marinez Ferreira de Siqueira
Andrea Sánchez-Tapia
Pablo Viany Prieto
Felipe Sodré Barros
Rafael Oliveira
2014
Primeiro passo: Habilitar os pacotes a serem usados:
library(dismo)
library(raster)
Para usarmos os dados bióticos de cada alunos, identificaremos o workingDirectiory do R onde a tabelas salva em formato .csv ficará armazenada:
getwd()
[1] "/home/iis/Dropbox/SDM2"
##Caso seja necessário, defina o wd
#setwd(u:/aluno/)
Acessando e lendo dados bióticos:
dados_bio <- read.table("caryocar.csv", header=TRUE, sep= ",")
head(dados_bio)
especie long lat
1 Caryocar brasiliense -49.25 -20.55
2 Caryocar brasiliense -47.52 -14.12
3 Caryocar brasiliense -46.25 -20.92
4 Caryocar brasiliense -48.92 -10.08
5 Caryocar brasiliense -51.77 -12.82
6 Caryocar brasiliense -48.96 -22.32
#Deixaremos o objeto importado em csv apenas com as coordenadas.
#Considerando que Lat/Longocupam a 2 e 3 coluna...
dados_modelo <- dados_bio[,2:3]
Dados abióticos
#criamos o caminho para os rasters
rasters <- list.files(path=paste(getwd(),'/datasets', sep=''), pattern='bio', full.names=TRUE )
#Definimos os rasters como objeto 'predictors'
predictors <- stack(rasters)
plot(predictors)
Vamos visualizar os dados bióticos espacializados sobre uma das camadas preditoras:
plot(predictors, 1)
points(dados_modelo, bg='red', cex=1,pch=21)
Extraindo os valores ambientais das localidades onde há registros de ocorrência, usando a função 'extract':
presvals <- extract(predictors, dados_modelo)
Como usaremos o algoritmo Bioclim, que não precisa de dados de ausência, não geraremos random points nesta estapa.
#ext <- extent(-90, -32, -33, 23)
#backgr <- randomPoints(predictors, 500)
#absvals <- extract(pred_nf, backgr)
Antes de realizar a modelagem, precisamos definir o como tais dados serão particionadas para treino e teste, de presença apenas.
Ou seja, particionaremos os dados de presença em dois: Uma parte (treino) será usada para treinar o algoritmos e realizar a modelagem. A outra partição (teste) será usada para testar se a modelagem possui erros de comissão e/ou erros de omissão.
group <- kfold(dados_modelo, 3)
pres_train <- dados_modelo[group != 1, ]
pres_test <- dados_modelo[group == 1, ]
Agora a divisão dos nossos dados em 3 grupos diferentes para utilizarmos 2 para treino e apenas um para teste:
ext <- extent(-184, 184, -60, 90)
backg <- randomPoints(predictors, n=1000, ext=ext, extf = 1.25)
colnames(backg) = c( 'lon' , 'lat' )
##Criando e separando as partições:
group <- kfold(backg, 3)
backg_train <- backg[group != 1, ]
backg_test <- backg[group == 1, ]
Para visualizar onde estão as ocorrências dos seus dados e onde estão os pontos aleatórios:
r<- raster(predictors, 1)
plot(!is.na(r), col=c( 'white' , 'light grey' ), legend=FALSE)
points(pres_train, pch= '+' , col= 'green' )
points(pres_test, pch= '+' , col= 'blue' )
Dados aleatórios
plot(!is.na(r), col=c( 'white' , 'light grey' ), legend=FALSE)
points(backg_train, pch= '-' , cex=0.5, col= 'yellow' )
points(backg_test, pch= '-' , cex=0.5, col= 'black' )
Rodando a modelagem com algoritmo Bioclim:
bc <- bioclim(predictors, pres_train)
Avaliando o modelo gerado pelo Bioclim, usando o conjunto de presença deixada para teste e os aleatórios de teste:
e <- evaluate(pres_test, backg_test, bc, predictors)
e
class : ModelEvaluation
n presences : 38
n absences : 333
AUC : 0.9397
cor : 0.6657
max TPR+TNR at : 0.01306
Definindo um threshold: Boiclim
threshold <- e@t[which.max(e@TPR + e@TNR)]
threshold
[1] 0.01306
Voltando para o espaço geográfico: Bioclim
pb <- predict(predictors, bc, ext=ext, progress='')
pb
class : RasterLayer
dimensions : 1470, 3675, 5402250 (nrow, ncol, ncell)
resolution : 0.1, 0.1 (x, y)
extent : -183.5, 184, -58.73, 88.27 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs
data source : in memory
names : layer
values : 0, 0.8684 (min, max)
Visualizando o resultado no espaço geográfico: Bioclim Modelo Originai:
plot(pb, main= 'Bioclim, raw values' )
points(pres_train, pch= '+' )
Modelo binário:
plot(pb > threshold, main= 'Bioclim presence/absence ')
points(pres_train, pch= '+' )
Exportando o modelo gerado:
pb_final<-(pb > threshold)
writeRaster(pb_final,filename='Bioclim_Threshold.asc', format='ascii', datatype='INT2U', overwrite=T)
class : RasterLayer
dimensions : 1470, 3675, 5402250 (nrow, ncol, ncell)
resolution : 0.1, 0.1 (x, y)
extent : -183.5, 184, -58.73, 88.27 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/iis/Dropbox/SDM2/Bioclim_Threshold.asc
names : Bioclim_Threshold
values : 0, 1 (min, max)