From 673b509cdeead566ad17a0dc15bb702d159487f2 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 14 Nov 2023 07:10:03 +0000 Subject: [PATCH 01/27] Bump version to dev numbering --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5fcb1ef1..07ed2341 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: tidysdm Title: Species Distribution Models with Tidymodels -Version: 0.9.2 +Version: 0.9.2.9000 Authors@R: c( person("Michela", "Leonardi", role = "aut"), person("Margherita", "Colucci", role = "aut"), From 1c3d5abf99b74d8241d7c55452271dce2e4f83b7 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Thu, 16 Nov 2023 20:56:13 +0000 Subject: [PATCH 02/27] quick hack to add time buffer to sample_pseudoabs_time --- R/sample_pseudoabs_time.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 4fcdc131..6c71f3f3 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -34,6 +34,7 @@ #' @param class_label the label given to the sampled points. Defaults to `pseudoabs` #' @param return_pres return presences together with pseudoabsences/background #' in a single tibble +#' @param time_buffer temporary hack to have a time buffer when sampling pseudoabsences #' @returns An object of class [tibble::tibble]. If presences are returned, the #' presence level is set as the reference (to match the expectations in the #' `yardstick` package that considers the first level to be the event) @@ -43,7 +44,7 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, time_col = "time", lubridate_fun = c, method = "random", class_label = "pseudoabs", - return_pres = TRUE) { + return_pres = TRUE, time_buffer = 0) { # create a vector of times formatted as proper dates time_lub <- data[, time_col] %>% as.data.frame() %>% @@ -70,7 +71,8 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t for (i_index in unique(time_indices)) { # browser() # get data for this time_index, we remove coordinates as we don't need them - data_sub <- data %>% dplyr::filter(time_indices == i_index) + i_index_vector <- seq(i_index-time_buffer,i_index+time_buffer,1) + data_sub <- data %>% dplyr::filter(time_indices %in% i_index_vector) # slice the region series based on the index; if (inherits(raster, "SpatRasterDataset")) { raster_sub <- pastclim::slice_region_series(raster, time_bp = pastclim::time_bp(raster[[1]])[i_index]) From 3377a8d9cee3294db26c3dc95de1fc52931cece0 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Fri, 17 Nov 2023 09:13:54 +0000 Subject: [PATCH 03/27] start implementing unit test --- R/sample_pseudoabs_time.R | 30 ++++- tests/testthat/test_sample_pseudoabs_time.R | 140 ++++++++++++++++++++ 2 files changed, 163 insertions(+), 7 deletions(-) create mode 100644 tests/testthat/test_sample_pseudoabs_time.R diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 6c71f3f3..907b9759 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -1,4 +1,4 @@ -#' Sample pseudo-absence (or background) points for SDM analysis +#' Sample pseudo-absence (or background) points for SDM analysis for points with a time point. #' #' This function samples pseudo-absence (or background, the naming is a matter #' of semantics) points from a raster given a set of presences. @@ -19,7 +19,9 @@ #' @param data An [`sf::sf`] data frame, or a data frame with coordinate variables. #' These can be defined in `coords`, unless they have standard names #' (see details below). -#' @param raster the [terra::SpatRaster] or [terra::SpatRasterDataset] from which cells will be sampled +#' @param raster the [terra::SpatRaster] or [terra::SpatRasterDataset] from which cells will be sampled. +#' If a [terra::SpatRasterDataset], the first dataset will be used to define which cells are valid, +#' and which are NAs. #' @param n_per_presence number of pseudoabsence/background points to sample for #' each presence #' @param coords a vector of length two giving the names of the "x" and "y" @@ -34,7 +36,12 @@ #' @param class_label the label given to the sampled points. Defaults to `pseudoabs` #' @param return_pres return presences together with pseudoabsences/background #' in a single tibble -#' @param time_buffer temporary hack to have a time buffer when sampling pseudoabsences +#' @param time_buffer the buffer on the time axis around presences that defines their effect when +#' sampling pseudoabsences. If set to zero, presences have an effect only on the time step to which +#' they are assigned in `raster`; if a positive value, it defines the number of days before +#' and after the date provided in the `time` column for which the presence should be considered +#' (e.g. 20 days means that a presence is considered in all time steps equivalent to plus and minus +#' twenty days from its date). #' @returns An object of class [tibble::tibble]. If presences are returned, the #' presence level is set as the reference (to match the expectations in the #' `yardstick` package that considers the first level to be the event) @@ -46,13 +53,21 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t method = "random", class_label = "pseudoabs", return_pres = TRUE, time_buffer = 0) { # create a vector of times formatted as proper dates - time_lub <- data[, time_col] %>% - as.data.frame() %>% - dplyr::select(dplyr::all_of(time_col)) - time_lub <- lubridate_fun(time_lub[, time_col]) + time_lub <- data %>% + sf::st_drop_geometry() %>% + dplyr::pull(time_col) + time_lub <- lubridate_fun(time_lub) if (!inherits(time_lub, "POSIXct")) { stop("time is not a date (or cannot be coerced to one)") } + ## TODO + ## Check that we can now create a time_lub_min and time_lub_max by adding and removing days + ## and then filter later on for i_index >= lub_min and i_index<=lub_max (or something along those lines, + ## think carefully about units) + + + ## TODO it would be easier to just get the first dataset from raster and rename it raster! + # get the time steps if (inherits(raster, "SpatRasterDataset")) { time_steps <- terra::time(raster)[[1]] @@ -70,6 +85,7 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t pseudoabsences <- NULL for (i_index in unique(time_indices)) { # browser() + # TODO separate real points from presences that are buffer. # get data for this time_index, we remove coordinates as we don't need them i_index_vector <- seq(i_index-time_buffer,i_index+time_buffer,1) data_sub <- data %>% dplyr::filter(time_indices %in% i_index_vector) diff --git a/tests/testthat/test_sample_pseudoabs_time.R b/tests/testthat/test_sample_pseudoabs_time.R new file mode 100644 index 00000000..da5126de --- /dev/null +++ b/tests/testthat/test_sample_pseudoabs_time.R @@ -0,0 +1,140 @@ +# set up a small world +# small grid +library(terra) +grid_raster <- terra::rast(matrix(1:64, ncol = 8, byrow = TRUE), + extent = terra::ext(c(-2, 2, -2, 2)), + crs = "lonlat" +) +# crs="epsg:4326") +grid_raster[c(1:5, 15, 16, 23, 24)] <- NA + +# create a raster with multiple layers for each time step +grid_raster <- c(grid_raster, grid_raster, grid_raster, grid_raster, grid_raster) +names(grid_raster) <- paste0("var1.",0:4) +pastclim::time_bp(grid_raster)<-0:4 + +# locations (first isolated, two closer to each other) +locations <- data.frame( + lon = c(0.8, 1.9, 0.7), + lat = c(1.3, -1.8, -0.9), + id = 1:3, + time = c(2,2,4) +) +min_buffer <- terra::buffer(terra::vect(locations, crs = "lonlat"), 60000) +max_buffer <- terra::buffer(terra::vect(locations, crs = "lonlat"), 90000) + + +# points in poygons function +# (from https://stackoverflow.com/questions/72384038/point-in-polygon-using-terra-package-in-r) +pts_in_polys <- function(pts, polys) { + e <- terra::extract(polys, pts) + e[!is.na(e[, 2]), 1] +} + +test_that("sample_pseudoabs_time samples in the right places", { + # error if time is not a posix object + expect_error(sample_pseudoabs_time(locations, + n = 25, raster = grid_raster), + "time is not a date") + set.seed(123) + pa_random <- sample_pseudoabs_time(locations, + n = 5, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + return_pres = FALSE + ) + # we should now check that some points are in the buffers + expect_true(length(pts_in_polys(terra::vect(pa_random), min_buffer)) > 0) + expect_true(length(pts_in_polys(terra::vect(pa_random), max_buffer)) > 0) + # there should be no presences + expect_true(unique(pa_random$class) == "pseudoabs") + + # now use a minimum buffer + set.seed(123) + pa_min <- sample_pseudoabs_time(locations, + n = 15, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + method = c("dist_min", 60000), + return_pres = FALSE + ) + # none should be within the minimum buffer + expect_false(length(pts_in_polys(terra::vect(pa_min), min_buffer)) == 0) + + ##Stopped here, the above does not work fully. + + + + # now use a maximum buffer + set.seed(123) + pa_max <- sample_pseudoabs(locations, + n = 5, raster = grid_raster, + method = c("dist_max", 90000), + return_pres = FALSE + ) + # all are within the max buffer + expect_true(length(pts_in_polys(terra::vect(pa_max), max_buffer)) == nrow(pa_max)) + + # and now use a disc + set.seed(123) + pa_disc <- sample_pseudoabs(locations, + n = 5, raster = grid_raster, + method = c("dist_disc", 60000, 90000), + return_pres = FALSE + ) + # all are within the max buffer + expect_true(length(pts_in_polys(terra::vect(pa_disc), max_buffer)) == nrow(pa_disc)) + # none should be within the minimum buffer + expect_true(length(pts_in_polys(terra::vect(pa_disc), min_buffer)) == 0) + + pa_pres <- sample_pseudoabs(locations, n = 25, raster = grid_raster) + expect_true(all(levels(pa_pres$class) == c("presence", "pseudoabs"))) + + # now confirm that it all works if we use an sf object + set.seed(123) + locations_sf <- sf::st_as_sf(locations, coords = c("lon", "lat")) %>% sf::st_set_crs(4326) + pa_random_sf <- sample_pseudoabs(locations_sf, + n = 25, raster = grid_raster, + return_pres = FALSE + ) + expect_true(inherits(pa_random_sf, "sf")) + expect_true(inherits(pa_random_sf, "data.frame")) # it is also a df! + expect_true(all(pa_random$id == pa_random_sf$id)) + + # test error messages + expect_error( + sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = "blah"), + "method has to be" + ) + expect_error( + sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = c("blah", 25)), + "method has to be" + ) +}) + +test_that("handling of data frames and sf objects", { + locations_sf <- sf::st_as_sf(locations, coords = c("lon", "lat")) %>% sf::st_set_crs(4326) + expect_error( + sample_pseudoabs(locations_sf, coords = c("x", "y"), raster = grid_raster), + "There are no recognised coordinate columns" + ) + expect_warning(sample_pseudoabs(locations_sf, raster = grid_raster, n = 100), "There are fewer available cells for raster 'NA' (3 presences) than the requested 100 pseudoabsences. Only 52 will be returned.", fixed = TRUE) + locations_sf <- locations_sf %>% dplyr::bind_cols(sf::st_coordinates(.)) + expect_no_error(sample_pseudoabs(locations_sf, coords = c("X", "Y"), raster = grid_raster, n = 25)) + locations_sf$X <- rep(0, 3) + locations_sf$Y <- rep(0, 3) + expect_error( + sample_pseudoabs(locations_sf, coords = c("X", "Y"), raster = grid_raster, n = 25), + "sf object contains X and Y coordinates that do not match the sf point geometry" + ) + locations_sf$X <- rep(NA, 3) + locations_sf$Y <- rep(NA, 3) + expect_error( + sample_pseudoabs(locations_sf, coords = c("X", "Y"), raster = grid_raster, n = 25), + "sf object contains NA values in the X and Y coordinates" + ) +}) + +# sample code to plot points in and buffers +# plot(grid_raster,colNA="darkgray") +# polys(terra::as.polygons(grid_raster)) +# points(vect(locations), col="red", cex=2) +# points(vect(pa_disc), col="blue", cex=2) +# polys(min_buffer) +# polys(max_buffer) From 7b786d53e13b34bfde83f6436d8b87fd19442887 Mon Sep 17 00:00:00 2001 From: Johanna Paijmans Date: Fri, 17 Nov 2023 19:56:37 +0000 Subject: [PATCH 04/27] hack number of pseudoabsences sampled --- R/sample_pseudoabs_time.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 6c71f3f3..1f5bc78f 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -73,6 +73,8 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t # get data for this time_index, we remove coordinates as we don't need them i_index_vector <- seq(i_index-time_buffer,i_index+time_buffer,1) data_sub <- data %>% dplyr::filter(time_indices %in% i_index_vector) + # extract for time_index i_index to retrieve the n presences + data_sub_single_ti <- data %>% dplyr::filter(time_indices == i_index) # slice the region series based on the index; if (inherits(raster, "SpatRasterDataset")) { raster_sub <- pastclim::slice_region_series(raster, time_bp = pastclim::time_bp(raster[[1]])[i_index]) @@ -82,7 +84,7 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t data_sub <- sample_pseudoabs( data = data_sub, raster = raster_sub, - n = n_per_presence * nrow(data_sub), + n = n_per_presence * nrow(data_sub_single_ti), coords = coords, method = method, class_label = class_label, From ab25fac373a92fee4572a9e8dba82c6b929c46ce Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 29 Nov 2023 15:32:28 +0000 Subject: [PATCH 05/27] Revert "Merge branch 'sample_time' of github.com:EvolEcolGroup/tidysdm into sample_time" This reverts commit 06112623ce4623873f748c057ac243968dc032e9, reversing changes made to 3377a8d9cee3294db26c3dc95de1fc52931cece0. --- R/sample_pseudoabs_time.R | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 77b15cba..907b9759 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -89,8 +89,6 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t # get data for this time_index, we remove coordinates as we don't need them i_index_vector <- seq(i_index-time_buffer,i_index+time_buffer,1) data_sub <- data %>% dplyr::filter(time_indices %in% i_index_vector) - # extract for time_index i_index to retrieve the n presences - data_sub_single_ti <- data %>% dplyr::filter(time_indices == i_index) # slice the region series based on the index; if (inherits(raster, "SpatRasterDataset")) { raster_sub <- pastclim::slice_region_series(raster, time_bp = pastclim::time_bp(raster[[1]])[i_index]) @@ -100,7 +98,7 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t data_sub <- sample_pseudoabs( data = data_sub, raster = raster_sub, - n = n_per_presence * nrow(data_sub_single_ti), + n = n_per_presence * nrow(data_sub), coords = coords, method = method, class_label = class_label, From b4ac112b4ae220659c4995f7da85dd0efee319a3 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 29 Nov 2023 21:47:31 +0000 Subject: [PATCH 06/27] Functioning time buffer for sampling --- R/sample_pseudoabs_time.R | 36 +++-- inst/WORDLIST | 2 + man/sample_pseudoabs_time.Rd | 16 ++- tests/testthat/test_sample_pseudoabs_time.R | 150 +++++++------------- 4 files changed, 88 insertions(+), 116 deletions(-) diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 907b9759..2321034c 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -36,7 +36,7 @@ #' @param class_label the label given to the sampled points. Defaults to `pseudoabs` #' @param return_pres return presences together with pseudoabsences/background #' in a single tibble -#' @param time_buffer the buffer on the time axis around presences that defines their effect when +#' @param time_buffer the buffer on the time axis around presences that defines their effect when #' sampling pseudoabsences. If set to zero, presences have an effect only on the time step to which #' they are assigned in `raster`; if a positive value, it defines the number of days before #' and after the date provided in the `time` column for which the presence should be considered @@ -60,12 +60,10 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t if (!inherits(time_lub, "POSIXct")) { stop("time is not a date (or cannot be coerced to one)") } - ## TODO - ## Check that we can now create a time_lub_min and time_lub_max by adding and removing days - ## and then filter later on for i_index >= lub_min and i_index<=lub_max (or something along those lines, - ## think carefully about units) - - + # create max and min date of influence for a presence with time_buffer + time_lub_min <- time_lub-lubridate::days(time_buffer) + time_lub_max <- time_lub+lubridate::days(time_buffer) + ## TODO it would be easier to just get the first dataset from raster and rename it raster! # get the time steps @@ -82,13 +80,25 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t sapply(time_lub, function(a, b) { which.min(abs(a - b)) }, time_steps) + time_indices_min <- + sapply(time_lub_min, function(a, b) { + which.min(abs(a - b)) + }, time_steps) + time_indices_max <- + sapply(time_lub_max, function(a, b) { + which.min(abs(a - b)) + }, time_steps) + + pseudoabsences <- NULL + for (i_index in unique(time_indices)) { - # browser() - # TODO separate real points from presences that are buffer. - # get data for this time_index, we remove coordinates as we don't need them - i_index_vector <- seq(i_index-time_buffer,i_index+time_buffer,1) - data_sub <- data %>% dplyr::filter(time_indices %in% i_index_vector) + # count the presences in this time step + n_pres_this_time <- data %>% dplyr::filter(time_indices == i_index) %>% nrow() + # create a dataset with presences for this time step plus presences within the time buffer + data_sub <- data %>% dplyr::filter( + i_index >= time_indices_min & i_index <=time_indices_max) + # slice the region series based on the index; if (inherits(raster, "SpatRasterDataset")) { raster_sub <- pastclim::slice_region_series(raster, time_bp = pastclim::time_bp(raster[[1]])[i_index]) @@ -98,7 +108,7 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t data_sub <- sample_pseudoabs( data = data_sub, raster = raster_sub, - n = n_per_presence * nrow(data_sub), + n = n_per_presence * n_pres_this_time, coords = coords, method = method, class_label = class_label, diff --git a/inst/WORDLIST b/inst/WORDLIST index 3f739322..73f50818 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -22,6 +22,7 @@ SDMs SSP Schmiegelow SpatRaster +SpatRasterDataset StackOverflow TSS Tidymodels @@ -91,6 +92,7 @@ stackexchange stackoverflow stat svm +terra thres tibble tibbles diff --git a/man/sample_pseudoabs_time.Rd b/man/sample_pseudoabs_time.Rd index b0cf3ac9..7de8666c 100644 --- a/man/sample_pseudoabs_time.Rd +++ b/man/sample_pseudoabs_time.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/sample_pseudoabs_time.R \name{sample_pseudoabs_time} \alias{sample_pseudoabs_time} -\title{Sample pseudo-absence (or background) points for SDM analysis} +\title{Sample pseudo-absence (or background) points for SDM analysis for points with a time point.} \usage{ sample_pseudoabs_time( data, @@ -13,7 +13,8 @@ sample_pseudoabs_time( lubridate_fun = c, method = "random", class_label = "pseudoabs", - return_pres = TRUE + return_pres = TRUE, + time_buffer = 0 ) } \arguments{ @@ -21,7 +22,9 @@ sample_pseudoabs_time( These can be defined in \code{coords}, unless they have standard names (see details below).} -\item{raster}{the \link[terra:SpatRaster-class]{terra::SpatRaster} or \link[terra:SpatRaster-class]{terra::SpatRasterDataset} from which cells will be sampled} +\item{raster}{the \link[terra:SpatRaster-class]{terra::SpatRaster} or \link[terra:SpatRaster-class]{terra::SpatRasterDataset} from which cells will be sampled. +If a \link[terra:SpatRaster-class]{terra::SpatRasterDataset}, the first dataset will be used to define which cells are valid, +and which are NAs.} \item{n_per_presence}{number of pseudoabsence/background points to sample for each presence} @@ -43,6 +46,13 @@ use \code{lubridate_fun} to provide a function that can be used to convert appro \item{return_pres}{return presences together with pseudoabsences/background in a single tibble} + +\item{time_buffer}{the buffer on the time axis around presences that defines their effect when +sampling pseudoabsences. If set to zero, presences have an effect only on the time step to which +they are assigned in \code{raster}; if a positive value, it defines the number of days before +and after the date provided in the \code{time} column for which the presence should be considered +(e.g. 20 days means that a presence is considered in all time steps equivalent to plus and minus +twenty days from its date).} } \value{ An object of class \link[tibble:tibble]{tibble::tibble}. If presences are returned, the diff --git a/tests/testthat/test_sample_pseudoabs_time.R b/tests/testthat/test_sample_pseudoabs_time.R index da5126de..b6759e16 100644 --- a/tests/testthat/test_sample_pseudoabs_time.R +++ b/tests/testthat/test_sample_pseudoabs_time.R @@ -15,14 +15,11 @@ pastclim::time_bp(grid_raster)<-0:4 # locations (first isolated, two closer to each other) locations <- data.frame( - lon = c(0.8, 1.9, 0.7), - lat = c(1.3, -1.8, -0.9), - id = 1:3, - time = c(2,2,4) + lon = c(0.8, 1.9, 0.7, 0.4), + lat = c(1.3, -1.8, -0.9, 1.2), + id = 1:4, + time = c(2,2,3,4) ) -min_buffer <- terra::buffer(terra::vect(locations, crs = "lonlat"), 60000) -max_buffer <- terra::buffer(terra::vect(locations, crs = "lonlat"), 90000) - # points in poygons function # (from https://stackoverflow.com/questions/72384038/point-in-polygon-using-terra-package-in-r) @@ -38,103 +35,56 @@ test_that("sample_pseudoabs_time samples in the right places", { "time is not a date") set.seed(123) pa_random <- sample_pseudoabs_time(locations, - n = 5, raster = grid_raster, lubridate_fun = pastclim::ybp2date, - return_pres = FALSE - ) - # we should now check that some points are in the buffers - expect_true(length(pts_in_polys(terra::vect(pa_random), min_buffer)) > 0) - expect_true(length(pts_in_polys(terra::vect(pa_random), max_buffer)) > 0) - # there should be no presences - expect_true(unique(pa_random$class) == "pseudoabs") - - # now use a minimum buffer - set.seed(123) - pa_min <- sample_pseudoabs_time(locations, - n = 15, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + n = 10, raster = grid_raster, lubridate_fun = pastclim::ybp2date, method = c("dist_min", 60000), return_pres = FALSE ) - # none should be within the minimum buffer - expect_false(length(pts_in_polys(terra::vect(pa_min), min_buffer)) == 0) - - ##Stopped here, the above does not work fully. - + # we have the right number of pseudoabsences per time + expect_true(all(table(locations$time)*10==table(pa_random$time_step))) + # none are within the buffer at a given time step + min_buffer <- terra::buffer(terra::vect(locations %>% + dplyr::filter(time==2), crs = "lonlat"), 60000) + expect_true(length(pts_in_polys(terra::vect(pa_random %>% + dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + # but they ignore presences from other time steps + min_buffer <- terra::buffer(terra::vect(locations %>% + dplyr::filter(time==3), crs = "lonlat"), 60000) + expect_false(length(pts_in_polys(terra::vect(pa_random %>% + dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + min_buffer <- terra::buffer(terra::vect(locations %>% + dplyr::filter(time==4), crs = "lonlat"), 60000) + expect_false(length(pts_in_polys(terra::vect(pa_random %>% + dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) - - # now use a maximum buffer - set.seed(123) - pa_max <- sample_pseudoabs(locations, - n = 5, raster = grid_raster, - method = c("dist_max", 90000), - return_pres = FALSE - ) - # all are within the max buffer - expect_true(length(pts_in_polys(terra::vect(pa_max), max_buffer)) == nrow(pa_max)) - - # and now use a disc - set.seed(123) - pa_disc <- sample_pseudoabs(locations, - n = 5, raster = grid_raster, - method = c("dist_disc", 60000, 90000), - return_pres = FALSE - ) - # all are within the max buffer - expect_true(length(pts_in_polys(terra::vect(pa_disc), max_buffer)) == nrow(pa_disc)) - # none should be within the minimum buffer - expect_true(length(pts_in_polys(terra::vect(pa_disc), min_buffer)) == 0) - - pa_pres <- sample_pseudoabs(locations, n = 25, raster = grid_raster) - expect_true(all(levels(pa_pres$class) == c("presence", "pseudoabs"))) - - # now confirm that it all works if we use an sf object + # now set the time buffer so that we allow presences to impact absences in other time steps set.seed(123) - locations_sf <- sf::st_as_sf(locations, coords = c("lon", "lat")) %>% sf::st_set_crs(4326) - pa_random_sf <- sample_pseudoabs(locations_sf, - n = 25, raster = grid_raster, - return_pres = FALSE - ) - expect_true(inherits(pa_random_sf, "sf")) - expect_true(inherits(pa_random_sf, "data.frame")) # it is also a df! - expect_true(all(pa_random$id == pa_random_sf$id)) - - # test error messages - expect_error( - sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = "blah"), - "method has to be" - ) - expect_error( - sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = c("blah", 25)), - "method has to be" - ) -}) - -test_that("handling of data frames and sf objects", { - locations_sf <- sf::st_as_sf(locations, coords = c("lon", "lat")) %>% sf::st_set_crs(4326) - expect_error( - sample_pseudoabs(locations_sf, coords = c("x", "y"), raster = grid_raster), - "There are no recognised coordinate columns" - ) - expect_warning(sample_pseudoabs(locations_sf, raster = grid_raster, n = 100), "There are fewer available cells for raster 'NA' (3 presences) than the requested 100 pseudoabsences. Only 52 will be returned.", fixed = TRUE) - locations_sf <- locations_sf %>% dplyr::bind_cols(sf::st_coordinates(.)) - expect_no_error(sample_pseudoabs(locations_sf, coords = c("X", "Y"), raster = grid_raster, n = 25)) - locations_sf$X <- rep(0, 3) - locations_sf$Y <- rep(0, 3) - expect_error( - sample_pseudoabs(locations_sf, coords = c("X", "Y"), raster = grid_raster, n = 25), - "sf object contains X and Y coordinates that do not match the sf point geometry" - ) - locations_sf$X <- rep(NA, 3) - locations_sf$Y <- rep(NA, 3) - expect_error( - sample_pseudoabs(locations_sf, coords = c("X", "Y"), raster = grid_raster, n = 25), - "sf object contains NA values in the X and Y coordinates" - ) + pa_random <- sample_pseudoabs_time(locations, + n = 10, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + method = c("dist_min", 60000), + return_pres = FALSE, + time_buffer = y2d(1) + ) + # we have the right number of pseudoabsences per time + expect_true(all(table(locations$time)*10==table(pa_random$time_step))) + # none are within the buffer at a given time step + min_buffer <- terra::buffer(terra::vect(locations %>% + dplyr::filter(time==2), crs = "lonlat"), 60000) + expect_true(length(pts_in_polys(terra::vect(pa_random %>% + dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + # none are within the buffer of a location in the time buffer + min_buffer <- terra::buffer(terra::vect(locations %>% + dplyr::filter(time==3), crs = "lonlat"), 60000) + expect_true(length(pts_in_polys(terra::vect(pa_random %>% + dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + # but they ignore presences from time steps outside the buffer + min_buffer <- terra::buffer(terra::vect(locations %>% + dplyr::filter(time==4), crs = "lonlat"), 60000) + expect_false(length(pts_in_polys(terra::vect(pa_random %>% + dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) }) -# sample code to plot points in and buffers -# plot(grid_raster,colNA="darkgray") -# polys(terra::as.polygons(grid_raster)) -# points(vect(locations), col="red", cex=2) -# points(vect(pa_disc), col="blue", cex=2) -# polys(min_buffer) -# polys(max_buffer) +# sample code to plot points +# i <- 4 +# plot(grid_raster[[i]],colNA="darkgray") +# polys(terra::as.polygons(grid_raster[[i]])) +# points(vect(locations %>% filter(time==i)), col="red", cex=2) From 1fa4268973d9bb77a95f005500889890cd039d19 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Thu, 30 Nov 2023 17:07:39 +0000 Subject: [PATCH 07/27] Improve balance report --- R/blockcv2rsample.R | 9 ++++++++- R/check_split_balance.R | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/R/blockcv2rsample.R b/R/blockcv2rsample.R index 768b1807..1f02d17d 100644 --- a/R/blockcv2rsample.R +++ b/R/blockcv2rsample.R @@ -1,7 +1,14 @@ #' Convert an object created with `blockCV` to an `rsample` object #' #' This function creates objects created with `blockCV` to `rsample` objects -#' that can be used by `tidysdm` +#' that can be used by `tidysdm`. BlockCV provides more sophisticated sampling +#' options than the `spatialsample` library. For example, it is possible to +#' stratify the sampling to ensure that presences and absences are evenly +#' distributed among the folds (see the example below). +#' +#' Note that objects created with this function can not be plotted with +#' `autoplot` +#' #' @param x a object created with a `blockCV` function #' @param data the `sf` object used to create `x` #' @returns an `rsample` object diff --git a/R/check_split_balance.R b/R/check_split_balance.R index 611a0b79..16377436 100644 --- a/R/check_split_balance.R +++ b/R/check_split_balance.R @@ -3,7 +3,8 @@ #' @param splits the data splits (an `rset` object), generated by a function such as #' [spatialsample::spatial_block_cv()] #' @param .col the column containing the presences -#' @returns a table of number of presences and pseudoabsences +#' @returns a table of number of presences and pseudoabsences in the training and testing +#' set of each split #' @export #' @examples #' lacerta_thin <- readRDS(system.file("extdata/lacerta_climate_sf.RDS", @@ -18,10 +19,19 @@ check_splits_balance <- function( .col <- rlang::enquo(.col) %>% rlang::quo_get_expr() %>% rlang::as_string() - balance_list <- lapply(splits$splits, function(x) { + training_list <- lapply(splits$splits, function(x) { table(rsample::training(x) %>% sf::st_drop_geometry() %>% dplyr::pull(.col)) }) - balance_df <- do.call("rbind", balance_list) + training_df <- do.call("rbind", training_list) + dimnames(training_df)[[2]] <- paste0(dimnames(training_df)[[2]],"_train") + testing_list <- lapply(splits$splits, function(x) { + table(rsample::testing(x) %>% + sf::st_drop_geometry() %>% dplyr::pull(.col)) + }) + testing_df <- do.call("rbind", testing_list) + dimnames(testing_df)[[2]] <- paste0(dimnames(testing_df)[[2]],"_test") + balance_df <- cbind(training_df, testing_df) + return(balance_df) } From 4ce56136b1d79a3a8b7b5cdeecff0fb942c8be76 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Thu, 30 Nov 2023 22:01:44 +0000 Subject: [PATCH 08/27] fix return of presences --- R/sample_pseudoabs_time.R | 7 ++++++- tests/testthat/test_sample_pseudoabs_time.R | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 2321034c..65d1c003 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -112,11 +112,16 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t coords = coords, method = method, class_label = class_label, - return_pres = return_pres + return_pres = FALSE ) # we need to reattach time data_sub <- data_sub %>% dplyr::mutate(time_step = time_steps[i_index]) pseudoabsences <- pseudoabsences %>% dplyr::bind_rows(data_sub) } + if (return_pres){ + presences <- data[,names(pseudoabsences[1:2])] %>% mutate(class="presence",time_step=time_lub) + pseudoabsences <- pseudoabsences %>% dplyr::bind_rows(presences) %>% + dplyr::mutate(class = stats::relevel(factor(class), ref = "presence")) + } return(pseudoabsences) } diff --git a/tests/testthat/test_sample_pseudoabs_time.R b/tests/testthat/test_sample_pseudoabs_time.R index b6759e16..29789926 100644 --- a/tests/testthat/test_sample_pseudoabs_time.R +++ b/tests/testthat/test_sample_pseudoabs_time.R @@ -81,6 +81,19 @@ test_that("sample_pseudoabs_time samples in the right places", { dplyr::filter(time==4), crs = "lonlat"), 60000) expect_false(length(pts_in_polys(terra::vect(pa_random %>% dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + + + # now check that we return the right number of presences + set.seed(123) + pa_random <- sample_pseudoabs_time(locations, + n = 10, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + method = c("dist_min", 60000), + return_pres = TRUE, + time_buffer = y2d(1) + ) + expect_true(table(pa_random$class)[1]==4) + expect_true(table(pa_random$class)[2]==10*table(pa_random$class)[1]) + }) # sample code to plot points From efcf6a639158c6d35a42b3001601eed8740c5124 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Thu, 30 Nov 2023 22:03:42 +0000 Subject: [PATCH 09/27] note on stratified sampling --- vignettes/a0_tidysdm_overview.Rmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vignettes/a0_tidysdm_overview.Rmd b/vignettes/a0_tidysdm_overview.Rmd index 9692ddc8..42fd3d5b 100644 --- a/vignettes/a0_tidysdm_overview.Rmd +++ b/vignettes/a0_tidysdm_overview.Rmd @@ -318,7 +318,8 @@ our models. We will do an 80:20 split, by creating 5 folds. We use the `spatial_block_cv` function from the package `spatialsample`. `spatialsample` offers a number of sampling approaches for spatial data; it is also possible to convert objects created with `blockCV` (which offers further features -for spatial sampling) into an `rsample` object suitable to `tisysdm` with the +for spatial sampling, such as stratified sampling) into an `rsample` object +suitable to `tisysdm` with the function `blockcv2rsample`. ```{r training_cv, fig.width=6, fig.height=4} From 51077e87857115e0039c115fa41213fe93dba1ea Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Thu, 30 Nov 2023 22:29:59 +0000 Subject: [PATCH 10/27] fix sampling for sf objects --- R/sample_pseudoabs_time.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index 65d1c003..ecf28265 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -119,7 +119,13 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t pseudoabsences <- pseudoabsences %>% dplyr::bind_rows(data_sub) } if (return_pres){ - presences <- data[,names(pseudoabsences[1:2])] %>% mutate(class="presence",time_step=time_lub) + if (inherits(data,"sf")){ + presences <- sf::st_set_geometry(data.frame(geometry = data$geometry), + data$geometry) + } else { + presences <- data[,names(pseudoabsences[1:2])] + } + presences <- presences %>% dplyr::mutate(class="presence",time_step=time_lub) pseudoabsences <- pseudoabsences %>% dplyr::bind_rows(presences) %>% dplyr::mutate(class = stats::relevel(factor(class), ref = "presence")) } From 43e725f646a1f8e28ea4ac317470eb7f4c5ad50d Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Fri, 1 Dec 2023 15:48:48 +0000 Subject: [PATCH 11/27] Implement collect metrics --- DESCRIPTION | 3 +-- NAMESPACE | 3 +++ NEWS.md | 4 +++ R/collect_metrics.R | 35 ++++++++++++++++++++++++ R/datasets_docs.R | 9 ++++++- data/lacerta_rep_ens.rda | Bin 0 -> 253767 bytes inst/WORDLIST | 1 + man/blockcv2rsample.Rd | 9 ++++++- man/check_splits_balance.Rd | 3 ++- man/collect_metrics.simple_ensemble.Rd | 36 +++++++++++++++++++++++++ man/lacerta_ensemble.Rd | 2 +- man/lacerta_rep_ens.Rd | 16 +++++++++++ vignettes/a0_tidysdm_overview.Rmd | 16 ++++++++--- 13 files changed, 127 insertions(+), 10 deletions(-) create mode 100644 R/collect_metrics.R create mode 100644 data/lacerta_rep_ens.rda create mode 100644 man/collect_metrics.simple_ensemble.Rd create mode 100644 man/lacerta_rep_ens.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 07ed2341..200500bc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: tidysdm Title: Species Distribution Models with Tidymodels -Version: 0.9.2.9000 +Version: 0.9.2.9001 Authors@R: c( person("Michela", "Leonardi", role = "aut"), person("Margherita", "Colucci", role = "aut"), @@ -55,7 +55,6 @@ Suggests: overlapping, pastclim (>= 2.0.0), ranger, - readr, rmarkdown, spelling, stacks, diff --git a/NAMESPACE b/NAMESPACE index 24b09707..19e4b7bb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -14,6 +14,8 @@ S3method(boyce_cont,data.frame) S3method(boyce_cont,sf) S3method(brier_class,sf) S3method(classification_cost,sf) +S3method(collect_metrics,repeat_ensemble) +S3method(collect_metrics,simple_ensemble) S3method(explain_tidysdm,default) S3method(explain_tidysdm,repeat_ensemble) S3method(explain_tidysdm,simple_ensemble) @@ -106,3 +108,4 @@ importFrom(ggplot2,autoplot) importFrom(magrittr,"%>%") importFrom(rlang,":=") importFrom(rlang,.data) +importFrom(tune,collect_metrics) diff --git a/NEWS.md b/NEWS.md index 39ae1273..38975a22 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# dev version + +* implement `collect_metrics` for ensembles. + # `tidysdm` 0.9.2 * Release on CRAN diff --git a/R/collect_metrics.R b/R/collect_metrics.R new file mode 100644 index 00000000..35f252cb --- /dev/null +++ b/R/collect_metrics.R @@ -0,0 +1,35 @@ +#' Obtain and format results produced by tuning functions for ensemble objects +#' +#' Return a tibble of performance metrics for all models. +#' +#' @param x A [`simple_ensemble`] or [`repeat_ensemble`] object +#' @param ... Not currently used. +#' @return A tibble. +#' @details +#' +#' When applied to a ensemble, the metrics that are returned +#' do not contain the actual tuning parameter columns and values (unlike when +#' these collect functions are run on other objects). The reason is that ensembles +#' contain different types of models or models with different tuning +#' parameters. +#' +#' @seealso [tune::collect_metrics()] +#' +#' @examples +#' collect_metrics(lacerta_ensemble) +#' collect_metrics(lacerta_rep_ens) +#' @importFrom tune collect_metrics +#' @export + +collect_metrics.simple_ensemble <- function(x, ...) { + dplyr::bind_rows(x$metrics) +} + +#' @export +#' @rdname collect_metrics.simple_ensemble +collect_metrics.repeat_ensemble <- function(x, ...) { + metric_table <- dplyr::bind_rows(x$metrics, .id = "rep_id") + metric_table$rep_id <- x$rep_id[as.numeric(metric_table$rep_id)] + return(metric_table) +} + diff --git a/R/datasets_docs.R b/R/datasets_docs.R index ff8cef76..8928414e 100644 --- a/R/datasets_docs.R +++ b/R/datasets_docs.R @@ -25,7 +25,14 @@ #' A simple ensemble for the lacerta data #' -#' Ensemble SDM for *Lacerta schreiberi*. +#' Ensemble SDM for *Lacerta schreiberi*, as generated in the vignette. #' #' @format A [`simple_ensemble`] object "lacerta_ensemble" + +#' A repeat ensemble for the lacerta data +#' +#' Ensemble SDM for *Lacerta schreiberi*, as generated in the vignette. +#' +#' @format A [`repeat_ensemble`] object +"lacerta_rep_ens" diff --git a/data/lacerta_rep_ens.rda b/data/lacerta_rep_ens.rda new file mode 100644 index 0000000000000000000000000000000000000000..df60ae694090e75c2b57a29267e2fba781c21c83 GIT binary patch literal 253767 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

{}zWH^P?)&J9K1YVAc;rFG+}x;mxSCzG*} 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

GJ1jhk&kU(7!PEypLFGZ3Cs}pCoQ<)%6J-{pk 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 cAi@O5WC8nL34nN~5% collect_metrics() +``` + # Projecting to the present We can now make predictions with this ensemble (using the default option of taking the mean of the predictions from each model). @@ -570,16 +575,19 @@ for (i_repeat in 1:3) { Now we can create a `repeat_ensemble` from the list: ```{r} -lacerta_thin_rep_ens <- repeat_ensemble() %>% add_repeat(ensemble_list) -lacerta_thin_rep_ens +lacerta_rep_ens <- repeat_ensemble() %>% add_repeat(ensemble_list) +lacerta_rep_ens ``` +We can summarise the goodness of fit of models for each repeat with `collect_metrics()`, +but there is no `autoplot()` function for `repeated_ensemble` objects. + We can then predict in the usual way (we will take the mean and median of all models): ```{r, fig.width=6, fig.height=4} -lacerta_thin_rep_ens <- predict_raster(lacerta_thin_rep_ens, climate_present, +lacerta_rep_ens <- predict_raster(lacerta_rep_ens, climate_present, fun = c("mean", "median") ) ggplot() + - geom_spatraster(data = lacerta_thin_rep_ens, aes(fill = median)) + + geom_spatraster(data = lacerta_rep_ens, aes(fill = median)) + scale_fill_terrain_c() ``` From aed14da85af94726aa0498e1b11057c7770b8ccd Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 5 Dec 2023 08:55:27 +0000 Subject: [PATCH 12/27] improve blockcv2rsample conversion --- R/blockcv2rsample.R | 18 +++++--- tests/testthat/test_blockcv2rsample.R | 63 +++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 tests/testthat/test_blockcv2rsample.R diff --git a/R/blockcv2rsample.R b/R/blockcv2rsample.R index 1f02d17d..ef37b1b9 100644 --- a/R/blockcv2rsample.R +++ b/R/blockcv2rsample.R @@ -6,8 +6,8 @@ #' stratify the sampling to ensure that presences and absences are evenly #' distributed among the folds (see the example below). #' -#' Note that objects created with this function can not be plotted with -#' `autoplot` +#' Note that currently only objects of type `cv_spatial` and `cv_cluster` are +#' supported. #' #' @param x a object created with a `blockCV` function #' @param data the `sf` object used to create `x` @@ -20,7 +20,7 @@ #' pa_data <- sf::st_as_sf(points, coords = c("x", "y"), crs = 7845) #' sb1 <- cv_spatial( #' x = pa_data, -#' column = "occ", # the response column (binary or multi-class) +#' column = "occ", # the response column to balance the folds #' k = 5, # number of folds #' size = 350000, # size of the blocks in metres #' selection = "random", # random blocks-to-fold @@ -28,14 +28,22 @@ #' ) # find evenly dispersed folds #' sb1_rsample <- blockcv2rsample(sb1, pa_data) #' class(sb1_rsample) +#' autoplot(sb1_rsample) #' } blockcv2rsample <- function(x, data) { + if(!(any(inherits(x,"cv_spatial"), + inherits(x,"cv_cluster")))){ + stop("this function does support this object type\n", + "only objects of class cv_spatial or cv_cluster are supported.") + } splits <- lapply( x$folds_list, function(this_fold) { names(this_fold) <- c("analysis", "assessment") - rsample::make_splits(this_fold, data = data) + rsample::make_splits(this_fold, data = data, class = "spatial_rsplit") } ) - rsample::manual_rset(splits, ids = paste0("Fold", seq(1:length(splits)))) + rsample::new_rset(splits, ids = paste0("Fold", seq(1:length(splits))), + attrib = NULL, subclass = c("spatial_rset", "rset")) + } diff --git a/tests/testthat/test_blockcv2rsample.R b/tests/testthat/test_blockcv2rsample.R new file mode 100644 index 00000000..982562af --- /dev/null +++ b/tests/testthat/test_blockcv2rsample.R @@ -0,0 +1,63 @@ +library(blockCV) +test_that("blockcv2rsample conversion", { + + # we use examples from the blockcv library for spatial blocks + points <- read.csv(system.file("extdata/", "species.csv", package = "blockCV")) + pa_data <- sf::st_as_sf(points, coords = c("x", "y"), crs = 7845) + sb1 <- cv_spatial( + x = pa_data, + column = "occ", # the response column (binary or multi-class) + k = 5, # number of folds + size = 350000, # size of the blocks in metres + selection = "random", # random blocks-to-fold + iteration = 10, + report = FALSE, + progress = FALSE + ) # find evenly dispersed folds + sb1_rsample <- blockcv2rsample(sb1, pa_data) + expect_true(inherits(sb1_rsample,"spatial_rset")) + + +# load raster data +path <- system.file("extdata/au/", package = "blockCV") +files <- list.files(path, full.names = TRUE) +covars <- terra::rast(files) +#' +# spatial clustering +set.seed(6) +sc <- cv_cluster(x = pa_data, + column = "occ", # optional; name of the column with response + k = 5, + report = FALSE) +sc_rsample <- blockcv2rsample(sc, pa_data) +expect_true(inherits(sc_rsample,"spatial_rset")) +#' +# environmental clustering +set.seed(6) +ec <- cv_cluster(r = covars, # if provided will be used for environmental clustering + x = pa_data, + column = "occ", # optional; name of the column with response + k = 5, + scale = TRUE, + report = FALSE) +ec_rsample <- blockcv2rsample(ec, pa_data) +path <- system.file("extdata/au/bio_5.tif", package = "blockCV") +expect_true(inherits(ec_rsample,"spatial_rset")) + +# give error for unsuppored mode in blockcv +covar <- terra::rast(path) +nndm <- cv_nndm(x = pa_data, + column = "occ", # optional + r = covar, + size = 350000, # size in metres no matter the CRS + num_sample = 10, + sampling = "regular", + min_train = 0.1, + plot = FALSE, + report = FALSE) +expect_error(blockcv2rsample(nndm, pa_data), + "this function does support this object type") + + + +}) From 600d01f8a3e89760a3bcb0ea076e1d472c53b00e Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 5 Dec 2023 14:39:45 +0000 Subject: [PATCH 13/27] generalise check_split_balance to work on initial split --- R/check_split_balance.R | 53 ++++++++++++++++------- tests/testthat/test_check_split_balance.R | 31 +++++++++++++ vignettes/a2_tidymodels_additions.Rmd | 12 ++++- 3 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 tests/testthat/test_check_split_balance.R diff --git a/R/check_split_balance.R b/R/check_split_balance.R index 16377436..65f53a63 100644 --- a/R/check_split_balance.R +++ b/R/check_split_balance.R @@ -1,10 +1,11 @@ #' Check the balance of presences vs pseudoabsences among splits #' -#' @param splits the data splits (an `rset` object), generated by a function such as +#' @param splits the data splits (an `rset` or `split` object), generated by a function such as #' [spatialsample::spatial_block_cv()] #' @param .col the column containing the presences -#' @returns a table of number of presences and pseudoabsences in the training and testing -#' set of each split +#' @returns a tibble of the number of presences and pseudoabsences in the assessment +#' and analysis +#' set of each split (or training and testing in an initial split) #' @export #' @examples #' lacerta_thin <- readRDS(system.file("extdata/lacerta_climate_sf.RDS", @@ -19,19 +20,41 @@ check_splits_balance <- function( .col <- rlang::enquo(.col) %>% rlang::quo_get_expr() %>% rlang::as_string() - training_list <- lapply(splits$splits, function(x) { - table(rsample::training(x) %>% - sf::st_drop_geometry() %>% dplyr::pull(.col)) - }) - training_df <- do.call("rbind", training_list) - dimnames(training_df)[[2]] <- paste0(dimnames(training_df)[[2]],"_train") - testing_list <- lapply(splits$splits, function(x) { - table(rsample::testing(x) %>% + + if (inherits(splits,"rset")){ + if (!(.col %in% names(splits$splits[[1]]$data))){ + stop(".col should be a column in the data used to generate the splits") + } + training_list <- lapply(splits$splits, function(x) { + table(rsample::training(x) %>% + sf::st_drop_geometry() %>% dplyr::pull(.col)) + }) + training_df <- do.call("rbind", training_list) + testing_list <- lapply(splits$splits, function(x) { + table(rsample::testing(x) %>% sf::st_drop_geometry() %>% dplyr::pull(.col)) - }) - testing_df <- do.call("rbind", testing_list) - dimnames(testing_df)[[2]] <- paste0(dimnames(testing_df)[[2]],"_test") - balance_df <- cbind(training_df, testing_df) + }) + testing_df <- do.call("rbind", testing_list) + dimnames(testing_df)[[2]] <- paste0(dimnames(testing_df)[[2]],"_analysis") + dimnames(training_df)[[2]] <- paste0(dimnames(training_df)[[2]],"_assessment") + + balance_df <- dplyr::bind_cols(training_df, testing_df) + } else if (inherits(splits,"rsplit")) { + if (!(.col %in% names(splits$data))){ + stop(".col should be a column in the data used to generate the splits") + } + training_df <- table(rsample::training(splits) %>% + sf::st_drop_geometry() %>% dplyr::pull(.col)) + testing_df <- table(rsample::testing(splits) %>% + sf::st_drop_geometry() %>% dplyr::pull(.col)) + # coerce to a df with only one row + balance_df <- as.data.frame(matrix(c(training_df, testing_df),nrow=1)) + names(balance_df) <- c(paste0(names(testing_df),"_test"), + paste0(names(training_df),"_train")) + balance_df <- tibble::as_tibble(balance_df) + } else { + stop ("splits should be either a spatial_rset or a spatial_rsplit") + } return(balance_df) } diff --git a/tests/testthat/test_check_split_balance.R b/tests/testthat/test_check_split_balance.R new file mode 100644 index 00000000..bde6c55d --- /dev/null +++ b/tests/testthat/test_check_split_balance.R @@ -0,0 +1,31 @@ +test_that("check_split_balance correctly summarises splits", { + lacerta_thin <- readRDS(system.file("extdata/lacerta_climate_sf.RDS", + package = "tidysdm" + )) + set.seed(1005) + lacerta_initial <- spatial_initial_split(lacerta_thin, + prop = 1 / 5, spatial_block_cv + ) + initial_table <- check_splits_balance(lacerta_initial, class) + expect_true(all(dim(initial_table)== c(1,4))) + expect_true(names(initial_table[1])=="presence_test") + # check error if we give non existing column + expect_error(check_splits_balance(lacerta_initial, blah), + ".col should be a column in the data used to generate the splits") + + set.seed(1005) + lacerta_training <- training(lacerta_initial) + lacerta_cv <- spatial_block_cv(lacerta_training, + v = 5, + cellsize = grid_cellsize(lacerta_thin), + offset = grid_offset(lacerta_thin) + ) + + cv_table <- check_splits_balance(lacerta_cv, class) + expect_true(all(dim(cv_table)== c(5,4))) + expect_true(names(cv_table[1])=="presence_assessment") + # check error if we give non existing column + expect_error(check_splits_balance(lacerta_cv, blah), + ".col should be a column in the data used to generate the splits") + +}) diff --git a/vignettes/a2_tidymodels_additions.Rmd b/vignettes/a2_tidymodels_additions.Rmd index a9d53b93..840d90ab 100644 --- a/vignettes/a2_tidymodels_additions.Rmd +++ b/vignettes/a2_tidymodels_additions.Rmd @@ -115,13 +115,18 @@ lacerta_initial <- spatial_initial_split(lacerta_thin, autoplot(lacerta_initial) ``` +And check the balance of presences vs pseudoabsences: +```{r} +check_splits_balance(lacerta_initial, class) +``` + + We can now extract the training set from our `lacerta_initial` split, and sample folds to set up cross validation (note that we set the `cellsize` and `offset` based on the full dataset, `lacerta_thin`; this allows us to use the same grid we used for the `initial_split`). ```{r training_cv, fig.width=6, fig.height=4} set.seed(1005) -library(sf) lacerta_training <- training(lacerta_initial) lacerta_cv <- spatial_block_cv(lacerta_training, v = 5, @@ -131,6 +136,11 @@ lacerta_cv <- spatial_block_cv(lacerta_training, autoplot(lacerta_cv) ``` +And check the balance in the dataset: +```{r} +check_splits_balance(lacerta_cv, class) +``` + # Different recipes for certain models Only certain type of models (e.g. glm, svm) struggle with correlated variables; From b51acbfcc193fe232df6da1502e04f998f641fdd Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 6 Dec 2023 03:27:07 +0000 Subject: [PATCH 14/27] better error messages --- R/sample_pseudoabs.R | 9 +++++++++ tests/testthat/test_sample_pseudoabs.R | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/R/sample_pseudoabs.R b/R/sample_pseudoabs.R index 05f69c17..796cada7 100644 --- a/R/sample_pseudoabs.R +++ b/R/sample_pseudoabs.R @@ -61,11 +61,20 @@ sample_pseudoabs <- function(data, raster, n, coords = NULL, coords <- check_coords_names(data, coords) dist_min <- dist_max <- NULL if (method[1] == "dist_disc") { + if (length(method)!=3){ + stop("method 'dist_disc' should have two thresholds, eg, c('dist_disc',10,20)") + } dist_min <- as.numeric(method[2]) dist_max <- as.numeric(method[3]) } else if (method[1] == "dist_min") { + if (length(method)!=2){ + stop("method 'dist_min' should have one threshold, eg, c('dist_min',10)") + } dist_min <- as.numeric(method[2]) } else if (method[1] == "dist_max") { + if (length(method)!=2){ + stop("method 'dist_max' should have one threshold, eg, c('dist_max',50)") + } dist_max <- as.numeric(method[2]) } else if (!method[1] %in% "random") { stop("method has to be one of 'random', 'dist_min', 'dist_max', or 'dist_disc'") diff --git a/tests/testthat/test_sample_pseudoabs.R b/tests/testthat/test_sample_pseudoabs.R index 992075d1..9e23b8f9 100644 --- a/tests/testthat/test_sample_pseudoabs.R +++ b/tests/testthat/test_sample_pseudoabs.R @@ -92,6 +92,18 @@ test_that("sample_pseudoabs samples in the right places", { sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = c("blah", 25)), "method has to be" ) + expect_error( + sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = c("dist_min")), + "method 'dist_min' should have one threshold" + ) + expect_error( + sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = c("dist_max",10,20)), + "method 'dist_max' should have one threshold" + ) + expect_error( + sample_pseudoabs(locations_sf, n = 25, raster = grid_raster, method = c("dist_disc",10)), + "method 'dist_disc' should have two thresholds" + ) }) test_that("handling of data frames and sf objects", { From 3ae34d7abe11e2ce45cef02485a33c0d0a5b4f8f Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 6 Dec 2023 03:30:34 +0000 Subject: [PATCH 15/27] typos --- R/sample_pseudoabs.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/sample_pseudoabs.R b/R/sample_pseudoabs.R index 796cada7..a40c0dad 100644 --- a/R/sample_pseudoabs.R +++ b/R/sample_pseudoabs.R @@ -62,18 +62,18 @@ sample_pseudoabs <- function(data, raster, n, coords = NULL, dist_min <- dist_max <- NULL if (method[1] == "dist_disc") { if (length(method)!=3){ - stop("method 'dist_disc' should have two thresholds, eg, c('dist_disc',10,20)") + stop("method 'dist_disc' should have two thresholds, e.g. c('dist_disc',10,20)") } dist_min <- as.numeric(method[2]) dist_max <- as.numeric(method[3]) } else if (method[1] == "dist_min") { if (length(method)!=2){ - stop("method 'dist_min' should have one threshold, eg, c('dist_min',10)") + stop("method 'dist_min' should have one threshold, e.g. c('dist_min',10)") } dist_min <- as.numeric(method[2]) } else if (method[1] == "dist_max") { if (length(method)!=2){ - stop("method 'dist_max' should have one threshold, eg, c('dist_max',50)") + stop("method 'dist_max' should have one threshold, e.g. c('dist_max',50)") } dist_max <- as.numeric(method[2]) } else if (!method[1] %in% "random") { From ae4427e52f005e00cb10d24ada1685d7794a61fa Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 6 Dec 2023 04:20:35 +0000 Subject: [PATCH 16/27] Give warning for dates out of range Fix #16 --- R/autoplot_simple_ensemble.R | 3 ++- R/out_of_range_warning.R | 22 +++++++++++++++++++++ R/sample_pseudoabs_time.R | 2 ++ R/thin_by_cell_time.R | 3 ++- man/autoplot.simple_ensemble.Rd | 3 ++- man/blockcv2rsample.Rd | 7 ++++--- man/check_splits_balance.Rd | 7 ++++--- man/out_of_range_warning.Rd | 18 +++++++++++++++++ tests/testthat/Rplots.pdf | Bin 0 -> 12622 bytes tests/testthat/test_out_of_range_warning.R | 15 ++++++++++++++ 10 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 R/out_of_range_warning.R create mode 100644 man/out_of_range_warning.Rd create mode 100644 tests/testthat/Rplots.pdf create mode 100644 tests/testthat/test_out_of_range_warning.R diff --git a/R/autoplot_simple_ensemble.R b/R/autoplot_simple_ensemble.R index 5755cf5d..e7f57f7d 100644 --- a/R/autoplot_simple_ensemble.R +++ b/R/autoplot_simple_ensemble.R @@ -8,7 +8,8 @@ #' the results. If none is given, the first metric in the metric set is used #' (after filtering by the `metric` option). #' @param metric A character vector for which metrics (apart from `rank_metric`) -#' to be included in the visualization. +#' to be included in the visualization. If NULL (the default), all available +#' metrics will be plotted #' @param std_errs The number of standard errors to plot (if the standard error #' exists). #' @param ... Other options to pass to `autoplot()`. Currently unused. diff --git a/R/out_of_range_warning.R b/R/out_of_range_warning.R new file mode 100644 index 00000000..66c552ea --- /dev/null +++ b/R/out_of_range_warning.R @@ -0,0 +1,22 @@ +#' Warn if some times are outside the range of time steps from a raster +#' +#' This function helps making sure that, when we assign times to time_step +#' layers of a raster, we do not have values which are badly out of range +#' @param times the times of the locations +#' @param time_steps the time steps from the raster +#' @returns NULL +#' @keywords internal + +out_of_range_warning <- function(times, time_steps){ + time_steps_ordered<-sort(time_steps) + range_minmax <- c(utils::head(time_steps_ordered,n=1)[1]- + (abs(utils::head(time_steps_ordered,n=2)[1]-utils::head(time_steps_ordered,n=2)[2])/2), + utils::tail(time_steps_ordered,n=1)[1] + + (abs(utils::tail(time_steps_ordered,n=2)[1]-utils::tail(time_steps_ordered,n=2)[2])/2)) + if(any(timesrange_minmax[2])) { + warning("Some dates are out of the range of the available time series.\n", + "They will be assigned to the most extreme time point available, but this\n", + "might not make sense. The potentially problematic dates are:\n", + times[which((timesrange_minmax[2]))]) + } +} diff --git a/R/sample_pseudoabs_time.R b/R/sample_pseudoabs_time.R index ecf28265..a9ae17ea 100644 --- a/R/sample_pseudoabs_time.R +++ b/R/sample_pseudoabs_time.R @@ -75,6 +75,8 @@ sample_pseudoabs_time <- function(data, raster, n_per_presence, coords = NULL, t if (terra::timeInfo(raster)[1, 2] == "years") { time_steps <- lubridate::date_decimal(time_steps) } + out_of_range_warning(time_lub, time_steps) + # convert time_lub dates into indices for the SpatRasterDatset time_indices <- sapply(time_lub, function(a, b) { diff --git a/R/thin_by_cell_time.R b/R/thin_by_cell_time.R index 76ae7660..18e47a36 100644 --- a/R/thin_by_cell_time.R +++ b/R/thin_by_cell_time.R @@ -45,7 +45,7 @@ thin_by_cell_time <- function(data, raster, coords = NULL, time_col = "time", if (!inherits(time_lub, "POSIXct")) { stop("time is not a date (or cannot be coerced to one)") } - # if we have a SpatRasterDataset, ge thte first dataset + # if we have a SpatRasterDataset, ge the first dataset if (inherits(raster, "SpatRasterDataset")) { raster <- raster[[1]] } @@ -57,6 +57,7 @@ thin_by_cell_time <- function(data, raster, coords = NULL, time_col = "time", if (terra::timeInfo(raster)[1, 2] == "years") { time_steps <- lubridate::date_decimal(time_steps) } + out_of_range_warning(time_lub, time_steps) # convert time_lub dates into indices for the SpatRasterDataset time_indices <- sapply(time_lub, function(a, b) { diff --git a/man/autoplot.simple_ensemble.Rd b/man/autoplot.simple_ensemble.Rd index c5254276..15cee2e8 100644 --- a/man/autoplot.simple_ensemble.Rd +++ b/man/autoplot.simple_ensemble.Rd @@ -20,7 +20,8 @@ the results. If none is given, the first metric in the metric set is used (after filtering by the \code{metric} option).} \item{metric}{A character vector for which metrics (apart from \code{rank_metric}) -to be included in the visualization.} +to be included in the visualization. If NULL (the default), all available +metrics will be plotted} \item{std_errs}{The number of standard errors to plot (if the standard error exists).} diff --git a/man/blockcv2rsample.Rd b/man/blockcv2rsample.Rd index f951239e..716d8ef8 100644 --- a/man/blockcv2rsample.Rd +++ b/man/blockcv2rsample.Rd @@ -22,8 +22,8 @@ stratify the sampling to ensure that presences and absences are evenly distributed among the folds (see the example below). } \details{ -Note that objects created with this function can not be plotted with -\code{autoplot} +Note that currently only objects of type \code{cv_spatial} and \code{cv_cluster} are +supported. } \examples{ \donttest{ @@ -32,7 +32,7 @@ points <- read.csv(system.file("extdata/", "species.csv", package = "blockCV")) pa_data <- sf::st_as_sf(points, coords = c("x", "y"), crs = 7845) sb1 <- cv_spatial( x = pa_data, - column = "occ", # the response column (binary or multi-class) + column = "occ", # the response column to balance the folds k = 5, # number of folds size = 350000, # size of the blocks in metres selection = "random", # random blocks-to-fold @@ -40,5 +40,6 @@ sb1 <- cv_spatial( ) # find evenly dispersed folds sb1_rsample <- blockcv2rsample(sb1, pa_data) class(sb1_rsample) +autoplot(sb1_rsample) } } diff --git a/man/check_splits_balance.Rd b/man/check_splits_balance.Rd index 74c5f63e..cfb345cd 100644 --- a/man/check_splits_balance.Rd +++ b/man/check_splits_balance.Rd @@ -7,14 +7,15 @@ check_splits_balance(splits, .col) } \arguments{ -\item{splits}{the data splits (an \code{rset} object), generated by a function such as +\item{splits}{the data splits (an \code{rset} or \code{split} object), generated by a function such as \code{\link[spatialsample:spatial_block_cv]{spatialsample::spatial_block_cv()}}} \item{.col}{the column containing the presences} } \value{ -a table of number of presences and pseudoabsences in the training and testing -set of each split +a tibble of the number of presences and pseudoabsences in the assessment +and analysis +set of each split (or training and testing in an initial split) } \description{ Check the balance of presences vs pseudoabsences among splits diff --git a/man/out_of_range_warning.Rd b/man/out_of_range_warning.Rd new file mode 100644 index 00000000..35f71749 --- /dev/null +++ b/man/out_of_range_warning.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/out_of_range_warning.R +\name{out_of_range_warning} +\alias{out_of_range_warning} +\title{Warn if some times are outside the range of time steps from a raster} +\usage{ +out_of_range_warning(times, time_steps) +} +\arguments{ +\item{times}{the times of the locations} + +\item{time_steps}{the time steps from the raster} +} +\description{ +This function helps making sure that, when we assign times to time_step +layers of a raster, we do not have values which are badly out of range +} +\keyword{internal} diff --git a/tests/testthat/Rplots.pdf b/tests/testthat/Rplots.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ca3fbde6872ca8c3126f0224eb9b011298f972e9 GIT binary patch literal 12622 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 Bfs+6L literal 0 HcmV?d00001 diff --git a/tests/testthat/test_out_of_range_warning.R b/tests/testthat/test_out_of_range_warning.R new file mode 100644 index 00000000..e36b7893 --- /dev/null +++ b/tests/testthat/test_out_of_range_warning.R @@ -0,0 +1,15 @@ +test_that("out_of_range_warning catches extreme values",{ + time_steps <- seq(10,100,by=10) + times <- c(5,20,30,50) + # this should be fine + expect_null(out_of_range_warning(times=times, time_steps=time_steps)) + # now get a warning + times <- c(-5,20,30,50) + expect_warning(out_of_range_warning(times=times, time_steps=time_steps), + "^Some dates are out of the range") + times <- c(20,30,50,1000) + expect_warning(out_of_range_warning(times=times, time_steps=time_steps), + "^Some dates are out of the range") + +}) + \ No newline at end of file From 8c373a05c0e89cb940f333067b70b67ac1605b1f Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 6 Dec 2023 10:53:16 +0000 Subject: [PATCH 17/27] Add download number badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2ca9d49b..eef1d497 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![R-CMD-check](https://github.com/EvolEcolGroup/tidysdm/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/EvolEcolGroup/tidysdm/actions/workflows/R-CMD-check.yaml) [![codecov](https://codecov.io/gh/EvolEcolGroup/tidysdm/branch/main/graph/badge.svg?token=KLOzxJoLBO)](https://app.codecov.io/gh/EvolEcolGroup/tidysdm) [![CRAN status](https://www.r-pkg.org/badges/version/tidysdm)](https://CRAN.R-project.org/package=tidysdm) +[![CRAN downloads](https://cranlogs.r-pkg.org/badges/grand-total/tidysdm)](https://github.com/r-hub/cranlogs.app) The goal of `tidysdm` is to implement Species Distribution Models using the From 585bbe75cd49c461259e91d22fb478e4cb13fe46 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 16 Jan 2024 15:42:25 +0000 Subject: [PATCH 18/27] test for new terra version --- tests/testthat/test_filter_high_cor.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/testthat/test_filter_high_cor.R b/tests/testthat/test_filter_high_cor.R index 75d4e3ba..c0656eca 100644 --- a/tests/testthat/test_filter_high_cor.R +++ b/tests/testthat/test_filter_high_cor.R @@ -39,4 +39,10 @@ test_that("filter correlated variables", { filter_high_cor("blah"), "no method available for this object type" ) + + # test method on SpatRaster + climate_present <- terra::rast(system.file("extdata/lacerta_climate_present_10m.nc", + package = "tidysdm" + )) + cor_spatraster <- filter_high_cor(climate_present) }) From 1f6ca4613af58102f79dac5fb9a9a87075d979a6 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 16 Jan 2024 16:17:09 +0000 Subject: [PATCH 19/27] dump version --- .github/workflows/test-coverage.yaml | 2 +- DESCRIPTION | 2 +- NEWS.md | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 532eb2c5..29d5dd89 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -39,5 +39,5 @@ jobs: # shell: Rscript {0} - name: Test coverage - run: covr::codecov(type="all") + run: covr::codecov(type="tests") shell: Rscript {0} diff --git a/DESCRIPTION b/DESCRIPTION index 200500bc..dd376d38 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: tidysdm Title: Species Distribution Models with Tidymodels -Version: 0.9.2.9001 +Version: 0.9.2.9002 Authors@R: c( person("Michela", "Leonardi", role = "aut"), person("Margherita", "Colucci", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 38975a22..6a2827bd 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # dev version +* fix bug in `filter_high_cor` due to changes in `terra` 1.6.75 * implement `collect_metrics` for ensembles. # `tidysdm` 0.9.2 From b562634be4a6031b7af4e49e7f0516d2b50803f4 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 16 Jan 2024 16:44:49 +0000 Subject: [PATCH 20/27] Update version --- DESCRIPTION | 2 +- NEWS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index dd376d38..79d10da9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: tidysdm Title: Species Distribution Models with Tidymodels -Version: 0.9.2.9002 +Version: 0.9.3 Authors@R: c( person("Michela", "Leonardi", role = "aut"), person("Margherita", "Colucci", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 6a2827bd..bd97cd7d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# dev version +# `tidysdm` 0.9.3 * fix bug in `filter_high_cor` due to changes in `terra` 1.6.75 * implement `collect_metrics` for ensembles. From 3b83978ea4e9fdbbf29b609791f6837b3af81fa1 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 16 Jan 2024 16:45:12 +0000 Subject: [PATCH 21/27] coverage from all sources --- .github/workflows/test-coverage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 29d5dd89..532eb2c5 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -39,5 +39,5 @@ jobs: # shell: Rscript {0} - name: Test coverage - run: covr::codecov(type="tests") + run: covr::codecov(type="all") shell: Rscript {0} From c8225b2505f937c2b1afeab15f09a2c311877ca8 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Tue, 16 Jan 2024 16:46:32 +0000 Subject: [PATCH 22/27] tweak to docs to pass tests --- R/out_of_range_warning.R | 2 +- man/out_of_range_warning.Rd | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/R/out_of_range_warning.R b/R/out_of_range_warning.R index 66c552ea..08edbf28 100644 --- a/R/out_of_range_warning.R +++ b/R/out_of_range_warning.R @@ -4,7 +4,7 @@ #' layers of a raster, we do not have values which are badly out of range #' @param times the times of the locations #' @param time_steps the time steps from the raster -#' @returns NULL +#' @returns NULL return #' @keywords internal out_of_range_warning <- function(times, time_steps){ diff --git a/man/out_of_range_warning.Rd b/man/out_of_range_warning.Rd index 35f71749..c51176f0 100644 --- a/man/out_of_range_warning.Rd +++ b/man/out_of_range_warning.Rd @@ -11,6 +11,9 @@ out_of_range_warning(times, time_steps) \item{time_steps}{the time steps from the raster} } +\value{ +NULL return +} \description{ This function helps making sure that, when we assign times to time_step layers of a raster, we do not have values which are badly out of range From 9c3a38440d0bc981d0cb11f1515f16d97ca71c4f Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 17 Jan 2024 10:02:50 +0000 Subject: [PATCH 23/27] limit data.table to 1 thread --- DESCRIPTION | 1 + R/sdm_spec_boost_tree.R | 2 ++ R/sdm_spec_rand_forest.R | 5 ++++- cran-comments.md | 11 ++--------- man/sdm_spec_boost_tree.Rd | 2 ++ man/sdm_spec_rand_forest.Rd | 4 +++- tests/testthat/Rplots.pdf | Bin 12622 -> 0 bytes vignettes/a0_tidysdm_overview.Rmd | 3 +++ vignettes/a1_palaeodata_application.Rmd | 3 +++ vignettes/a2_tidymodels_additions.Rmd | 3 +++ vignettes/a3_troubleshooting.Rmd | 3 +++ 11 files changed, 26 insertions(+), 11 deletions(-) delete mode 100644 tests/testthat/Rplots.pdf diff --git a/DESCRIPTION b/DESCRIPTION index 79d10da9..9616f01a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -48,6 +48,7 @@ Imports: yardstick Suggests: blockCV, + data.table, doParallel, earth, kernlab, diff --git a/R/sdm_spec_boost_tree.R b/R/sdm_spec_boost_tree.R index a5798016..1eba4a9e 100644 --- a/R/sdm_spec_boost_tree.R +++ b/R/sdm_spec_boost_tree.R @@ -2,6 +2,8 @@ #' #' This function returns a [parsnip::model_spec] for a Boosted Trees model to #' be used as a classifier of presences and absences in Species Distribution Model. +#' It uses the library `xgboost` to fit boosted trees; to use another library, simply build the +#' [parsnip::model_spec] directly. #' #' @param ... parameters to be passed to [parsnip::boost_tree()] to #' customise the model. See the help of that function for details. diff --git a/R/sdm_spec_rand_forest.R b/R/sdm_spec_rand_forest.R index 63d94df5..dc0ae1db 100644 --- a/R/sdm_spec_rand_forest.R +++ b/R/sdm_spec_rand_forest.R @@ -2,7 +2,10 @@ #' #' This function returns a [parsnip::model_spec] for a Random Forest to #' be used as a classifier of presences and absences in Species Distribution -#' Models. +#' Models. It uses the library `ranger` to fit boosted trees; to use another +#' library, simply build the +#' [parsnip::model_spec] directly. + #' #' `sdm_spec_rf()` is simply a short form for `sm_spec_rand_forest()`. #' diff --git a/cran-comments.md b/cran-comments.md index 1736e230..dfe0316d 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,8 +1,5 @@ -This is a new package not present on CRAN yet. - -On all testing environment (see below), we only get a note because of the -package being a new submission, and a false positive for mispelling -(author name in the reference, and tidymodels). +This is a minor bug fix that deals with changes in the latest version +of `terra` (1.6.75). ## Test environments - R-hub windows-x86_64-devel (r-devel) @@ -27,7 +24,3 @@ Possibly misspelled words in DESCRIPTION: tidymodels (8:56) 0 errors ✔ | 0 warnings ✔ | 1 notes ✖ - -## Changes from previous submission -Description text: Fixed a typo, and changed to undirected quotation marks -for package names as requested. \ No newline at end of file diff --git a/man/sdm_spec_boost_tree.Rd b/man/sdm_spec_boost_tree.Rd index f71ba131..7206040f 100644 --- a/man/sdm_spec_boost_tree.Rd +++ b/man/sdm_spec_boost_tree.Rd @@ -28,6 +28,8 @@ a \link[parsnip:model_spec]{parsnip::model_spec} of the model. \description{ This function returns a \link[parsnip:model_spec]{parsnip::model_spec} for a Boosted Trees model to be used as a classifier of presences and absences in Species Distribution Model. +It uses the library \code{xgboost} to fit boosted trees; to use another library, simply build the +\link[parsnip:model_spec]{parsnip::model_spec} directly. } \examples{ standard_bt_spec <- sdm_spec_boost_tree() diff --git a/man/sdm_spec_rand_forest.Rd b/man/sdm_spec_rand_forest.Rd index ad3c218f..56df799c 100644 --- a/man/sdm_spec_rand_forest.Rd +++ b/man/sdm_spec_rand_forest.Rd @@ -28,7 +28,9 @@ a \link[parsnip:model_spec]{parsnip::model_spec} of the model. \description{ This function returns a \link[parsnip:model_spec]{parsnip::model_spec} for a Random Forest to be used as a classifier of presences and absences in Species Distribution -Models. +Models. It uses the library \code{ranger} to fit boosted trees; to use another +library, simply build the +\link[parsnip:model_spec]{parsnip::model_spec} directly. } \details{ \code{sdm_spec_rf()} is simply a short form for \code{sm_spec_rand_forest()}. diff --git a/tests/testthat/Rplots.pdf b/tests/testthat/Rplots.pdf deleted file mode 100644 index ca3fbde6872ca8c3126f0224eb9b011298f972e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12622 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 Bfs+6L diff --git a/vignettes/a0_tidysdm_overview.Rmd b/vignettes/a0_tidysdm_overview.Rmd index b2a3357a..b1db703b 100644 --- a/vignettes/a0_tidysdm_overview.Rmd +++ b/vignettes/a0_tidysdm_overview.Rmd @@ -13,8 +13,11 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) +# set options to limit threads used by imported libraries options(cores=2) options(mc.cores=2) +# xgboost uses data.table +data.table::setDTthreads(1) ``` # SDMs with `tidymodels` diff --git a/vignettes/a1_palaeodata_application.Rmd b/vignettes/a1_palaeodata_application.Rmd index da10aa4f..f1ffc265 100644 --- a/vignettes/a1_palaeodata_application.Rmd +++ b/vignettes/a1_palaeodata_application.Rmd @@ -13,8 +13,11 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) +# set options to limit threads used by imported libraries options(cores=2) options(mc.cores=2) +# xgboost uses data.table +data.table::setDTthreads(1) ``` # SDMs with tidymodels for palaeo data diff --git a/vignettes/a2_tidymodels_additions.Rmd b/vignettes/a2_tidymodels_additions.Rmd index 840d90ab..0f191080 100644 --- a/vignettes/a2_tidymodels_additions.Rmd +++ b/vignettes/a2_tidymodels_additions.Rmd @@ -13,8 +13,11 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) +# set options to limit threads used by imported libraries options(cores=2) options(mc.cores=2) +# xgboost uses data.table +data.table::setDTthreads(1) ``` # Additional features of `tidymodels` diff --git a/vignettes/a3_troubleshooting.Rmd b/vignettes/a3_troubleshooting.Rmd index 2ddce3ec..80d9957d 100644 --- a/vignettes/a3_troubleshooting.Rmd +++ b/vignettes/a3_troubleshooting.Rmd @@ -13,8 +13,11 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) +# set options to limit threads used by imported libraries options(cores=2) options(mc.cores=2) +# xgboost uses data.table +data.table::setDTthreads(1) ``` In this vignette, we illustrate how to troubleshoot tuning errors. This is not a From ce2d06614319ad6381fbd90e4a60e02d36ded5af Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 17 Jan 2024 10:23:37 +0000 Subject: [PATCH 24/27] Increase number of points for sampling --- tests/testthat/test_sample_pseudoabs_time.R | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/testthat/test_sample_pseudoabs_time.R b/tests/testthat/test_sample_pseudoabs_time.R index 29789926..5b2ffede 100644 --- a/tests/testthat/test_sample_pseudoabs_time.R +++ b/tests/testthat/test_sample_pseudoabs_time.R @@ -28,6 +28,8 @@ pts_in_polys <- function(pts, polys) { e[!is.na(e[, 2]), 1] } +n_pt <- 20 + test_that("sample_pseudoabs_time samples in the right places", { # error if time is not a posix object expect_error(sample_pseudoabs_time(locations, @@ -35,12 +37,12 @@ test_that("sample_pseudoabs_time samples in the right places", { "time is not a date") set.seed(123) pa_random <- sample_pseudoabs_time(locations, - n = 10, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + n = n_pt, raster = grid_raster, lubridate_fun = pastclim::ybp2date, method = c("dist_min", 60000), return_pres = FALSE ) # we have the right number of pseudoabsences per time - expect_true(all(table(locations$time)*10==table(pa_random$time_step))) + expect_true(all(table(locations$time)*n_pt==table(pa_random$time_step))) # none are within the buffer at a given time step min_buffer <- terra::buffer(terra::vect(locations %>% dplyr::filter(time==2), crs = "lonlat"), 60000) @@ -59,13 +61,13 @@ test_that("sample_pseudoabs_time samples in the right places", { # now set the time buffer so that we allow presences to impact absences in other time steps set.seed(123) pa_random <- sample_pseudoabs_time(locations, - n = 10, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + n = n_pt, raster = grid_raster, lubridate_fun = pastclim::ybp2date, method = c("dist_min", 60000), return_pres = FALSE, time_buffer = y2d(1) ) # we have the right number of pseudoabsences per time - expect_true(all(table(locations$time)*10==table(pa_random$time_step))) + expect_true(all(table(locations$time)*n_pt==table(pa_random$time_step))) # none are within the buffer at a given time step min_buffer <- terra::buffer(terra::vect(locations %>% dplyr::filter(time==2), crs = "lonlat"), 60000) @@ -86,13 +88,13 @@ test_that("sample_pseudoabs_time samples in the right places", { # now check that we return the right number of presences set.seed(123) pa_random <- sample_pseudoabs_time(locations, - n = 10, raster = grid_raster, lubridate_fun = pastclim::ybp2date, + n = n_pt, raster = grid_raster, lubridate_fun = pastclim::ybp2date, method = c("dist_min", 60000), return_pres = TRUE, time_buffer = y2d(1) ) expect_true(table(pa_random$class)[1]==4) - expect_true(table(pa_random$class)[2]==10*table(pa_random$class)[1]) + expect_true(table(pa_random$class)[2]==n_pt*table(pa_random$class)[1]) }) From f2ce45bea37c1b1a6bc1271f3b72038f18a06be5 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 17 Jan 2024 17:16:11 +0000 Subject: [PATCH 25/27] Fix test --- .../helper_functions/submitting_to_cran.R | 10 +++++ tests/testthat/test_sample_pseudoabs_time.R | 39 ++++++++++--------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/data-raw/helper_functions/submitting_to_cran.R b/data-raw/helper_functions/submitting_to_cran.R index c168421f..be5975d2 100644 --- a/data-raw/helper_functions/submitting_to_cran.R +++ b/data-raw/helper_functions/submitting_to_cran.R @@ -28,3 +28,13 @@ devtools::check_win_devel() # TO DO MANUALLY: if everything passes, edit the cran-comments.md to explain any notes devtools::release() + + + +################################################################################ +################################################################################ +# For errors from r-hub, get a Docker image from: +# https://hub.docker.com/r/rhub/debian-gcc-release +# and then run with: +# docker run -ti rhub/fedora-clang-devel bash + diff --git a/tests/testthat/test_sample_pseudoabs_time.R b/tests/testthat/test_sample_pseudoabs_time.R index 5b2ffede..52c46463 100644 --- a/tests/testthat/test_sample_pseudoabs_time.R +++ b/tests/testthat/test_sample_pseudoabs_time.R @@ -28,8 +28,8 @@ pts_in_polys <- function(pts, polys) { e[!is.na(e[, 2]), 1] } -n_pt <- 20 - +n_pt <- 10 +buf_dist <- 80000 test_that("sample_pseudoabs_time samples in the right places", { # error if time is not a posix object expect_error(sample_pseudoabs_time(locations, @@ -38,31 +38,31 @@ test_that("sample_pseudoabs_time samples in the right places", { set.seed(123) pa_random <- sample_pseudoabs_time(locations, n = n_pt, raster = grid_raster, lubridate_fun = pastclim::ybp2date, - method = c("dist_min", 60000), + method = c("dist_min", buf_dist), return_pres = FALSE ) # we have the right number of pseudoabsences per time expect_true(all(table(locations$time)*n_pt==table(pa_random$time_step))) # none are within the buffer at a given time step min_buffer <- terra::buffer(terra::vect(locations %>% - dplyr::filter(time==2), crs = "lonlat"), 60000) + dplyr::filter(time==2), crs = "lonlat"), buf_dist) expect_true(length(pts_in_polys(terra::vect(pa_random %>% - dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + dplyr::filter(time_step==as.Date("1952-01-01"))), min_buffer)) == 0) # but they ignore presences from other time steps min_buffer <- terra::buffer(terra::vect(locations %>% - dplyr::filter(time==3), crs = "lonlat"), 60000) + dplyr::filter(time==3), crs = "lonlat"), buf_dist) expect_false(length(pts_in_polys(terra::vect(pa_random %>% - dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + dplyr::filter(time_step==as.Date("1952-01-01"))), min_buffer)) == 0) min_buffer <- terra::buffer(terra::vect(locations %>% - dplyr::filter(time==4), crs = "lonlat"), 60000) + dplyr::filter(time==4), crs = "lonlat"), buf_dist) expect_false(length(pts_in_polys(terra::vect(pa_random %>% - dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + dplyr::filter(time_step==as.Date("1952-01-01"))), min_buffer)) == 0) # now set the time buffer so that we allow presences to impact absences in other time steps set.seed(123) pa_random <- sample_pseudoabs_time(locations, n = n_pt, raster = grid_raster, lubridate_fun = pastclim::ybp2date, - method = c("dist_min", 60000), + method = c("dist_min", buf_dist), return_pres = FALSE, time_buffer = y2d(1) ) @@ -70,26 +70,26 @@ test_that("sample_pseudoabs_time samples in the right places", { expect_true(all(table(locations$time)*n_pt==table(pa_random$time_step))) # none are within the buffer at a given time step min_buffer <- terra::buffer(terra::vect(locations %>% - dplyr::filter(time==2), crs = "lonlat"), 60000) + dplyr::filter(time==2), crs = "lonlat"), buf_dist) expect_true(length(pts_in_polys(terra::vect(pa_random %>% - dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + dplyr::filter(time_step==as.Date("1952-01-01"))), min_buffer)) == 0) # none are within the buffer of a location in the time buffer min_buffer <- terra::buffer(terra::vect(locations %>% - dplyr::filter(time==3), crs = "lonlat"), 60000) + dplyr::filter(time==3), crs = "lonlat"), buf_dist) expect_true(length(pts_in_polys(terra::vect(pa_random %>% - dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + dplyr::filter(time_step==as.Date("1952-01-01"))), min_buffer)) == 0) # but they ignore presences from time steps outside the buffer min_buffer <- terra::buffer(terra::vect(locations %>% - dplyr::filter(time==4), crs = "lonlat"), 60000) + dplyr::filter(time==4), crs = "lonlat"), buf_dist) expect_false(length(pts_in_polys(terra::vect(pa_random %>% - dplyr::filter(time_step=="1952-01-01")), min_buffer)) == 0) + dplyr::filter(time_step==as.Date("1952-01-01"))), min_buffer)) == 0) # now check that we return the right number of presences set.seed(123) pa_random <- sample_pseudoabs_time(locations, n = n_pt, raster = grid_raster, lubridate_fun = pastclim::ybp2date, - method = c("dist_min", 60000), + method = c("dist_min", buf_dist), return_pres = TRUE, time_buffer = y2d(1) ) @@ -99,7 +99,10 @@ test_that("sample_pseudoabs_time samples in the right places", { }) # sample code to plot points -# i <- 4 +# i <- 2 # plot(grid_raster[[i]],colNA="darkgray") # polys(terra::as.polygons(grid_raster[[i]])) # points(vect(locations %>% filter(time==i)), col="red", cex=2) +# points(terra::vect(pa_random %>% +# dplyr::filter(time_step==as.Date("1952-01-01"))), col="blue") +# polys(min_buffer) From 6d203cdf48d8ab546e3a14fe0cff75394ca73216 Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 17 Jan 2024 20:20:50 +0000 Subject: [PATCH 26/27] donttest long running example --- R/autoplot_simple_ensemble.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/autoplot_simple_ensemble.R b/R/autoplot_simple_ensemble.R index e7f57f7d..cfd9a6c6 100644 --- a/R/autoplot_simple_ensemble.R +++ b/R/autoplot_simple_ensemble.R @@ -29,11 +29,12 @@ #' (95% confidence, by default). #' @returns A ggplot object. #' @examples -#' # we use the two_class_example from `workflowsets` +#' \donttest{ +#' #' # we use the two_class_example from `workflowsets` #' two_class_ens <- simple_ensemble() %>% #' add_member(two_class_res, metric = "roc_auc") #' autoplot(two_class_ens) -#' +#' } #' @export autoplot.simple_ensemble <- function(object, rank_metric = NULL, metric = NULL, std_errs = stats::qnorm(0.95), ...) { From d7a9c5faf234fc14a396c6053559d051cf2065fb Mon Sep 17 00:00:00 2001 From: Andrea Manica Date: Wed, 17 Jan 2024 20:22:02 +0000 Subject: [PATCH 27/27] Update cran comments. --- cran-comments.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/cran-comments.md b/cran-comments.md index dfe0316d..8b6cd702 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -9,18 +9,4 @@ of `terra` (1.6.75). - devtools::check_win_devel() ## R CMD check results -On all systems: - -* checking CRAN incoming feasibility ... NOTE -Maintainer: ‘Andrea Manica ’ - -New submission - -Possibly misspelled words in DESCRIPTION: - Leonardi (9:6) - Tidymodels (2:41) - al (9:18) - et (9:15) - tidymodels (8:56) - -0 errors ✔ | 0 warnings ✔ | 1 notes ✖ +Not issues on any system.