[Biomod-commits] biomod2 / Maxent
Sami Domisch
sami.domisch at senckenberg.de
Wed Aug 22 23:42:51 CEST 2012
Dear Damien and Wilfried,
first of all many thanks for providing the new biomod2 package! I played
a bit with the code in the multi species manual, and tried to include
MAXENT within the sfLapply-function in snowfall. However, snowfall
returns an error, stating that it "cannot open the connection". After
turning MAXENT off, the models run fine.
> Error in checkForRemoteErrors(val) :
> 9 nodes produced errors; first error: cannot open the connection
I guess that this error derives from the temporary MAXENT-folder created
in setwd()? The single nodes try to access that folder which is deleted
after each run?
Is it possible to place the MaxentTmpData-folder within each species'
folder during the model run? And related to that, is it possible to save
the modelling results (save.image) also in each species' folder? In
other words, how can I access the single species folder within the
lapply-wrapper?
Again, thanks a lot for this nice tool!
Best, Sami
#----------------------------------
library(biomod2)
### Load data
mySpeciesOcc <- read.table("mySpeciesOcc.txt", h=T)
coord = read.table("coordinates.txt", h=T)
mySpeciesOcc = cbind(coord, mySpeciesOcc)
### Fill 'NAs'
mySpeciesOcc[mySpeciesOcc==0] <- NA
require(raster)
myExpl = stack("present/bio1",
"present/bio12",
"present/bio15")
sp.names <- names(mySpeciesOcc[3:12])
### Create function to run models within 'lapply'
MyBiomodSF <- function(sp.n){
cat('/n',sp.n,'modeling...')
### definition of data for this run
## i.e keep only the column of our species
myResp <- as.numeric(mySpeciesOcc[,sp.n])
#myResp <- as.numeric(mySpeciesOcc[,sp.n])
# get NAs id
na.id <- which(is.na(myResp))
# remove NAs to enforce PA sampling to be done on explanatory rasters
myResp <- myResp[-na.id]
# myRespCoord =mySpeciesOcc[1:2]
myRespCoord = mySpeciesOcc[-na.id,c('long','lat')]
myRespName = sp.n
### Initialisation
myBiomodData <- BIOMOD_FormatingData(resp.var = myResp,
expl.var = myExpl,
resp.xy = myRespCoord,
resp.name = myRespName,
PA.nb.rep = 1,
PA.nb.absences = 10000,
PA.strategy = 'random')
### Options definition
myBiomodOption <- BIOMOD_ModelingOptions()
### Modelling
myBiomodModelOut <- BIOMOD_Modeling(
myBiomodData,
#models =
c('SRE','CTA','RF','MARS','FDA','MAXENT','GLM','GAM','GBM','ANN'),
models = c('SRE','RF','MAXENT'),
models.options = myBiomodOption,
NbRunEval=3,
DataSplit=70,
Yweights=NULL,
VarImport=3,
models.eval.meth = c('TSS','ROC'),
SaveObj = TRUE,
rescal.all.models = TRUE)
# ### Building ensemble-models
myBiomodEM <- BIOMOD_EnsembleModeling(
modeling.output = myBiomodModelOut,
chosen.models = 'all',
eval.metric = c('TSS'),
eval.metric.quality.threshold = c(0.4), # e.g. 0.4
prob.mean = T,
prob.cv = T,
prob.ci = T,
prob.ci.alpha = 0.05,
prob.median = T,
committee.averaging = T,
prob.mean.weight = T,
prob.mean.weight.decay = 'proportional' )
### Do projections on current variable
myBiomomodProj <- BIOMOD_Projection(
modeling.output = myBiomodModelOut,
new.env = myExpl,
proj.name = 'current',
selected.models = 'all',
binary.meth= 'ROC',
compress = 'xz',
clamping.mask = F)
### Do ensemble-models projections on current varaiable
myBiomodEF <- BIOMOD_EnsembleForecasting(
projection.output = myBiomomodProj,
EM.output = myBiomodEM,
binary.meth = 'TSS',
total.consensus = TRUE)
}
#----------------------------------
### Init snowfall
library(snowfall)
sfInit(parallel=TRUE, cpus=8, type="SOCK")
### Export packages
sfLibrary('biomod2', character.only=TRUE)
sfLibrary('rgdal', character.only=TRUE)
### Export data to nodes
sfExportAll()
### Check the items each node has loaded so far:
sfClusterEval(ls())
### Do the run
start <- Sys.time()
result <- sfClusterApplyLB(sp.names, MyBiomodSF)
Sys.time()-start
### Remove all variables from nodes
# sfRemoveAll(except=c("sp.names", "MyBiomodSF"))
### Stop snowfall
sfStop()
#----------------------------------
More information about the Biomod-commits
mailing list