Skip to content

Commit

Permalink
v4.2-3-5 fixed bugs with categorical variables and missing values. pr…
Browse files Browse the repository at this point in the history
…ojection are now calculated only for cells without any missing values
  • Loading branch information
rpatin committed Jun 1, 2023
1 parent 0aee6ad commit cd2352d
Show file tree
Hide file tree
Showing 92 changed files with 146 additions and 116 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Package: biomod2
Type: Package
Title: Ensemble Platform for Species Distribution Modeling
Version: 4.2-3-4
Version: 4.2-3-5
Date: 2023-05-22
Authors@R: c(person("Wilfried", "Thuiller", role = c("aut")
, email = "[email protected]"),
Expand Down
6 changes: 4 additions & 2 deletions R/BIOMOD_EnsembleForecasting.R
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@
##' plot(myBiomodEMProj)
##'
##'
##' @importFrom terra rast `add<-` wrap writeRaster
##' @importFrom terra rast `add<-` wrap writeRaster mask
##'
##'
##' @export
Expand Down Expand Up @@ -309,7 +309,7 @@ BIOMOD_EnsembleForecasting <- function(bm.em,

# remove tmp directory
unlink(file.path(bm.em@dir.name, bm.em@sp.name, paste0("proj_", tmp_dir))
, recursive = TRUE, force = TRUE)
, recursive = TRUE, force = TRUE)
}
if (!proj_is_raster) {
formal_pred <- tapply(X = formal_pred$pred, INDEX = list(formal_pred$points, formal_pred$full.name), FUN = mean)
Expand Down Expand Up @@ -603,6 +603,8 @@ BIOMOD_EnsembleForecasting <- function(bm.em,

if (inherits(new.env, 'SpatRaster')) {
.fun_testIfIn(TRUE, "names(new.env)", names(new.env), bm.em@expl.var.names)
new.env.mask <- .get_data_mask(new.env, value.out = 1)
new.env <- mask(new.env, new.env.mask)
} else {
.fun_testIfIn(TRUE, "colnames(new.env)", colnames(new.env), bm.em@expl.var.names)
}
Expand Down
6 changes: 4 additions & 2 deletions R/BIOMOD_Projection.R
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@
##' @importFrom foreach foreach %dopar%
## @importFrom doParallel registerDoParallel
##' @importFrom terra rast subset nlyr writeRaster terraOptions wrap unwrap
##' mem_info app is.factor
##' mem_info app is.factor mask
##' @importFrom utils capture.output
##' @importFrom abind asub
##'
Expand Down Expand Up @@ -517,7 +517,7 @@ BIOMOD_Projection <- function(bm.mod,
# conversion into SpatRaster
if (any(raster::is.factor(new.env))) {
new.env <- .categorical_stack_to_terra(raster::stack(new.env),
expected_levels = head(get_formal_data(bm.mod, subinfo = "expl.var"))
expected_levels = head(get_formal_data(bm.mod, subinfo = "expl.var"))
)
} else {
new.env <- rast(new.env)
Expand All @@ -526,6 +526,8 @@ BIOMOD_Projection <- function(bm.mod,

if (inherits(new.env, 'SpatRaster')) {
.fun_testIfIn(TRUE, "names(new.env)", names(new.env), bm.mod@expl.var.names)
new.env.mask <- .get_data_mask(new.env, value.out = 1)
new.env <- mask(new.env, new.env.mask)
} else {
.fun_testIfIn(TRUE, "colnames(new.env)", colnames(new.env), bm.mod@expl.var.names)
}
Expand Down
15 changes: 6 additions & 9 deletions R/bm_PseudoAbsences.R
Original file line number Diff line number Diff line change
Expand Up @@ -631,12 +631,9 @@ setMethod('bm_PseudoAbsences_random', signature(expl.var = "SpatRaster"),
} else {
cat("\n > Pseudo absences are selected in explanatory variables")
# create a mask containing all not already sampled points (presences and absences)
mask.env <- mask.out <- subset(expl.var, 1)
## the area we want to sample
mask.env <- classify(mask.env, matrix(c(-Inf, Inf, -1),
ncol = 3, byrow = TRUE))
mask.out[] <- NA

## the area we want to sample
mask.out <- mask.env <- .get_data_mask(expl.var, value.out = -1)
# add presences and true absences in our mask
in.cells <- cellFromXY(mask.env, crds(resp.var))
mask.env[in.cells] <- NA
Expand Down Expand Up @@ -940,16 +937,16 @@ setMethod('bm_PseudoAbsences_disk', signature(expl.var = "SpatRaster"),

if (is.null(dist.max)) {
dist.max <- Inf
}
}
mask.in <- classify(dist.mask,
matrix(c(-Inf, dist.min, NA,
dist.min, dist.max, 1,
dist.max, Inf, NA),
dist.min, dist.max, 1,
dist.max, Inf, NA),
ncol = 3, byrow = TRUE))
mask.in[cellFromXY(mask.in, pres.xy)] <- 1
mask.in = expl.var * mask.in
names(mask.in) = names(expl.var)

# 2. selecting randomly pseudo absences
return(bm_PseudoAbsences_random(resp.var, expl.var = mask.in, nb.absences, nb.rep))
}
Expand Down
18 changes: 13 additions & 5 deletions R/bm_SampleFactorLevels.R
Original file line number Diff line number Diff line change
Expand Up @@ -125,25 +125,33 @@ bm_SampleFactorLevels.SpatRaster <- function(expl.var, mask.out = NULL, mask.in

## get the factor levels on the full dataset
fact.level.names <- cats(subset(expl.var, f))[[1]][,2]
fact.level <- fact.level.original <- seq_along(fact.level.names)
fact.level <- fact.level.original <- cats(subset(expl.var, f))[[1]][,1]
cat("\n\t> fact.level for", names(expl.var)[f], ":\t", paste(fact.level, fact.level.names, sep = ":", collapse = "\t"))

## mask containing points that have already been sampled ------------------------------------
if (!is.null(mask.out))
{
## check the factor levels that have already been sampled
fact.levels.sampled <-
unique(na.omit(
values(mask(subset(expl.var, f), mask.out))
))
values((mask(subset(expl.var, f), mask.out, maskvalues = c(1), inverse = TRUE)))
))
## update levels names (lost during mask conversion)
cat("\n\t - according to mask.out levels", fact.levels.sampled, "have already been sampled")
## update the list of factor levels to sample
fact.level <- setdiff(fact.level, fact.levels.sampled)
}

## if there still is some levels to sample --------------------------------------------------
## take a random value of them in the full dataset
if (length(fact.level) > 0) {
cat("\n\t - levels", fact.level, "will be sampled in the original raster")
selected.cells <- c(selected.cells, sapply(fact.level, function(fl) {
ind = which(subset(expl.var, f)[] == fl)
if (length(ind) > 0) {
return(sample(ind, 1))
}
}))
}

return(unlist(selected.cells))
})))
return(unique(fact.level.cells))
Expand Down
2 changes: 1 addition & 1 deletion docs/404.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/articles/index.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 25 additions & 10 deletions docs/articles/news.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions docs/authors.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/index.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.ensemble.models.out.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.formated.data.PA.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.formated.data.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.models.options.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.models.out.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.projection.out.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD.stored.data.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD_ConvertOldRun-deprecated.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD_CrossValidation-deprecated.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD_EnsembleForecasting.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/reference/BIOMOD_EnsembleModeling.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit cd2352d

Please sign in to comment.