From 164299ee8db661c6dda6bd5cbb0eecfa5f438d69 Mon Sep 17 00:00:00 2001 From: Matt Strimas-Mackey Date: Sat, 1 Aug 2026 03:40:33 -0700 Subject: [PATCH 1/4] refactor all download-related functions into fetch.R --- DESCRIPTION | 2 +- NEWS.md | 7 + R/download.R | 278 ++-------- R/fetch.R | 359 +++++++++++++ R/load.R | 479 +++++------------- cran-comments.md | 15 +- docs/404.html | 2 +- docs/CODE_OF_CONDUCT.html | 2 +- docs/CONTRIBUTING.html | 2 +- docs/LICENSE.html | 2 +- docs/articles/api.html | 2 +- docs/articles/applications.html | 2 +- docs/articles/index.html | 2 +- docs/articles/product-changelog.html | 2 +- docs/articles/status.html | 150 +----- docs/articles/status.md | 148 +----- docs/articles/trends.html | 2 +- docs/authors.html | 6 +- docs/authors.md | 4 +- docs/index.html | 2 +- docs/news/index.html | 12 +- docs/news/index.md | 13 + docs/pkgdown.yml | 2 +- .../abundance_palette-deprecated.html | 2 +- docs/reference/assign_to_grid.html | 2 +- docs/reference/calculate_mcc_f1.html | 2 +- docs/reference/convert_ppy_to_cumulative.html | 2 +- docs/reference/date_to_st_week.html | 2 +- docs/reference/ebirdst-defunct.html | 2 +- docs/reference/ebirdst-deprecated.html | 2 +- docs/reference/ebirdst-package.html | 2 +- docs/reference/ebirdst_data_dir.html | 4 +- docs/reference/ebirdst_data_dir.md | 2 +- docs/reference/ebirdst_data_inventory.html | 2 +- docs/reference/ebirdst_delete.html | 2 +- .../ebirdst_download_data_coverage.html | 2 +- docs/reference/ebirdst_download_status.html | 2 +- docs/reference/ebirdst_download_trends.html | 2 +- docs/reference/ebirdst_palettes.html | 2 +- .../ebirdst_predictor_descriptions.html | 2 +- docs/reference/ebirdst_predictors.html | 2 +- docs/reference/ebirdst_regional_stats.html | 2 +- docs/reference/ebirdst_runs.html | 2 +- docs/reference/ebirdst_version.html | 2 +- docs/reference/get_species.html | 2 +- docs/reference/get_species_path.html | 2 +- docs/reference/grid_sample.html | 2 +- docs/reference/index.html | 2 +- docs/reference/load_config.html | 2 +- docs/reference/load_data_coverage.html | 2 +- docs/reference/load_fac_map_parameters.html | 2 +- docs/reference/load_pi.html | 42 +- docs/reference/load_pi.md | 13 +- docs/reference/load_ppm.html | 24 +- docs/reference/load_ppm.md | 11 +- docs/reference/load_ranges.html | 2 +- docs/reference/load_raster.html | 2 +- docs/reference/load_regional_stats.html | 2 +- docs/reference/load_trends.html | 2 +- docs/reference/pipe.html | 2 +- docs/reference/rasterize_trends.html | 2 +- docs/reference/set_ebirdst_access_key.html | 2 +- docs/reference/vectorize_trends.html | 2 +- docs/search.json | 2 +- man/load_pi.Rd | 16 +- man/load_ppm.Rd | 10 +- tests/testthat/test_fetch.R | 129 +++++ tests/testthat/test_loading.R | 53 ++ 68 files changed, 888 insertions(+), 981 deletions(-) create mode 100644 R/fetch.R create mode 100644 tests/testthat/test_fetch.R diff --git a/DESCRIPTION b/DESCRIPTION index 37e8173..c337d7d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: ebirdst Title: Access and Analyze eBird Status and Trends Data Products -Version: 4.2023.0 +Version: 4.2023.1 Authors@R: c( person("Matthew", "Strimas-Mackey", , "mes335@cornell.edu", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-8929-7776")), diff --git a/NEWS.md b/NEWS.md index 6bc186e..f2dc48a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +# ebirdst 4.2023.1 + +- Backend approach to file download has been refactored to an on-demand first approach +- `list_available_pis()` no longer downloads every predictor importance raster to determine availability, only `pi_rangewide.csv` +- The http fallback for VPNs that block https now also applies to file downloads, not just file listings +- Errors for data that can't be found on-demand now include function-specific guidance, e.g. pointing to `list_available_pis()` + # ebirdst 4.2023.0 - Transition to having all the `load_*()` functions download directly rather than having to call `ebirdst_download_status()` diff --git a/R/download.R b/R/download.R index 161081a..3234ae7 100644 --- a/R/download.R +++ b/R/download.R @@ -118,11 +118,22 @@ ebirdst_download_status <- function( } # complete list of all available files for this species - files <- get_download_file_list( - species_code = species, - path = path, - dataset = "status" + keys <- list_object_keys(species_code = species, dataset = "status") + + # decide which files to download + keys <- select_status_keys( + keys, + download_abundance = download_abundance, + download_occurrence = download_occurrence, + download_count = download_count, + download_ranges = download_ranges, + download_regional = download_regional, + download_pis = download_pis, + download_ppms = download_ppms, + download_all = download_all, + pattern = pattern ) + # path to data package run_path <- file.path( path, @@ -130,69 +141,24 @@ ebirdst_download_status <- function( species ) - # decide which files to download - # always download config file - dl <- stringr::str_detect(files$file, pattern = "config.json$") - if (download_abundance || download_all) { - # add abundance - dl <- stringr::str_detect(files$file, "\\_abundance\\_") | dl - # add proportion of population - dl <- stringr::str_detect(files$file, "\\_proportion-population\\_") | dl - } - if (download_occurrence || download_all) { - # add occurrence - dl <- stringr::str_detect(files$file, "\\_occurrence\\_") | dl - } - if (download_count || download_all) { - # add count - dl <- stringr::str_detect(files$file, "\\_count\\_") | dl - } - if (download_ranges || download_all) { - # add ranges - dl <- stringr::str_detect(files$file, "/ranges/") | dl - } - if (download_regional || download_all) { - # add regional summary stats - dl <- stringr::str_ends(files$file, "regional_stats.csv") | dl - } - if (download_pis || download_all) { - # add pis - dl <- stringr::str_detect(files$file, "/pis/") | dl - } - if (download_ppms || download_all) { - # add ppms - dl <- stringr::str_detect(files$file, "/ppms/") | dl - } - files <- files[dl, ] - - # apply pattern - if (!is.null(pattern)) { - stopifnot(is.character(pattern), length(pattern) == 1, !is.na(pattern)) - pat_match <- stringr::str_detect(basename(files$file), pattern = pattern) - if (!any(pat_match)) { - stop("No files matched pattern") - } - - # always download config file - is_config <- stringr::str_detect( - basename(files$file), - pattern = "config.json$" - ) - files <- files[pat_match | is_config, ] - } - # print files to download for dry run if (dry_run) { message("Downloading Status Data Products for ", species, " to:\n ", path) - message(paste(c("File list:", files$file), collapse = "\n ")) - return(invisible(files$file)) + message(paste(c("File list:", keys), collapse = "\n ")) + return(invisible(keys)) } if (show_progress) { message(stringr::str_glue("Downloading Status Data Products for {species}")) } - download_files(files, force = force, show_progress = show_progress) + fetch_data( + keys, + path = path, + force = force, + show_progress = show_progress, + report_existing = TRUE + ) return(invisible(normalizePath(run_path))) } @@ -267,22 +233,24 @@ ebirdst_download_trends <- function( run_paths <- character() for (s in species_code) { # complete list of all available files for this species - files <- get_download_file_list( - species_code = s, - path = path, - dataset = "trends" - ) + keys <- list_object_keys(species_code = s, dataset = "trends") + # only trends files + keys <- keys[stringr::str_detect(keys, "/trends/")] + # path to data package run_path <- file.path(path, ebirdst_version()[["trends_version_year"]], s) - # only trends files - files <- files[stringr::str_detect(files$file, "/trends/"), ] - # download if (show_progress) { message(stringr::str_glue("Downloading Trends Data Products for {s}")) } - download_files(files, force = force, show_progress = show_progress) + fetch_data( + keys, + path = path, + force = force, + show_progress = show_progress, + report_existing = TRUE + ) run_paths <- c(run_paths, run_path) } @@ -329,7 +297,7 @@ ebirdst_download_data_coverage <- function( stopifnot(is_flag(show_progress)) # complete list of all available files for this species - files <- get_download_file_list(species_code = "data_coverage", path = path) + keys <- list_object_keys(species_code = "data_coverage", dataset = "status") # path to data package run_path <- file.path( path, @@ -340,25 +308,31 @@ ebirdst_download_data_coverage <- function( # apply pattern if (!is.null(pattern)) { stopifnot(is.character(pattern), length(pattern) == 1, !is.na(pattern)) - pat_match <- stringr::str_detect(basename(files$file), pattern = pattern) + pat_match <- stringr::str_detect(basename(keys), pattern = pattern) if (!any(pat_match)) { stop("No files matched pattern") } - files <- files[pat_match, ] + keys <- keys[pat_match] } # print files to download for dry run if (dry_run) { message("Downloading Data Coverage Products to:\n ", path) - message(paste(c("File list:", files$file), collapse = "\n ")) - return(invisible(files$file)) + message(paste(c("File list:", keys), collapse = "\n ")) + return(invisible(keys)) } if (show_progress) { message(stringr::str_glue("Downloading Data Coverage Products")) } - download_files(files, force = force, show_progress = show_progress) + fetch_data( + keys, + path = path, + force = force, + show_progress = show_progress, + report_existing = TRUE + ) return(invisible(normalizePath(run_path))) } @@ -459,161 +433,3 @@ ebirdst_version <- function() { release_year = 2025 ) } - - -# internal ---- - -get_download_file_list <- function( - species_code, - path, - dataset = c("status", "trends") -) { - stopifnot( - is.character(species_code), - length(species_code) == 1, - !is.na(species_code) - ) - dataset <- match.arg(dataset) - - # version of the data products that this package version corresponds to - version_year <- ebirdst_version()[[paste0(dataset, "_version_year")]] - # example data or a full data package - is_example <- (species_code == "yebsap-example") - - # path to data package - run_path <- file.path(path, version_year, species_code) - - if (is_example) { - api_url <- paste0( - "https://raw.githubusercontent.com/", - "ebird/ebirdst_example-data/main/", - "example-data/" - ) - # file list - fl <- system.file( - "extdata", - paste0("example-data_file-list_", dataset, ".txt"), - package = "ebirdst" - ) - files <- readLines(fl) - } else { - # api url and key - key <- get_ebirdst_access_key() - api_url <- "https://st-download.ebird.org/v1" - - # get file list for this species - list_obj_url <- stringr::str_glue( - "{api_url}/list-obj/{version_year}/", - "{species_code}?key={key}" - ) - files <- tryCatch( - suppressWarnings({ - jsonlite::read_json(list_obj_url, simplifyVector = TRUE) - }), - error = function(e) NULL - ) - if (is.null(files)) { - # try http instead in case of ssl issues on vpn - api_url <- "http://st-download.ebird.org/v1" - # get file list for this species - list_obj_url <- stringr::str_glue( - "{api_url}/list-obj/{version_year}/", - "{species_code}?key={key}" - ) - files <- tryCatch( - suppressWarnings({ - jsonlite::read_json(list_obj_url, simplifyVector = TRUE) - }), - error = function(e) NULL - ) - if (is.null(files)) { - stop( - "Cannot access Status and Trends data URL. Ensure that you have ", - "a working internet connection and a valid API key for the ", - "Status and Trends data. Note that the API keys expire after ", - "6 month, so may need to update your key. ", - "Visit https://ebird.org/st/request" - ) - } - } - - # remove web_download folder - web_down <- stringr::str_detect(dirname(files), pattern = "web_download") - files <- files[!web_down] - - # remove additional species cause by bug in API - # e.g. leafly will also return leafly2 - only_target <- stringr::str_detect( - files, - pattern = paste0("/", species_code, "/") - ) - files <- files[only_target] - } - - if (length(files) == 0) { - stop("No data found for species ", species_code) - } - - # prepare download paths - files <- data.frame(file = files) - if (is_example) { - files$src_path <- paste0(api_url, files$file) - } else { - files$src_path <- stringr::str_glue( - "{api_url}/fetch?objKey={files$file}", - "&key={key}" - ) - } - files$dest_path <- file.path(path, files$file) - files$exists <- file.exists(files$dest_path) - - return(files) -} - -download_files <- function(files, force, show_progress) { - # create necessary directories - dirs <- unique(dirname(files$dest_path)) - for (d in dirs) { - dir.create(d, showWarnings = FALSE, recursive = TRUE) - } - - # check if already exists - if (all(files$exists)) { - if (!isTRUE(force)) { - message("Data already exists, use force = TRUE to re-download.") - return(invisible(0L)) - } - } else if (any(files$exists)) { - if (!isTRUE(force)) { - message(paste( - "Some files already exist, only downloading new files.", - " Use force = TRUE to re-download all files." - )) - files <- files[!files$exists, ] - } - } - - # download - n_files <- nrow(files) - old_timeout <- getOption("timeout") - options(timeout = max(3000, old_timeout)) - for (i in seq_len(n_files)) { - if (show_progress) { - message(stringr::str_glue( - " Downloading file {i} of {n_files}: ", - "{basename(files$file[i])}" - )) - } - dl_response <- utils::download.file( - files$src_path[i], - files$dest_path[i], - quiet = TRUE, - mode = "wb" - ) - if (dl_response != 0) { - stop("Error downloading file: ", files$file[i]) - } - } - options(timeout = old_timeout) - return(invisible(n_files)) -} diff --git a/R/fetch.R b/R/fetch.R new file mode 100644 index 0000000..4d11795 --- /dev/null +++ b/R/fetch.R @@ -0,0 +1,359 @@ +# this file contains the internal machinery shared by the ebirdst_download_*() +# functions in download.R and the on-demand downloads performed by the +# load_*() functions in load.R. the local path for a downloaded file is always +# its object key (e.g. "2023/woothr/config.json") appended to the data +# directory, and the API can fetch a single object directly by key, so +# fetch_data() is the one function anything in the package needs to call to +# make sure a set of files exist locally + +# internal ---- + +# session-cached API base url; some VPNs block https to the download API, so +# a fallback to http is cached here once discovered so it isn't re-probed on +# every request +ebirdst_env <- new.env(parent = emptyenv()) +ebirdst_env$api_base_url <- "https://st-download.ebird.org/v1" + +api_base_url <- function() { + return(ebirdst_env$api_base_url) +} + +use_http_fallback <- function() { + ebirdst_env$api_base_url <- sub( + "^https://", + "http://", + ebirdst_env$api_base_url + ) + return(invisible(ebirdst_env$api_base_url)) +} + + +# resolve a species name/code to its eBird species code; mirrors the +# validation in get_species_path() but doesn't require path to already exist +resolve_species <- function(species) { + species_code <- get_species(species) + if (anyNA(species_code)) { + stop( + paste(species[is.na(species_code)], collapse = ", "), + " does not correspond to a valid Status and Trends species." + ) + } + return(species_code) +} + + +# create the data directory if it doesn't already exist +ensure_data_dir <- function(path) { + if (!dir.exists(path)) { + created <- dir.create(path, recursive = TRUE, showWarnings = FALSE) + if (!isTRUE(created)) { + stop("Unable to create data directory: ", path) + } + } + return(invisible(path)) +} + + +# build object keys within the status or trends data package for a species; +# vectorizes over the last argument, e.g. status_key("woothr", "weekly", files) +status_key <- function(species_code, ...) { + version_year <- ebirdst_version()[["status_version_year"]] + return(paste(version_year, species_code, ..., sep = "/")) +} + +trends_key <- function(species_code, ...) { + version_year <- ebirdst_version()[["trends_version_year"]] + return(paste(version_year, species_code, ..., sep = "/")) +} + + +# list all object keys available for a species, for callers that don't +# already know the exact key(s) they want: flag/pattern-based selection in +# ebirdst_download_status()/ebirdst_download_trends(), and PI availability in +# list_available_pis() +list_object_keys <- function(species_code, dataset = c("status", "trends")) { + stopifnot( + is.character(species_code), + length(species_code) == 1, + !is.na(species_code) + ) + dataset <- match.arg(dataset) + + version_year <- ebirdst_version()[[paste0(dataset, "_version_year")]] + is_example <- (species_code == "yebsap-example") + + if (is_example) { + fl <- system.file( + "extdata", + paste0("example-data_file-list_", dataset, ".txt"), + package = "ebirdst" + ) + keys <- readLines(fl) + } else { + key <- get_ebirdst_access_key() + list_obj_url <- stringr::str_glue( + "{api_base_url()}/list-obj/{version_year}/", + "{species_code}?key={key}" + ) + keys <- tryCatch( + suppressWarnings({ + jsonlite::read_json(list_obj_url, simplifyVector = TRUE) + }), + error = function(e) NULL + ) + if (is.null(keys)) { + # try http instead in case of ssl issues on vpn + use_http_fallback() + list_obj_url <- stringr::str_glue( + "{api_base_url()}/list-obj/{version_year}/", + "{species_code}?key={key}" + ) + keys <- tryCatch( + suppressWarnings({ + jsonlite::read_json(list_obj_url, simplifyVector = TRUE) + }), + error = function(e) NULL + ) + if (is.null(keys)) { + stop( + "Cannot access Status and Trends data URL. Ensure that you have ", + "a working internet connection and a valid API key for the ", + "Status and Trends data. Note that the API keys expire after ", + "6 month, so may need to update your key. ", + "Visit https://ebird.org/st/request" + ) + } + } + + # remove web_download folder + web_down <- stringr::str_detect(dirname(keys), pattern = "web_download") + keys <- keys[!web_down] + + # remove additional species caused by bug in API, e.g. leafly will also + # return leafly2 + only_target <- stringr::str_detect( + keys, + pattern = paste0("/", species_code, "/") + ) + keys <- keys[only_target] + } + + if (length(keys) == 0) { + stop("No data found for species ", species_code) + } + + return(keys) +} + + +# select which object keys should be downloaded based on the download_* flags +# and an optional filename pattern; the selection logic used by +# ebirdst_download_status() +select_status_keys <- function( + keys, + download_abundance = TRUE, + download_occurrence = FALSE, + download_count = FALSE, + download_ranges = FALSE, + download_regional = FALSE, + download_pis = FALSE, + download_ppms = FALSE, + download_all = FALSE, + pattern = NULL +) { + # always download config file + dl <- stringr::str_detect(keys, pattern = "config.json$") + if (download_abundance || download_all) { + # add abundance + dl <- stringr::str_detect(keys, "\\_abundance\\_") | dl + # add proportion of population + dl <- stringr::str_detect(keys, "\\_proportion-population\\_") | dl + } + if (download_occurrence || download_all) { + # add occurrence + dl <- stringr::str_detect(keys, "\\_occurrence\\_") | dl + } + if (download_count || download_all) { + # add count + dl <- stringr::str_detect(keys, "\\_count\\_") | dl + } + if (download_ranges || download_all) { + # add ranges + dl <- stringr::str_detect(keys, "/ranges/") | dl + } + if (download_regional || download_all) { + # add regional summary stats + dl <- stringr::str_ends(keys, "regional_stats.csv") | dl + } + if (download_pis || download_all) { + # add pis + dl <- stringr::str_detect(keys, "/pis/") | dl + } + if (download_ppms || download_all) { + # add ppms + dl <- stringr::str_detect(keys, "/ppms/") | dl + } + keys <- keys[dl] + + # apply pattern + if (!is.null(pattern)) { + stopifnot(is.character(pattern), length(pattern) == 1, !is.na(pattern)) + pat_match <- stringr::str_detect(basename(keys), pattern = pattern) + if (!any(pat_match)) { + stop("No files matched pattern") + } + + # always download config file + is_config <- stringr::str_detect(basename(keys), pattern = "config.json$") + keys <- keys[pat_match | is_config] + } + + return(keys) +} + + +# build the source download url for a set of object keys +object_key_url <- function(keys) { + is_example <- stringr::str_detect(keys, "yebsap-example") + urls <- character(length(keys)) + + if (any(is_example)) { + example_url <- paste0( + "https://raw.githubusercontent.com/", + "ebird/ebirdst_example-data/main/", + "example-data/" + ) + urls[is_example] <- paste0(example_url, keys[is_example]) + } + if (!all(is_example)) { + key <- get_ebirdst_access_key() + urls[!is_example] <- stringr::str_glue( + "{api_base_url()}/fetch?objKey={keys[!is_example]}", + "&key={key}" + ) + } + + return(urls) +} + + +# ensure the local files for a set of object keys exist, downloading any that +# are missing (or all of them, if force = TRUE); returns the normalized local +# paths. every download in the package funnels through here. `hint` is +# appended to the error raised if a requested key can't be found, and +# `report_existing` controls whether "already downloaded" messages are shown +# (used by the ebirdst_download_*() functions, but not by on-demand loads, +# which should stay silent when the requested data is already cached) +fetch_data <- function( + keys, + path, + force = FALSE, + show_progress = interactive(), + hint = NULL, + report_existing = FALSE +) { + ensure_data_dir(path) + dest_paths <- file.path(path, keys) + exists <- file.exists(dest_paths) + + if (!isTRUE(force) && all(exists)) { + if (report_existing) { + message("Data already exists, use force = TRUE to re-download.") + } + return(invisible(normalizePath(dest_paths))) + } + if (!isTRUE(force) && any(exists) && report_existing) { + message( + "Some files already exist, only downloading new files. ", + "Use force = TRUE to re-download all files." + ) + } + + to_fetch <- if (isTRUE(force)) keys else keys[!exists] + fetch_dest <- file.path(path, to_fetch) + + # create necessary directories + dirs <- unique(dirname(fetch_dest)) + for (d in dirs) { + dir.create(d, showWarnings = FALSE, recursive = TRUE) + } + + download_files( + object_key_url(to_fetch), + fetch_dest, + to_fetch, + show_progress = show_progress + ) + + missing <- keys[!file.exists(dest_paths)] + if (length(missing) > 0) { + msg <- paste0( + "The requested data could not be found:\n ", + paste(missing, collapse = "\n ") + ) + if (!is.null(hint)) { + stop(msg, "\n", hint) + } + stop(msg) + } + + return(invisible(normalizePath(dest_paths))) +} + + +# download files from src urls to local destination paths; on failure, retry +# once over http in case https is being blocked (e.g. by a VPN), caching the +# fallback for the rest of the session if it succeeds. a file that still +# can't be downloaded after the retry is simply left missing on disk, so +# fetch_data() can report it (with its caller-specific hint) rather than +# failing here with a generic message. `keys` is used only to report progress +download_files <- function(src, dest, keys, show_progress) { + n_files <- length(src) + old_timeout <- getOption("timeout") + options(timeout = max(3000, old_timeout)) + on.exit(options(timeout = old_timeout), add = TRUE) + + for (i in seq_len(n_files)) { + if (show_progress) { + message(stringr::str_glue( + " Downloading file {i} of {n_files}: ", + "{basename(keys[i])}" + )) + } + dl_response <- tryCatch( + suppressWarnings( + utils::download.file(src[i], dest[i], quiet = TRUE, mode = "wb") + ), + error = function(e) 1L + ) + if ( + dl_response != 0 && stringr::str_starts(src[i], "https://st-download") + ) { + use_http_fallback() + src[i] <- sub("^https://", "http://", src[i]) + tryCatch( + suppressWarnings( + utils::download.file(src[i], dest[i], quiet = TRUE, mode = "wb") + ), + error = function(e) 1L + ) + } + } + + return(invisible(n_files)) +} + + +# check that the geotiff driver is installed; required to load any of the +# raster data products +check_gtiff_support <- function() { + drv <- terra::gdal(drivers = TRUE) + drv <- drv$name[stringr::str_detect(drv$can, "read")] + if (!"GTiff" %in% drv) { + stop( + "GDAL does not have GeoTIFF support. GeoTIFF support is required to ", + "load Status and Trends raster data." + ) + } + return(invisible(TRUE)) +} diff --git a/R/load.R b/R/load.R index 1b93299..a88d25a 100644 --- a/R/load.R +++ b/R/load.R @@ -110,28 +110,9 @@ load_raster <- function( period <- match.arg(period) resolution <- match.arg(resolution) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - - species_code <- get_species(species) - species_path <- get_species_path( - species, - path = path, - dataset = "status", - check_downloaded = FALSE - ) + check_gtiff_support() - # check that the geotiff driver is installed - drv <- terra::gdal(drivers = TRUE) - drv <- drv$name[stringr::str_detect(drv$can, "read")] - if (!"GTiff" %in% drv) { - stop( - "GDAL does not have GeoTIFF support. GeoTIFF support is required to ", - "load Status and Trends raster data." - ) - } + species_code <- resolve_species(species) # load config file, downloading it on demand if necessary p <- load_config( @@ -156,7 +137,7 @@ load_raster <- function( ) } - # construct file name and path + # construct file name and key if (period == "weekly") { # assess which metric is being requested if (is.null(metric)) { @@ -180,7 +161,7 @@ load_raster <- function( "{species_code}_{product}_{metric}", "_{resolution}_{v}.tif" ) - file <- file.path(species_path, "weekly", file) + key <- status_key(species_code, "weekly", file) } else { # assess which metric is being requested if (is.null(metric)) { @@ -195,38 +176,19 @@ load_raster <- function( "{species_code}_{product}_{period}_{metric}", "_{resolution}_{v}.tif" ) - file <- file.path(species_path, "seasonal", file) + key <- status_key(species_code, "seasonal", file) } # download the requested product on demand if it isn't already present - status_dl_flag <- switch( - product, - "abundance" = "download_abundance", - "proportion-population" = "download_abundance", - "count" = "download_count", - "occurrence" = "download_occurrence" - ) - fetch_if_missing( - target = file, + local_file <- fetch_data( + key, + path = path, force = force, - downloader = function() { - dl_args <- list( - species = species_code, - path = path, - pattern = stringr::str_escape(basename(file)), - force = force, - show_progress = show_progress - ) - dl_args[[status_dl_flag]] <- TRUE - do.call(ebirdst_download_status, dl_args) - } + show_progress = show_progress ) - if (!file.exists(file)) { - stop("The file for the requested product does not exist: \n ", file) - } # load and return raster stack - return(terra::rast(file)) + return(terra::rast(local_file)) } @@ -322,11 +284,6 @@ load_trends <- function( stopifnot(is_flag(fold_estimates)) stopifnot(is_flag(force), is_flag(show_progress)) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - v <- ebirdst_version()[["trends_version_year"]] # trends species and seaons @@ -343,15 +300,9 @@ load_trends <- function( ) } - # get paths to trends parquet files + # construct keys for trends parquet files trends_paths <- character() for (i in seq_along(species_code)) { - p <- get_species_path( - species_code[i], - path = path, - dataset = "trends", - check_downloaded = FALSE - ) if (fold_estimates) { f <- stringr::str_glue( "{species_code[i]}_{season[i]}_ebird-trends_", @@ -363,31 +314,25 @@ load_trends <- function( "{v}.parquet" ) } - trends_paths <- c(trends_paths, file.path(p, "trends", f)) + trends_paths <- c( + trends_paths, + file.path(path, trends_key(species_code[i], "trends", f)) + ) } # download trends data on demand for any species not already present - fetch_if_missing( - target = trends_paths, - force = force, - downloader = function() { - to_download <- if (isTRUE(force)) { - species_code - } else { - species_code[!file.exists(trends_paths)] - } - ebirdst_download_trends( - to_download, - path = path, - force = force, - show_progress = show_progress - ) - } - ) - if (!all(file.exists(trends_paths))) { - stop( - "Trends data could not be found for the following species:\n ", - paste(species[!file.exists(trends_paths)], collapse = ", ") + ensure_data_dir(path) + if (isTRUE(force)) { + missing <- species_code + } else { + missing <- species_code[!file.exists(trends_paths)] + } + if (length(missing) > 0) { + ebirdst_download_trends( + missing, + path = path, + force = force, + show_progress = show_progress ) } @@ -455,27 +400,7 @@ load_data_coverage <- function( stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force), is_flag(show_progress)) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - - dc_path <- get_species_path( - "data_coverage", - path = path, - dataset = "status", - check_downloaded = FALSE - ) - - # check that the geotiff driver is installed - drv <- terra::gdal(drivers = TRUE) - drv <- drv$name[stringr::str_detect(drv$can, "read")] - if (!"GTiff" %in% drv) { - stop( - "GDAL does not have GeoTIFF support. GeoTIFF support is required to ", - "load Status and Trends raster data." - ) - } + check_gtiff_support() # generate vector of valid weeks valid_weeks <- as.Date(paste(2018, seq(4, 366, 7)), format = "%Y %j") @@ -502,35 +427,17 @@ load_data_coverage <- function( # construct filenames product <- paste0(product, "_mean") files <- stringr::str_glue("{product}_{valid_weeks}.tif") - files <- file.path(dc_path, product, files) # download the requested weeks on demand if they aren't already present - fetch_if_missing( - target = files, + local_files <- fetch_data( + status_key("data_coverage", product, files), + path = path, force = force, - downloader = function() { - to_download <- if (isTRUE(force)) files else files[!file.exists(files)] - pattern <- paste( - stringr::str_escape(basename(to_download)), - collapse = "|" - ) - ebirdst_download_data_coverage( - path = path, - pattern = pattern, - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress ) - if (!all(file.exists(files))) { - stop( - "The files for the requested product could not be found:\n ", - paste(basename(files[!file.exists(files)]), collapse = "\n ") - ) - } # load and return raster stack - return(stats::setNames(terra::rast(files), valid_weeks)) + return(stats::setNames(terra::rast(local_files), valid_weeks)) } @@ -573,18 +480,7 @@ load_ranges <- function( stopifnot(is_flag(force), is_flag(show_progress)) resolution <- match.arg(resolution) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - - species_code <- get_species(species) - species_path <- get_species_path( - species, - path = path, - dataset = "status", - check_downloaded = FALSE - ) + species_code <- resolve_species(species) # load config file, downloading it on demand if necessary p <- load_config( @@ -607,29 +503,17 @@ load_ranges <- function( "{species_code}_range_{label}", "_{resolution}_{v}.gpkg" ) - file <- file.path(species_path, "ranges", file) # download the ranges on demand if they aren't already present - fetch_if_missing( - target = file, + local_file <- fetch_data( + status_key(species_code, "ranges", file), + path = path, force = force, - downloader = function() { - ebirdst_download_status( - species_code, - path = path, - download_ranges = TRUE, - pattern = stringr::str_escape(basename(file)), - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress ) - if (!file.exists(file)) { - stop("The file for the requested product does not exist: \n ", file) - } # load polygons - p <- sf::read_sf(dsn = file, layer = "range") + p <- sf::read_sf(dsn = local_file, layer = "range") return(p) } @@ -689,38 +573,16 @@ load_regional_stats <- function( stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force), is_flag(show_progress)) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - - species_code <- get_species(species) - species_path <- get_species_path( - species, - path = path, - dataset = "status", - check_downloaded = FALSE - ) + species_code <- resolve_species(species) # download the regional stats on demand if they aren't already present - file <- file.path(species_path, "regional_stats.csv") - fetch_if_missing( - target = file, + file <- fetch_data( + status_key(species_code, "regional_stats.csv"), + path = path, force = force, - downloader = function() { - ebirdst_download_status( - species_code, - path = path, - download_regional = TRUE, - pattern = "regional_stats.csv", - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress ) - if (!file.exists(file)) { - stop("The regional summary stats file could not be found for this species.") - } + # load stats stats <- dplyr::as_tibble(utils::read.csv(file, na = "", row.names = NULL)) stats[["region_area_km2"]] <- NULL @@ -763,38 +625,21 @@ ebirdst_regional_stats <- function( stopifnot(is_flag(force)) stopifnot(is_flag(show_progress)) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - # the regional stats file is stored at the annual results level, named for # the status data version year version_year <- ebirdst_version()[["status_version_year"]] - obj_key <- file.path( + key <- file.path( version_year, sprintf("regional-stats_%s.parquet", version_year) ) - dest_path <- file.path(path, obj_key) # download the file on demand if it isn't already present - if (!file.exists(dest_path) || force) { - if (show_progress) { - message("Downloading regional stats for all species") - } - - # build the fetch url and download using the shared download machinery - key <- get_ebirdst_access_key() - api_url <- "https://st-download.ebird.org/v1" - files <- data.frame(file = obj_key) - files$src_path <- stringr::str_glue( - "{api_url}/fetch?objKey={obj_key}", - "&key={key}" - ) - files$dest_path <- dest_path - files$exists <- file.exists(dest_path) - download_files(files, force = force, show_progress = show_progress) - } + dest_path <- fetch_data( + key, + path = path, + force = force, + show_progress = show_progress + ) # load stats stats <- dplyr::as_tibble(arrow::read_parquet(dest_path)) @@ -831,39 +676,16 @@ load_config <- function( stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force), is_flag(show_progress)) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } + species_code <- resolve_species(species) - species_code <- get_species(species) - species_path <- get_species_path( - species, + # download the config file on demand if it isn't already present + cfg_file <- fetch_data( + status_key(species_code, "config.json"), path = path, - dataset = "status", - check_downloaded = FALSE - ) - - # download the config file on demand if it isn't already present; passing - # download_abundance = FALSE with no other product selected downloads only - # config.json - cfg_file <- file.path(species_path, "config.json") - fetch_if_missing( - target = cfg_file, force = force, - downloader = function() { - ebirdst_download_status( - species_code, - path = path, - download_abundance = FALSE, - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress ) - if (!file.exists(cfg_file)) { - stop("The file 'config.json' does not exist in: ", species_path) - } + # load configuration file p <- jsonlite::read_json(cfg_file, simplifyVector = TRUE) names(p) <- tolower(names(p)) @@ -946,12 +768,12 @@ load_fac_map_parameters <- function( #' a rank of 1 being the most important) relative to the full suite of #' environmental predictors. The ranks are summarized to a 27 km resolution #' raster grid for each predictor, where the cell values are the average across -#' all models in the ensemble contributing to that cell. These data are -#' available in raster format provided `download_pis = TRUE` was used when -#' calling [ebirdst_download_status()]. PI estimates are available separately -#' for both the occurrence and count sub-model and only the 30 most important -#' predictors are distributed. Use [list_available_pis()] to see which -#' predictors have PI data. +#' all models in the ensemble contributing to that cell. If the requested data +#' have not already been downloaded, they will be downloaded automatically on +#' first use. PI estimates are available separately for both the occurrence +#' and count sub-model and only the 30 most important predictors are +#' distributed. Use [list_available_pis()] to see which predictors have PI +#' data. #' #' @inheritParams load_raster #' @param predictor character; the predictor that the PI data should be loaded @@ -975,10 +797,8 @@ load_fac_map_parameters <- function( #' #' @examples #' \dontrun{ -#' # download example data if hasn't already been downloaded -#' ebirdst_download_status("yebsap-example", download_pis = TRUE) -#' #' # identify the top predictor +#' # data will be downloaded automatically if not already present #' top_preds <- list_available_pis("yebsap-example") #' print(top_preds[1, ]) #' @@ -998,55 +818,28 @@ load_pi <- function( stopifnot(is_flag(force), is_flag(show_progress)) response <- match.arg(response) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - - species_code <- get_species(species) - species_path <- get_species_path( - species, - path = path, - dataset = "status", - check_downloaded = FALSE - ) + species_code <- resolve_species(species) # construct file name; load_config() downloads config on demand and provides # the data version year year <- load_config( - species = species, + species = species_code, path = path, force = force, show_progress = show_progress )[["srd_pred_year"]] p <- stringr::str_replace_all(predictor, "_", "-") tif <- stringr::str_glue("{species_code}_pi_{response}_{p}_27km_{year}.tif") - tif <- file.path(species_path, "pis", tif) # download the requested PI raster on demand if it isn't already present - fetch_if_missing( - target = tif, + local_tif <- fetch_data( + status_key(species_code, "pis", tif), + path = path, force = force, - downloader = function() { - ebirdst_download_status( - species_code, - path = path, - download_pis = TRUE, - pattern = stringr::str_escape(basename(tif)), - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress, + hint = "To list predictors that have PI data use list_available_pis()." ) - if (!file.exists(tif)) { - stop( - "GeoTIFF for ", - predictor, - " PI could not be found. To list predictors that have PI data use ", - "list_available_pis()." - ) - } - return(terra::rast(tif)) + return(terra::rast(local_tif)) } @@ -1063,47 +856,20 @@ list_available_pis <- function( stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force), is_flag(show_progress)) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } + species_code <- resolve_species(species) - species_code <- get_species(species) - species_path <- get_species_path( - species, + # download the pi rank csv on demand if it isn't already present; this does + # not require downloading any of the pi rasters themselves + csv_file <- fetch_data( + status_key(species_code, "pis", "pi_rangewide.csv"), path = path, - check_downloaded = FALSE - ) - - # download the PI data on demand if not already present; the full set of PI - # files is needed to list the available predictors - csv_file <- file.path(species_path, "pis", "pi_rangewide.csv") - fetch_if_missing( - target = csv_file, force = force, - downloader = function() { - ebirdst_download_status( - species_code, - path = path, - download_abundance = FALSE, - download_pis = TRUE, - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress ) - if (!file.exists(csv_file)) { - stop("The PI data could not be found for this species.") - } - # load ranks ranks <- utils::read.csv(csv_file, row.names = NULL, na = "") - # available pis - tifs <- list.files(file.path(species_path, "pis"), pattern = "*.tif") - tifs <- tifs[!stringr::str_detect(tifs, "n-folds")] - preds <- stringr::str_remove(tifs, "^[^_]+_pi_(occurrence|count)_") - preds <- stringr::str_extract(preds, "[-a-z0-9]+") - preds <- unique(stringr::str_replace_all(preds, "-", "_")) + # identify which of the ranked predictors have pi rasters available + preds <- available_pi_predictors(species_code, path = path) preds <- preds[preds %in% ranks$predictor] # return ranks @@ -1120,9 +886,9 @@ list_available_pis <- function( #' during model training and a suite of predictive performance metrics (PPMs) #' are calculated. The PPMs for each base model are summarized to a 27 km #' resolution raster grid, where the cell values are the average across all -#' models in the ensemble contributing to that cell. These data are available in -#' raster format provided `download_ppms = TRUE` was used when calling -#' [ebirdst_download_status()]. +#' models in the ensemble contributing to that cell. If the requested data have +#' not already been downloaded, they will be downloaded automatically on first +#' use. #' #' @inheritParams load_raster #' @param ppm character; the name of a single metric to load data for. See @@ -1194,10 +960,8 @@ list_available_pis <- function( #' #' @examples #' \dontrun{ -#' # download example data if hasn't already been downloaded -#' ebirdst_download_status("yebsap-example", download_ppms = TRUE) -#' #' # load area under the precision-recall curve PPM raster +#' # data will be downloaded automatically if not already present #' load_ppm("yebsap-example", ppm = "binary_pr_auc") #' } load_ppm <- function( @@ -1232,64 +996,57 @@ load_ppm <- function( stopifnot(is_flag(force), is_flag(show_progress)) ppm <- match.arg(ppm) - # create the data directory if needed so data can be downloaded on demand - if (!dir.exists(path)) { - dir.create(path, recursive = TRUE, showWarnings = FALSE) - } - - species_code <- get_species(species) - species_path <- get_species_path( - species, - path = path, - dataset = "status", - check_downloaded = FALSE - ) + species_code <- resolve_species(species) # construct file name; load_config() downloads config on demand and provides # the data version year year <- load_config( - species = species, + species = species_code, path = path, force = force, show_progress = show_progress )[["srd_pred_year"]] p <- stringr::str_replace_all(ppm, "_", "-") tif <- stringr::str_glue("{species_code}_ppm_{p}_mean_27km_{year}.tif") - tif <- file.path(species_path, "ppms", tif) # download on demand if the file isn't already present - fetch_if_missing( - target = tif, + local_tif <- fetch_data( + status_key(species_code, "ppms", tif), + path = path, force = force, - downloader = function() { - ebirdst_download_status( - species_code, - path = path, - download_ppms = TRUE, - pattern = stringr::str_escape(basename(tif)), - force = force, - show_progress = show_progress - ) - } + show_progress = show_progress, + hint = "GeoTIFF for this PPM could not be found for this species." ) - if (!file.exists(tif)) { - stop("GeoTIFF for ", ppm, " PPM could not be found for this species.") - } - return(terra::rast(tif)) + return(terra::rast(local_tif)) } # internal ---- -# download a data product on demand when its file(s) are not already present, -# so that load_*() functions fetch missing data transparently instead of -# erroring. `target` is one or more file paths, `downloader` is a zero-argument -# function that downloads the missing data. returns TRUE if a download was -# attempted -fetch_if_missing <- function(target, downloader, force = FALSE) { - if (!isTRUE(force) && all(file.exists(target))) { - return(invisible(FALSE)) +# identify which predictors have pi rasters available for a species. prefers +# a single remote listing call, which requires no downloads, and falls back +# to globbing any pi tifs already downloaded locally if the listing can't be +# reached (e.g. offline). filtering on "_pi_(occurrence|count)_" excludes the +# other tifs that live alongside the pi rasters in the pis/ directory, e.g. +# n-folds-modeled, start_day_of_year, end_day_of_year +available_pi_predictors <- function(species_code, path) { + pi_pattern <- "_pi_(occurrence|count)_" + + tifs <- tryCatch( + { + keys <- list_object_keys(species_code, dataset = "status") + keys <- keys[stringr::str_detect(keys, "/pis/")] + basename(keys[stringr::str_detect(basename(keys), pi_pattern)]) + }, + error = function(e) NULL + ) + if (is.null(tifs)) { + pis_path <- file.path(path, status_key(species_code, "pis")) + tifs <- list.files(pis_path, pattern = paste0(pi_pattern, ".*\\.tif$")) } - downloader() - return(invisible(TRUE)) + + preds <- stringr::str_remove(tifs, paste0("^[^_]+", pi_pattern)) + preds <- stringr::str_extract(preds, "[-a-z0-9]+") + preds <- unique(stringr::str_replace_all(preds, "-", "_")) + return(preds) } diff --git a/cran-comments.md b/cran-comments.md index 9e3b824..ebcb79a 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,12 +1,9 @@ -# ebirdst 4.2023.0 +# ebirdst 4.2023.1 -- Transition to having all the `load_*()` functions download directly rather than having to call `ebirdst_download_status()` -- Converted vignettes to Quarto and moved them to website-only pkgdown articles; the package no longer ships built-in vignettes to CRAN (documentation lives at ) -- Add `ebirdst_regional_stats()` to load regional summary statistics for all species -- Add `ebirdst_data_inventory()` and `ebirdst_delete()` to manage files downloaded by `ebirdst` -- Move to air auto-formatting and jarl linting -- Efficiency improvements for `grid_sample()` -- `grid_sample_stratified()` gains a `cell_quantile_cap` argument to limit how many observations a single chronically over-sampled site (e.g. a bird feeder) can contribute +- Backend approach to file download has been refactored to an on-demand first approach +- `list_available_pis()` no longer downloads every predictor importance raster to determine availability, only `pi_rangewide.csv` +- The http fallback for VPNs that block https now also applies to file downloads, not just file listings +- Errors for data that can't be found on-demand now include function-specific guidance, e.g. pointing to `list_available_pis()` ## Test environments @@ -20,7 +17,7 @@ 0 errors | 0 warnings | 1 notes -- NOTE: Version contains large components (4.2023.0). We've aligned our version numbers with the version numbers for the API that this package interacts with. The eBird Status and Trends data products are given a version corresponding to a year, with the current version being 2022, so we've included that year in our version number to indicate that this package only works with the 2023 version of the data. +- NOTE: Version contains large components (4.2023.1). We've aligned our version numbers with the version numbers for the API that this package interacts with. The eBird Status and Trends data products are given a version corresponding to a year, with the current version being 2022, so we've included that year in our version number to indicate that this package only works with the 2023 version of the data. ## revdepcheck results diff --git a/docs/404.html b/docs/404.html index ea3321f..00c49b4 100644 --- a/docs/404.html +++ b/docs/404.html @@ -20,7 +20,7 @@ ebirdst - 4.2023.0 + 4.2023.1 - - - - - -
-
-
- -
-

This deprecated function has been replaced by ebirdst_palettes. -Both functions generate color palettes used for the eBird Status and Trends -relative abundance maps.

-
- -
-

Usage

-
abundance_palette(n,
-                        season = c("weekly", "breeding",
-                                   "nonbreeding",
-                                   "migration",
-                                   "prebreeding_migration",
-                                   "postbreeding_migration",
-                                   "year_round"))
-
- -
-

Arguments

- - -
n
-

integer; the number of colors to be in the palette.

- - -
season
-

character; the season to generate colors for or "weekly" to -get the color palette used in the weekly abundance animations.

- -
-
-

Value

-

A character vector of hex color codes.

-
- - -
- - -
- - - - - - - diff --git a/docs/reference/abundance_palette-deprecated.md b/docs/reference/abundance_palette-deprecated.md deleted file mode 100644 index ed81d23..0000000 --- a/docs/reference/abundance_palette-deprecated.md +++ /dev/null @@ -1,38 +0,0 @@ -# eBird Status and Trends color palettes for mapping - -This deprecated function has been replaced by -[`ebirdst_palettes`](https://ebird.github.io/ebirdst/reference/ebirdst_palettes.md). -Both functions generate color palettes used for the eBird Status and -Trends relative abundance maps. - -## Usage - -``` r -abundance_palette(n, - season = c("weekly", "breeding", - "nonbreeding", - "migration", - "prebreeding_migration", - "postbreeding_migration", - "year_round")) -``` - -## Arguments - -- n: - - integer; the number of colors to be in the palette. - -- season: - - character; the season to generate colors for or "weekly" to get the - color palette used in the weekly abundance animations. - -## Value - -A character vector of hex color codes. - -## See also - -[`ebirdst_palettes`](https://ebird.github.io/ebirdst/reference/ebirdst_palettes.md) -[`ebirdst-deprecated`](https://ebird.github.io/ebirdst/reference/ebirdst-deprecated.md) diff --git a/docs/reference/abundance_palette.html b/docs/reference/abundance_palette.html deleted file mode 100644 index 694368b..0000000 --- a/docs/reference/abundance_palette.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/ebirdst-defunct.html b/docs/reference/ebirdst-defunct.html deleted file mode 100644 index 7ed21d0..0000000 --- a/docs/reference/ebirdst-defunct.html +++ /dev/null @@ -1,135 +0,0 @@ - -Defunct functions in package ebirdst. — ebirdst-defunct • ebirdst - Skip to contents - - -
-
-
- -
-

The functions listed below are defunct and no longer supported. -Calling them will result in an error.

-

When possible alternative functions are suggested.

-

Many of them supported stixles which were infrequently used and were -dropped from ebirdst with the 2022 data release.

-
- -
-

Usage

-
ebirdst_download(
-  species,
-  path = ebirdst_data_dir(),
-  tifs_only = TRUE,
-  force = FALSE,
-  show_progress = TRUE,
-  pattern = NULL,
-  dry_run = FALSE
-)
-
-ebirdst_extent(x, t, ...)
-
-ebirdst_habitat(path, ext, data = NULL, stationary_associations = FALSE)
-
-ebirdst_ppms(path, ext, es_cutoff, pat_cutoff)
-
-ebirdst_ppms_ts(ath, ext, summarize_by = c("weeks", "months"), ...)
-
-ebirdst_subset(x, crs)
-
-load_pds(path, ext, model = c("occurrence", "count"), return_sf = FALSE)
-
-load_pis(path, ext, model = c("occurrence", "count"), return_sf = FALSE)
-
-load_predictions(path, return_sf = FALSE)
-
-parse_raster_dates(x)
-
-load_stixels(path, ext, return_sf = FALSE)
-
-project_extent(x, crs)
-
-plot_pds(path, ext, summarize_by = c("weeks", "months"), ...)
-
-plot_pis(
-  pis,
-  ext,
-  by_cover_class = TRUE,
-  n_top_pred = 15,
-  pretty_names = TRUE,
-  plot = TRUE
-)
-
-stixelize(x)
-
- -
-

Arguments

- - -
...
-

All arguments are now ignored.

- -
- -
- - -
- - - - - - - diff --git a/docs/reference/ebirdst-defunct.md b/docs/reference/ebirdst-defunct.md deleted file mode 100644 index 94974c8..0000000 --- a/docs/reference/ebirdst-defunct.md +++ /dev/null @@ -1,64 +0,0 @@ -# Defunct functions in package ebirdst. - -The functions listed below are defunct and no longer supported. Calling -them will result in an error. - -When possible alternative functions are suggested. - -Many of them supported stixles which were infrequently used and were -dropped from ebirdst with the 2022 data release. - -## Usage - -``` r -ebirdst_download( - species, - path = ebirdst_data_dir(), - tifs_only = TRUE, - force = FALSE, - show_progress = TRUE, - pattern = NULL, - dry_run = FALSE -) - -ebirdst_extent(x, t, ...) - -ebirdst_habitat(path, ext, data = NULL, stationary_associations = FALSE) - -ebirdst_ppms(path, ext, es_cutoff, pat_cutoff) - -ebirdst_ppms_ts(ath, ext, summarize_by = c("weeks", "months"), ...) - -ebirdst_subset(x, crs) - -load_pds(path, ext, model = c("occurrence", "count"), return_sf = FALSE) - -load_pis(path, ext, model = c("occurrence", "count"), return_sf = FALSE) - -load_predictions(path, return_sf = FALSE) - -parse_raster_dates(x) - -load_stixels(path, ext, return_sf = FALSE) - -project_extent(x, crs) - -plot_pds(path, ext, summarize_by = c("weeks", "months"), ...) - -plot_pis( - pis, - ext, - by_cover_class = TRUE, - n_top_pred = 15, - pretty_names = TRUE, - plot = TRUE -) - -stixelize(x) -``` - -## Arguments - -- ...: - - All arguments are now ignored. diff --git a/docs/reference/ebirdst-deprecated.html b/docs/reference/ebirdst-deprecated.html deleted file mode 100644 index 68a01e1..0000000 --- a/docs/reference/ebirdst-deprecated.html +++ /dev/null @@ -1,91 +0,0 @@ - -Deprecated functions in package ebirdst. — ebirdst-deprecated • ebirdst - Skip to contents - - -
-
-
- -
-

The functions listed below are deprecated and support for them -will eventually be dropped. -Help pages for deprecated functions are -available at help("<function>-deprecated").

-
- -
-

Usage

-
abundance_palette(
-  n,
-  season = c("weekly", "breeding", "nonbreeding", "migration", "prebreeding_migration",
-    "postbreeding_migration", "year_round")
-)
-
- -
-

abundance_palette

- - -

For abundance_palette, use ebirdst_palettes

-
- -
- - -
- - - - - - - diff --git a/docs/reference/ebirdst-deprecated.md b/docs/reference/ebirdst-deprecated.md deleted file mode 100644 index 2324211..0000000 --- a/docs/reference/ebirdst-deprecated.md +++ /dev/null @@ -1,20 +0,0 @@ -# Deprecated functions in package ebirdst. - -The functions listed below are deprecated and support for them will -eventually be dropped. Help pages for deprecated functions are available -at `help("-deprecated")`. - -## Usage - -``` r -abundance_palette( - n, - season = c("weekly", "breeding", "nonbreeding", "migration", "prebreeding_migration", - "postbreeding_migration", "year_round") -) -``` - -## `abundance_palette` - -For `abundance_palette`, use -[`ebirdst_palettes`](https://ebird.github.io/ebirdst/reference/ebirdst_palettes.md) diff --git a/docs/reference/ebirdst_download.html b/docs/reference/ebirdst_download.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/ebirdst_download.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/ebirdst_extent.html b/docs/reference/ebirdst_extent.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/ebirdst_extent.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/ebirdst_habitat.html b/docs/reference/ebirdst_habitat.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/ebirdst_habitat.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/ebirdst_ppms.html b/docs/reference/ebirdst_ppms.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/ebirdst_ppms.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/ebirdst_ppms_ts.html b/docs/reference/ebirdst_ppms_ts.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/ebirdst_ppms_ts.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/ebirdst_subset.html b/docs/reference/ebirdst_subset.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/ebirdst_subset.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/load_pds.html b/docs/reference/load_pds.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/load_pds.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/load_pis.html b/docs/reference/load_pis.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/load_pis.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/load_predictions.html b/docs/reference/load_predictions.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/load_predictions.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/load_stixels.html b/docs/reference/load_stixels.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/load_stixels.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/parse_raster_dates.html b/docs/reference/parse_raster_dates.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/parse_raster_dates.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/plot_pds.html b/docs/reference/plot_pds.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/plot_pds.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/plot_pis.html b/docs/reference/plot_pis.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/plot_pis.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/project_extent.html b/docs/reference/project_extent.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/project_extent.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/stixelize.html b/docs/reference/stixelize.html deleted file mode 100644 index 51ee264..0000000 --- a/docs/reference/stixelize.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/search.json b/docs/search.json index 24a5773..d2740b5 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":null,"dir":"","previous_headings":"","what":"CLAUDE.md","title":"CLAUDE.md","text":"file provides guidance Claude Code (claude.ai/code) working code repository.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"ebirdst--project-instructions-for-claude","dir":"","previous_headings":"","what":"ebirdst — project instructions for Claude","title":"CLAUDE.md","text":"file local-(gitignored) layers top global R style guide ~/.claude/CLAUDE.md. Follow ; file adds project-specific workflow requirements.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"CLAUDE.md","text":"ebirdst R package (CRAN + GitHub) downloading analyzing eBird Status Trends Data Products Cornell Lab Ornithology. fit models — client accessing pre-computed data products (rasters, tabular estimates, range polygons) toolkit loading, subsetting, visualizing, post-processing . two distinct product families separate version years (see ebirdst_version()): Status (weekly relative abundance, occurrence, count, PIs, PPMs, ranges) Trends (per-year population change, subset species/seasons).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"commands","dir":"","previous_headings":"","what":"Commands","title":"CLAUDE.md","text":"Prefer devtools::load_all() iterating (library(ebirdst)). Run one test file: devtools::test_file(\"tests/testthat/test-loading.R\") Run full suite: devtools::test() Re-document roxygen edits: devtools::document() Full package check: devtools::check() Format / lint (scoped R/ config): air format R/ jarl check R/ (autofix: jarl check --fix R/) Full release checklist (vignettes, pkgdown, win-builder): see makefile.R — release time , routine changes. Tests vignettes require \"yebsap-example\" dataset; tests/testthat/ setup.R downloads temp EBIRDST_DATA_DIR whole suite.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"architecture","dir":"","previous_headings":"","what":"Architecture","title":"CLAUDE.md","text":"package organized pipeline stage rather product. Key files R/ fit together: access-key.R — stores/retrieves Status & Trends access key via rappdirs config (set_ebirdst_access_key()); \"*-example\" datasets bypass key requirement. download.R — entry point (ebirdst_download_status(), ebirdst_download_trends(), ebirdst_download_data_coverage()). Downloads laid disk ///.... fixed layout load-bearing: every load_*() function reconstructs paths , renaming/moving downloaded files breaks loading. download_* flags plus pattern regex control files fetched; files mandatory always downloaded. load.R (largest file) — read layer. load_raster() returns terra SpatRaster stacks (52 weekly layers, resolutions like \"27km\"/\"3km\"); loaders return tabular data (load_pis, load_pds, load_ppm, load_regional_stats, load_config) sf objects (load_ranges). load_config() / load_fac_map_parameters() read per-species JSON drives plotting (custom projection, legend bins/labels). sample.R — spatiotemporal subsampling point data (grid_sample(), grid_sample_stratified(), assign_to_grid()) used reduce spatial bias analysis; tied specific data product. trends.R — post-processing Trends tabular data rasters/vectors (rasterize_trends(), vectorize_trends()) unit conversions. manage.R — local data inventory cleanup (ebirdst_data_inventory() print.ebirdst_inventory S3 method, ebirdst_delete()). ebirdst-palettes.R — Status-specific color palettes maps. utils.R — internal validators (is_flag/is_integer/is_count), get_species() (resolves common/scientific name code species code), date_to_st_week(). data.R — documents three bundled datasets data/: ebirdst_runs (authoritative species list, seasons, quality ratings, trends availability), ebirdst_predictors, ebirdst_predictor_descriptions. ebirdst-deprecated.R / ebirdst-defunct.R — version-migration surface; API changes land rather silently breaking callers. zzz.R — .onAttach prints active Status/Trends version years citations. Species referenced throughout six-letter eBird species code (e.g. \"woothr\"), user-facing functions accept common scientific names resolve via get_species() ebirdst_runs.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"formatting-and-linting--always-run-these","dir":"","previous_headings":"","what":"Formatting and linting — always run these","title":"CLAUDE.md","text":"writing editing file R/, run air format R/. repo’s air.toml scopes formatting R/ (data-raw/, examples/, tests/, makefile.R intentionally excluded), air format . also safe run repo root. writing editing file R/, run jarl check R/ (jarl check . — jarl.toml restricts R/ regardless). Fix obvious/auto-fixable issues jarl check --fix R/. warnings require judgment (e.g. internal_function ::: call public alternative), use judgment rather blindly forcing fix. every change, just explicitly asked format lint. Never run air/jarl tests/, data-raw/, examples/, makefile.R — intentionally scope per air.toml / jarl.toml.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"tests","dir":"","previous_headings":"","what":"Tests","title":"CLAUDE.md","text":"Every new exported internal function needs accompanying test tests/testthat/test-{name}.R (see global CLAUDE.md naming structure conventions). Don’t skip change feels small. modifying existing function’s behavior, update extend existing tests rather leaving stale. Run affected test file(s) devtools::test_file() running full suite; run devtools::test() considering change done. Use \"yebsap-example\" example dataset integration tests — ’s already downloaded tests/testthat/setup.R. Don’t add tests require downloading real species data.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"CLAUDE.md","text":"changing roxygen2 comment, re-run devtools::document() (regenerates NAMESPACE man/*.Rd). Never hand-edit NAMESPACE files man/. function’s @export tag missing misplaced, ’s real bug (silently breaks public API) — style nitpick.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"package-development-workflow","dir":"","previous_headings":"","what":"Package development workflow","title":"CLAUDE.md","text":"Bump version DESCRIPTION add bullet NEWS.md user-facing change (new function, changed argument, bug fix affecting output). Prefer devtools::load_all() library(ebirdst)/install.packages() iterating locally. considering larger changes complete, run devtools::check() resolve new NOTEs/WARNINGs/ERRORs introduces (see makefile.R fuller release checklist — vignettes, pkgdown site, win-builder checks — needed release time, routine changes).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"git-and-github","dir":"","previous_headings":"","what":"Git and GitHub","title":"CLAUDE.md","text":"repo typically contributed via fork + upstream remote (see CONTRIBUTING.md): changes land branch, PR ebird/ebirdst. permission run git gh (including gh pr create) directly. Still follow general git safety protocol: create new commits rather amending, never force-push main, never skip hooks unless explicitly asked, confirm anything destructive (reset --hard, force-push, branch deletion) even though command doesn’t require prompt.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"interest fostering open welcoming environment, contributors maintainers pledge making participation project community harassment-free experience everyone, regardless age, body size, disability, ethnicity, gender identity expression, level experience, nationality, personal appearance, race, religion, sexual identity orientation.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes creating positive environment include: Using welcoming inclusive language respectful differing viewpoints experiences Gracefully accepting constructive criticism Focusing best community Showing empathy towards community members Examples unacceptable behavior participants include: use sexualized language imagery unwelcome sexual attention advances Trolling, insulting/derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical electronic address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-responsibilities","dir":"","previous_headings":"","what":"Our Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Project maintainers responsible clarifying standards acceptable behavior expected take appropriate fair corrective action response instances unacceptable behavior. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, ban temporarily permanently contributor behaviors deem inappropriate, threatening, offensive, harmful.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within project spaces public spaces individual representing project community. Examples representing project community include using official project e-mail address, posting via official social media account, acting appointed representative online offline event. Representation project may defined clarified project maintainers.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported contacting project team mta45@cornell.edu. project team review investigate complaints, respond way deems appropriate circumstances. project team obligated maintain confidentiality regard reporter incident. details specific enforcement policies may posted separately. Project maintainers follow enforce Code Conduct good faith may face temporary permanent repercussions determined members project’s leadership.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 1.4, available http://contributor-covenant.org/version/1/4","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"please-contribute","dir":"","previous_headings":"","what":"Please contribute!","title":"CONTRIBUTING","text":"love collaboration.","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"bugs","dir":"","previous_headings":"","what":"Bugs?","title":"CONTRIBUTING","text":"Submit issue Issues page ","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"code-contributions","dir":"","previous_headings":"","what":"Code contributions","title":"CONTRIBUTING","text":"Fork repo Github account Clone version account machine account, e.g,. git clone https://github.com//ebirdst.git Make sure track progress upstream (.e., version ebirdst ebird/ebirdst) git remote add upstream https://github.com/ebird/ebirdst.git. making changes make sure pull changes upstream either git fetch upstream merge later git pull upstream fetch merge one step Make changes (bonus points making changes new branch) alter package functionality (e.g., code , just documentation) please write tests cove new functionality. Push account Submit pull request home base ebird/ebirdst","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc.  Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"api-endpoints","dir":"Articles","previous_headings":"","what":"API Endpoints","title":"eBird Status and Trends Data Products API","text":"eBird Status Trends Data Products API two endpoints: one list available files given species one download single file. list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return: download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"] https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"list","dir":"Articles","previous_headings":"","what":"List","title":"eBird Status and Trends Data Products API","text":"list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"]"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"download","dir":"Articles","previous_headings":"","what":"Download","title":"eBird Status and Trends Data Products API","text":"download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map","dir":"Articles","previous_headings":"","what":"Mapping relative abundance","title":"eBird Status Data Products Applications","text":"section, ’ll demonstrate make simple map relative abundance within given region. example, ’ll make map breeding season relative abundance Western Meadowlark Montana. maps produced using approach suitable many applications; however, high-quality publication-ready maps, may worthwhile using traditional GIS environment QGIS ArcGIS rather R. start loading breeding season relative abundance raster Western Meadowlark. data downloaded automatically first time load , ’s need download explicitly first. simplest way map seasonal relative abundance data use built plot() function terra package. Clearly simple approach doesn’t work well! wide variety issues ’ll tackle one time. raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf(). raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows. relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website. Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# load seasonal mean relative abundance at 3km resolution abd_seasonal <- load_raster( species = \"wesmea\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"3km\" ) # extract just the breeding season relative abundance abd_breeding <- abd_seasonal[[\"breeding\"]] plot(abd_breeding, axes = FALSE) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE) # find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\") # quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-extent","dir":"Articles","previous_headings":"","what":"Cropping and masking","title":"eBird Status Data Products Applications","text":"raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf().","code":"# region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-projection","dir":"Articles","previous_headings":"","what":"Projection","title":"eBird Status Data Products Applications","text":"raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows.","code":"# find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-bins","dir":"Articles","previous_headings":"","what":"Abundance bins","title":"eBird Status Data Products Applications","text":"relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website.","code":"# quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-basemap","dir":"Articles","previous_headings":"","what":"Basemap","title":"eBird Status Data Products Applications","text":"Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron","dir":"Articles","previous_headings":"","what":"Migration chronologies","title":"eBird Status Data Products Applications","text":"Goal: generate migration chronologies set species within region investigate use region changes throughout year different species. information can used inform optimal time year make temporally specific conservation investments. example type conservation intervention, see California Bird Returns project. application ’ll use weekly estimates chart change relative abundance throughout year given region. migration chronologies can useful identifying given geography receives highest intensity use species group species. ’ll start generating chronology confidence intervals single species, demonstrate produce multi-species chronologies. examples, ’ll consider grassland birds Montana. start ’ll load polygon boundary Montana. single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species. Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" ) grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-single","dir":"Articles","previous_headings":"","what":"Single species with uncertainty","title":"eBird Status Data Products Applications","text":"single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species.","code":"# load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-multi","dir":"Articles","previous_headings":"","what":"Multi-species","title":"eBird Status Data Products Applications","text":"Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats","dir":"Articles","previous_headings":"","what":"Regional proportion of population","title":"eBird Status Data Products Applications","text":"Goal: identify proportion species’ population falling within given region. information can used highlight stewardship responsibility species, example, large proportion species’ breeding population falls within region, region said high stewardship responsibility species. eBird Status Trends website provides regional summary statistics country state/province level species. example, can use regional stats see 36% non-breeding population Golden Eagle falls within United States. website also allows users draw customs polygons get summary statistics within polygons. However, cases may want estimate regional summary statistics way isn’t supported website. ’ll provide examples calculating proportion population within region. ’ll use Golden Eagle examples; , required data downloaded automatically first time ’re loaded. example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions. broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population. eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January. one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948 # seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229 # weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694 # non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-seasonal","dir":"Articles","previous_headings":"","what":"Proportion of seasonal population","title":"eBird Status Data Products Applications","text":"example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-relative","dir":"Articles","previous_headings":"","what":"Proportion of North American population","title":"eBird Status Data Products Applications","text":"broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population.","code":"# seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-custom","dir":"Articles","previous_headings":"","what":"Regional stats for weeks and custom time periods","title":"eBird Status Data Products Applications","text":"eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January.","code":"# weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-coastal","dir":"Articles","previous_headings":"","what":"Coastal species","title":"eBird Status Data Products Applications","text":"one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi","dir":"Articles","previous_headings":"","what":"Areas of importance","title":"eBird Status Data Products Applications","text":"Goal: identify areas highest importance set species within region. information can used identify areas prioritize protection conservation interventions. eBird Status Data Products can used identify areas importance species group species, can help prioritize areas protection conservation interventions. context, “areas importance” refer areas within landscape higher concentration given species. application, ’ll use set grassland species Montana breeding season used migration chronology example. simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell. richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"# species list grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") |> st_transform(st_crs(abd_breeding)) |> vect() range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE) prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-richness","dir":"Articles","previous_headings":"","what":"Richness","title":"eBird Status Data Products Applications","text":"simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell.","code":"range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-importance","dir":"Articles","previous_headings":"","what":"Importance","title":"eBird Status Data Products Applications","text":"richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"ppms","dir":"Articles","previous_headings":"","what":"Assessing model performance","title":"eBird Status Data Products Applications","text":"Goal: use spatial predictive performance metrics (PPMs) assess model performance varies across range species. eBird Status Trends species assigned quality scores (0-3) season describing quality model predictions across full range species. example, let’s look breeding season quality Horned Lark. score (2) corresponds “medium quality”, indicating extrapolation omission breeding season predictions. However, Horned Lark broadly distributed species, occurring throughout holarctic realm. Data users typically interested model predictions within particular region, quality score gives indication extrapolation omission occurring, occurs somewhere within range. Someone working predictions Mongolian portion range may dealing different prediction quality someone working predictions part range Western United States. model quality scores quite coarse, spatial predictive performance metrics (PPMs) available species provide much finer scale information model quality. migratory species like Horned Lark, data products provide suite performance metrics weekly 27 km resolution. Let’s load proportion Bernoulli deviance explained metric, typically one useful assessing model quality. PPM downloaded automatically first time ’s loaded. (’d rather download PPMs species front, use ebirdst_download_status(download_ppms = TRUE).) data form 27 km raster 52 layers, one week year. Let’s average PPMs across weeks breeding season, subset just portion range within United States Canada, make map. Negative proportions deviance explained (red map) indicate occurrence model performing worse null model extra caution used using predictions areas.","code":"horlar_review <- filter(ebirdst_runs, species_code == \"horlar\") |> select(breeding_quality, breeding_start, breeding_end) print(horlar_review) #> # A tibble: 1 × 3 #> breeding_quality breeding_start breeding_end #> #> 1 2 2023-06-07 2023-08-09 # load the ppm; it's downloaded automatically if not already present bernoulli_dev <- load_ppm(\"horlar\", ppm = \"occ_bernoulli_dev\") print(bernoulli_dev) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : horlar_ppm_occ-bernoulli-dev_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : -1.20164, -0.340517, -0.220324, -0.184706, -0.167553, -0.217626, ... #> max values : 0.516208, 0.516208, 0.500421, 0.419996, 0.419996, 0.360411, ... # subset to weeks in breeding season and average breeding_dates <- c(horlar_review$breeding_start, horlar_review$breeding_end) |> format(\"%m-%d\") in_breeding <- names(bernoulli_dev) >= breeding_dates[1] & names(bernoulli_dev) <= breeding_dates[2] bernoulli_dev_breeding <- mean(bernoulli_dev[[in_breeding]], na.rm = TRUE) # mask to just canada and the united states us_ca <- ne_countries(country = c(\"United States of America\", \"Canada\")) |> st_transform(st_crs(bernoulli_dev_breeding)) bernoulli_dev_breeding_us_ca <- bernoulli_dev_breeding |> crop(us_ca) |> mask(us_ca) |> trim() # make a map ppm_cols <- rev(scico(100, palette = \"vik\")) max_val <- global(abs(bernoulli_dev_breeding_us_ca), fun = max, na.rm = TRUE) |> as.numeric() plot(bernoulli_dev_breeding_us_ca, range = c(-max_val, max_val), col = ppm_cols, axes = FALSE, box = TRUE ) plot(st_geometry(us_ca), add = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog","dir":"Articles","previous_headings":"","what":"2023 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2023 (available May 2025) Citation: Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 new eBird Trends generated released version. existing versions remain website; please see previous changelog. CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"new eBird Trends generated released version. existing versions remain website; please see previous changelog.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"changes.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive Performance Metrics (PPMs)","title":"eBird Status and Trends Data Products Changelog","text":"Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table .","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-1","dir":"Articles","previous_headings":"","what":"2022 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2022 (available November 2023) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed. ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status-1","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-1","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-1","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates-1","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-1","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-1","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-1","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction-1","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-1","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-1","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends-1","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"covariates","dir":"Articles","previous_headings":"","what":"Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-2","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products-1","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional trends CIs.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-2","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-2","dir":"Articles","previous_headings":"","what":"2021 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2021 (available November 2022) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, . Rodewald, C. Wood, . Davies, . Spencer. 2022. eBird Status Trends, Data Version: 2021; Released: 2022. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2021 CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1. ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-2","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-2","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-2","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-2","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"general","dir":"Articles","previous_headings":"","what":"General","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-2","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"fit-and-predict","dir":"Articles","previous_headings":"","what":"Fit and Predict","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"residents","dir":"Articles","previous_headings":"","what":"Residents","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-3","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-3","dir":"Articles","previous_headings":"","what":"2020 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2020 (available Fall 2021) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, L. Jaromczyk, C. Wood, . Davies, M. Iliff, L. Seitz. 2021. eBird Status Trends, Data Version: 2020; Released: 2021. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2020 CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-3","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-3","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-3","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-3","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-1","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-1","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"resident-methodology","dir":"Articles","previous_headings":"","what":"Resident Methodology","title":"eBird Status and Trends Data Products Changelog","text":"stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-4","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-4","dir":"Articles","previous_headings":"","what":"2019 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2019 (available Fall 2020) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, C. Wood, . Davies, M. Iliff, L. Seitz. 2020. eBird Status Trends, Data Version: 2019; Released: 2020. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2019 CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-4","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-4","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-4","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-4","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-2","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-2","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"seasonal-products","dir":"Articles","previous_headings":"","what":"Seasonal Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-5","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: now 184 species modeled fully global extent. overall species total now 807.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review-1","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Introduction to eBird Status Data Products","text":"study conservation natural world relies detailed information distributions, abundances, population trends species time. many taxa, information challenging obtain relevant geographic scales. goal eBird Status Trends project use data eBird, global participatory science bird monitoring program administered Cornell Lab Ornithology, generate reliable, standardized source biodiversity information world’s bird populations. translate eBird observations robust data products, use machine learning fill spatiotemporal gaps, using local land cover descriptions derived remote sensing data, controlling biases inherent species observations collected community scientists. See Fink et al. (2019) information analysis used generate data. vignette gives overview eBird Status Data Products, estimate full annual cycle distributions, relative abundances, habitat associations 2,980 species year 2023. species, distribution abundance estimates available 52 weeks year across regular 3 km 3 km square grid cells covering globe. Variation detectability associated search effort controlled standardizing estimates expected occurrence rate count species 1 hour, 2 km checklist expert eBird observer optimal time day optimal weather conditions detecting species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"access","dir":"Articles","previous_headings":"","what":"Data access","title":"Introduction to eBird Status Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Filling form generates key used R package. terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided eBird Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided . Throughout vignette, ’ll use simplified example dataset consisting estimates Yellow-bellied Sapsucker Michigan. dataset designed small faster download , unlike data species, accessible without key. data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website. new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"library(dplyr) library(sf) library(terra) library(ebirdst) # download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE) ebirdst_data_inventory() #> eBird Status and Trends data: 27 species, 27 packages (1.4 GB) #> #> 2023 Status Data Products (1.4 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 1 files, 50.8 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"downloading-data","dir":"Articles","previous_headings":"","what":"Downloading data","title":"Introduction to eBird Status Data Products","text":"data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"# download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"managing-downloaded-data","dir":"Articles","previous_headings":"","what":"Managing downloaded data","title":"Introduction to eBird Status Data Products","text":"new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"ebirdst_data_inventory() #> eBird Status and Trends data: 27 species, 27 packages (1.4 GB) #> #> 2023 Status Data Products (1.4 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 1 files, 50.8 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"species","dir":"Articles","previous_headings":"","what":"Species list","title":"Introduction to eBird Status Data Products","text":"data frame ebirdst_runs lists species eBird Status Data Products available download. ’re working RStudio, can use View() interactively explore data frame. species go process review expert species prior released. ebirdst_runs data frame contains information review process. migrants, reviewers assess model estimates four seasons: breeding, non-breeding, pre-breeding migration, post-breeding migration. Resident (.e., non-migratory) species identified TRUE is_resident column ebirdst_runs, species assessed across whole year rather seasonally. ebirdst_runs contains two important pieces information season: quality rating seasonal dates. seasonal dates define weeks fall within season. Breeding non-breeding season dates defined species weeks seasons species’ population move. reason, seasons also described stationary periods. Migration periods defined periods movement stationary non-breeding breeding seasons. Note many species migratory periods include movement breeding grounds non-breeding grounds, also post-breeding dispersal, molt migration, movements. Reviewers also examine model estimates season assess amount extrapolation omission present model, assign associated quality rating ranging 0 (lowest quality) 3 (highest quality). Extrapolation refers cases model predicts occurrence species known absent, omission refers model failing predict occurrence species known present. rating 0 implies season failed review model results used period. Ratings 1-3 correspond gradient less extrapolation /omission, often use traffic light analogy referring : Red light (1): low quality, extensive extrapolation /omission noise, least regions estimates accurate; can used caution certain regions. Yellow light (2): medium quality, extrapolation /omission; use caution. Green light (3): high quality, little extrapolation /omission; seasons can safely used. Let’s look results review example dataset. , can see Yellow-bellied Sapsucker modeled migrant four seasons received quality 3, highest rating. Note variety trends-specific columns end data frame ’ll ignore now; columns covered trends vignette","code":"glimpse(ebirdst_runs) #> Rows: 2,981 #> Columns: 30 #> $ species_code \"yebsap-example\", \"abetow\", \"absfin1\", … #> $ scientific_name \"Sphyrapicus varius\", \"Melozone aberti\"… #> $ common_name \"Yellow-bellied Sapsucker\", \"Abert's To… #> $ is_resident FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, F… #> $ breeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ breeding_start 2023-05-17, NA, NA, 2023-05-31, NA, NA… #> $ breeding_end 2023-08-16, NA, NA, 2023-08-02, NA, NA… #> $ nonbreeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ nonbreeding_start 2023-11-22, NA, NA, 2023-11-22, NA, NA… #> $ nonbreeding_end 2023-03-08, NA, NA, 2023-02-22, NA, NA… #> $ postbreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ postbreeding_migration_start 2023-08-23, NA, NA, 2023-08-09, NA, NA… #> $ postbreeding_migration_end 2023-11-15, NA, NA, 2023-11-15, NA, NA… #> $ prebreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ prebreeding_migration_start 2023-03-15, NA, NA, 2023-03-01, NA, NA… #> $ prebreeding_migration_end 2023-05-10, NA, NA, 2023-05-24, NA, NA… #> $ resident_quality NA, \"3\", \"3\", NA, \"3\", \"3\", NA, \"2\", \"3… #> $ resident_start NA, 2023-01-04, 2023-01-04, NA, 2023-0… #> $ resident_end NA, 2023-12-27, 2023-12-27, NA, 2023-1… #> $ status_version_year 2023, 2023, 2023, 2023, 2023, 2023, 202… #> $ has_trends TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, F… #> $ trends_season \"breeding\", \"resident\", NA, \"breeding\",… #> $ trends_region \"north_america\", \"north_america\", NA, \"… #> $ trends_start_year 2012, 2012, NA, 2012, 2011, NA, NA, NA,… #> $ trends_end_year 2022, 2022, NA, 2022, 2021, NA, NA, NA,… #> $ trends_start_date \"05-24\", \"01-25\", NA, \"05-24\", \"11-01\",… #> $ trends_end_date \"08-16\", \"05-10\", NA, \"08-02\", \"05-03\",… #> $ rsquared 0.8572896, 0.9231821, NA, 0.8570363, 0.… #> $ beta0 0.227000849, -0.013923012, NA, 0.689424… #> $ trends_version_year 2022, 2022, NA, 2022, 2022, NA, NA, NA,… ebirdst_runs |> filter(species_code == \"yebsap-example\") |> glimpse() #> Rows: 1 #> Columns: 30 #> $ species_code \"yebsap-example\" #> $ scientific_name \"Sphyrapicus varius\" #> $ common_name \"Yellow-bellied Sapsucker\" #> $ is_resident FALSE #> $ breeding_quality \"3\" #> $ breeding_start 2023-05-17 #> $ breeding_end 2023-08-16 #> $ nonbreeding_quality \"3\" #> $ nonbreeding_start 2023-11-22 #> $ nonbreeding_end 2023-03-08 #> $ postbreeding_migration_quality \"3\" #> $ postbreeding_migration_start 2023-08-23 #> $ postbreeding_migration_end 2023-11-15 #> $ prebreeding_migration_quality \"3\" #> $ prebreeding_migration_start 2023-03-15 #> $ prebreeding_migration_end 2023-05-10 #> $ resident_quality NA #> $ resident_start NA #> $ resident_end NA #> $ status_version_year 2023 #> $ has_trends TRUE #> $ trends_season \"breeding\" #> $ trends_region \"north_america\" #> $ trends_start_year 2012 #> $ trends_end_year 2022 #> $ trends_start_date \"05-24\" #> $ trends_end_date \"08-16\" #> $ rsquared 0.8572896 #> $ beta0 0.2270008 #> $ trends_version_year 2022"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"types","dir":"Articles","previous_headings":"","what":"Data types","title":"Introduction to eBird Status Data Products","text":"species, variety data products available, can categorized following broad types: Weekly raster estimates: weekly estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. core products products derived. Seasonal raster estimates: seasonal estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. derived corresponding weekly raster data summarizing across weeks falling within season based dates defined ebirdst_runs data frame. seasons passed expert review process included. Seasonal range boundaries: seasonal range boundary polygons GeoPackage format. Regional summary statistics: variety summary statistics countries states/provinces (e.g. proportion total population region) CSV format. Predictive performance metrics (PPMs): suite spatial predictive performance metrics regular 27 km 27 km grid GeoTIFF format. data products covered detail following sections, including details load data R. loading functions take species (given common name, scientific name, species code) first argument. requested data already downloaded, loading functions download automatically first use, calling ebirdst_download_status() advance optional. used non-default path argument ebirdst_download_status() also need provide path argument loading functions. core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis. seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species. Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example: Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value. regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names: subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" ) # seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\") regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985… # download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"weekly-raster-estimates","dir":"Articles","previous_headings":"","what":"Weekly raster estimates","title":"Introduction to eBird Status Data Products","text":"core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"seasonal-raster-estimates","dir":"Articles","previous_headings":"","what":"Seasonal raster estimates","title":"Introduction to eBird Status Data Products","text":"seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species.","code":"# seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" )"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"range-boundaries","dir":"Articles","previous_headings":"","what":"Range boundaries","title":"Introduction to eBird Status Data Products","text":"Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example:","code":"# seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\")"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-summary-statistics","dir":"Articles","previous_headings":"","what":"Regional summary statistics","title":"Introduction to eBird Status Data Products","text":"Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value.","code":"regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985…"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-statistics-for-all-species","dir":"Articles","previous_headings":"","what":"Regional statistics for all species","title":"Introduction to eBird Status Data Products","text":"regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names:","code":"# download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive performance metrics (PPMs)","title":"Introduction to eBird Status Data Products","text":"subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"coverage","dir":"Articles","previous_headings":"","what":"Data coverage","title":"Introduction to eBird Status Data Products","text":"addition species-specific data products discussed , ebirdst provides access two species-agnostic data products data coverage workflow. data products GeoTIFF format provide weekly estimates regular 3 km 3 km grid Site selection probability: modeled probability (0-1) grid cell certain habitat configuration received eBird checklist within region season. Spatial coverage: fraction (0-1) grid cells within region season checklists given week. data products identify areas coverage eBird data relatively high low, can used prioritize areas increased data collection. example, load map site selection probability week May 10, use load_data_coverage(), download requested weeks automatically haven’t already downloaded. prefer download data coverage products advance, use ebirdst_download_data_coverage().","code":"site_sel <- load_data_coverage(\"selection-probability\", weeks = \"05-10\") plot(site_sel, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Introduction to eBird Status Data Products","text":"Fink, D., T. Auer, . Johnston, V. Ruiz‐Gutierrez, W.M. Hochachka, S. Kelling. 2019. Modeling avian full annual cycle distribution population trends citizen science data. Ecological Applications, 00(00):e02056. doi: 10.1002/eap.2056","code":""},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"download","dir":"Articles","previous_headings":"","what":"Downloading data","title":"eBird Trends Data Products","text":"Trends data access granted process eBird Status Data Products. haven’t already requested access key, consult relevant section Introduction eBird Status Data Products vignette. Status Data Products, trends data downloaded automatically first time load , cases don’t need download explicitly. ’d rather download data one species advance, use ebirdst_download_trends(), first argument vector common names, scientific names, species codes. Trends data downloaded centralized directory file management access performed via ebirdst. example, optionally pre-download breeding season trends data Sage Thrasher :","code":"ebirdst_download_trends(\"Sage Thrasher\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"load","dir":"Articles","previous_headings":"","what":"Loading data into R","title":"eBird Trends Data Products","text":"Trends data set species can loaded R using function load_trends(), downloads data automatically aren’t already present. example, can load Sage Thrasher trends estimates : row corresponds trend estimate 27 km 27 km grid cell, identified srd_id column cell center given longitude latitude coordinates. Columns beginning abd_ppy provide estimates percent per year trend relative abundance 80% confidence intervals, beginning abd_trend provide estimates cumulative trend relative abundance 80% confidence intervals time period. abd column gives relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). start_year/end_year start_date/end_date columns provide redundant information available ebirdst_runs. Specifically Sage Thrasher : tells us trend estimates breeding season (May 17 July 12) period 2012-2022.","code":"trends_sagthr <- load_trends(\"Sage Thrasher\") trends_runs |> filter(common_name == \"Sage Thrasher\") |> select( trends_start_year, trends_end_year, trends_start_date, trends_end_date ) #> # A tibble: 1 × 4 #> trends_start_year trends_end_year trends_start_date trends_end_date #> #> 1 2012 2022 05-17 07-12"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial","dir":"Articles","previous_headings":"","what":"Conversion to spatial formats","title":"eBird Trends Data Products","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km 27 km equal area grid. grid cell, coordinates (longitude latitude) provided center grid cell. many applications, explicitly spatial format useful coordinates can use convert tabular format either vector raster format. tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species. tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" ) trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) ) # rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-points","dir":"Articles","previous_headings":"","what":"Vector (points)","title":"eBird Trends Data Products","text":"tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS ","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-circles","dir":"Articles","previous_headings":"","what":"Vector (abundance-scaled circles)","title":"eBird Trends Data Products","text":"produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species.","code":"trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-raster","dir":"Articles","previous_headings":"","what":"Raster","title":"eBird Trends Data Products","text":"tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"# rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"uncertainty","dir":"Articles","previous_headings":"","what":"Uncertainty","title":"eBird Trends Data Products","text":"model used estimate trends produces ensemble 100 estimates location, based random subsample eBird data. ensemble estimates used quantify uncertainty trends estimates. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. wishing access estimates individual folds making ensemble can use fold_estimates = TRUE loading data. fold-level estimates can used quantify uncertainty, example, calculating trend given region. example, let’s load fold-level estimates Sage Thrasher: data frame much concise, giving estimates mid-point relative abundance percent per year trend relative abundance 100 folds grid cell. eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California). cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"trends_sagthr_folds <- load_trends(\"sagthr\", fold_estimates = TRUE) print(trends_sagthr_folds) #> # A tibble: 246,200 × 8 #> species_code season fold srd_id latitude longitude abd abd_ppy #> #> 1 sagthr breeding 1 254264 49.4 -120. 0.000527 -3.11 #> 2 sagthr breeding 1 255764 49.1 -120. 0.0147 -2.97 #> 3 sagthr breeding 1 255765 49.1 -119. 0.000214 -2.25 #> 4 sagthr breeding 1 257264 48.9 -120. 0.00174 -4.53 #> 5 sagthr breeding 1 257265 48.9 -120. 0.0132 -3.86 #> 6 sagthr breeding 1 257266 48.9 -119. 0.00118 -4.04 #> 7 sagthr breeding 1 258765 48.6 -120. 0.00335 -3.08 #> 8 sagthr breeding 1 258766 48.6 -119. 0.0191 -0.459 #> 9 sagthr breeding 1 258767 48.6 -119. 0.00511 -6.40 #> 10 sagthr breeding 1 260264 48.4 -120. 0.000104 -2.71 #> # ℹ 246,190 more rows # boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\") sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-regional","dir":"Articles","previous_headings":"","what":"Regional trends","title":"eBird Trends Data Products","text":"eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California).","code":"# boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-multi","dir":"Articles","previous_headings":"","what":"Multi-species trends","title":"eBird Trends Data Products","text":"cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Matthew Strimas-Mackey. Author, maintainer. Shawn Ligocki. Author. Tom Auer. Author. Daniel Fink. Author. Cornell Lab Ornithology. Copyright holder.","code":""},{"path":"https://ebird.github.io/ebirdst/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Strimas-Mackey M, Ligocki S, Auer T, Fink D (2026). ebirdst: Access Analyze eBird Status Trends Data Products. R package version 4.2023.1, https://ebird.github.io/ebirdst/.","code":"@Manual{, title = {ebirdst: Access and Analyze eBird Status and Trends Data Products}, author = {Matthew Strimas-Mackey and Shawn Ligocki and Tom Auer and Daniel Fink}, year = {2026}, note = {R package version 4.2023.1}, url = {https://ebird.github.io/ebirdst/}, }"},{"path":[]},{"path":"https://ebird.github.io/ebirdst/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Trends project Cornell Lab Ornithology uses machine-learning models estimate distributions, relative abundances, population trends high spatial temporal resolution across full annual cycle 2,980 bird species globally. models learn relationships bird observations collected eBird suite remotely sensed habitat variables, accounting noise bias inherent community science datasets, including variation observer behavior effort. Interactive maps visualizations model estimates can explored online, Status Trends Data Products provide access data behind maps visualizations. ebirdst R package provides set tools downloading data products, loading R, using visualization analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Access and Analyze eBird Status and Trends Data Products","text":"Install ebirdst GitHub : version ebirdst designed work 2023 version Status Data Products 2022 version Trends Data Products. Users strongly discouraged comparing Status Trends results years due methodological differences versions. accessed used previous versions /may need access previous versions reasons related reproducibility, please contact ebird@cornell.edu request considered.","code":"if (!requireNamespace(\"remotes\", quietly = TRUE)) { install.packages(\"remotes\") } remotes::install_github(\"ebird/ebirdst\")"},{"path":"https://ebird.github.io/ebirdst/index.html","id":"webinars","dir":"","previous_headings":"","what":"Webinars","title":"Access and Analyze eBird Status and Trends Data Products","text":"series eBird Status Trends webinars presented collaboration Birds World available YouTube. webinars cover much material vignettes available ebirdst R package website, visual interactive format. webinars follows Estimating Abundance Trends World’s Birds using eBird data: introduction methodology used generate eBird Status Trends Data Products data products used conservation research. Part : introduction range data products available well suite tools training materials available working data. webinar also covers work spatial data products QGIS. Part II: applications eBird Status Data Products. Part III: applications eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"data-access","dir":"","previous_headings":"","what":"Data access","title":"Access and Analyze eBird Status and Trends Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Access form generates key used R package provided immediately (long commercial use requested). terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided .","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"access-outside-of-r","dir":"","previous_headings":"Data access","what":"Access outside of R","title":"Access and Analyze eBird Status and Trends Data Products","text":"interested accessing data outside R, two alternative options: widely used data products available direct download Status Trends website. Spatial data accessible widely adopted GeoTIFF GeoPackage formats, can opened QGIS, ArcGIS, GIS software. API programmatic access outside R. information eBird Status Trends Data Products API, consult associated vignette.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Data Products eBird Trends Data Products come different versions require different citations. Please cite eBird Status Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 Download BibTeX version. Please cite eBird Trends Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 Download BibTeX version.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"vignettes","dir":"","previous_headings":"","what":"Vignettes","title":"Access and Analyze eBird Status and Trends Data Products","text":"full package documentation, including series vignettes covering full spectrum introductory advanced usage, please see package website. available vignettes : Introduction eBird Status Data Products: covers data access, available data products, structure format data files. eBird Status Data Products Applications: demonstrates work raster data products use variety common applications. eBird Trends Data Products: covers downloading working eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"quick-start","dir":"","previous_headings":"","what":"Quick Start","title":"Access and Analyze eBird Status and Trends Data Products","text":"quick start guide shows download data plot relative abundance values similar plotted eBird Status Trends weekly abundance animations. guide, throughout package documentation, simplified example dataset used consisting Yellow-bellied Sapsucker Michigan. full list species available download, look data frame ebirst_runs, included package. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using R package. Downloaded data specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"library(fields) library(rnaturalearth) library(sf) library(terra) library(ebirdst) # load relative abundance raster stack for yellow-bellied sapsucker in michigan # consisting of 52 layers, one for each week # this will download the data if it has not already been downloaded abd <- load_raster(\"yebsap-example\", resolution = \"27km\") # load species specific mapping parameters pars <- load_fac_map_parameters(\"yebsap-example\") # custom coordinate reference system crs <- st_crs(pars$custom_projection) # legend breaks breaks <- pars$weekly_bins # legend labels for top, middle, and bottom labels <- pars$weekly_labels # the date that each raster layer corresponds to is stored within the labels weeks <- as.Date(names(abd)) print(weeks) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # select a week in the middle of the year abd <- abd[[26]] # project to species specific coordinates # the nearest neighbor method preserves cell values across projections abd_prj <- project(trim(abd), crs$wkt, method = \"near\") # get reference data from the rnaturalearth package # the example data currently shows only the US state of Michigan wh_states <- ne_states(country = c(\"United States of America\", \"Canada\"), returnclass = \"sf\") |> st_transform(crs = crs) |> st_geometry() # start plotting par(mfrow = c(1, 1), mar = c(0, 0, 0, 0)) # use raster bounding box to set the spatial extent for the plot bb <- st_as_sfc(st_bbox(trim(abd_prj))) plot(bb, col = \"white\", border = \"white\") # add background reference data plot(wh_states, col = \"#cfcfcf\", border = NA, add = TRUE) # plot zeroes as light gray plot(abd_prj, col = \"#e6e6e6\", maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # define color palette pal <- ebirdst_palettes(length(breaks) - 1, type = \"weekly\") # plot abundance plot(abd_prj, col = pal, breaks = breaks, maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # state boundaries plot(wh_states, add = TRUE, col = NA, border = \"white\", lwd = 1.5) # legend label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot(zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list(at = c(0, 0.5, 1), labels = round(labels, 2), cex.axis = 0.9, lwd.ticks = 0))"},{"path":"https://ebird.github.io/ebirdst/reference/abundance_palette-deprecated.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends color palettes for mapping — abundance_palette-deprecated","title":"eBird Status and Trends color palettes for mapping — abundance_palette-deprecated","text":"deprecated function replaced ebirdst_palettes. functions generate color palettes used eBird Status Trends relative abundance maps.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/abundance_palette-deprecated.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends color palettes for mapping — abundance_palette-deprecated","text":"","code":"abundance_palette(n, season = c(\"weekly\", \"breeding\", \"nonbreeding\", \"migration\", \"prebreeding_migration\", \"postbreeding_migration\", \"year_round\"))"},{"path":"https://ebird.github.io/ebirdst/reference/abundance_palette-deprecated.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"eBird Status and Trends color palettes for mapping — abundance_palette-deprecated","text":"n integer; number colors palette. season character; season generate colors \"weekly\" get color palette used weekly abundance animations.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/abundance_palette-deprecated.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends color palettes for mapping — abundance_palette-deprecated","text":"character vector hex color codes.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign points to a spacetime grid — assign_to_grid","title":"Assign points to a spacetime grid — assign_to_grid","text":"Given set points space (optionally) time, define regular grid given dimensions, return grid cell index point.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"assign_to_grid( points, coords = NULL, is_lonlat = FALSE, res, jitter_grid = TRUE, grid_definition = NULL )"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign points to a spacetime grid — assign_to_grid","text":"points data frame; points spatial coordinates x y, optional time coordinate t. coords character; names spatial temporal coordinates input dataframe. provide names want overwrite default coordinate names: c(\"x\", \"y\", \"t\") c(\"longitude\", \"latitude\", \"t\") is_lonlat = TRUE. is_lonlat logical; points unprojected, lon-lat coordinates. case, input data frame columns \"longitude\" \"latitude\" points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution grid x, y, t dimensions, respectively. 2 dimensions provided, space grid generated. units res coordinates input data unless is_lonlat true case x y resolution provided meters. jitter_grid logical; whether jitter location origin grid introduce randomness. grid_definition list; object defining grid via origin resolution components. assign multiple sets points exactly grid, assign_to_grid() returns data frame grid_definition attribute can passed subsequent calls assign_to_grid(). res jitter ignored grid_definition provided.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign points to a spacetime grid — assign_to_grid","text":"Data frame indices space-spacetime grid cells. data frame grid_definition attribute can used reconstruct grid.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"set.seed(1) # generate some example points points_xyt <- data.frame(x = runif(100), y = runif(100), t = rnorm(100)) # assign to grid cells <- assign_to_grid(points_xyt, res = c(0.1, 0.1, 0.5)) # assign a second set of points to the same grid assign_to_grid(points_xyt, grid_definition = attr(cells, \"grid_definition\")) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 4-7 4-7-4 #> 2 5-4 5-4-5 #> 3 7-3 7-3-3 #> 4 10-10 10-10-6 #> 5 3-7 3-7-4 #> 6 10-3 10-3-9 #> 7 10-2 10-2-7 #> 8 8-5 8-5-7 #> 9 7-10 7-10-6 #> 10 2-7 2-7-9 #> # ℹ 90 more rows # assign lon-lat points to a 10km space-only grid points_ll <- data.frame(longitude = runif(100, min = -180, max = 180), latitude = runif(100, min = -90, max = 90)) assign_to_grid(points_ll, res = c(10000, 10000), is_lonlat = TRUE) #> # A tibble: 100 × 1 #> cell_xy #> #> 1 2960-1224 #> 2 3184-781 #> 3 2110-1687 #> 4 1254-617 #> 5 2407-1571 #> 6 244-1415 #> 7 3172-924 #> 8 2894-1604 #> 9 1203-769 #> 10 2118-1 #> # ℹ 90 more rows # overwrite default coordinate names, 5km by 1 week grid points_names <- data.frame(lon = runif(100, min = -180, max = 180), lat = runif(100, min = -90, max = 90), day = sample.int(365, size = 100)) assign_to_grid(points_names, res = c(5000, 5000, 7), coords = c(\"lon\", \"lat\", \"day\"), is_lonlat = TRUE) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 5348-68 5348-68-49 #> 2 2294-1332 2294-1332-40 #> 3 2577-1839 2577-1839-16 #> 4 5159-3343 5159-3343-26 #> 5 867-2655 867-2655-5 #> 6 5944-2704 5944-2704-19 #> 7 2254-1551 2254-1551-41 #> 8 3453-166 3453-166-51 #> 9 3515-2926 3515-2926-9 #> 10 4736-1401 4736-1401-33 #> # ℹ 90 more rows"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate MCC and F1 score — calculate_mcc_f1","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"Given binary observed predicted response, estimate Matthews correlation coefficient (MCC) F1 score.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"calculate_mcc_f1(observed, predicted)"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"observed logical 0/1; observed binary response. predicted logical 0/1; predicted binary response. typically need generated applying threshold continuous predicted response.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"list two elements: mcc f1.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"obs <- c(rep(1L, 1000L), rep(0L, 10000L)) pred <- c(rbeta(300L, 12, 2), rbeta(700L, 3, 4), rbeta(10000L, 2, 3)) calculate_mcc_f1(obs > 0, pred > 0.5) #> $f1 #> [1] 0.2227891 #> #> $mcc #> [1] 0.125311 #>"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"Convert percent per year trend cumulative trend","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"convert_ppy_to_cumulative(x, n_years)"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"x numeric; percent per year trend 0-100 scale rather 0-1 scale. n_years integer; number years.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"numeric vector length x contains cumulative trend resulting n_years years compounding annual trend.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"ppy_trend <- runif(100, min = -100, 100) cumulative_trend <- convert_ppy_to_cumulative(ppy_trend, n_years = 5) cbind(ppy_trend, cumulative_trend) #> ppy_trend cumulative_trend #> [1,] 26.5237797 224.235667 #> [2,] -78.7290758 -99.956456 #> [3,] 37.0308294 383.160512 #> [4,] 99.9613629 3096.910224 #> [5,] -60.5870956 -99.048974 #> [6,] -65.7462530 -99.528436 #> [7,] -66.6408817 -99.586883 #> [8,] 93.1104965 2585.526253 #> [9,] -27.6598451 -80.189421 #> [10,] -49.0065226 -96.551953 #> [11,] -72.5135942 -99.843112 #> [12,] -62.3086964 -99.239313 #> [13,] 67.5481140 1220.376291 #> [14,] -98.5543832 -100.000000 #> [15,] -21.6235981 -70.424874 #> [16,] 49.5139800 647.152082 #> [17,] 78.0171083 1687.757918 #> [18,] -37.4275029 -90.407817 #> [19,] -76.0853987 -99.921780 #> [20,] 16.0109404 110.133230 #> [21,] 4.9255232 27.176163 #> [22,] -31.6596431 -85.093139 #> [23,] -98.7014870 -100.000000 #> [24,] 52.0246697 712.026762 #> [25,] 23.2525141 184.432313 #> [26,] 28.6719997 252.712013 #> [27,] 82.5191530 1925.546527 #> [28,] -82.3117551 -99.982685 #> [29,] -28.0494563 -80.717187 #> [30,] -47.2478580 -95.914921 #> [31,] 18.3742505 132.426805 #> [32,] -97.3313568 -99.999999 #> [33,] 24.4785105 198.862837 #> [34,] -59.1507802 -98.862585 #> [35,] 3.2270633 17.210862 #> [36,] 88.5309670 2281.844887 #> [37,] 86.9456285 2183.371470 #> [38,] -18.6704147 -64.416981 #> [39,] -12.7653876 -49.482229 #> [40,] -70.8498831 -99.789525 #> [41,] -33.4829047 -86.978339 #> [42,] -20.7052394 -68.651089 #> [43,] -69.0053591 -99.713956 #> [44,] 92.0461348 2512.328892 #> [45,] 82.8205821 1942.327742 #> [46,] -50.1079920 -96.908602 #> [47,] -51.3973860 -97.287947 #> [48,] 82.6365235 1932.067636 #> [49,] 79.8070486 1779.462055 #> [50,] -37.4815181 -90.449148 #> [51,] 82.5406853 1926.741607 #> [52,] -39.6010438 -91.962015 #> [53,] -63.6699866 -99.367111 #> [54,] 61.6571397 1004.013670 #> [55,] -50.4581128 -97.015561 #> [56,] 75.0888617 1545.479955 #> [57,] 31.6975001 296.175538 #> [58,] -24.0338038 -74.701085 #> [59,] -81.7176180 -99.979575 #> [60,] 26.9031846 229.126312 #> [61,] -4.8496712 -22.007747 #> [62,] -53.2877808 -97.775909 #> [63,] -65.6208901 -99.519744 #> [64,] 71.7607693 1394.926645 #> [65,] -47.6182770 -96.056345 #> [66,] 64.2411353 1095.114984 #> [67,] -35.0734280 -88.462483 #> [68,] -85.2128339 -99.992930 #> [69,] 14.4770744 96.604118 #> [70,] 33.2304805 319.776353 #> [71,] 72.6926422 1435.922035 #> [72,] -91.9113623 -99.999654 #> [73,] 23.6590130 189.153784 #> [74,] -59.7943409 -98.949404 #> [75,] -77.2165910 -99.938611 #> [76,] -45.6508961 -95.257996 #> [77,] 57.0508700 855.436291 #> [78,] 27.5961604 238.211234 #> [79,] -6.0898502 -26.959680 #> [80,] 65.3054437 1134.342770 #> [81,] -1.3583505 -6.609730 #> [82,] 55.0320627 795.586683 #> [83,] 40.7493845 452.373101 #> [84,] -81.9888145 -99.981046 #> [85,] -3.7408039 -17.356034 #> [86,] -83.0425453 -99.985978 #> [87,] -65.6136450 -99.519237 #> [88,] -33.6547709 -87.145698 #> [89,] -85.5264190 -99.993648 #> [90,] 99.3374145 3047.343215 #> [91,] -73.3879390 -99.866527 #> [92,] 0.8804244 4.480322 #> [93,] -58.4314961 -98.758857 #> [94,] 98.8942169 3012.510161 #> [95,] 28.6094997 251.856229 #> [96,] 2.3137241 12.116483 #> [97,] -35.4352674 -88.780415 #> [98,] -92.2750663 -99.999725 #> [99,] -92.3839119 -99.999744 #> [100,] 19.5461488 144.161930"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the Status and Trends week that a date falls into — date_to_st_week","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"Get Status Trends week date falls ","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"date_to_st_week(dates, version = 2022)"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"dates vector dates. version One 2021 date scheme used 2021 prior data releases 2022 date scheme used 2022 subsequent releases. Default 2022.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"integer vector weeks numbers 1-52.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"d <- as.Date(c(\"2016-04-08\", \"2018-12-31\", \"2014-01-01\", \"2018-09-04\")) date_to_st_week(d) #> [1] 15 52 1 36"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-defunct.html","id":null,"dir":"Reference","previous_headings":"","what":"Defunct functions in package ebirdst. — ebirdst-defunct","title":"Defunct functions in package ebirdst. — ebirdst-defunct","text":"functions listed defunct longer supported. Calling result error. possible alternative functions suggested. Many supported stixles infrequently used dropped ebirdst 2022 data release.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-defunct.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Defunct functions in package ebirdst. — ebirdst-defunct","text":"","code":"ebirdst_download( species, path = ebirdst_data_dir(), tifs_only = TRUE, force = FALSE, show_progress = TRUE, pattern = NULL, dry_run = FALSE ) ebirdst_extent(x, t, ...) ebirdst_habitat(path, ext, data = NULL, stationary_associations = FALSE) ebirdst_ppms(path, ext, es_cutoff, pat_cutoff) ebirdst_ppms_ts(ath, ext, summarize_by = c(\"weeks\", \"months\"), ...) ebirdst_subset(x, crs) load_pds(path, ext, model = c(\"occurrence\", \"count\"), return_sf = FALSE) load_pis(path, ext, model = c(\"occurrence\", \"count\"), return_sf = FALSE) load_predictions(path, return_sf = FALSE) parse_raster_dates(x) load_stixels(path, ext, return_sf = FALSE) project_extent(x, crs) plot_pds(path, ext, summarize_by = c(\"weeks\", \"months\"), ...) plot_pis( pis, ext, by_cover_class = TRUE, n_top_pred = 15, pretty_names = TRUE, plot = TRUE ) stixelize(x)"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-defunct.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Defunct functions in package ebirdst. — ebirdst-defunct","text":"... arguments now ignored.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-deprecated.html","id":null,"dir":"Reference","previous_headings":"","what":"Deprecated functions in package ebirdst. — ebirdst-deprecated","title":"Deprecated functions in package ebirdst. — ebirdst-deprecated","text":"functions listed deprecated support eventually dropped. Help pages deprecated functions available help(\"-deprecated\").","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-deprecated.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Deprecated functions in package ebirdst. — ebirdst-deprecated","text":"","code":"abundance_palette( n, season = c(\"weekly\", \"breeding\", \"nonbreeding\", \"migration\", \"prebreeding_migration\", \"postbreeding_migration\", \"year_round\") )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-deprecated.html","id":"abundance-palette","dir":"Reference","previous_headings":"","what":"abundance_palette","title":"Deprecated functions in package ebirdst. — ebirdst-deprecated","text":"abundance_palette, use ebirdst_palettes","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":null,"dir":"Reference","previous_headings":"","what":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Tools load, map, plot, analyze eBird Status Trends data products","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Maintainer: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Authors: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Shawn Ligocki sligocki@cornell.edu Tom Auer mta45@cornell.edu (ORCID) Daniel Fink df36@cornell.edu (ORCID) contributors: Cornell Lab Ornithology [copyright holder]","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":null,"dir":"Reference","previous_headings":"","what":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"Identify return path default download directory eBird Status Trends data products. directory can defined setting environment variable EBIRDST_DATA_DIR, otherwise directory returned tools::R_user_dir(\"ebirdst\", = \"data\") used.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"path data download directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir() #> [1] \"/Users/mes335/projects/workshops/2026-08-04_ebirdst-workshop_rao-2026/ebirdst-data/\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":null,"dir":"Reference","previous_headings":"","what":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"Returns summary eBird Status Trends data packages currently downloaded disk, separate rows Status Trends data products species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"ebirdst_data_inventory(path = ebirdst_data_dir()) # S3 method for class 'ebirdst_inventory' print(x, ...)"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"path character; directory data stored. Defaults ebirdst_data_dir(). x ebirdst_inventory object returned ebirdst_data_inventory(). ... ignored.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"tibble class ebirdst_inventory one row per data package found disk, columns species_code, common_name, scientific_name, version_year, dataset (\"status\" \"trends\"), n_files, size_mb. object compact print method displays inventory grouped version year dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"if (FALSE) { # \\dontrun{ # inventory of all data downloaded to the default directory ebirdst_data_inventory() # inventory for a specific directory ebirdst_data_inventory(\"/path/to/data\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":null,"dir":"Reference","previous_headings":"","what":"Delete downloaded eBird Status and Trends data — ebirdst_delete","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Deletes downloaded eBird Status Trends data packages specified species /version years. called interactively without force = TRUE, prints summary data deleted prompts confirmation proceeding.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"ebirdst_delete( species = NULL, year = NULL, path = ebirdst_data_dir(), force = FALSE )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"species character; one species given eBird species codes, scientific names, English common names. NULL (default), data species included. year integer; one version years. NULL (default), data years included. path character; directory data stored. Defaults ebirdst_data_dir(). force logical; TRUE, skip interactive confirmation prompt delete without asking. Required running non-interactive session.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Invisibly returns character vector paths deleted directories.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"if (FALSE) { # \\dontrun{ # review and confirm deletion of example data ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE) # delete a specific species and year ebirdst_delete(species = \"Yellow-bellied Sapsucker\", year = 2022, force = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: site selection probability spatial coverage. function downloads data products raster GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"ebirdst_download_data_coverage( path = ebirdst_data_dir(), pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"Path folder containing downloaded data coverage products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download all data coverage products ebirdst_download_data_coverage() # download just the spatial coverage products ebirdst_download_data_coverage(pattern = \"spatial-coverage\") # download a single week of data coverage products ebirdst_download_data_coverage(pattern = \"01-04\") # download all weeks in april ebirdst_download_data_coverage(pattern = \"04-\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status Data Products — ebirdst_download_status","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Download eBird Status Data Products single species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. low resolution (27 km) data available example data. addition, example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"ebirdst_download_status( species, path = ebirdst_data_dir(), download_abundance = TRUE, download_occurrence = FALSE, download_count = FALSE, download_ranges = FALSE, download_regional = FALSE, download_pis = FALSE, download_ppms = FALSE, download_all = FALSE, pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status Data Products — ebirdst_download_status","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). download_abundance whether download estimates abundance proportion population. download_occurrence logical; whether download estimates occurrence. download_count logical; whether download estimates count. download_ranges logical; whether download range polygons. download_regional logical; whether download regional summary stats, e.g. percent population regions. download_pis logical; whether download spatial estimates predictor importance. download_ppms logical; whether download spatial predictive performance metrics. download_all logical; download files data package. Equivalent setting download_ arguments TRUE. pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Path folder containing downloaded data package given species. dry_run = TRUE list files download returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Download eBird Status Data Products — ebirdst_download_status","text":"complete data package species contains large number files, cataloged vignettes. users require small subset files, default function downloads commonly used files: GeoTIFFs providing estimate relative abundance proportion population. interested additional data products, arguments starting download_ control download products. pattern argument provides even finer grained control gets downloaded.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_status(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_status(\"woothr\") # use pattern to only download low resolution (27 km) geotiff data # dry_run can be used to see what files will be downloaded ebirdst_download_status(\"lobcur\", pattern = \"_27km_\", dry_run = TRUE) # use pattern to only download high resolution (3 km) weekly abundance data ebirdst_download_status(\"lobcur\", pattern = \"abundance_median_3km\", dry_run = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Trends Data Products — ebirdst_download_trends","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Download eBird Trends Data Products set species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"ebirdst_download_trends( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Character vector paths folders containing downloaded data packages given species. trends data trends/ subdirectory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_trends(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_trends(\"woothr\") # multiple species can be downloaded at once ebirdst_download_trends(c(\"Sage Thrasher\", \"Abert's Towhee\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"Generate color palettes used eBird Status Trends relative abundance trends maps.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"ebirdst_palettes( n, type = c(\"weekly\", \"breeding\", \"nonbreeding\", \"migration\", \"prebreeding_migration\", \"postbreeding_migration\", \"year_round\", \"trends\") )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"n integer; number colors palette. type character; type color palette: \"weekly\" weekly relative abundance, \"trends\" trends color palette, season name seasonal relative abundance. Note trends diverging palette returned, palettes sequential.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"character vector hex color codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"# breeding season color palette ebirdst_palettes(10, type = \"breeding\") #> [1] \"#DFC0BC\" \"#DBADA7\" \"#D89A92\" \"#D5887D\" \"#D27568\" \"#CF6252\" \"#CC503E\" #> [8] \"#BB4938\" \"#AA4233\" \"#993C2E\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"Details eBird Status Trends predictor variables , variables derived dataset, details dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"","code":"ebirdst_predictor_descriptions"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"data frame 37 rows 4 columns dataset: dataset name. predictor: predictor name , multiple variables derived dataset, pattern used generate names. description: detailed description dataset variable. reference: reference consult information dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictor variables — ebirdst_predictors","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame predictors used eBird Status Trends models. include effort variables (e.g. distance traveled, number observers, etc.) addition variables describing environment (e.g. elevation, land cover, water cover, etc.). environmental variables derived summarizing remotely sensed datasets (described ebirdst_predictor_descriptions) 3 km diameter neighborhood around checklist. categorical datasets, two variables generated class describing percent cover (pland) edge density (ed).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"","code":"ebirdst_predictors"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame 150 rows 4 columns: predictor: predictor name. dataset: dataset name, can cross referenced ebirdst_predictor_descriptions details. class: class number name categorical variables. label: descriptive labels predictor variable.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Regional summary statistics for all species — ebirdst_regional_stats","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"Load single file regional summary statistics covering species eBird Status Data Products. file downloaded automatically first use loaded single step; subsequent calls load already downloaded file directly. differs load_regional_stats(), loads regional statistics single species species' downloaded data package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"ebirdst_regional_stats( path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"path character; directory data stored . Defaults persistent data directory returned ebirdst_data_dir(). force logical; file already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"data frame regional summary statistics species. columns match returned load_regional_stats().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download (if necessary) and load regional stats for all species regional <- ebirdst_regional_stats() } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":null,"dir":"Reference","previous_headings":"","what":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"dataset listing species eBird Status Trends Data Products available, additional information relevant Status Trends results species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"","code":"ebirdst_runs"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"data frame 29 variables: species_code: alphanumeric eBird species code uniquely identifying species scientific_name: scientific name. common_name: English common name. is_resident: classifies species resident migrant. breeding_quality: breeding season quality. breeding_start: breeding season start date. breeding_end: breeding season start date. nonbreeding_quality: non-breeding season quality. nonbreeding_start: non-breeding season start date. nonbreeding_end: non-breeding season start date. postbreeding_migration_quality: post-breeding season quality. postbreeding_migration_start: post-breeding season start date. postbreeding_migration_end: post-breeding season start date. prebreeding_migration_quality: pre-breeding season quality. prebreeding_migration_start: pre-breeding season start date. prebreeding_migration_end: pre-breeding season start date. resident_quality: resident quality. resident_start: resident species, year-round start date. resident_end: resident species, year-round end date. status_version_year: release version Status data products. has_trends: whether species trends estimates. trends_season: season trend estimated : breeding, nonbreeding, resident. trends_region: geographic region trend model run . Note broadly distributed species (e.g. Barn Swallow) trend estimates regional subset full range. trends_start_year: start year trend time period. trends_end_year: end year trend time period. trends_start_date: start date (MM-DD format) season trend estimated. trends_end_date: end date (MM-DD format) season trend estimated. rsquared: R-squared value comparing actual estimated trends simulations. beta0: intercept linear model fitting actual vs. estimated trends (actual ~ estimated) simulations. Positive values beta0 indicate models systematically underestimating simulated trend species. trends_version_year: release version Trends data products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"Status Data Products, dates defining boundaries seasons provided additional quality rating 0-3 season. dates quality ratings assigned process expert review. expert review. Note missing dates imply season failed expert review species within season. Trends Data Products available subset species, indicated has_trends variable, species trends estimated single season. two predictive performance metrics (rsquared beta0) based comparison actual estimated percent per year trends suite simulations (see Fink et al. 2023 details). trends regions defined follows: aus_nz: Australia New Zealand iberia: Spain Portugal india_se_asia: India, Nepal, Bhutan, Sri Lanka, Thailand, Cambodia, Malaysia, Brunei, Singapore, Philippines japan: Japan north_america: North America including Mexico, Central America, Caribbean, excluding Nunavut, North West Territories, Hawaii south_africa: South Africa, Lesotho, Eswatini south_america: Colombia, Ecuador, Peru, Chile, Argentina, Uruguay taiwan: Taiwan turkey_plus: Turkey, Cyprus, Israel, Palestine, Greece, Armenia, Georgia","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends Data Products version — ebirdst_version","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"Identify version eBird Status Trends Data Products version R package works . Versions defined year model estimates made .","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"list three components: status_version_year version year eBird Status Data Products, trends_version_year version year eBird Trends Data Products, release_year year version data released.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version() #> $status_version_year #> [1] 2023 #> #> $trends_version_year #> [1] 2022 #> #> $release_year #> [1] 2025 #>"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":null,"dir":"Reference","previous_headings":"","what":"Get eBird species code for a set of species — get_species","title":"Get eBird species code for a set of species — get_species","text":"Give vector species codes, common names, /scientific names, return vector 6-letter eBird species codes. function look codes species eBird Status Trends results exist.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(x)"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get eBird species code for a set of species — get_species","text":"x character; vector species codes, common names, /scientific names.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get eBird species code for a set of species — get_species","text":"character vector eBird species codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(c(\"Black-capped Chickadee\", \"Poecile gambeli\", \"carchi\")) #> [1] \"bkcchi\" \"mouchi\" \"carchi\""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the path to the data package for a given species — get_species_path","title":"Get the path to the data package for a given species — get_species_path","text":"helper function can used get path data package given species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"get_species_path( species, path = ebirdst_data_dir(), dataset = c(\"status\", \"trends\"), check_downloaded = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the path to the data package for a given species — get_species_path","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). dataset character; whether path Status Trends data products returned. check_downloaded logical; raise error data downloaded species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the path to the data package for a given species — get_species_path","text":"path data package directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"if (FALSE) { # \\dontrun{ # get the path path <- get_species_path(\"yebsap-example\") # get the path to the full data package for yellow-bellied sapsucker # common name, scientific name, or species code can be used path <- get_species_path(\"Yellow-bellied Sapsucker\") path <- get_species_path(\"Sphyrapicus varius\") path <- get_species_path(\"yebsap\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":null,"dir":"Reference","previous_headings":"","what":"Spatiotemporal grid sampling of observation data — grid_sample","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"Sample observation data spacetime grid reduce spatiotemporal bias.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"grid_sample( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, res = c(3000, 3000, 7), jitter_grid = TRUE, sample_size_per_cell = 1, cell_sample_prop = 0.75, keep_cell_id = FALSE, grid_definition = NULL ) grid_sample_stratified( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, unified_grid = FALSE, keep_cell_id = FALSE, by_year = TRUE, case_control = TRUE, obs_column = \"obs\", sample_by = NULL, min_detection_probability = 0, maximum_ss = NULL, jitter_columns = NULL, jitter_sd = 0.1, cell_quantile_cap = NULL, ... )"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"x data frame; observations sample, including least columns defining location space time. Additional columns can included features later used model training. coords character; names spatial temporal coordinates. default spatial spatial coordinates longitude latitude, temporal coordinate day_of_year. is_lonlat logical; points unprojected, lon-lat coordinates. case, points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution spatiotemporal grid x, y, time dimensions. Unprojected locations projected equal area coordinate system prior sampling, resolution therefore provided units meters. temporal resolution native units time coordinate input data frame, typically number days. jitter_grid logical; whether jitter location origin grid introduce randomness. sample_size_per_cell integer; number observations sample grid cell. cell_sample_prop proportion (0-1]; less 1, proportion cells randomly selected sampling. keep_cell_id logical; whether retain unique cell identifier, stored column named .cell_id. grid_definition list defining spatiotemporal sampling grid returned assign_to_grid() form attribute returned data frame. unified_grid logical; whether single, unified spatiotemporal sampling grid defined used observations x different grid used stratum. by_year logical; whether sampling done stratified year (TRUE) ignoring year (FALSE). sampling year turned , N observations sampled grid cell year, turned , N observations sampled per grid cell across years. using sampling year, input data frame x must year column. case_control logical; whether apply case control sampling whereby presence absence sampled independently. obs_column character; case_control = TRUE, name column x defines detection (obs_column > 0) non-detection (obs_column == 0). sample_by character; additional columns x stratify sampling . example, landscape many small islands (defined island variable) wish sample independently, use sample_by = \"island\". min_detection_probability proportion [0-1); minimum detection probability final dataset. case_control = TRUE, proportion detections grid sampled dataset level, additional detections added via grid sampling detections input dataset least proportion detections appears final dataset. typically result duplication observations final dataset. turn feature use min_detection_probability = 0. maximum_ss integer; maximum sample size final dataset. grid sampling yields number observations, maximum_ss observations selected randomly full set. Note subsampling performed way levels strata least one observation within final dataset, therefore truly randomly sampling. jitter_columns character; detections oversampled achieve minimum detection probability, observations duplicated, can desirable slightly \"jitter\" values model training features duplicated observations. argument defines column names x jittered. jitter_sd numeric; strength jittering units standard deviations, see jitter_columns. cell_quantile_cap proportion (0, 1] NULL; provided, limits many observations single spatial grid cell can contribute grid-sampled data, reducing influence chronically -sampled sites (e.g. bird feeders). observation class, per-cell observation count capped quantile distribution per-cell counts: cells quantile randomly reduced , cells left unchanged. threshold taken data , adapts dataset. Detections non-detections capped independently rule. least one observation every level every column sample_by always retained, even means cell exceeds cap, rare strata (e.g. remote island) never lost; year (by_year = TRUE) protected, years can thinned chronically -sampled cells like observation. NULL (default) value 1 applies cap. ... additional arguments defining spatiotemporal grid; passed grid_sample().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"data frame spatiotemporally sampled data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"grid_sample_stratified() performs stratified case control sampling, independently sampling strata defined , example, year detection/non-detection. Within stratum, grid_sample() used sample observations spatiotemporal grid. addition, case control sampling turned , detections oversampled increase frequency detections dataset. sampling grid defined, assignment locations cells occurs, assign_to_grid(). Consult help function details grid generated locations assigned. Note providing 2-element vectors coords res time component grid can ignored spatial-subsampling performed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"set.seed(1) # generate some example observations n_obs <- 10000 checklists <- data.frame(longitude = rnorm(n_obs, sd = 0.1), latitude = rnorm(n_obs, sd = 0.1), day_of_year = sample.int(28, n_obs, replace = TRUE), year = NA_integer_, obs = rpois(n_obs, lambda = 0.05), forest_cover = runif(n_obs), island = as.integer(runif(n_obs) > 0.95)) # add a year column, giving more data to recent years checklists$year <- sample(seq(2016, 2020), size = n_obs, replace = TRUE, prob = seq(0.3, 0.7, length.out = 5)) # create several rare islands checklists$island[sample.int(nrow(checklists), 9)] <- 2:10 # basic spatiotemporal grid sampling sampled <- grid_sample(checklists) # plot original data and grid sampled data par(mar = c(0, 0, 0, 0)) plot(checklists[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"#00000033\", axes = FALSE) points(sampled[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"red\") # case control sampling stratified by year and island # return a maximum of 1000 checklists sampled_cc <- grid_sample_stratified(checklists, sample_by = \"island\", maximum_ss = 1000) # case control sampling increases the prevalence of detections mean(checklists$obs > 0) #> [1] 0.0532 mean(sampled$obs > 0) #> [1] 0.0505667 mean(sampled_cc$obs > 0) #> [1] 0.09821429 # stratifying by island ensures all levels are retained, even rare ones table(checklists$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 9505 486 1 1 1 1 1 1 1 1 1 # normal grid sampling loses rare island levels table(sampled$island) #> #> 0 1 #> 1099 48 # stratified grid sampling retain at least one observation from each level table(sampled_cc$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 908 91 1 1 1 1 1 1 1 1 1"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products configuration file — load_config","title":"Load eBird Status Data Products configuration file — load_config","text":"Load configuration file eBird Status run. configuration file mostly internal use contains variety parameters used modeling process.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"load_config( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products configuration file — load_config","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products configuration file — load_config","text":"list run configuration parameters.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters p <- load_config(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"data coverage products packaged individual GeoTIFF files product week year. function loads one available data products one weeks R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"load_data_coverage( product = c(\"spatial-coverage\", \"selection-probability\"), weeks, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"product character; data coverage raster product load: spatial coverage site selection probability. weeks character; one weeks (expressed \"MM-DD\" format) load raster layers . argument specified, downloaded weeks loaded. Note rasters quite large recommended load small number weeks data time. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"SpatRaster 1 52 layers given product given weeks, layer names dates (YYYY-MM-DD format) midpoint week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: spatial-coverage: spatially smoothed estimate proportion area covered eBird checklists given week. selection-probability: modeled estimate probability given location habitat sampled eBird data given week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_data_coverage() # load a single week of site selection probability data load_data_coverage(\"selection-probability\", weeks = \"01-04\") # load all weeks of spatial coverage data load_data_coverage(\"spatial-coverage\", weeks = c(\"01-04\", \"01-11\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"Load full annual cycle map parameters — load_fac_map_parameters","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"Get map parameters used eBird Status Trends website optimally display full annual cycle data. includes bins abundance data, projection, extent map. extent spatial extent non-zero data across full annual cycle projection optimized extent.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"load_fac_map_parameters( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"list containing elements: custom_projection: custom projection optimized given species' full annual cycle fa_extent: SpatExtent object storing spatial extent non-zero data given species custom projection res: numeric vector 2 elements giving target resolution raster custom projection fa_extent_projected: extent projected (Equal Earth) coordinates weekly_bins/weekly_labels: weekly abundance bins labels full annual cycle seasonal_bins/`seasonal_labels: seasonal abundance bins labels full annual cycle","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters load_fac_map_parameters(path) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictor importance (PI) rasters — load_pi","title":"Load predictor importance (PI) rasters — load_pi","text":"eBird Status models estimate relative importance core environmental predictor used model (.e. % land water cover variables). predictor importance (PI) data converted ranks (rank 1 important) relative full suite environmental predictors. ranks summarized 27 km resolution raster grid predictor, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use. PI estimates available separately occurrence count sub-model 30 important predictors distributed. Use list_available_pis() see predictors PI data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"load_pi( species, predictor, response = c(\"occurrence\", \"count\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() ) list_available_pis( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictor importance (PI) rasters — load_pi","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". predictor character; predictor PI data loaded . list predictors PI data available varies species, use list_available_pis() get list given species. response character; model (occurrence count) PI data loaded . path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictor importance (PI) rasters — load_pi","text":"SpatRaster object PI ranks given predictor. migrants, estimates weekly raster 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned. list_available_pis() returns data frame listing top 30 predictors PI rasters can loaded. addition predictor names, mean range-wide rank (rank_mean) given well integer rank (rank) relative full suite predictors (environmental effort).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Load predictor importance (PI) rasters — load_pi","text":"list_available_pis(): list predictors PI information species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"if (FALSE) { # \\dontrun{ # identify the top predictor # data will be downloaded automatically if not already present top_preds <- list_available_pis(\"yebsap-example\") print(top_preds[1, ]) # load predictor importance raster of top predictor for occurrence load_pi(\"yebsap-example\", top_preds$predictor[1]) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictive performance metric (PPM) rasters — load_ppm","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"eBird Status models evaluated test set eBird data used model training suite predictive performance metrics (PPMs) calculated. PPMs base model summarized 27 km resolution raster grid, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"load_ppm( species, ppm = c(\"binary_f1\", \"binary_mcc\", \"binary_prevalence\", \"occ_bernoulli_dev\", \"occ_bin_spearman\", \"occ_brier\", \"occ_pr_auc\", \"occ_pr_auc_gt_prev\", \"occ_pr_auc_normalized\", \"count_log_pearson\", \"count_mae\", \"count_poisson_dev\", \"count_rmse\", \"count_spearman\", \"abd_log_pearson\", \"abd_mae\", \"abd_poisson_dev\", \"abd_rmse\", \"abd_spearman\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". ppm character; name single metric load data . See Details definitions metric. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"SpatRaster object PPM data. migrants, rasters weekly 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"Nineteen predictive performance metrics provided: binary_f1: F1-score comparing model predictions converted binary observed detection/non-detection test checklists. binary_mcc: Matthews Correlation Coefficient (MCC) comparing model predictions converted binary observed detection/non-detection test checklists. binary_prevalence: observed detection probability spatiotemporal subsampling. occ_bernoulli_dev: proportion Bernoulli deviance explained comparing predicted occurrence observed detection/non-detection test checklists. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman's rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR AUC) generated comparing predicted encounter rate observed detection/non-detection test checklists. occ_pr_auc_gt_prev: proportion ensemble PR AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count subset test checklists species detected. count_mae: mean absolute error (MAE) comparing observed predicted counts subset test checklists species detected. count_poisson_dev: proportion Poisson deviance explained, comparing observed predicted counts subset test checklists species detected. count_rmse: root mean squared error (RMSE) comparing observed predicted counts subset test checklists species detected. count_spearman: Spearman's rank correlation coefficient comparing observed predicted counts subset test checklists species detected. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count full set test checklists. abd_mae: mean absolute error (MAE) comparing observed counts predicted relative abundance full set test checklists. abd_poisson_dev: proportion Poisson deviance explained, comparing predicted relative abundance observed count full set test checklists. abd_rmse: root mean squared error comparing predicted relative abundance observed count full set test checklists. abd_spearman: Spearman's rank correlation coefficient comparing predicted relative abundance observed count full set test checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"if (FALSE) { # \\dontrun{ # load area under the precision-recall curve PPM raster # data will be downloaded automatically if not already present load_ppm(\"yebsap-example\", ppm = \"binary_pr_auc\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":null,"dir":"Reference","previous_headings":"","what":"Load seasonal eBird Status and Trends range polygons — load_ranges","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"Range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"load_ranges( species, resolution = c(\"9km\", \"27km\"), smoothed = TRUE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". resolution character; raster resolution range polygons derived. smoothed logical; whether smoothed unsmoothed ranges loaded. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"sf update containing seasonal range boundaries, season provided different feature.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load smoothed ranges # note that only 27 km data are provided for the example data ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products raster data — load_raster","title":"Load eBird Status Data Products raster data — load_raster","text":"eBird Status raster products packaged GeoTIFF file representing predictions regular grid. core products occurrence, count, relative abundance, proportion population. function loads one available data products R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"load_raster( species, product = c(\"abundance\", \"count\", \"occurrence\", \"proportion-population\"), period = c(\"weekly\", \"seasonal\", \"full-year\"), metric = NULL, resolution = c(\"3km\", \"9km\", \"27km\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products raster data — load_raster","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". product character; eBird Status raster product load: occurrence, count, relative abundance, proportion population. See Details detailed explanation products. period character; temporal period estimation. eBird Status models make predictions week year; however, convenience, data also provided summarized seasonal annual (\"full-year\") level. metric character; default, weekly products provide estimates median value (metric = \"median\") summarized products cell-wise mean across weeks within season (metric = \"mean\"). However, additional variants exist products. weekly relative abundance, confidence intervals provided: specify metric = \"lower\" get 10th quantile metric = \"upper\" get 90th quantile. seasonal annual products, cell-wise maximum values across weeks can obtained metric = \"max\". resolution character; resolution raster data load. default load native 3 km resolution data; however, applications 9 km 27 km data may suitable. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products raster data — load_raster","text":"weekly cubes, SpatRaster 52 layers given product, layer names dates (YYYY-MM-DD format) midpoint week. Seasonal cubes four layers named corresponding season. full-year products single layer.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status Data Products raster data — load_raster","text":"core eBird Status data products provide weekly estimates across regular spatial grid. packaged rasters 52 layers, corresponding estimates week year, refer \"cubes\" (e.g. \"relative abundance cube\"). estimates median expected value standard 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. products : occurrence: expected probability (0-1) occurrence species. count: expected count species, conditional occurrence given location. abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. proportion-population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster total abundance summed across cells. addition weekly data cubes, function provides access data summarized different periods. Seasonal cubes produced taking cell-wise mean max across weeks within season. boundary dates season species specific available ebirdst_runs, season failed review associated layer included cube. addition, full-year summaries provide mean max across weeks year fall within season passed review. Note necessarily 52 weeks year. example, estimates non-breeding season failed expert review given species, full-year summary species include weeks fall within non-breeding season.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # weekly relative abundance # note that only 27 km data are available for the example data abd_weekly <- load_raster(\"yebsap-example\", \"abundance\", resolution = \"27km\") # the weeks for each layer are stored in the layer names names(abd_weekly) # they can be converted to date objects with as.Date as.Date(names(abd_weekly)) # max seasonal abundance abd_seasonal <- load_raster(\"yebsap-example\", \"abundance\", period = \"seasonal\", metric = \"max\", resolution = \"27km\") # available seasons in stack names(abd_seasonal) # subset to just breeding season abundance abd_seasonal[[\"breeding\"]] } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Load regional summary statistics — load_regional_stats","title":"Load regional summary statistics — load_regional_stats","text":"Load seasonal summary statistics regions consisting countries states/provinces.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load regional summary statistics — load_regional_stats","text":"","code":"load_regional_stats( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load regional summary statistics — load_regional_stats","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load regional summary statistics — load_regional_stats","text":"data frame containing regional summary statistics columns: species_code: alphanumeric eBird species code. region_type: country countries state states, provinces, sub-national regions. region_code: alphanumeric code region. region_name: English name region. continent_code: alphanumeric code continent region belongs . continent_name: name continent region belongs . season: name season summary statistics calculated . abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population falling within region. continent_pop_percent: proportion seasonal modeled population continent (identified continent_name) falling within region. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population falling within region max_week, .e. maximum weekly value. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load regional summary statistics — load_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters regional <- load_regional_stats(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Trends estimates for a set of species — load_trends","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Load relative abundance trend estimates single species set species. Trends estimated 27 km 27 km grid single season per species (breeding, non-breeding, resident). requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"load_trends( species, fold_estimates = FALSE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Trends estimates for a set of species — load_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". fold_estimates logical; default, trends summarized across 100-fold ensemble returned; however, setting fold_estimates = TRUE individual fold-level estimates returned. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Trends estimates for a set of species — load_trends","text":"data frame containing trends estimates set species. following columns included: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. start_year/end_year: start end years trend time period. start_date/end_date: start end dates (MM-DD format) season trend estimated. srd_id: unique integer identifier grid cell. longitude/latitude: longitude latitude grid cell center. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: median estimated percent per year change relative abundance. abd_ppy_lower/abd_ppy_upper: 80% confidence interval estimated percent per year change relative abundance. abd_ppy_nonzero: logical (TRUE/FALSE) value indicating 80% confidence limits overlap zero (FALSE) overlap zero (TRUE) abd_trend: median estimated cumulative change relative abundance trend time period. abd_trend_lower/abd_trend_upper: 80% confidence interval estimated cumulative change relative abundance trend time period. fold_estimates = TRUE, data frame fold-level trend estimates returned following columns: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. srd_id: unique integer identifier grid cell. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: estimated percent per year change relative abundance.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Trends estimates for a set of species — load_trends","text":"trends relative abundance estimated using double machine learning model. quantify uncertainty, ensemble 100 estimates made location, based random subsample eBird data. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. access estimates individual folds making ensemble use fold_estimates = TRUE. fold-level estimates can used quantify uncertainty, example, calculating trend given region. details methodology used estimate trends consult Fink et al. 2023.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Fink, D., Johnston, ., Strimas-Mackey, M., Auer, T., Hochachka, W. M., Ligocki, S., Oldham Jaromczyk, L., Robinson, O., Wood, C., Kelling, S., & Rodewald, . D. (2023). Double machine learning trend model citizen science data. Methods Ecology Evolution, 00, 1–14. https://doi.org/10.1111/2041-210X.14186","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # load fold-level estimates trends_folds <- load_trends(\"yebsap-example\", fold_estimates = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert eBird Trends Data Products to raster format — rasterize_trends","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates raster format terra SpatRaster format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"rasterize_trends( trends, layers = c(\"abd_ppy\", \"abd_ppy_lower\", \"abd_ppy_upper\"), trim = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"trends data frame; trends data single species returned load_trends(). layers character; column names trends data frame rasterize. columns become layers raster created. trim logical; flag indicating returned raster trimmed remove outer rows columns NA. trim = FALSE returned raster global extent, can useful rasters combined across species different ranges.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"SpatRaster object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # rasterize percent per year trend rasterize_trends(trends, \"abd_ppy\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":null,"dir":"Reference","previous_headings":"","what":"Store the eBird Status and Trends access key — set_ebirdst_access_key","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Accessing eBird Status Trends data requires access key, can obtained visiting https://ebird.org/st/request. key must stored environment variable EBIRDST_KEY order ebirdst_download_status() ebirdst_download_trends() use . easiest approach store key .Renviron file can always accessed R sessions. Use function set EBIRDST_KEY .Renviron file provided located standard location home directory. also possible manually edit .Renviron file. access key specific never shared made publicly accessible.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"set_ebirdst_access_key(key, overwrite = FALSE)"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"key character; API key obtained filling form https://ebird.org/st/request. overwrite logical; existing EBIRDST_KEY overwritten already set .Renviron.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Edits .Renviron, returns path file invisibly.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"if (FALSE) { # \\dontrun{ # save the api key, replace XXXXXX with your actual key set_ebirdst_access_key(\"XXXXXX\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert Trends Data Products to points or circles — vectorize_trends","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates points circles sf format. Trends can converted points circles areas roughly proportional relative abundance within 27 km grid cell. abundance-scaled circles used produce trends maps eBird Status Trends website.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"vectorize_trends(trends, output = c(\"circles\", \"points\"), crs = 4326)"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"trends data frame; trends data single species returned load_trends(). output character; \"points\" outputs spatial points \"circles\" outputs circles areas roughly proportional relative abundance within 27 km grid cell. crs character sf crs object; coordinate reference system output results . points, unprojected latitude-longitude coordinates (default) typical, circles use whatever equal area CRS intend use mapping data otherwise \"circles\" appear skewed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"Vectorized trends data sf object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # vectorize as points vectorize_trends(trends, \"points\") # vectorize as circles vectorize_trends(trends, \"circles\", crs = \"+proj=eqearth\") } # }"},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420231","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.1","title":"ebirdst 4.2023.1","text":"Backend approach file download refactored -demand first approach list_available_pis() longer downloads every predictor importance raster determine availability, pi_rangewide.csv http fallback VPNs block https now also applies file downloads, just file listings Errors data can’t found -demand now include function-specific guidance, e.g. pointing list_available_pis()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420230","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.0","title":"ebirdst 4.2023.0","text":"CRAN release: 2026-07-20 Transition load_*() functions download directly rather call ebirdst_download_status() Converted vignettes Quarto moved website-pkgdown articles; package longer ships built-vignettes CRAN (documentation lives https://ebird.github.io/ebirdst/) Add ebirdst_regional_stats() load regional summary statistics species Add ebirdst_data_inventory() ebirdst_delete() manage files downloaded ebirdst Move air auto-formatting jarl linting Efficiency improvements grid_sample() grid_sample_stratified() gains cell_quantile_cap argument limit many observations single chronically -sampled site (e.g. bird feeder) can contribute","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320231","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.1","title":"ebirdst 3.2023.1","text":"CRAN release: 2025-10-19 added function generate abundance-scaled circles trends fixed bug preventing tibbles passed grid sampling functions clarified documentation sampling function fixed bug get_species() Yellow-bellied Sapsucker","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320230","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.0","title":"ebirdst 3.2023.0","text":"CRAN release: 2025-05-07 update 2023 data release add capability download load data coverage layers Northern Goshawk species code incorrect VPNs downloading https raises error, switch http cases update vignettes: add links YouTube, expand applications, add API vignette","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320223","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.3","title":"ebirdst 3.2022.3","text":"CRAN release: 2024-03-05 arrow back CRAN, move Suggests back Imports add 6 new species Australia","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320222","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.2","title":"ebirdst 3.2022.2","text":"CRAN release: 2024-02-23 switch terminology “trajectory” “migration chronology” ensure rasterize_trends() works older versions terra (issue #7) move arrow package Suggests back CRAN (see https://github.com/apache/arrow/issues/39806)","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320221","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.1","title":"ebirdst 3.2022.1","text":"CRAN release: 2023-12-08 Documented functions deprecated defunct relative version 2.2021.3 topics ebirdst-defunct ebirdst-deprecated added back package. allows packages conditionally reference 2.2021.3 installed still passing CRAN checks.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320220","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.0","title":"ebirdst 3.2022.0","text":"CRAN release: 2023-11-15 new 2022 status data trends data released first time! major overhaul allow targeting downloading data stixel-level results (PPMS/PIs/PDs) removed, replaced spatialized raster versions restart required updating API key change package-level documentation per roxygen2 suggestions","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220213","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.3","title":"ebirdst 2.2021.3","text":"CRAN release: 2023-05-09 fix bug causing stixels missing bounds raise error ebirdst_habitat() add function estimate MCC-F1 ebirdst_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220212","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.2","title":"ebirdst 2.2021.2","text":"CRAN release: 2023-04-27 add robust grid sampling function.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220211","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.1","title":"ebirdst 2.2021.1","text":"CRAN release: 2023-04-06 release final batch 300 species 2021 bringing total 2,282","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220210","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.0","title":"ebirdst 2.2021.0","text":"CRAN release: 2023-01-18 transition using raster terra handling raster data move following packages Imports Suggests: gbm, mgcv, precrec, PresenceAbsence move package eBird GitHub organization https://github.com/ebird/ebirdst","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120213","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.3","title":"ebirdst 1.2021.3","text":"CRAN release: 2023-01-11 patch fix bug introduced last release causing missing config files data downloads [issue #44]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120212","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.2","title":"ebirdst 1.2021.2","text":"CRAN release: 2023-01-06 fix bug causing species base code downloaded together, e.g. leafly also downloads leafly2 [issue #43]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120211","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.1","title":"ebirdst 1.2021.1","text":"CRAN release: 2022-12-07 fix bug extent load_fac_map_parameters(), GitHub issue #40 use dynamic PAT cutoff PPM calculations update species list account second release eBird data year","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120210","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.0","title":"ebirdst 1.2021.0","text":"CRAN release: 2022-11-09 update v2021 eBird Status Trends data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120201","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.1","title":"ebirdst 1.2020.1","text":"CRAN release: 2022-07-08 CRAN checks found files created left behind ~/Desktop, relocated test files tempdir() deleting test completion withr::defer()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120200","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.0","title":"ebirdst 1.2020.0","text":"CRAN release: 2022-07-07 major update align new eBird Status Trends API update align 2020 eBird Status Data Products transition rappdirs tools::R_user_dir() handling download directories new vignettes","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-035","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.5","title":"ebirdst 0.3.5","text":"CRAN release: 2022-04-01 bug fix: API update causing data downloads fail","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-034","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.4","title":"ebirdst 0.3.4","text":"CRAN release: 2022-03-16 rename master branch main GitHub requires different download path example data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-033","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.3","title":"ebirdst 0.3.3","text":"CRAN release: 2021-11-12 move example data GitHub","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-032","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.2","title":"ebirdst 0.3.2","text":"CRAN release: 2021-09-15 try prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031-1","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-030","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.0","title":"ebirdst 0.3.0","text":"CRAN release: 2021-08-10 add support new data structures used 2020 eBird Status Trends functionality handle partial dependence data added overhaul package API intuitive streamlined documentation vignettes updated","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-022","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.2","title":"ebirdst 0.2.2","text":"CRAN release: 2021-01-16 add support variable ensemble support compute_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-021","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.1","title":"ebirdst 0.2.1","text":"CRAN release: 2020-03-23 bug fix: corrected date types seasonal definitions bug fix: fixed possibility ebirdst_extent produce invalid date (day 366 2015) added import pipe operator velox archived, removed dependency Suggests fasterize archived, removed dependency Imports","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-020","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.0","title":"ebirdst 0.2.0","text":"CRAN release: 2020-02-26 change maintainer Matthew Strimas-Mackey update access 2019 status trends data partial dependence data longer available, references PDs removed bug fix: load_raster() gave incorrect names seasonal rasters bug fix: didn’t properly implement quantile binning date_to_st_week() gets status trends week give vector dates","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-010","dir":"Changelog","previous_headings":"","what":"ebirdst 0.1.0","title":"ebirdst 0.1.0","text":"CRAN release: 2019-04-04 first CRAN release","code":""}] +[{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":null,"dir":"","previous_headings":"","what":"CLAUDE.md","title":"CLAUDE.md","text":"file provides guidance Claude Code (claude.ai/code) working code repository.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"ebirdst--project-instructions-for-claude","dir":"","previous_headings":"","what":"ebirdst — project instructions for Claude","title":"CLAUDE.md","text":"file local-(gitignored) layers top global R style guide ~/.claude/CLAUDE.md. Follow ; file adds project-specific workflow requirements.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"CLAUDE.md","text":"ebirdst R package (CRAN + GitHub) downloading analyzing eBird Status Trends Data Products Cornell Lab Ornithology. fit models — client accessing pre-computed data products (rasters, tabular estimates, range polygons) toolkit loading, subsetting, visualizing, post-processing . two distinct product families separate version years (see ebirdst_version()): Status (weekly relative abundance, occurrence, count, PIs, PPMs, ranges) Trends (per-year population change, subset species/seasons).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"commands","dir":"","previous_headings":"","what":"Commands","title":"CLAUDE.md","text":"Prefer devtools::load_all() iterating (library(ebirdst)). Run one test file: devtools::test_file(\"tests/testthat/test-loading.R\") Run full suite: devtools::test() Re-document roxygen edits: devtools::document() Full package check: devtools::check() Format / lint (scoped R/ config): air format R/ jarl check R/ (autofix: jarl check --fix R/) Full release checklist (vignettes, pkgdown, win-builder): see makefile.R — release time , routine changes. Tests vignettes require \"yebsap-example\" dataset; tests/testthat/ setup.R downloads temp EBIRDST_DATA_DIR whole suite.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"architecture","dir":"","previous_headings":"","what":"Architecture","title":"CLAUDE.md","text":"package organized pipeline stage rather product. Key files R/ fit together: access-key.R — stores/retrieves Status & Trends access key via rappdirs config (set_ebirdst_access_key()); \"*-example\" datasets bypass key requirement. download.R — entry point (ebirdst_download_status(), ebirdst_download_trends(), ebirdst_download_data_coverage()). Downloads laid disk ///.... fixed layout load-bearing: every load_*() function reconstructs paths , renaming/moving downloaded files breaks loading. download_* flags plus pattern regex control files fetched; files mandatory always downloaded. load.R (largest file) — read layer. load_raster() returns terra SpatRaster stacks (52 weekly layers, resolutions like \"27km\"/\"3km\"); loaders return tabular data (load_pis, load_pds, load_ppm, load_regional_stats, load_config) sf objects (load_ranges). load_config() / load_fac_map_parameters() read per-species JSON drives plotting (custom projection, legend bins/labels). sample.R — spatiotemporal subsampling point data (grid_sample(), grid_sample_stratified(), assign_to_grid()) used reduce spatial bias analysis; tied specific data product. trends.R — post-processing Trends tabular data rasters/vectors (rasterize_trends(), vectorize_trends()) unit conversions. manage.R — local data inventory cleanup (ebirdst_data_inventory() print.ebirdst_inventory S3 method, ebirdst_delete()). ebirdst-palettes.R — Status-specific color palettes maps. utils.R — internal validators (is_flag/is_integer/is_count), get_species() (resolves common/scientific name code species code), date_to_st_week(). data.R — documents three bundled datasets data/: ebirdst_runs (authoritative species list, seasons, quality ratings, trends availability), ebirdst_predictors, ebirdst_predictor_descriptions. ebirdst-deprecated.R / ebirdst-defunct.R — version-migration surface; API changes land rather silently breaking callers. zzz.R — .onAttach prints active Status/Trends version years citations. Species referenced throughout six-letter eBird species code (e.g. \"woothr\"), user-facing functions accept common scientific names resolve via get_species() ebirdst_runs.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"formatting-and-linting--always-run-these","dir":"","previous_headings":"","what":"Formatting and linting — always run these","title":"CLAUDE.md","text":"writing editing file R/, run air format R/. repo’s air.toml scopes formatting R/ (data-raw/, examples/, tests/, makefile.R intentionally excluded), air format . also safe run repo root. writing editing file R/, run jarl check R/ (jarl check . — jarl.toml restricts R/ regardless). Fix obvious/auto-fixable issues jarl check --fix R/. warnings require judgment (e.g. internal_function ::: call public alternative), use judgment rather blindly forcing fix. every change, just explicitly asked format lint. Never run air/jarl tests/, data-raw/, examples/, makefile.R — intentionally scope per air.toml / jarl.toml.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"tests","dir":"","previous_headings":"","what":"Tests","title":"CLAUDE.md","text":"Every new exported internal function needs accompanying test tests/testthat/test-{name}.R (see global CLAUDE.md naming structure conventions). Don’t skip change feels small. modifying existing function’s behavior, update extend existing tests rather leaving stale. Run affected test file(s) devtools::test_file() running full suite; run devtools::test() considering change done. Use \"yebsap-example\" example dataset integration tests — ’s already downloaded tests/testthat/setup.R. Don’t add tests require downloading real species data.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"CLAUDE.md","text":"changing roxygen2 comment, re-run devtools::document() (regenerates NAMESPACE man/*.Rd). Never hand-edit NAMESPACE files man/. function’s @export tag missing misplaced, ’s real bug (silently breaks public API) — style nitpick.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"package-development-workflow","dir":"","previous_headings":"","what":"Package development workflow","title":"CLAUDE.md","text":"Bump version DESCRIPTION add bullet NEWS.md user-facing change (new function, changed argument, bug fix affecting output). Prefer devtools::load_all() library(ebirdst)/install.packages() iterating locally. considering larger changes complete, run devtools::check() resolve new NOTEs/WARNINGs/ERRORs introduces (see makefile.R fuller release checklist — vignettes, pkgdown site, win-builder checks — needed release time, routine changes).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"git-and-github","dir":"","previous_headings":"","what":"Git and GitHub","title":"CLAUDE.md","text":"repo typically contributed via fork + upstream remote (see CONTRIBUTING.md): changes land branch, PR ebird/ebirdst. permission run git gh (including gh pr create) directly. Still follow general git safety protocol: create new commits rather amending, never force-push main, never skip hooks unless explicitly asked, confirm anything destructive (reset --hard, force-push, branch deletion) even though command doesn’t require prompt.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"interest fostering open welcoming environment, contributors maintainers pledge making participation project community harassment-free experience everyone, regardless age, body size, disability, ethnicity, gender identity expression, level experience, nationality, personal appearance, race, religion, sexual identity orientation.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes creating positive environment include: Using welcoming inclusive language respectful differing viewpoints experiences Gracefully accepting constructive criticism Focusing best community Showing empathy towards community members Examples unacceptable behavior participants include: use sexualized language imagery unwelcome sexual attention advances Trolling, insulting/derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical electronic address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-responsibilities","dir":"","previous_headings":"","what":"Our Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Project maintainers responsible clarifying standards acceptable behavior expected take appropriate fair corrective action response instances unacceptable behavior. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, ban temporarily permanently contributor behaviors deem inappropriate, threatening, offensive, harmful.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within project spaces public spaces individual representing project community. Examples representing project community include using official project e-mail address, posting via official social media account, acting appointed representative online offline event. Representation project may defined clarified project maintainers.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported contacting project team mta45@cornell.edu. project team review investigate complaints, respond way deems appropriate circumstances. project team obligated maintain confidentiality regard reporter incident. details specific enforcement policies may posted separately. Project maintainers follow enforce Code Conduct good faith may face temporary permanent repercussions determined members project’s leadership.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 1.4, available http://contributor-covenant.org/version/1/4","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"please-contribute","dir":"","previous_headings":"","what":"Please contribute!","title":"CONTRIBUTING","text":"love collaboration.","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"bugs","dir":"","previous_headings":"","what":"Bugs?","title":"CONTRIBUTING","text":"Submit issue Issues page ","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"code-contributions","dir":"","previous_headings":"","what":"Code contributions","title":"CONTRIBUTING","text":"Fork repo Github account Clone version account machine account, e.g,. git clone https://github.com//ebirdst.git Make sure track progress upstream (.e., version ebirdst ebird/ebirdst) git remote add upstream https://github.com/ebird/ebirdst.git. making changes make sure pull changes upstream either git fetch upstream merge later git pull upstream fetch merge one step Make changes (bonus points making changes new branch) alter package functionality (e.g., code , just documentation) please write tests cove new functionality. Push account Submit pull request home base ebird/ebirdst","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc.  Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"api-endpoints","dir":"Articles","previous_headings":"","what":"API Endpoints","title":"eBird Status and Trends Data Products API","text":"eBird Status Trends Data Products API two endpoints: one list available files given species one download single file. list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return: download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"] https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"list","dir":"Articles","previous_headings":"","what":"List","title":"eBird Status and Trends Data Products API","text":"list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"]"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"download","dir":"Articles","previous_headings":"","what":"Download","title":"eBird Status and Trends Data Products API","text":"download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map","dir":"Articles","previous_headings":"","what":"Mapping relative abundance","title":"eBird Status Data Products Applications","text":"section, ’ll demonstrate make simple map relative abundance within given region. example, ’ll make map breeding season relative abundance Western Meadowlark Montana. maps produced using approach suitable many applications; however, high-quality publication-ready maps, may worthwhile using traditional GIS environment QGIS ArcGIS rather R. start loading breeding season relative abundance raster Western Meadowlark. data downloaded automatically first time load , ’s need download explicitly first. simplest way map seasonal relative abundance data use built plot() function terra package. Clearly simple approach doesn’t work well! wide variety issues ’ll tackle one time. raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf(). raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows. relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website. Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# load seasonal mean relative abundance at 3km resolution abd_seasonal <- load_raster( species = \"wesmea\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"3km\" ) # extract just the breeding season relative abundance abd_breeding <- abd_seasonal[[\"breeding\"]] plot(abd_breeding, axes = FALSE) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE) # find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\") # quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-extent","dir":"Articles","previous_headings":"","what":"Cropping and masking","title":"eBird Status Data Products Applications","text":"raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf().","code":"# region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-projection","dir":"Articles","previous_headings":"","what":"Projection","title":"eBird Status Data Products Applications","text":"raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows.","code":"# find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-bins","dir":"Articles","previous_headings":"","what":"Abundance bins","title":"eBird Status Data Products Applications","text":"relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website.","code":"# quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-basemap","dir":"Articles","previous_headings":"","what":"Basemap","title":"eBird Status Data Products Applications","text":"Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron","dir":"Articles","previous_headings":"","what":"Migration chronologies","title":"eBird Status Data Products Applications","text":"Goal: generate migration chronologies set species within region investigate use region changes throughout year different species. information can used inform optimal time year make temporally specific conservation investments. example type conservation intervention, see California Bird Returns project. application ’ll use weekly estimates chart change relative abundance throughout year given region. migration chronologies can useful identifying given geography receives highest intensity use species group species. ’ll start generating chronology confidence intervals single species, demonstrate produce multi-species chronologies. examples, ’ll consider grassland birds Montana. start ’ll load polygon boundary Montana. single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species. Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" ) grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-single","dir":"Articles","previous_headings":"","what":"Single species with uncertainty","title":"eBird Status Data Products Applications","text":"single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species.","code":"# load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-multi","dir":"Articles","previous_headings":"","what":"Multi-species","title":"eBird Status Data Products Applications","text":"Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats","dir":"Articles","previous_headings":"","what":"Regional proportion of population","title":"eBird Status Data Products Applications","text":"Goal: identify proportion species’ population falling within given region. information can used highlight stewardship responsibility species, example, large proportion species’ breeding population falls within region, region said high stewardship responsibility species. eBird Status Trends website provides regional summary statistics country state/province level species. example, can use regional stats see 36% non-breeding population Golden Eagle falls within United States. website also allows users draw customs polygons get summary statistics within polygons. However, cases may want estimate regional summary statistics way isn’t supported website. ’ll provide examples calculating proportion population within region. ’ll use Golden Eagle examples; , required data downloaded automatically first time ’re loaded. example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions. broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population. eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January. one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948 # seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229 # weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694 # non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-seasonal","dir":"Articles","previous_headings":"","what":"Proportion of seasonal population","title":"eBird Status Data Products Applications","text":"example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-relative","dir":"Articles","previous_headings":"","what":"Proportion of North American population","title":"eBird Status Data Products Applications","text":"broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population.","code":"# seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-custom","dir":"Articles","previous_headings":"","what":"Regional stats for weeks and custom time periods","title":"eBird Status Data Products Applications","text":"eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January.","code":"# weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-coastal","dir":"Articles","previous_headings":"","what":"Coastal species","title":"eBird Status Data Products Applications","text":"one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi","dir":"Articles","previous_headings":"","what":"Areas of importance","title":"eBird Status Data Products Applications","text":"Goal: identify areas highest importance set species within region. information can used identify areas prioritize protection conservation interventions. eBird Status Data Products can used identify areas importance species group species, can help prioritize areas protection conservation interventions. context, “areas importance” refer areas within landscape higher concentration given species. application, ’ll use set grassland species Montana breeding season used migration chronology example. simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell. richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"# species list grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") |> st_transform(st_crs(abd_breeding)) |> vect() range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE) prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-richness","dir":"Articles","previous_headings":"","what":"Richness","title":"eBird Status Data Products Applications","text":"simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell.","code":"range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-importance","dir":"Articles","previous_headings":"","what":"Importance","title":"eBird Status Data Products Applications","text":"richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"ppms","dir":"Articles","previous_headings":"","what":"Assessing model performance","title":"eBird Status Data Products Applications","text":"Goal: use spatial predictive performance metrics (PPMs) assess model performance varies across range species. eBird Status Trends species assigned quality scores (0-3) season describing quality model predictions across full range species. example, let’s look breeding season quality Horned Lark. score (2) corresponds “medium quality”, indicating extrapolation omission breeding season predictions. However, Horned Lark broadly distributed species, occurring throughout holarctic realm. Data users typically interested model predictions within particular region, quality score gives indication extrapolation omission occurring, occurs somewhere within range. Someone working predictions Mongolian portion range may dealing different prediction quality someone working predictions part range Western United States. model quality scores quite coarse, spatial predictive performance metrics (PPMs) available species provide much finer scale information model quality. migratory species like Horned Lark, data products provide suite performance metrics weekly 27 km resolution. Let’s load proportion Bernoulli deviance explained metric, typically one useful assessing model quality. PPM downloaded automatically first time ’s loaded. (’d rather download PPMs species front, use ebirdst_download_status(download_ppms = TRUE).) data form 27 km raster 52 layers, one week year. Let’s average PPMs across weeks breeding season, subset just portion range within United States Canada, make map. Negative proportions deviance explained (red map) indicate occurrence model performing worse null model extra caution used using predictions areas.","code":"horlar_review <- filter(ebirdst_runs, species_code == \"horlar\") |> select(breeding_quality, breeding_start, breeding_end) print(horlar_review) #> # A tibble: 1 × 3 #> breeding_quality breeding_start breeding_end #> #> 1 2 2023-06-07 2023-08-09 # load the ppm; it's downloaded automatically if not already present bernoulli_dev <- load_ppm(\"horlar\", ppm = \"occ_bernoulli_dev\") print(bernoulli_dev) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : horlar_ppm_occ-bernoulli-dev_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : -1.20164, -0.340517, -0.220324, -0.184706, -0.167553, -0.217626, ... #> max values : 0.516208, 0.516208, 0.500421, 0.419996, 0.419996, 0.360411, ... # subset to weeks in breeding season and average breeding_dates <- c(horlar_review$breeding_start, horlar_review$breeding_end) |> format(\"%m-%d\") in_breeding <- names(bernoulli_dev) >= breeding_dates[1] & names(bernoulli_dev) <= breeding_dates[2] bernoulli_dev_breeding <- mean(bernoulli_dev[[in_breeding]], na.rm = TRUE) # mask to just canada and the united states us_ca <- ne_countries(country = c(\"United States of America\", \"Canada\")) |> st_transform(st_crs(bernoulli_dev_breeding)) bernoulli_dev_breeding_us_ca <- bernoulli_dev_breeding |> crop(us_ca) |> mask(us_ca) |> trim() # make a map ppm_cols <- rev(scico(100, palette = \"vik\")) max_val <- global(abs(bernoulli_dev_breeding_us_ca), fun = max, na.rm = TRUE) |> as.numeric() plot(bernoulli_dev_breeding_us_ca, range = c(-max_val, max_val), col = ppm_cols, axes = FALSE, box = TRUE ) plot(st_geometry(us_ca), add = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog","dir":"Articles","previous_headings":"","what":"2023 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2023 (available May 2025) Citation: Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 new eBird Trends generated released version. existing versions remain website; please see previous changelog. CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"new eBird Trends generated released version. existing versions remain website; please see previous changelog.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"changes.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive Performance Metrics (PPMs)","title":"eBird Status and Trends Data Products Changelog","text":"Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table .","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-1","dir":"Articles","previous_headings":"","what":"2022 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2022 (available November 2023) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed. ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status-1","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-1","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-1","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates-1","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-1","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-1","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-1","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction-1","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-1","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-1","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends-1","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"covariates","dir":"Articles","previous_headings":"","what":"Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-2","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products-1","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional trends CIs.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-2","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-2","dir":"Articles","previous_headings":"","what":"2021 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2021 (available November 2022) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, . Rodewald, C. Wood, . Davies, . Spencer. 2022. eBird Status Trends, Data Version: 2021; Released: 2022. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2021 CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1. ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-2","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-2","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-2","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-2","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"general","dir":"Articles","previous_headings":"","what":"General","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-2","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"fit-and-predict","dir":"Articles","previous_headings":"","what":"Fit and Predict","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"residents","dir":"Articles","previous_headings":"","what":"Residents","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-3","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-3","dir":"Articles","previous_headings":"","what":"2020 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2020 (available Fall 2021) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, L. Jaromczyk, C. Wood, . Davies, M. Iliff, L. Seitz. 2021. eBird Status Trends, Data Version: 2020; Released: 2021. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2020 CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-3","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-3","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-3","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-3","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-1","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-1","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"resident-methodology","dir":"Articles","previous_headings":"","what":"Resident Methodology","title":"eBird Status and Trends Data Products Changelog","text":"stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-4","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-4","dir":"Articles","previous_headings":"","what":"2019 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2019 (available Fall 2020) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, C. Wood, . Davies, M. Iliff, L. Seitz. 2020. eBird Status Trends, Data Version: 2019; Released: 2020. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2019 CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-4","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-4","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-4","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-4","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-2","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-2","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"seasonal-products","dir":"Articles","previous_headings":"","what":"Seasonal Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-5","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: now 184 species modeled fully global extent. overall species total now 807.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review-1","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Introduction to eBird Status Data Products","text":"study conservation natural world relies detailed information distributions, abundances, population trends species time. many taxa, information challenging obtain relevant geographic scales. goal eBird Status Trends project use data eBird, global participatory science bird monitoring program administered Cornell Lab Ornithology, generate reliable, standardized source biodiversity information world’s bird populations. translate eBird observations robust data products, use machine learning fill spatiotemporal gaps, using local land cover descriptions derived remote sensing data, controlling biases inherent species observations collected community scientists. See Fink et al. (2019) information analysis used generate data. vignette gives overview eBird Status Data Products, estimate full annual cycle distributions, relative abundances, habitat associations 2,980 species year 2023. species, distribution abundance estimates available 52 weeks year across regular 3 km 3 km square grid cells covering globe. Variation detectability associated search effort controlled standardizing estimates expected occurrence rate count species 1 hour, 2 km checklist expert eBird observer optimal time day optimal weather conditions detecting species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"access","dir":"Articles","previous_headings":"","what":"Data access","title":"Introduction to eBird Status Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Filling form generates key used R package. terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided eBird Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided . Throughout vignette, ’ll use simplified example dataset consisting estimates Yellow-bellied Sapsucker Michigan. dataset designed small faster download , unlike data species, accessible without key. data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website. new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"library(dplyr) library(sf) library(terra) library(ebirdst) # download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE) ebirdst_data_inventory() #> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) #> #> 2022 Trends Data Products (9.3 MB) #> Brewer's Sparrow (brespa): 3 files, 4.0 MB #> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB #> Sage Thrasher (sagthr): 3 files, 2.7 MB #> #> 2023 Status Data Products (1.5 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 2 files, 103.7 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"downloading-data","dir":"Articles","previous_headings":"","what":"Downloading data","title":"Introduction to eBird Status Data Products","text":"data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"# download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"managing-downloaded-data","dir":"Articles","previous_headings":"","what":"Managing downloaded data","title":"Introduction to eBird Status Data Products","text":"new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"ebirdst_data_inventory() #> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) #> #> 2022 Trends Data Products (9.3 MB) #> Brewer's Sparrow (brespa): 3 files, 4.0 MB #> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB #> Sage Thrasher (sagthr): 3 files, 2.7 MB #> #> 2023 Status Data Products (1.5 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 2 files, 103.7 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"species","dir":"Articles","previous_headings":"","what":"Species list","title":"Introduction to eBird Status Data Products","text":"data frame ebirdst_runs lists species eBird Status Data Products available download. ’re working RStudio, can use View() interactively explore data frame. species go process review expert species prior released. ebirdst_runs data frame contains information review process. migrants, reviewers assess model estimates four seasons: breeding, non-breeding, pre-breeding migration, post-breeding migration. Resident (.e., non-migratory) species identified TRUE is_resident column ebirdst_runs, species assessed across whole year rather seasonally. ebirdst_runs contains two important pieces information season: quality rating seasonal dates. seasonal dates define weeks fall within season. Breeding non-breeding season dates defined species weeks seasons species’ population move. reason, seasons also described stationary periods. Migration periods defined periods movement stationary non-breeding breeding seasons. Note many species migratory periods include movement breeding grounds non-breeding grounds, also post-breeding dispersal, molt migration, movements. Reviewers also examine model estimates season assess amount extrapolation omission present model, assign associated quality rating ranging 0 (lowest quality) 3 (highest quality). Extrapolation refers cases model predicts occurrence species known absent, omission refers model failing predict occurrence species known present. rating 0 implies season failed review model results used period. Ratings 1-3 correspond gradient less extrapolation /omission, often use traffic light analogy referring : Red light (1): low quality, extensive extrapolation /omission noise, least regions estimates accurate; can used caution certain regions. Yellow light (2): medium quality, extrapolation /omission; use caution. Green light (3): high quality, little extrapolation /omission; seasons can safely used. Let’s look results review example dataset. , can see Yellow-bellied Sapsucker modeled migrant four seasons received quality 3, highest rating. Note variety trends-specific columns end data frame ’ll ignore now; columns covered trends vignette","code":"glimpse(ebirdst_runs) #> Rows: 2,981 #> Columns: 30 #> $ species_code \"yebsap-example\", \"abetow\", \"absfin1\", … #> $ scientific_name \"Sphyrapicus varius\", \"Melozone aberti\"… #> $ common_name \"Yellow-bellied Sapsucker\", \"Abert's To… #> $ is_resident FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, F… #> $ breeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ breeding_start 2023-05-17, NA, NA, 2023-05-31, NA, NA… #> $ breeding_end 2023-08-16, NA, NA, 2023-08-02, NA, NA… #> $ nonbreeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ nonbreeding_start 2023-11-22, NA, NA, 2023-11-22, NA, NA… #> $ nonbreeding_end 2023-03-08, NA, NA, 2023-02-22, NA, NA… #> $ postbreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ postbreeding_migration_start 2023-08-23, NA, NA, 2023-08-09, NA, NA… #> $ postbreeding_migration_end 2023-11-15, NA, NA, 2023-11-15, NA, NA… #> $ prebreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ prebreeding_migration_start 2023-03-15, NA, NA, 2023-03-01, NA, NA… #> $ prebreeding_migration_end 2023-05-10, NA, NA, 2023-05-24, NA, NA… #> $ resident_quality NA, \"3\", \"3\", NA, \"3\", \"3\", NA, \"2\", \"3… #> $ resident_start NA, 2023-01-04, 2023-01-04, NA, 2023-0… #> $ resident_end NA, 2023-12-27, 2023-12-27, NA, 2023-1… #> $ status_version_year 2023, 2023, 2023, 2023, 2023, 2023, 202… #> $ has_trends TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, F… #> $ trends_season \"breeding\", \"resident\", NA, \"breeding\",… #> $ trends_region \"north_america\", \"north_america\", NA, \"… #> $ trends_start_year 2012, 2012, NA, 2012, 2011, NA, NA, NA,… #> $ trends_end_year 2022, 2022, NA, 2022, 2021, NA, NA, NA,… #> $ trends_start_date \"05-24\", \"01-25\", NA, \"05-24\", \"11-01\",… #> $ trends_end_date \"08-16\", \"05-10\", NA, \"08-02\", \"05-03\",… #> $ rsquared 0.8572896, 0.9231821, NA, 0.8570363, 0.… #> $ beta0 0.227000849, -0.013923012, NA, 0.689424… #> $ trends_version_year 2022, 2022, NA, 2022, 2022, NA, NA, NA,… ebirdst_runs |> filter(species_code == \"yebsap-example\") |> glimpse() #> Rows: 1 #> Columns: 30 #> $ species_code \"yebsap-example\" #> $ scientific_name \"Sphyrapicus varius\" #> $ common_name \"Yellow-bellied Sapsucker\" #> $ is_resident FALSE #> $ breeding_quality \"3\" #> $ breeding_start 2023-05-17 #> $ breeding_end 2023-08-16 #> $ nonbreeding_quality \"3\" #> $ nonbreeding_start 2023-11-22 #> $ nonbreeding_end 2023-03-08 #> $ postbreeding_migration_quality \"3\" #> $ postbreeding_migration_start 2023-08-23 #> $ postbreeding_migration_end 2023-11-15 #> $ prebreeding_migration_quality \"3\" #> $ prebreeding_migration_start 2023-03-15 #> $ prebreeding_migration_end 2023-05-10 #> $ resident_quality NA #> $ resident_start NA #> $ resident_end NA #> $ status_version_year 2023 #> $ has_trends TRUE #> $ trends_season \"breeding\" #> $ trends_region \"north_america\" #> $ trends_start_year 2012 #> $ trends_end_year 2022 #> $ trends_start_date \"05-24\" #> $ trends_end_date \"08-16\" #> $ rsquared 0.8572896 #> $ beta0 0.2270008 #> $ trends_version_year 2022"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"types","dir":"Articles","previous_headings":"","what":"Data types","title":"Introduction to eBird Status Data Products","text":"species, variety data products available, can categorized following broad types: Weekly raster estimates: weekly estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. core products products derived. Seasonal raster estimates: seasonal estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. derived corresponding weekly raster data summarizing across weeks falling within season based dates defined ebirdst_runs data frame. seasons passed expert review process included. Seasonal range boundaries: seasonal range boundary polygons GeoPackage format. Regional summary statistics: variety summary statistics countries states/provinces (e.g. proportion total population region) CSV format. Predictive performance metrics (PPMs): suite spatial predictive performance metrics regular 27 km 27 km grid GeoTIFF format. data products covered detail following sections, including details load data R. loading functions take species (given common name, scientific name, species code) first argument. requested data already downloaded, loading functions download automatically first use, calling ebirdst_download_status() advance optional. used non-default path argument ebirdst_download_status() also need provide path argument loading functions. core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis. seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species. Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example: Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value. regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names: subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" ) # seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\") regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985… # download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"weekly-raster-estimates","dir":"Articles","previous_headings":"","what":"Weekly raster estimates","title":"Introduction to eBird Status Data Products","text":"core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"seasonal-raster-estimates","dir":"Articles","previous_headings":"","what":"Seasonal raster estimates","title":"Introduction to eBird Status Data Products","text":"seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species.","code":"# seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" )"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"range-boundaries","dir":"Articles","previous_headings":"","what":"Range boundaries","title":"Introduction to eBird Status Data Products","text":"Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example:","code":"# seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\")"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-summary-statistics","dir":"Articles","previous_headings":"","what":"Regional summary statistics","title":"Introduction to eBird Status Data Products","text":"Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value.","code":"regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985…"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-statistics-for-all-species","dir":"Articles","previous_headings":"","what":"Regional statistics for all species","title":"Introduction to eBird Status Data Products","text":"regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names:","code":"# download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive performance metrics (PPMs)","title":"Introduction to eBird Status Data Products","text":"subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"coverage","dir":"Articles","previous_headings":"","what":"Data coverage","title":"Introduction to eBird Status Data Products","text":"addition species-specific data products discussed , ebirdst provides access two species-agnostic data products data coverage workflow. data products GeoTIFF format provide weekly estimates regular 3 km 3 km grid Site selection probability: modeled probability (0-1) grid cell certain habitat configuration received eBird checklist within region season. Spatial coverage: fraction (0-1) grid cells within region season checklists given week. data products identify areas coverage eBird data relatively high low, can used prioritize areas increased data collection. example, load map site selection probability week May 10, use load_data_coverage(), download requested weeks automatically haven’t already downloaded. prefer download data coverage products advance, use ebirdst_download_data_coverage().","code":"site_sel <- load_data_coverage(\"selection-probability\", weeks = \"05-10\") plot(site_sel, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Introduction to eBird Status Data Products","text":"Fink, D., T. Auer, . Johnston, V. Ruiz‐Gutierrez, W.M. Hochachka, S. Kelling. 2019. Modeling avian full annual cycle distribution population trends citizen science data. Ecological Applications, 00(00):e02056. doi: 10.1002/eap.2056","code":""},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"download","dir":"Articles","previous_headings":"","what":"Downloading data","title":"eBird Trends Data Products","text":"Trends data access granted process eBird Status Data Products. haven’t already requested access key, consult relevant section Introduction eBird Status Data Products vignette. Status Data Products, trends data downloaded automatically first time load , cases don’t need download explicitly. ’d rather download data one species advance, use ebirdst_download_trends(), first argument vector common names, scientific names, species codes. Trends data downloaded centralized directory file management access performed via ebirdst. example, optionally pre-download breeding season trends data Sage Thrasher :","code":"ebirdst_download_trends(\"Sage Thrasher\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"load","dir":"Articles","previous_headings":"","what":"Loading data into R","title":"eBird Trends Data Products","text":"Trends data set species can loaded R using function load_trends(), downloads data automatically aren’t already present. example, can load Sage Thrasher trends estimates : row corresponds trend estimate 27 km 27 km grid cell, identified srd_id column cell center given longitude latitude coordinates. Columns beginning abd_ppy provide estimates percent per year trend relative abundance 80% confidence intervals, beginning abd_trend provide estimates cumulative trend relative abundance 80% confidence intervals time period. abd column gives relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). start_year/end_year start_date/end_date columns provide redundant information available ebirdst_runs. Specifically Sage Thrasher : tells us trend estimates breeding season (May 17 July 12) period 2012-2022.","code":"trends_sagthr <- load_trends(\"Sage Thrasher\") trends_runs |> filter(common_name == \"Sage Thrasher\") |> select( trends_start_year, trends_end_year, trends_start_date, trends_end_date ) #> # A tibble: 1 × 4 #> trends_start_year trends_end_year trends_start_date trends_end_date #> #> 1 2012 2022 05-17 07-12"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial","dir":"Articles","previous_headings":"","what":"Conversion to spatial formats","title":"eBird Trends Data Products","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km 27 km equal area grid. grid cell, coordinates (longitude latitude) provided center grid cell. many applications, explicitly spatial format useful coordinates can use convert tabular format either vector raster format. tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species. tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" ) trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) ) # rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-points","dir":"Articles","previous_headings":"","what":"Vector (points)","title":"eBird Trends Data Products","text":"tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS ","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-circles","dir":"Articles","previous_headings":"","what":"Vector (abundance-scaled circles)","title":"eBird Trends Data Products","text":"produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species.","code":"trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-raster","dir":"Articles","previous_headings":"","what":"Raster","title":"eBird Trends Data Products","text":"tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"# rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"uncertainty","dir":"Articles","previous_headings":"","what":"Uncertainty","title":"eBird Trends Data Products","text":"model used estimate trends produces ensemble 100 estimates location, based random subsample eBird data. ensemble estimates used quantify uncertainty trends estimates. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. wishing access estimates individual folds making ensemble can use fold_estimates = TRUE loading data. fold-level estimates can used quantify uncertainty, example, calculating trend given region. example, let’s load fold-level estimates Sage Thrasher: data frame much concise, giving estimates mid-point relative abundance percent per year trend relative abundance 100 folds grid cell. eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California). cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"trends_sagthr_folds <- load_trends(\"sagthr\", fold_estimates = TRUE) print(trends_sagthr_folds) #> # A tibble: 246,200 × 8 #> species_code season fold srd_id latitude longitude abd abd_ppy #> #> 1 sagthr breeding 1 254264 49.4 -120. 0.000527 -3.11 #> 2 sagthr breeding 1 255764 49.1 -120. 0.0147 -2.97 #> 3 sagthr breeding 1 255765 49.1 -119. 0.000214 -2.25 #> 4 sagthr breeding 1 257264 48.9 -120. 0.00174 -4.53 #> 5 sagthr breeding 1 257265 48.9 -120. 0.0132 -3.86 #> 6 sagthr breeding 1 257266 48.9 -119. 0.00118 -4.04 #> 7 sagthr breeding 1 258765 48.6 -120. 0.00335 -3.08 #> 8 sagthr breeding 1 258766 48.6 -119. 0.0191 -0.459 #> 9 sagthr breeding 1 258767 48.6 -119. 0.00511 -6.40 #> 10 sagthr breeding 1 260264 48.4 -120. 0.000104 -2.71 #> # ℹ 246,190 more rows # boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\") sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-regional","dir":"Articles","previous_headings":"","what":"Regional trends","title":"eBird Trends Data Products","text":"eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California).","code":"# boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-multi","dir":"Articles","previous_headings":"","what":"Multi-species trends","title":"eBird Trends Data Products","text":"cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Matthew Strimas-Mackey. Author, maintainer. Shawn Ligocki. Author. Tom Auer. Author. Daniel Fink. Author. Cornell Lab Ornithology. Copyright holder.","code":""},{"path":"https://ebird.github.io/ebirdst/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Strimas-Mackey M, Ligocki S, Auer T, Fink D (2026). ebirdst: Access Analyze eBird Status Trends Data Products. R package version 4.2023.1, https://ebird.github.io/ebirdst/.","code":"@Manual{, title = {ebirdst: Access and Analyze eBird Status and Trends Data Products}, author = {Matthew Strimas-Mackey and Shawn Ligocki and Tom Auer and Daniel Fink}, year = {2026}, note = {R package version 4.2023.1}, url = {https://ebird.github.io/ebirdst/}, }"},{"path":[]},{"path":"https://ebird.github.io/ebirdst/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Trends project Cornell Lab Ornithology uses machine-learning models estimate distributions, relative abundances, population trends high spatial temporal resolution across full annual cycle 2,980 bird species globally. models learn relationships bird observations collected eBird suite remotely sensed habitat variables, accounting noise bias inherent community science datasets, including variation observer behavior effort. Interactive maps visualizations model estimates can explored online, Status Trends Data Products provide access data behind maps visualizations. ebirdst R package provides set tools downloading data products, loading R, using visualization analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Access and Analyze eBird Status and Trends Data Products","text":"Install ebirdst GitHub : version ebirdst designed work 2023 version Status Data Products 2022 version Trends Data Products. Users strongly discouraged comparing Status Trends results years due methodological differences versions. accessed used previous versions /may need access previous versions reasons related reproducibility, please contact ebird@cornell.edu request considered.","code":"if (!requireNamespace(\"remotes\", quietly = TRUE)) { install.packages(\"remotes\") } remotes::install_github(\"ebird/ebirdst\")"},{"path":"https://ebird.github.io/ebirdst/index.html","id":"webinars","dir":"","previous_headings":"","what":"Webinars","title":"Access and Analyze eBird Status and Trends Data Products","text":"series eBird Status Trends webinars presented collaboration Birds World available YouTube. webinars cover much material vignettes available ebirdst R package website, visual interactive format. webinars follows Estimating Abundance Trends World’s Birds using eBird data: introduction methodology used generate eBird Status Trends Data Products data products used conservation research. Part : introduction range data products available well suite tools training materials available working data. webinar also covers work spatial data products QGIS. Part II: applications eBird Status Data Products. Part III: applications eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"data-access","dir":"","previous_headings":"","what":"Data access","title":"Access and Analyze eBird Status and Trends Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Access form generates key used R package provided immediately (long commercial use requested). terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided .","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"access-outside-of-r","dir":"","previous_headings":"Data access","what":"Access outside of R","title":"Access and Analyze eBird Status and Trends Data Products","text":"interested accessing data outside R, two alternative options: widely used data products available direct download Status Trends website. Spatial data accessible widely adopted GeoTIFF GeoPackage formats, can opened QGIS, ArcGIS, GIS software. API programmatic access outside R. information eBird Status Trends Data Products API, consult associated vignette.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Data Products eBird Trends Data Products come different versions require different citations. Please cite eBird Status Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 Download BibTeX version. Please cite eBird Trends Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 Download BibTeX version.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"vignettes","dir":"","previous_headings":"","what":"Vignettes","title":"Access and Analyze eBird Status and Trends Data Products","text":"full package documentation, including series vignettes covering full spectrum introductory advanced usage, please see package website. available vignettes : Introduction eBird Status Data Products: covers data access, available data products, structure format data files. eBird Status Data Products Applications: demonstrates work raster data products use variety common applications. eBird Trends Data Products: covers downloading working eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"quick-start","dir":"","previous_headings":"","what":"Quick Start","title":"Access and Analyze eBird Status and Trends Data Products","text":"quick start guide shows download data plot relative abundance values similar plotted eBird Status Trends weekly abundance animations. guide, throughout package documentation, simplified example dataset used consisting Yellow-bellied Sapsucker Michigan. full list species available download, look data frame ebirst_runs, included package. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using R package. Downloaded data specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"library(fields) library(rnaturalearth) library(sf) library(terra) library(ebirdst) # load relative abundance raster stack for yellow-bellied sapsucker in michigan # consisting of 52 layers, one for each week # this will download the data if it has not already been downloaded abd <- load_raster(\"yebsap-example\", resolution = \"27km\") # load species specific mapping parameters pars <- load_fac_map_parameters(\"yebsap-example\") # custom coordinate reference system crs <- st_crs(pars$custom_projection) # legend breaks breaks <- pars$weekly_bins # legend labels for top, middle, and bottom labels <- pars$weekly_labels # the date that each raster layer corresponds to is stored within the labels weeks <- as.Date(names(abd)) print(weeks) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # select a week in the middle of the year abd <- abd[[26]] # project to species specific coordinates # the nearest neighbor method preserves cell values across projections abd_prj <- project(trim(abd), crs$wkt, method = \"near\") # get reference data from the rnaturalearth package # the example data currently shows only the US state of Michigan wh_states <- ne_states(country = c(\"United States of America\", \"Canada\"), returnclass = \"sf\") |> st_transform(crs = crs) |> st_geometry() # start plotting par(mfrow = c(1, 1), mar = c(0, 0, 0, 0)) # use raster bounding box to set the spatial extent for the plot bb <- st_as_sfc(st_bbox(trim(abd_prj))) plot(bb, col = \"white\", border = \"white\") # add background reference data plot(wh_states, col = \"#cfcfcf\", border = NA, add = TRUE) # plot zeroes as light gray plot(abd_prj, col = \"#e6e6e6\", maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # define color palette pal <- ebirdst_palettes(length(breaks) - 1, type = \"weekly\") # plot abundance plot(abd_prj, col = pal, breaks = breaks, maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # state boundaries plot(wh_states, add = TRUE, col = NA, border = \"white\", lwd = 1.5) # legend label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot(zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list(at = c(0, 0.5, 1), labels = round(labels, 2), cex.axis = 0.9, lwd.ticks = 0))"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign points to a spacetime grid — assign_to_grid","title":"Assign points to a spacetime grid — assign_to_grid","text":"Given set points space (optionally) time, define regular grid given dimensions, return grid cell index point.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"assign_to_grid( points, coords = NULL, is_lonlat = FALSE, res, jitter_grid = TRUE, grid_definition = NULL )"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign points to a spacetime grid — assign_to_grid","text":"points data frame; points spatial coordinates x y, optional time coordinate t. coords character; names spatial temporal coordinates input dataframe. provide names want overwrite default coordinate names: c(\"x\", \"y\", \"t\") c(\"longitude\", \"latitude\", \"t\") is_lonlat = TRUE. is_lonlat logical; points unprojected, lon-lat coordinates. case, input data frame columns \"longitude\" \"latitude\" points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution grid x, y, t dimensions, respectively. 2 dimensions provided, space grid generated. units res coordinates input data unless is_lonlat true case x y resolution provided meters. jitter_grid logical; whether jitter location origin grid introduce randomness. grid_definition list; object defining grid via origin resolution components. assign multiple sets points exactly grid, assign_to_grid() returns data frame grid_definition attribute can passed subsequent calls assign_to_grid(). res jitter ignored grid_definition provided.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign points to a spacetime grid — assign_to_grid","text":"Data frame indices space-spacetime grid cells. data frame grid_definition attribute can used reconstruct grid.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"set.seed(1) # generate some example points points_xyt <- data.frame(x = runif(100), y = runif(100), t = rnorm(100)) # assign to grid cells <- assign_to_grid(points_xyt, res = c(0.1, 0.1, 0.5)) # assign a second set of points to the same grid assign_to_grid(points_xyt, grid_definition = attr(cells, \"grid_definition\")) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 4-7 4-7-4 #> 2 5-4 5-4-5 #> 3 7-3 7-3-3 #> 4 10-10 10-10-6 #> 5 3-7 3-7-4 #> 6 10-3 10-3-9 #> 7 10-2 10-2-7 #> 8 8-5 8-5-7 #> 9 7-10 7-10-6 #> 10 2-7 2-7-9 #> # ℹ 90 more rows # assign lon-lat points to a 10km space-only grid points_ll <- data.frame(longitude = runif(100, min = -180, max = 180), latitude = runif(100, min = -90, max = 90)) assign_to_grid(points_ll, res = c(10000, 10000), is_lonlat = TRUE) #> # A tibble: 100 × 1 #> cell_xy #> #> 1 2960-1224 #> 2 3184-781 #> 3 2110-1687 #> 4 1254-617 #> 5 2407-1571 #> 6 244-1415 #> 7 3172-924 #> 8 2894-1604 #> 9 1203-769 #> 10 2118-1 #> # ℹ 90 more rows # overwrite default coordinate names, 5km by 1 week grid points_names <- data.frame(lon = runif(100, min = -180, max = 180), lat = runif(100, min = -90, max = 90), day = sample.int(365, size = 100)) assign_to_grid(points_names, res = c(5000, 5000, 7), coords = c(\"lon\", \"lat\", \"day\"), is_lonlat = TRUE) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 5348-68 5348-68-49 #> 2 2294-1332 2294-1332-40 #> 3 2577-1839 2577-1839-16 #> 4 5159-3343 5159-3343-26 #> 5 867-2655 867-2655-5 #> 6 5944-2704 5944-2704-19 #> 7 2254-1551 2254-1551-41 #> 8 3453-166 3453-166-51 #> 9 3515-2926 3515-2926-9 #> 10 4736-1401 4736-1401-33 #> # ℹ 90 more rows"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate MCC and F1 score — calculate_mcc_f1","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"Given binary observed predicted response, estimate Matthews correlation coefficient (MCC) F1 score.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"calculate_mcc_f1(observed, predicted)"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"observed logical 0/1; observed binary response. predicted logical 0/1; predicted binary response. typically need generated applying threshold continuous predicted response.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"list two elements: mcc f1.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"obs <- c(rep(1L, 1000L), rep(0L, 10000L)) pred <- c(rbeta(300L, 12, 2), rbeta(700L, 3, 4), rbeta(10000L, 2, 3)) calculate_mcc_f1(obs > 0, pred > 0.5) #> $f1 #> [1] 0.2227891 #> #> $mcc #> [1] 0.125311 #>"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"Convert percent per year trend cumulative trend","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"convert_ppy_to_cumulative(x, n_years)"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"x numeric; percent per year trend 0-100 scale rather 0-1 scale. n_years integer; number years.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"numeric vector length x contains cumulative trend resulting n_years years compounding annual trend.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"ppy_trend <- runif(100, min = -100, 100) cumulative_trend <- convert_ppy_to_cumulative(ppy_trend, n_years = 5) cbind(ppy_trend, cumulative_trend) #> ppy_trend cumulative_trend #> [1,] 26.5237797 224.235667 #> [2,] -78.7290758 -99.956456 #> [3,] 37.0308294 383.160512 #> [4,] 99.9613629 3096.910224 #> [5,] -60.5870956 -99.048974 #> [6,] -65.7462530 -99.528436 #> [7,] -66.6408817 -99.586883 #> [8,] 93.1104965 2585.526253 #> [9,] -27.6598451 -80.189421 #> [10,] -49.0065226 -96.551953 #> [11,] -72.5135942 -99.843112 #> [12,] -62.3086964 -99.239313 #> [13,] 67.5481140 1220.376291 #> [14,] -98.5543832 -100.000000 #> [15,] -21.6235981 -70.424874 #> [16,] 49.5139800 647.152082 #> [17,] 78.0171083 1687.757918 #> [18,] -37.4275029 -90.407817 #> [19,] -76.0853987 -99.921780 #> [20,] 16.0109404 110.133230 #> [21,] 4.9255232 27.176163 #> [22,] -31.6596431 -85.093139 #> [23,] -98.7014870 -100.000000 #> [24,] 52.0246697 712.026762 #> [25,] 23.2525141 184.432313 #> [26,] 28.6719997 252.712013 #> [27,] 82.5191530 1925.546527 #> [28,] -82.3117551 -99.982685 #> [29,] -28.0494563 -80.717187 #> [30,] -47.2478580 -95.914921 #> [31,] 18.3742505 132.426805 #> [32,] -97.3313568 -99.999999 #> [33,] 24.4785105 198.862837 #> [34,] -59.1507802 -98.862585 #> [35,] 3.2270633 17.210862 #> [36,] 88.5309670 2281.844887 #> [37,] 86.9456285 2183.371470 #> [38,] -18.6704147 -64.416981 #> [39,] -12.7653876 -49.482229 #> [40,] -70.8498831 -99.789525 #> [41,] -33.4829047 -86.978339 #> [42,] -20.7052394 -68.651089 #> [43,] -69.0053591 -99.713956 #> [44,] 92.0461348 2512.328892 #> [45,] 82.8205821 1942.327742 #> [46,] -50.1079920 -96.908602 #> [47,] -51.3973860 -97.287947 #> [48,] 82.6365235 1932.067636 #> [49,] 79.8070486 1779.462055 #> [50,] -37.4815181 -90.449148 #> [51,] 82.5406853 1926.741607 #> [52,] -39.6010438 -91.962015 #> [53,] -63.6699866 -99.367111 #> [54,] 61.6571397 1004.013670 #> [55,] -50.4581128 -97.015561 #> [56,] 75.0888617 1545.479955 #> [57,] 31.6975001 296.175538 #> [58,] -24.0338038 -74.701085 #> [59,] -81.7176180 -99.979575 #> [60,] 26.9031846 229.126312 #> [61,] -4.8496712 -22.007747 #> [62,] -53.2877808 -97.775909 #> [63,] -65.6208901 -99.519744 #> [64,] 71.7607693 1394.926645 #> [65,] -47.6182770 -96.056345 #> [66,] 64.2411353 1095.114984 #> [67,] -35.0734280 -88.462483 #> [68,] -85.2128339 -99.992930 #> [69,] 14.4770744 96.604118 #> [70,] 33.2304805 319.776353 #> [71,] 72.6926422 1435.922035 #> [72,] -91.9113623 -99.999654 #> [73,] 23.6590130 189.153784 #> [74,] -59.7943409 -98.949404 #> [75,] -77.2165910 -99.938611 #> [76,] -45.6508961 -95.257996 #> [77,] 57.0508700 855.436291 #> [78,] 27.5961604 238.211234 #> [79,] -6.0898502 -26.959680 #> [80,] 65.3054437 1134.342770 #> [81,] -1.3583505 -6.609730 #> [82,] 55.0320627 795.586683 #> [83,] 40.7493845 452.373101 #> [84,] -81.9888145 -99.981046 #> [85,] -3.7408039 -17.356034 #> [86,] -83.0425453 -99.985978 #> [87,] -65.6136450 -99.519237 #> [88,] -33.6547709 -87.145698 #> [89,] -85.5264190 -99.993648 #> [90,] 99.3374145 3047.343215 #> [91,] -73.3879390 -99.866527 #> [92,] 0.8804244 4.480322 #> [93,] -58.4314961 -98.758857 #> [94,] 98.8942169 3012.510161 #> [95,] 28.6094997 251.856229 #> [96,] 2.3137241 12.116483 #> [97,] -35.4352674 -88.780415 #> [98,] -92.2750663 -99.999725 #> [99,] -92.3839119 -99.999744 #> [100,] 19.5461488 144.161930"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the Status and Trends week that a date falls into — date_to_st_week","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"Get Status Trends week date falls ","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"date_to_st_week(dates, version = 2022)"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"dates vector dates. version One 2021 date scheme used 2021 prior data releases 2022 date scheme used 2022 subsequent releases. Default 2022.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"integer vector weeks numbers 1-52.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"d <- as.Date(c(\"2016-04-08\", \"2018-12-31\", \"2014-01-01\", \"2018-09-04\")) date_to_st_week(d) #> [1] 15 52 1 36"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":null,"dir":"Reference","previous_headings":"","what":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Tools load, map, plot, analyze eBird Status Trends data products","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Maintainer: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Authors: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Shawn Ligocki sligocki@cornell.edu Tom Auer mta45@cornell.edu (ORCID) Daniel Fink df36@cornell.edu (ORCID) contributors: Cornell Lab Ornithology [copyright holder]","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":null,"dir":"Reference","previous_headings":"","what":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"Identify return path default download directory eBird Status Trends data products. directory can defined setting environment variable EBIRDST_DATA_DIR, otherwise directory returned tools::R_user_dir(\"ebirdst\", = \"data\") used.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"path data download directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir() #> [1] \"/Users/mes335/projects/workshops/2026-08-04_ebirdst-workshop_rao-2026/ebirdst-data/\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":null,"dir":"Reference","previous_headings":"","what":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"Returns summary eBird Status Trends data packages currently downloaded disk, separate rows Status Trends data products species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"ebirdst_data_inventory(path = ebirdst_data_dir()) # S3 method for class 'ebirdst_inventory' print(x, ...)"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"path character; directory data stored. Defaults ebirdst_data_dir(). x ebirdst_inventory object returned ebirdst_data_inventory(). ... ignored.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"tibble class ebirdst_inventory one row per data package found disk, columns species_code, common_name, scientific_name, version_year, dataset (\"status\" \"trends\"), n_files, size_mb. object compact print method displays inventory grouped version year dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"if (FALSE) { # \\dontrun{ # inventory of all data downloaded to the default directory ebirdst_data_inventory() # inventory for a specific directory ebirdst_data_inventory(\"/path/to/data\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":null,"dir":"Reference","previous_headings":"","what":"Delete downloaded eBird Status and Trends data — ebirdst_delete","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Deletes downloaded eBird Status Trends data packages specified species /version years. called interactively without force = TRUE, prints summary data deleted prompts confirmation proceeding.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"ebirdst_delete( species = NULL, year = NULL, path = ebirdst_data_dir(), force = FALSE )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"species character; one species given eBird species codes, scientific names, English common names. NULL (default), data species included. year integer; one version years. NULL (default), data years included. path character; directory data stored. Defaults ebirdst_data_dir(). force logical; TRUE, skip interactive confirmation prompt delete without asking. Required running non-interactive session.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Invisibly returns character vector paths deleted directories.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"if (FALSE) { # \\dontrun{ # review and confirm deletion of example data ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE) # delete a specific species and year ebirdst_delete(species = \"Yellow-bellied Sapsucker\", year = 2022, force = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: site selection probability spatial coverage. function downloads data products raster GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"ebirdst_download_data_coverage( path = ebirdst_data_dir(), pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"Path folder containing downloaded data coverage products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download all data coverage products ebirdst_download_data_coverage() # download just the spatial coverage products ebirdst_download_data_coverage(pattern = \"spatial-coverage\") # download a single week of data coverage products ebirdst_download_data_coverage(pattern = \"01-04\") # download all weeks in april ebirdst_download_data_coverage(pattern = \"04-\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status Data Products — ebirdst_download_status","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Download eBird Status Data Products single species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. low resolution (27 km) data available example data. addition, example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"ebirdst_download_status( species, path = ebirdst_data_dir(), download_abundance = TRUE, download_occurrence = FALSE, download_count = FALSE, download_ranges = FALSE, download_regional = FALSE, download_pis = FALSE, download_ppms = FALSE, download_all = FALSE, pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status Data Products — ebirdst_download_status","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). download_abundance whether download estimates abundance proportion population. download_occurrence logical; whether download estimates occurrence. download_count logical; whether download estimates count. download_ranges logical; whether download range polygons. download_regional logical; whether download regional summary stats, e.g. percent population regions. download_pis logical; whether download spatial estimates predictor importance. download_ppms logical; whether download spatial predictive performance metrics. download_all logical; download files data package. Equivalent setting download_ arguments TRUE. pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Path folder containing downloaded data package given species. dry_run = TRUE list files download returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Download eBird Status Data Products — ebirdst_download_status","text":"complete data package species contains large number files, cataloged vignettes. users require small subset files, default function downloads commonly used files: GeoTIFFs providing estimate relative abundance proportion population. interested additional data products, arguments starting download_ control download products. pattern argument provides even finer grained control gets downloaded.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_status(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_status(\"woothr\") # use pattern to only download low resolution (27 km) geotiff data # dry_run can be used to see what files will be downloaded ebirdst_download_status(\"lobcur\", pattern = \"_27km_\", dry_run = TRUE) # use pattern to only download high resolution (3 km) weekly abundance data ebirdst_download_status(\"lobcur\", pattern = \"abundance_median_3km\", dry_run = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Trends Data Products — ebirdst_download_trends","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Download eBird Trends Data Products set species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"ebirdst_download_trends( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Character vector paths folders containing downloaded data packages given species. trends data trends/ subdirectory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_trends(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_trends(\"woothr\") # multiple species can be downloaded at once ebirdst_download_trends(c(\"Sage Thrasher\", \"Abert's Towhee\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"Generate color palettes used eBird Status Trends relative abundance trends maps.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"ebirdst_palettes( n, type = c(\"weekly\", \"breeding\", \"nonbreeding\", \"migration\", \"prebreeding_migration\", \"postbreeding_migration\", \"year_round\", \"trends\") )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"n integer; number colors palette. type character; type color palette: \"weekly\" weekly relative abundance, \"trends\" trends color palette, season name seasonal relative abundance. Note trends diverging palette returned, palettes sequential.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"character vector hex color codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"# breeding season color palette ebirdst_palettes(10, type = \"breeding\") #> [1] \"#DFC0BC\" \"#DBADA7\" \"#D89A92\" \"#D5887D\" \"#D27568\" \"#CF6252\" \"#CC503E\" #> [8] \"#BB4938\" \"#AA4233\" \"#993C2E\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"Details eBird Status Trends predictor variables , variables derived dataset, details dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"","code":"ebirdst_predictor_descriptions"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"data frame 37 rows 4 columns dataset: dataset name. predictor: predictor name , multiple variables derived dataset, pattern used generate names. description: detailed description dataset variable. reference: reference consult information dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictor variables — ebirdst_predictors","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame predictors used eBird Status Trends models. include effort variables (e.g. distance traveled, number observers, etc.) addition variables describing environment (e.g. elevation, land cover, water cover, etc.). environmental variables derived summarizing remotely sensed datasets (described ebirdst_predictor_descriptions) 3 km diameter neighborhood around checklist. categorical datasets, two variables generated class describing percent cover (pland) edge density (ed).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"","code":"ebirdst_predictors"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame 150 rows 4 columns: predictor: predictor name. dataset: dataset name, can cross referenced ebirdst_predictor_descriptions details. class: class number name categorical variables. label: descriptive labels predictor variable.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Regional summary statistics for all species — ebirdst_regional_stats","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"Load single file regional summary statistics covering species eBird Status Data Products. file downloaded automatically first use loaded single step; subsequent calls load already downloaded file directly. differs load_regional_stats(), loads regional statistics single species species' downloaded data package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"ebirdst_regional_stats( path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"path character; directory data stored . Defaults persistent data directory returned ebirdst_data_dir(). force logical; file already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"data frame regional summary statistics species. columns match returned load_regional_stats().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download (if necessary) and load regional stats for all species regional <- ebirdst_regional_stats() } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":null,"dir":"Reference","previous_headings":"","what":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"dataset listing species eBird Status Trends Data Products available, additional information relevant Status Trends results species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"","code":"ebirdst_runs"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"data frame 29 variables: species_code: alphanumeric eBird species code uniquely identifying species scientific_name: scientific name. common_name: English common name. is_resident: classifies species resident migrant. breeding_quality: breeding season quality. breeding_start: breeding season start date. breeding_end: breeding season start date. nonbreeding_quality: non-breeding season quality. nonbreeding_start: non-breeding season start date. nonbreeding_end: non-breeding season start date. postbreeding_migration_quality: post-breeding season quality. postbreeding_migration_start: post-breeding season start date. postbreeding_migration_end: post-breeding season start date. prebreeding_migration_quality: pre-breeding season quality. prebreeding_migration_start: pre-breeding season start date. prebreeding_migration_end: pre-breeding season start date. resident_quality: resident quality. resident_start: resident species, year-round start date. resident_end: resident species, year-round end date. status_version_year: release version Status data products. has_trends: whether species trends estimates. trends_season: season trend estimated : breeding, nonbreeding, resident. trends_region: geographic region trend model run . Note broadly distributed species (e.g. Barn Swallow) trend estimates regional subset full range. trends_start_year: start year trend time period. trends_end_year: end year trend time period. trends_start_date: start date (MM-DD format) season trend estimated. trends_end_date: end date (MM-DD format) season trend estimated. rsquared: R-squared value comparing actual estimated trends simulations. beta0: intercept linear model fitting actual vs. estimated trends (actual ~ estimated) simulations. Positive values beta0 indicate models systematically underestimating simulated trend species. trends_version_year: release version Trends data products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"Status Data Products, dates defining boundaries seasons provided additional quality rating 0-3 season. dates quality ratings assigned process expert review. expert review. Note missing dates imply season failed expert review species within season. Trends Data Products available subset species, indicated has_trends variable, species trends estimated single season. two predictive performance metrics (rsquared beta0) based comparison actual estimated percent per year trends suite simulations (see Fink et al. 2023 details). trends regions defined follows: aus_nz: Australia New Zealand iberia: Spain Portugal india_se_asia: India, Nepal, Bhutan, Sri Lanka, Thailand, Cambodia, Malaysia, Brunei, Singapore, Philippines japan: Japan north_america: North America including Mexico, Central America, Caribbean, excluding Nunavut, North West Territories, Hawaii south_africa: South Africa, Lesotho, Eswatini south_america: Colombia, Ecuador, Peru, Chile, Argentina, Uruguay taiwan: Taiwan turkey_plus: Turkey, Cyprus, Israel, Palestine, Greece, Armenia, Georgia","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends Data Products version — ebirdst_version","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"Identify version eBird Status Trends Data Products version R package works . Versions defined year model estimates made .","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"list three components: status_version_year version year eBird Status Data Products, trends_version_year version year eBird Trends Data Products, release_year year version data released.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version() #> $status_version_year #> [1] 2023 #> #> $trends_version_year #> [1] 2022 #> #> $release_year #> [1] 2025 #>"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":null,"dir":"Reference","previous_headings":"","what":"Get eBird species code for a set of species — get_species","title":"Get eBird species code for a set of species — get_species","text":"Give vector species codes, common names, /scientific names, return vector 6-letter eBird species codes. function look codes species eBird Status Trends results exist.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(x)"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get eBird species code for a set of species — get_species","text":"x character; vector species codes, common names, /scientific names.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get eBird species code for a set of species — get_species","text":"character vector eBird species codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(c(\"Black-capped Chickadee\", \"Poecile gambeli\", \"carchi\")) #> [1] \"bkcchi\" \"mouchi\" \"carchi\""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the path to the data package for a given species — get_species_path","title":"Get the path to the data package for a given species — get_species_path","text":"helper function can used get path data package given species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"get_species_path( species, path = ebirdst_data_dir(), dataset = c(\"status\", \"trends\"), check_downloaded = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the path to the data package for a given species — get_species_path","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). dataset character; whether path Status Trends data products returned. check_downloaded logical; raise error data downloaded species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the path to the data package for a given species — get_species_path","text":"path data package directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"if (FALSE) { # \\dontrun{ # get the path path <- get_species_path(\"yebsap-example\") # get the path to the full data package for yellow-bellied sapsucker # common name, scientific name, or species code can be used path <- get_species_path(\"Yellow-bellied Sapsucker\") path <- get_species_path(\"Sphyrapicus varius\") path <- get_species_path(\"yebsap\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":null,"dir":"Reference","previous_headings":"","what":"Spatiotemporal grid sampling of observation data — grid_sample","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"Sample observation data spacetime grid reduce spatiotemporal bias.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"grid_sample( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, res = c(3000, 3000, 7), jitter_grid = TRUE, sample_size_per_cell = 1, cell_sample_prop = 0.75, keep_cell_id = FALSE, grid_definition = NULL ) grid_sample_stratified( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, unified_grid = FALSE, keep_cell_id = FALSE, by_year = TRUE, case_control = TRUE, obs_column = \"obs\", sample_by = NULL, min_detection_probability = 0, maximum_ss = NULL, jitter_columns = NULL, jitter_sd = 0.1, cell_quantile_cap = NULL, ... )"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"x data frame; observations sample, including least columns defining location space time. Additional columns can included features later used model training. coords character; names spatial temporal coordinates. default spatial spatial coordinates longitude latitude, temporal coordinate day_of_year. is_lonlat logical; points unprojected, lon-lat coordinates. case, points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution spatiotemporal grid x, y, time dimensions. Unprojected locations projected equal area coordinate system prior sampling, resolution therefore provided units meters. temporal resolution native units time coordinate input data frame, typically number days. jitter_grid logical; whether jitter location origin grid introduce randomness. sample_size_per_cell integer; number observations sample grid cell. cell_sample_prop proportion (0-1]; less 1, proportion cells randomly selected sampling. keep_cell_id logical; whether retain unique cell identifier, stored column named .cell_id. grid_definition list defining spatiotemporal sampling grid returned assign_to_grid() form attribute returned data frame. unified_grid logical; whether single, unified spatiotemporal sampling grid defined used observations x different grid used stratum. by_year logical; whether sampling done stratified year (TRUE) ignoring year (FALSE). sampling year turned , N observations sampled grid cell year, turned , N observations sampled per grid cell across years. using sampling year, input data frame x must year column. case_control logical; whether apply case control sampling whereby presence absence sampled independently. obs_column character; case_control = TRUE, name column x defines detection (obs_column > 0) non-detection (obs_column == 0). sample_by character; additional columns x stratify sampling . example, landscape many small islands (defined island variable) wish sample independently, use sample_by = \"island\". min_detection_probability proportion [0-1); minimum detection probability final dataset. case_control = TRUE, proportion detections grid sampled dataset level, additional detections added via grid sampling detections input dataset least proportion detections appears final dataset. typically result duplication observations final dataset. turn feature use min_detection_probability = 0. maximum_ss integer; maximum sample size final dataset. grid sampling yields number observations, maximum_ss observations selected randomly full set. Note subsampling performed way levels strata least one observation within final dataset, therefore truly randomly sampling. jitter_columns character; detections oversampled achieve minimum detection probability, observations duplicated, can desirable slightly \"jitter\" values model training features duplicated observations. argument defines column names x jittered. jitter_sd numeric; strength jittering units standard deviations, see jitter_columns. cell_quantile_cap proportion (0, 1] NULL; provided, limits many observations single spatial grid cell can contribute grid-sampled data, reducing influence chronically -sampled sites (e.g. bird feeders). observation class, per-cell observation count capped quantile distribution per-cell counts: cells quantile randomly reduced , cells left unchanged. threshold taken data , adapts dataset. Detections non-detections capped independently rule. least one observation every level every column sample_by always retained, even means cell exceeds cap, rare strata (e.g. remote island) never lost; year (by_year = TRUE) protected, years can thinned chronically -sampled cells like observation. NULL (default) value 1 applies cap. ... additional arguments defining spatiotemporal grid; passed grid_sample().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"data frame spatiotemporally sampled data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"grid_sample_stratified() performs stratified case control sampling, independently sampling strata defined , example, year detection/non-detection. Within stratum, grid_sample() used sample observations spatiotemporal grid. addition, case control sampling turned , detections oversampled increase frequency detections dataset. sampling grid defined, assignment locations cells occurs, assign_to_grid(). Consult help function details grid generated locations assigned. Note providing 2-element vectors coords res time component grid can ignored spatial-subsampling performed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"set.seed(1) # generate some example observations n_obs <- 10000 checklists <- data.frame(longitude = rnorm(n_obs, sd = 0.1), latitude = rnorm(n_obs, sd = 0.1), day_of_year = sample.int(28, n_obs, replace = TRUE), year = NA_integer_, obs = rpois(n_obs, lambda = 0.05), forest_cover = runif(n_obs), island = as.integer(runif(n_obs) > 0.95)) # add a year column, giving more data to recent years checklists$year <- sample(seq(2016, 2020), size = n_obs, replace = TRUE, prob = seq(0.3, 0.7, length.out = 5)) # create several rare islands checklists$island[sample.int(nrow(checklists), 9)] <- 2:10 # basic spatiotemporal grid sampling sampled <- grid_sample(checklists) # plot original data and grid sampled data par(mar = c(0, 0, 0, 0)) plot(checklists[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"#00000033\", axes = FALSE) points(sampled[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"red\") # case control sampling stratified by year and island # return a maximum of 1000 checklists sampled_cc <- grid_sample_stratified(checklists, sample_by = \"island\", maximum_ss = 1000) # case control sampling increases the prevalence of detections mean(checklists$obs > 0) #> [1] 0.0532 mean(sampled$obs > 0) #> [1] 0.0505667 mean(sampled_cc$obs > 0) #> [1] 0.09821429 # stratifying by island ensures all levels are retained, even rare ones table(checklists$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 9505 486 1 1 1 1 1 1 1 1 1 # normal grid sampling loses rare island levels table(sampled$island) #> #> 0 1 #> 1099 48 # stratified grid sampling retain at least one observation from each level table(sampled_cc$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 908 91 1 1 1 1 1 1 1 1 1"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products configuration file — load_config","title":"Load eBird Status Data Products configuration file — load_config","text":"Load configuration file eBird Status run. configuration file mostly internal use contains variety parameters used modeling process.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"load_config( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products configuration file — load_config","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products configuration file — load_config","text":"list run configuration parameters.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters p <- load_config(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"data coverage products packaged individual GeoTIFF files product week year. function loads one available data products one weeks R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"load_data_coverage( product = c(\"spatial-coverage\", \"selection-probability\"), weeks, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"product character; data coverage raster product load: spatial coverage site selection probability. weeks character; one weeks (expressed \"MM-DD\" format) load raster layers . argument specified, downloaded weeks loaded. Note rasters quite large recommended load small number weeks data time. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"SpatRaster 1 52 layers given product given weeks, layer names dates (YYYY-MM-DD format) midpoint week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: spatial-coverage: spatially smoothed estimate proportion area covered eBird checklists given week. selection-probability: modeled estimate probability given location habitat sampled eBird data given week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_data_coverage() # load a single week of site selection probability data load_data_coverage(\"selection-probability\", weeks = \"01-04\") # load all weeks of spatial coverage data load_data_coverage(\"spatial-coverage\", weeks = c(\"01-04\", \"01-11\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"Load full annual cycle map parameters — load_fac_map_parameters","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"Get map parameters used eBird Status Trends website optimally display full annual cycle data. includes bins abundance data, projection, extent map. extent spatial extent non-zero data across full annual cycle projection optimized extent.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"load_fac_map_parameters( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"list containing elements: custom_projection: custom projection optimized given species' full annual cycle fa_extent: SpatExtent object storing spatial extent non-zero data given species custom projection res: numeric vector 2 elements giving target resolution raster custom projection fa_extent_projected: extent projected (Equal Earth) coordinates weekly_bins/weekly_labels: weekly abundance bins labels full annual cycle seasonal_bins/`seasonal_labels: seasonal abundance bins labels full annual cycle","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters load_fac_map_parameters(path) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictor importance (PI) rasters — load_pi","title":"Load predictor importance (PI) rasters — load_pi","text":"eBird Status models estimate relative importance core environmental predictor used model (.e. % land water cover variables). predictor importance (PI) data converted ranks (rank 1 important) relative full suite environmental predictors. ranks summarized 27 km resolution raster grid predictor, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use. PI estimates available separately occurrence count sub-model 30 important predictors distributed. Use list_available_pis() see predictors PI data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"load_pi( species, predictor, response = c(\"occurrence\", \"count\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() ) list_available_pis( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictor importance (PI) rasters — load_pi","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". predictor character; predictor PI data loaded . list predictors PI data available varies species, use list_available_pis() get list given species. response character; model (occurrence count) PI data loaded . path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictor importance (PI) rasters — load_pi","text":"SpatRaster object PI ranks given predictor. migrants, estimates weekly raster 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned. list_available_pis() returns data frame listing top 30 predictors PI rasters can loaded. addition predictor names, mean range-wide rank (rank_mean) given well integer rank (rank) relative full suite predictors (environmental effort).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Load predictor importance (PI) rasters — load_pi","text":"list_available_pis(): list predictors PI information species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"if (FALSE) { # \\dontrun{ # identify the top predictor # data will be downloaded automatically if not already present top_preds <- list_available_pis(\"yebsap-example\") print(top_preds[1, ]) # load predictor importance raster of top predictor for occurrence load_pi(\"yebsap-example\", top_preds$predictor[1]) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictive performance metric (PPM) rasters — load_ppm","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"eBird Status models evaluated test set eBird data used model training suite predictive performance metrics (PPMs) calculated. PPMs base model summarized 27 km resolution raster grid, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"load_ppm( species, ppm = c(\"binary_f1\", \"binary_mcc\", \"binary_prevalence\", \"occ_bernoulli_dev\", \"occ_bin_spearman\", \"occ_brier\", \"occ_pr_auc\", \"occ_pr_auc_gt_prev\", \"occ_pr_auc_normalized\", \"count_log_pearson\", \"count_mae\", \"count_poisson_dev\", \"count_rmse\", \"count_spearman\", \"abd_log_pearson\", \"abd_mae\", \"abd_poisson_dev\", \"abd_rmse\", \"abd_spearman\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". ppm character; name single metric load data . See Details definitions metric. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"SpatRaster object PPM data. migrants, rasters weekly 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"Nineteen predictive performance metrics provided: binary_f1: F1-score comparing model predictions converted binary observed detection/non-detection test checklists. binary_mcc: Matthews Correlation Coefficient (MCC) comparing model predictions converted binary observed detection/non-detection test checklists. binary_prevalence: observed detection probability spatiotemporal subsampling. occ_bernoulli_dev: proportion Bernoulli deviance explained comparing predicted occurrence observed detection/non-detection test checklists. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman's rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR AUC) generated comparing predicted encounter rate observed detection/non-detection test checklists. occ_pr_auc_gt_prev: proportion ensemble PR AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count subset test checklists species detected. count_mae: mean absolute error (MAE) comparing observed predicted counts subset test checklists species detected. count_poisson_dev: proportion Poisson deviance explained, comparing observed predicted counts subset test checklists species detected. count_rmse: root mean squared error (RMSE) comparing observed predicted counts subset test checklists species detected. count_spearman: Spearman's rank correlation coefficient comparing observed predicted counts subset test checklists species detected. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count full set test checklists. abd_mae: mean absolute error (MAE) comparing observed counts predicted relative abundance full set test checklists. abd_poisson_dev: proportion Poisson deviance explained, comparing predicted relative abundance observed count full set test checklists. abd_rmse: root mean squared error comparing predicted relative abundance observed count full set test checklists. abd_spearman: Spearman's rank correlation coefficient comparing predicted relative abundance observed count full set test checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"if (FALSE) { # \\dontrun{ # load area under the precision-recall curve PPM raster # data will be downloaded automatically if not already present load_ppm(\"yebsap-example\", ppm = \"binary_pr_auc\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":null,"dir":"Reference","previous_headings":"","what":"Load seasonal eBird Status and Trends range polygons — load_ranges","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"Range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"load_ranges( species, resolution = c(\"9km\", \"27km\"), smoothed = TRUE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". resolution character; raster resolution range polygons derived. smoothed logical; whether smoothed unsmoothed ranges loaded. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"sf update containing seasonal range boundaries, season provided different feature.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load smoothed ranges # note that only 27 km data are provided for the example data ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products raster data — load_raster","title":"Load eBird Status Data Products raster data — load_raster","text":"eBird Status raster products packaged GeoTIFF file representing predictions regular grid. core products occurrence, count, relative abundance, proportion population. function loads one available data products R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"load_raster( species, product = c(\"abundance\", \"count\", \"occurrence\", \"proportion-population\"), period = c(\"weekly\", \"seasonal\", \"full-year\"), metric = NULL, resolution = c(\"3km\", \"9km\", \"27km\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products raster data — load_raster","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". product character; eBird Status raster product load: occurrence, count, relative abundance, proportion population. See Details detailed explanation products. period character; temporal period estimation. eBird Status models make predictions week year; however, convenience, data also provided summarized seasonal annual (\"full-year\") level. metric character; default, weekly products provide estimates median value (metric = \"median\") summarized products cell-wise mean across weeks within season (metric = \"mean\"). However, additional variants exist products. weekly relative abundance, confidence intervals provided: specify metric = \"lower\" get 10th quantile metric = \"upper\" get 90th quantile. seasonal annual products, cell-wise maximum values across weeks can obtained metric = \"max\". resolution character; resolution raster data load. default load native 3 km resolution data; however, applications 9 km 27 km data may suitable. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products raster data — load_raster","text":"weekly cubes, SpatRaster 52 layers given product, layer names dates (YYYY-MM-DD format) midpoint week. Seasonal cubes four layers named corresponding season. full-year products single layer.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status Data Products raster data — load_raster","text":"core eBird Status data products provide weekly estimates across regular spatial grid. packaged rasters 52 layers, corresponding estimates week year, refer \"cubes\" (e.g. \"relative abundance cube\"). estimates median expected value standard 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. products : occurrence: expected probability (0-1) occurrence species. count: expected count species, conditional occurrence given location. abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. proportion-population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster total abundance summed across cells. addition weekly data cubes, function provides access data summarized different periods. Seasonal cubes produced taking cell-wise mean max across weeks within season. boundary dates season species specific available ebirdst_runs, season failed review associated layer included cube. addition, full-year summaries provide mean max across weeks year fall within season passed review. Note necessarily 52 weeks year. example, estimates non-breeding season failed expert review given species, full-year summary species include weeks fall within non-breeding season.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # weekly relative abundance # note that only 27 km data are available for the example data abd_weekly <- load_raster(\"yebsap-example\", \"abundance\", resolution = \"27km\") # the weeks for each layer are stored in the layer names names(abd_weekly) # they can be converted to date objects with as.Date as.Date(names(abd_weekly)) # max seasonal abundance abd_seasonal <- load_raster(\"yebsap-example\", \"abundance\", period = \"seasonal\", metric = \"max\", resolution = \"27km\") # available seasons in stack names(abd_seasonal) # subset to just breeding season abundance abd_seasonal[[\"breeding\"]] } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Load regional summary statistics — load_regional_stats","title":"Load regional summary statistics — load_regional_stats","text":"Load seasonal summary statistics regions consisting countries states/provinces.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load regional summary statistics — load_regional_stats","text":"","code":"load_regional_stats( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load regional summary statistics — load_regional_stats","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load regional summary statistics — load_regional_stats","text":"data frame containing regional summary statistics columns: species_code: alphanumeric eBird species code. region_type: country countries state states, provinces, sub-national regions. region_code: alphanumeric code region. region_name: English name region. continent_code: alphanumeric code continent region belongs . continent_name: name continent region belongs . season: name season summary statistics calculated . abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population falling within region. continent_pop_percent: proportion seasonal modeled population continent (identified continent_name) falling within region. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population falling within region max_week, .e. maximum weekly value. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load regional summary statistics — load_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters regional <- load_regional_stats(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Trends estimates for a set of species — load_trends","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Load relative abundance trend estimates single species set species. Trends estimated 27 km 27 km grid single season per species (breeding, non-breeding, resident). requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"load_trends( species, fold_estimates = FALSE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Trends estimates for a set of species — load_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". fold_estimates logical; default, trends summarized across 100-fold ensemble returned; however, setting fold_estimates = TRUE individual fold-level estimates returned. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Trends estimates for a set of species — load_trends","text":"data frame containing trends estimates set species. following columns included: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. start_year/end_year: start end years trend time period. start_date/end_date: start end dates (MM-DD format) season trend estimated. srd_id: unique integer identifier grid cell. longitude/latitude: longitude latitude grid cell center. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: median estimated percent per year change relative abundance. abd_ppy_lower/abd_ppy_upper: 80% confidence interval estimated percent per year change relative abundance. abd_ppy_nonzero: logical (TRUE/FALSE) value indicating 80% confidence limits overlap zero (FALSE) overlap zero (TRUE) abd_trend: median estimated cumulative change relative abundance trend time period. abd_trend_lower/abd_trend_upper: 80% confidence interval estimated cumulative change relative abundance trend time period. fold_estimates = TRUE, data frame fold-level trend estimates returned following columns: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. srd_id: unique integer identifier grid cell. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: estimated percent per year change relative abundance.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Trends estimates for a set of species — load_trends","text":"trends relative abundance estimated using double machine learning model. quantify uncertainty, ensemble 100 estimates made location, based random subsample eBird data. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. access estimates individual folds making ensemble use fold_estimates = TRUE. fold-level estimates can used quantify uncertainty, example, calculating trend given region. details methodology used estimate trends consult Fink et al. 2023.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Fink, D., Johnston, ., Strimas-Mackey, M., Auer, T., Hochachka, W. M., Ligocki, S., Oldham Jaromczyk, L., Robinson, O., Wood, C., Kelling, S., & Rodewald, . D. (2023). Double machine learning trend model citizen science data. Methods Ecology Evolution, 00, 1–14. https://doi.org/10.1111/2041-210X.14186","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # load fold-level estimates trends_folds <- load_trends(\"yebsap-example\", fold_estimates = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert eBird Trends Data Products to raster format — rasterize_trends","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates raster format terra SpatRaster format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"rasterize_trends( trends, layers = c(\"abd_ppy\", \"abd_ppy_lower\", \"abd_ppy_upper\"), trim = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"trends data frame; trends data single species returned load_trends(). layers character; column names trends data frame rasterize. columns become layers raster created. trim logical; flag indicating returned raster trimmed remove outer rows columns NA. trim = FALSE returned raster global extent, can useful rasters combined across species different ranges.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"SpatRaster object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # rasterize percent per year trend rasterize_trends(trends, \"abd_ppy\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":null,"dir":"Reference","previous_headings":"","what":"Store the eBird Status and Trends access key — set_ebirdst_access_key","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Accessing eBird Status Trends data requires access key, can obtained visiting https://ebird.org/st/request. key must stored environment variable EBIRDST_KEY order ebirdst_download_status() ebirdst_download_trends() use . easiest approach store key .Renviron file can always accessed R sessions. Use function set EBIRDST_KEY .Renviron file provided located standard location home directory. also possible manually edit .Renviron file. access key specific never shared made publicly accessible.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"set_ebirdst_access_key(key, overwrite = FALSE)"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"key character; API key obtained filling form https://ebird.org/st/request. overwrite logical; existing EBIRDST_KEY overwritten already set .Renviron.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Edits .Renviron, returns path file invisibly.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"if (FALSE) { # \\dontrun{ # save the api key, replace XXXXXX with your actual key set_ebirdst_access_key(\"XXXXXX\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert Trends Data Products to points or circles — vectorize_trends","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates points circles sf format. Trends can converted points circles areas roughly proportional relative abundance within 27 km grid cell. abundance-scaled circles used produce trends maps eBird Status Trends website.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"vectorize_trends(trends, output = c(\"circles\", \"points\"), crs = 4326)"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"trends data frame; trends data single species returned load_trends(). output character; \"points\" outputs spatial points \"circles\" outputs circles areas roughly proportional relative abundance within 27 km grid cell. crs character sf crs object; coordinate reference system output results . points, unprojected latitude-longitude coordinates (default) typical, circles use whatever equal area CRS intend use mapping data otherwise \"circles\" appear skewed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"Vectorized trends data sf object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # vectorize as points vectorize_trends(trends, \"points\") # vectorize as circles vectorize_trends(trends, \"circles\", crs = \"+proj=eqearth\") } # }"},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420231","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.1","title":"ebirdst 4.2023.1","text":"Removed functions previously listed deprecated defunct (abundance_palette(), ebirdst_download(), ebirdst_extent(), ebirdst_habitat(), ebirdst_ppms(), ebirdst_ppms_ts(), ebirdst_subset(), load_pds(), load_pis(), load_predictions(), load_stixels(), parse_raster_dates(), plot_pds(), plot_pis(), project_extent(), stixelize()); unavailable erroring since least v3.2022.1 Backend approach file download refactored -demand first approach list_available_pis() longer downloads every predictor importance raster determine availability, pi_rangewide.csv http fallback VPNs block https now also applies file downloads, just file listings Errors data can’t found -demand now include function-specific guidance, e.g. pointing list_available_pis()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420230","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.0","title":"ebirdst 4.2023.0","text":"CRAN release: 2026-07-20 Transition load_*() functions download directly rather call ebirdst_download_status() Converted vignettes Quarto moved website-pkgdown articles; package longer ships built-vignettes CRAN (documentation lives https://ebird.github.io/ebirdst/) Add ebirdst_regional_stats() load regional summary statistics species Add ebirdst_data_inventory() ebirdst_delete() manage files downloaded ebirdst Move air auto-formatting jarl linting Efficiency improvements grid_sample() grid_sample_stratified() gains cell_quantile_cap argument limit many observations single chronically -sampled site (e.g. bird feeder) can contribute","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320231","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.1","title":"ebirdst 3.2023.1","text":"CRAN release: 2025-10-19 added function generate abundance-scaled circles trends fixed bug preventing tibbles passed grid sampling functions clarified documentation sampling function fixed bug get_species() Yellow-bellied Sapsucker","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320230","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.0","title":"ebirdst 3.2023.0","text":"CRAN release: 2025-05-07 update 2023 data release add capability download load data coverage layers Northern Goshawk species code incorrect VPNs downloading https raises error, switch http cases update vignettes: add links YouTube, expand applications, add API vignette","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320223","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.3","title":"ebirdst 3.2022.3","text":"CRAN release: 2024-03-05 arrow back CRAN, move Suggests back Imports add 6 new species Australia","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320222","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.2","title":"ebirdst 3.2022.2","text":"CRAN release: 2024-02-23 switch terminology “trajectory” “migration chronology” ensure rasterize_trends() works older versions terra (issue #7) move arrow package Suggests back CRAN (see https://github.com/apache/arrow/issues/39806)","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320221","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.1","title":"ebirdst 3.2022.1","text":"CRAN release: 2023-12-08 Documented functions deprecated defunct relative version 2.2021.3 topics ebirdst-defunct ebirdst-deprecated added back package. allows packages conditionally reference 2.2021.3 installed still passing CRAN checks.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320220","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.0","title":"ebirdst 3.2022.0","text":"CRAN release: 2023-11-15 new 2022 status data trends data released first time! major overhaul allow targeting downloading data stixel-level results (PPMS/PIs/PDs) removed, replaced spatialized raster versions restart required updating API key change package-level documentation per roxygen2 suggestions","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220213","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.3","title":"ebirdst 2.2021.3","text":"CRAN release: 2023-05-09 fix bug causing stixels missing bounds raise error ebirdst_habitat() add function estimate MCC-F1 ebirdst_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220212","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.2","title":"ebirdst 2.2021.2","text":"CRAN release: 2023-04-27 add robust grid sampling function.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220211","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.1","title":"ebirdst 2.2021.1","text":"CRAN release: 2023-04-06 release final batch 300 species 2021 bringing total 2,282","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220210","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.0","title":"ebirdst 2.2021.0","text":"CRAN release: 2023-01-18 transition using raster terra handling raster data move following packages Imports Suggests: gbm, mgcv, precrec, PresenceAbsence move package eBird GitHub organization https://github.com/ebird/ebirdst","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120213","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.3","title":"ebirdst 1.2021.3","text":"CRAN release: 2023-01-11 patch fix bug introduced last release causing missing config files data downloads [issue #44]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120212","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.2","title":"ebirdst 1.2021.2","text":"CRAN release: 2023-01-06 fix bug causing species base code downloaded together, e.g. leafly also downloads leafly2 [issue #43]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120211","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.1","title":"ebirdst 1.2021.1","text":"CRAN release: 2022-12-07 fix bug extent load_fac_map_parameters(), GitHub issue #40 use dynamic PAT cutoff PPM calculations update species list account second release eBird data year","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120210","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.0","title":"ebirdst 1.2021.0","text":"CRAN release: 2022-11-09 update v2021 eBird Status Trends data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120201","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.1","title":"ebirdst 1.2020.1","text":"CRAN release: 2022-07-08 CRAN checks found files created left behind ~/Desktop, relocated test files tempdir() deleting test completion withr::defer()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120200","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.0","title":"ebirdst 1.2020.0","text":"CRAN release: 2022-07-07 major update align new eBird Status Trends API update align 2020 eBird Status Data Products transition rappdirs tools::R_user_dir() handling download directories new vignettes","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-035","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.5","title":"ebirdst 0.3.5","text":"CRAN release: 2022-04-01 bug fix: API update causing data downloads fail","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-034","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.4","title":"ebirdst 0.3.4","text":"CRAN release: 2022-03-16 rename master branch main GitHub requires different download path example data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-033","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.3","title":"ebirdst 0.3.3","text":"CRAN release: 2021-11-12 move example data GitHub","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-032","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.2","title":"ebirdst 0.3.2","text":"CRAN release: 2021-09-15 try prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031-1","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-030","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.0","title":"ebirdst 0.3.0","text":"CRAN release: 2021-08-10 add support new data structures used 2020 eBird Status Trends functionality handle partial dependence data added overhaul package API intuitive streamlined documentation vignettes updated","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-022","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.2","title":"ebirdst 0.2.2","text":"CRAN release: 2021-01-16 add support variable ensemble support compute_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-021","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.1","title":"ebirdst 0.2.1","text":"CRAN release: 2020-03-23 bug fix: corrected date types seasonal definitions bug fix: fixed possibility ebirdst_extent produce invalid date (day 366 2015) added import pipe operator velox archived, removed dependency Suggests fasterize archived, removed dependency Imports","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-020","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.0","title":"ebirdst 0.2.0","text":"CRAN release: 2020-02-26 change maintainer Matthew Strimas-Mackey update access 2019 status trends data partial dependence data longer available, references PDs removed bug fix: load_raster() gave incorrect names seasonal rasters bug fix: didn’t properly implement quantile binning date_to_st_week() gets status trends week give vector dates","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-010","dir":"Changelog","previous_headings":"","what":"ebirdst 0.1.0","title":"ebirdst 0.1.0","text":"CRAN release: 2019-04-04 first CRAN release","code":""}] diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 4cc762e..b940b29 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -13,13 +13,10 @@ https://ebird.github.io/ebirdst/authors.html https://ebird.github.io/ebirdst/index.html https://ebird.github.io/ebirdst/news/index.html -https://ebird.github.io/ebirdst/reference/abundance_palette-deprecated.html https://ebird.github.io/ebirdst/reference/assign_to_grid.html https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html https://ebird.github.io/ebirdst/reference/date_to_st_week.html -https://ebird.github.io/ebirdst/reference/ebirdst-defunct.html -https://ebird.github.io/ebirdst/reference/ebirdst-deprecated.html https://ebird.github.io/ebirdst/reference/ebirdst-package.html https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html diff --git a/man/abundance_palette-deprecated.Rd b/man/abundance_palette-deprecated.Rd deleted file mode 100644 index 9e711a0..0000000 --- a/man/abundance_palette-deprecated.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ebirdst-deprecated.R -\name{abundance_palette-deprecated} -\alias{abundance_palette-deprecated} -\title{eBird Status and Trends color palettes for mapping} -\usage{ -abundance_palette(n, - season = c("weekly", "breeding", - "nonbreeding", - "migration", - "prebreeding_migration", - "postbreeding_migration", - "year_round")) -} -\arguments{ -\item{n}{integer; the number of colors to be in the palette.} - -\item{season}{character; the season to generate colors for or "weekly" to -get the color palette used in the weekly abundance animations.} -} -\value{ -A character vector of hex color codes. -} -\description{ -This deprecated function has been replaced by \code{\link{ebirdst_palettes}}. -Both functions generate color palettes used for the eBird Status and Trends -relative abundance maps. -} -\seealso{ -\code{\link{ebirdst_palettes}} \code{\link{ebirdst-deprecated}} -} -\keyword{internal} diff --git a/man/ebirdst-defunct.Rd b/man/ebirdst-defunct.Rd deleted file mode 100644 index fa7b869..0000000 --- a/man/ebirdst-defunct.Rd +++ /dev/null @@ -1,79 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ebirdst-defunct.R -\name{ebirdst-defunct} -\alias{ebirdst-defunct} -\alias{ebirdst_download} -\alias{ebirdst_extent} -\alias{ebirdst_habitat} -\alias{ebirdst_ppms} -\alias{ebirdst_ppms_ts} -\alias{ebirdst_subset} -\alias{load_pds} -\alias{load_pis} -\alias{load_predictions} -\alias{parse_raster_dates} -\alias{load_stixels} -\alias{project_extent} -\alias{plot_pds} -\alias{plot_pis} -\alias{stixelize} -\title{Defunct functions in package \pkg{ebirdst}.} -\usage{ -ebirdst_download( - species, - path = ebirdst_data_dir(), - tifs_only = TRUE, - force = FALSE, - show_progress = TRUE, - pattern = NULL, - dry_run = FALSE -) - -ebirdst_extent(x, t, ...) - -ebirdst_habitat(path, ext, data = NULL, stationary_associations = FALSE) - -ebirdst_ppms(path, ext, es_cutoff, pat_cutoff) - -ebirdst_ppms_ts(ath, ext, summarize_by = c("weeks", "months"), ...) - -ebirdst_subset(x, crs) - -load_pds(path, ext, model = c("occurrence", "count"), return_sf = FALSE) - -load_pis(path, ext, model = c("occurrence", "count"), return_sf = FALSE) - -load_predictions(path, return_sf = FALSE) - -parse_raster_dates(x) - -load_stixels(path, ext, return_sf = FALSE) - -project_extent(x, crs) - -plot_pds(path, ext, summarize_by = c("weeks", "months"), ...) - -plot_pis( - pis, - ext, - by_cover_class = TRUE, - n_top_pred = 15, - pretty_names = TRUE, - plot = TRUE -) - -stixelize(x) -} -\arguments{ -\item{...}{All arguments are now ignored.} -} -\description{ -The functions listed below are defunct and no longer supported. -Calling them will result in an error. - -When possible alternative functions are suggested. - -Many of them supported stixles which were infrequently used and were -dropped from \pkg{ebirdst} with the 2022 data release. -} -\keyword{internal} diff --git a/man/ebirdst-deprecated.Rd b/man/ebirdst-deprecated.Rd deleted file mode 100644 index 9a39b3f..0000000 --- a/man/ebirdst-deprecated.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ebirdst-deprecated.R -\name{ebirdst-deprecated} -\alias{ebirdst-deprecated} -\alias{abundance_palette} -\title{Deprecated functions in package \pkg{ebirdst}.} -\usage{ -abundance_palette( - n, - season = c("weekly", "breeding", "nonbreeding", "migration", "prebreeding_migration", - "postbreeding_migration", "year_round") -) -} -\description{ -The functions listed below are deprecated and support for them -will eventually be dropped. -Help pages for deprecated functions are -available at \code{help("-deprecated")}. -} -\section{\code{abundance_palette}}{ - -For \code{abundance_palette}, use \code{\link{ebirdst_palettes}} -} - -\keyword{internal} diff --git a/tests/testthat/test_palette.R b/tests/testthat/test_palette.R index 816dbcd..c034a41 100644 --- a/tests/testthat/test_palette.R +++ b/tests/testthat/test_palette.R @@ -20,8 +20,3 @@ test_that("ebirdst_palettes", { # n must be >= 1 expect_error(ebirdst_palettes(n = 0)) }) - -test_that("abundance_palette throws warning and matches ebirdst_palettes", { - expect_warning(p <- abundance_palette(10, "weekly"), regexp = "is deprecated") - expect_equal(p, ebirdst_palettes(10, "weekly")) -}) From 904b7f53b010dec2f3b6e590905b4ebdbfd1a379 Mon Sep 17 00:00:00 2001 From: Matt Strimas-Mackey Date: Sat, 1 Aug 2026 07:40:54 -0700 Subject: [PATCH 3/4] claude bug and typo fixes --- NEWS.md | 1 + R/access-key.R | 8 +++-- R/data.R | 14 ++++---- R/ebirdst-palettes.R | 4 +-- R/fetch.R | 4 +-- R/load.R | 40 ++++++++++----------- R/manage.R | 22 +++++++----- R/sample.R | 9 +++-- R/trends.R | 15 ++++---- R/utils.R | 4 ++- docs/news/index.html | 1 + docs/news/index.md | 1 + docs/pkgdown.yml | 2 +- docs/reference/ebirdst_runs.html | 14 ++++---- docs/reference/ebirdst_runs.md | 16 ++++----- docs/reference/load_data_coverage.html | 2 +- docs/reference/load_data_coverage.md | 2 +- docs/reference/load_fac_map_parameters.html | 2 +- docs/reference/load_fac_map_parameters.md | 2 +- docs/reference/load_ranges.html | 2 +- docs/reference/load_ranges.md | 2 +- docs/search.json | 2 +- man/ebirdst_runs.Rd | 14 ++++---- man/load_data_coverage.Rd | 2 +- man/load_fac_map_parameters.Rd | 2 +- man/load_ranges.Rd | 2 +- 26 files changed, 97 insertions(+), 92 deletions(-) diff --git a/NEWS.md b/NEWS.md index eb3888e..703153a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -11,6 +11,7 @@ - `list_available_pis()` no longer downloads every predictor importance raster to determine availability, only `pi_rangewide.csv` - The http fallback for VPNs that block https now also applies to file downloads, not just file listings - Errors for data that can't be found on-demand now include function-specific guidance, e.g. pointing to `list_available_pis()` +- Various small bug fixes and typos discovered by Claude Code # ebirdst 4.2023.0 diff --git a/R/access-key.R b/R/access-key.R index cc04d0b..3c32ca2 100644 --- a/R/access-key.R +++ b/R/access-key.R @@ -58,10 +58,12 @@ set_ebirdst_access_key <- function(key, overwrite = FALSE) { Sys.setenv(EBIRDST_KEY = key) message("eBird Status and Trends access key stored in: ", renv_path) - invisible(renv_path) + return(invisible(renv_path)) } +# internal ---- + get_ebirdst_access_key <- function() { key <- Sys.getenv("EBIRDST_KEY") if (is.na(key) || key == "" || nchar(key) == 0) { @@ -73,8 +75,8 @@ get_ebirdst_access_key <- function() { ) stop( "Valid eBird Status and Trends access key not found. ", - "Note that keys expire after 6 month, you may need a new key." + "Note that keys expire after 6 months, so you may need a new key." ) } - invisible(key) + return(invisible(key)) } diff --git a/R/data.R b/R/data.R index c7ffa6a..bdc950d 100644 --- a/R/data.R +++ b/R/data.R @@ -5,11 +5,11 @@ #' Trends results for each species. #' #' For the Status Data Products, the dates defining the boundaries of the -#' seasons are provided in additional to a quality rating from 0-3 for each +#' seasons are provided in addition to a quality rating from 0-3 for each #' season. These dates and quality ratings are assigned through a process of #' [expert review](https://science.ebird.org/status-and-trends/faq#seasons). -#' expert review. Note that missing dates imply that a season failed expert -#' review for that species within that season. +#' Note that missing dates imply that a season failed expert review for that +#' species within that season. #' #' Trends Data Products are only available for a subset of species, indicated by #' the `has_trends` variable, and for each species the trends is estimated for a @@ -39,16 +39,16 @@ #' - `is_resident`: classifies this species a resident or a migrant. #' - `breeding_quality`: breeding season quality. #' - `breeding_start`: breeding season start date. -#' - `breeding_end`: breeding season start date. +#' - `breeding_end`: breeding season end date. #' - `nonbreeding_quality`: non-breeding season quality. #' - `nonbreeding_start`: non-breeding season start date. -#' - `nonbreeding_end`: non-breeding season start date. +#' - `nonbreeding_end`: non-breeding season end date. #' - `postbreeding_migration_quality`: post-breeding season quality. #' - `postbreeding_migration_start`: post-breeding season start date. -#' - `postbreeding_migration_end`: post-breeding season start date. +#' - `postbreeding_migration_end`: post-breeding season end date. #' - `prebreeding_migration_quality`: pre-breeding season quality. #' - `prebreeding_migration_start`: pre-breeding season start date. -#' - `prebreeding_migration_end`: pre-breeding season start date. +#' - `prebreeding_migration_end`: pre-breeding season end date. #' - `resident_quality`: resident quality. #' - `resident_start`: for resident species, the year-round start date. #' - `resident_end`: for resident species, the year-round end date. diff --git a/R/ebirdst-palettes.R b/R/ebirdst-palettes.R index 9f88b40..c5f2ec9 100644 --- a/R/ebirdst-palettes.R +++ b/R/ebirdst-palettes.R @@ -28,7 +28,7 @@ ebirdst_palettes <- function( "trends" ) ) { - stopifnot(is.numeric(n), length(n) == 1, n >= 1) + stopifnot(is_count(n), n >= 1) type <- match.arg(type) # set base color by season @@ -54,8 +54,6 @@ ebirdst_palettes <- function( base_col <- "#73af48" } else if (type == "year_round") { base_col <- "#6f4070" - } else { - stop("Invalid season.") } # seasonal palettes diff --git a/R/fetch.R b/R/fetch.R index 4d11795..d54f349 100644 --- a/R/fetch.R +++ b/R/fetch.R @@ -119,7 +119,7 @@ list_object_keys <- function(species_code, dataset = c("status", "trends")) { "Cannot access Status and Trends data URL. Ensure that you have ", "a working internet connection and a valid API key for the ", "Status and Trends data. Note that the API keys expire after ", - "6 month, so may need to update your key. ", + "6 months, so you may need to update your key. ", "Visit https://ebird.org/st/request" ) } @@ -330,7 +330,7 @@ download_files <- function(src, dest, keys, show_progress) { dl_response != 0 && stringr::str_starts(src[i], "https://st-download") ) { use_http_fallback() - src[i] <- sub("^https://", "http://", src[i]) + src[i:n_files] <- sub("^https://", "http://", src[i:n_files]) tryCatch( suppressWarnings( utils::download.file(src[i], dest[i], quiet = TRUE, mode = "wb") diff --git a/R/load.R b/R/load.R index a88d25a..77ae167 100644 --- a/R/load.R +++ b/R/load.R @@ -168,7 +168,7 @@ load_raster <- function( metric <- "mean" } if (!metric %in% c("mean", "max")) { - stop("Valid metrics for seasonal or full-year data are 'mean' or 'max.'") + stop("Valid metrics for seasonal or full-year data are 'mean' or 'max'.") } # construct filename @@ -301,8 +301,7 @@ load_trends <- function( } # construct keys for trends parquet files - trends_paths <- character() - for (i in seq_along(species_code)) { + build_trends_path <- function(i) { if (fold_estimates) { f <- stringr::str_glue( "{species_code[i]}_{season[i]}_ebird-trends_", @@ -314,11 +313,13 @@ load_trends <- function( "{v}.parquet" ) } - trends_paths <- c( - trends_paths, - file.path(path, trends_key(species_code[i], "trends", f)) - ) + return(file.path(path, trends_key(species_code[i], "trends", f))) } + trends_paths <- vapply( + seq_along(species_code), + build_trends_path, + FUN.VALUE = character(1) + ) # download trends data on demand for any species not already present ensure_data_dir(path) @@ -337,11 +338,8 @@ load_trends <- function( } # load data - trends <- NULL - for (pq in trends_paths) { - trends <- dplyr::bind_rows(trends, arrow::read_parquet(pq)) - } - return(trends) + trends <- lapply(trends_paths, arrow::read_parquet) + return(dplyr::bind_rows(trends)) } @@ -390,15 +388,15 @@ load_trends <- function( #' } load_data_coverage <- function( product = c("spatial-coverage", "selection-probability"), - weeks, + weeks = NULL, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() ) { - product <- match.arg(product) - stopifnot(!missing(weeks), is.character(weeks)) + stopifnot(is.null(weeks) || is.character(weeks)) stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force), is_flag(show_progress)) + product <- match.arg(product) check_gtiff_support() @@ -453,7 +451,7 @@ load_data_coverage <- function( #' @param smoothed logical; whether smoothed or unsmoothed ranges should be #' loaded. #' -#' @return An `sf` update containing the seasonal range boundaries, with each +#' @return An `sf` object containing the seasonal range boundaries, with each #' season provided as a different feature. #' @export #' @@ -476,7 +474,7 @@ load_ranges <- function( ) { stopifnot(is.character(species), length(species) == 1) stopifnot(is.character(path), length(path) == 1) - stopifnot(is.logical(smoothed), length(smoothed) == 1) + stopifnot(is_flag(smoothed)) stopifnot(is_flag(force), is_flag(show_progress)) resolution <- match.arg(resolution) @@ -714,7 +712,7 @@ load_config <- function( #' - `fa_extent_projected`: the extent in projected (Equal Earth) coordinates #' - `weekly_bins`/`weekly_labels`: weekly abundance bins and labels for the #' full annual cycle -#' - `seasonal_bins`/`seasonal_labels: seasonal abundance bins and labels for +#' - `seasonal_bins`/`seasonal_labels`: seasonal abundance bins and labels for #' the full annual cycle #' #' @export @@ -738,7 +736,7 @@ load_fac_map_parameters <- function( stopifnot(is_flag(force), is_flag(show_progress)) # load config file, downloading it on demand if necessary - species_code <- get_species(species) + species_code <- resolve_species(species) p <- load_config( species = species_code, path = path, @@ -747,7 +745,7 @@ load_fac_map_parameters <- function( ) ext_order <- unlist(p$bbox_native)[c("xmin", "xmax", "ymin", "ymax")] - list( + return(list( custom_projection = p$projection$crs, fa_extent = terra::ext(p$projection$extent), res = p$projection$res, @@ -756,7 +754,7 @@ load_fac_map_parameters <- function( weekly_labels = p$bins[["3km"]]$labels, seasonal_bins = p$bins_seasonal[["3km"]]$breaks, seasonal_labels = p$bins_seasonal[["3km"]]$labels - ) + )) } diff --git a/R/manage.R b/R/manage.R index 0b0fa7f..ea70053 100644 --- a/R/manage.R +++ b/R/manage.R @@ -171,7 +171,7 @@ ebirdst_delete <- function( stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force)) if (!is.null(species)) { - stopifnot(is.character(species), length(species) >= 1) + stopifnot(is.character(species), length(species) >= 1, !anyNA(species)) } if (!is.null(year)) { stopifnot(is_integer(year), length(year) >= 1, all(year > 0)) @@ -217,8 +217,9 @@ ebirdst_delete <- function( return(invisible(character(0))) } - # build unique target directories (one per species-year regardless of dataset, - # since both status and trends data reside in the same directory) + # build unique target directories (one per species-year regardless of + # dataset, since status and trends data for the same species/year would + # both reside in the same directory if their version years ever coincide) target_dirs <- unique(file.path(path, inv$version_year, inv$species_code)) # safety check: all targets must be within the base path @@ -267,6 +268,11 @@ ebirdst_delete <- function( } } + # only report the size of directories that were actually deleted, in case + # unlink() failed for some targets + inv_dirs <- file.path(path, inv$version_year, inv$species_code) + deleted_size_mb <- sum(inv$size_mb[inv_dirs %in% deleted_paths]) + # remove any year directories that are now empty affected_years <- unique(file.path(path, inv$version_year)) for (yr_dir in affected_years) { @@ -287,7 +293,7 @@ ebirdst_delete <- function( " director", if (length(deleted_paths) == 1) "y" else "ies", " (", - format_size(sum(inv$size_mb) * 1e6), + format_size(deleted_size_mb * 1e6), ")." ) return(invisible(deleted_paths)) @@ -348,12 +354,12 @@ print.ebirdst_inventory <- function(x, ...) { format_size <- function(bytes) { if (bytes >= 1e9) { - sprintf("%.1f GB", bytes / 1e9) + return(sprintf("%.1f GB", bytes / 1e9)) } else if (bytes >= 1e6) { - sprintf("%.1f MB", bytes / 1e6) + return(sprintf("%.1f MB", bytes / 1e6)) } else if (bytes >= 1e3) { - sprintf("%.1f KB", bytes / 1e3) + return(sprintf("%.1f KB", bytes / 1e3)) } else { - sprintf("%.0f B", bytes) + return(sprintf("%.0f B", bytes)) } } diff --git a/R/sample.R b/R/sample.R index 6d035d9..8c8b25d 100644 --- a/R/sample.R +++ b/R/sample.R @@ -356,7 +356,7 @@ grid_sample_stratified <- function( # project once now to avoid having to do it for every stratum if (is_lonlat) { - xy <- project_equal_area(locs, coords = coords[1:2]) + xy <- project_equal_area(locs, coords = coords[seq_len(2)]) # add time dimension if (length(coords) == 3) { xy[["t"]] <- locs[[coords[3]]] @@ -434,8 +434,7 @@ grid_sample_stratified <- function( } # subsample to decrease sample size to maximum - # TODO consider adding && nrow(sampled) > maximum_ss here - if (!is.null(maximum_ss)) { + if (!is.null(maximum_ss) && nrow(sampled) > maximum_ss) { sample_prop <- maximum_ss / nrow(sampled) if (case_control) { # case control sampling on: sample preserving detection probability @@ -754,7 +753,7 @@ safe_sample <- function(x, size, ...) { if (length(x) <= size || length(x) == 1) { return(x) } - sample(x, size = size, ...) + return(sample(x, size = size, ...)) } sample_stratify <- function(x, prop, sample_by) { @@ -773,7 +772,7 @@ sample_stratify <- function(x, prop, sample_by) { n = size, SIMPLIFY = FALSE ) - dplyr::bind_rows(sampled) + return(dplyr::bind_rows(sampled)) } # cap the number of observations contributed by each spatial grid cell at the diff --git a/R/trends.R b/R/trends.R index 71e3299..254cce7 100644 --- a/R/trends.R +++ b/R/trends.R @@ -17,7 +17,6 @@ #' #' @return A [SpatRaster][terra::SpatRaster] object. #' @export -#' #' @examples #' \dontrun{ #' # download example trends data if it hasn't already been downloaded @@ -152,9 +151,8 @@ rasterize_trends <- function( #' equal area CRS you intend to use when mapping the data otherwise the #' "circles" will appear skewed. #' -#' @returns Vectorized trends data as an [sf][sf::sf] object. +#' @return Vectorized trends data as an [sf][sf::sf] object. #' @export -#' #' @examples #' \dontrun{ #' # download example trends data if it hasn't already been downloaded @@ -220,7 +218,7 @@ vectorize_trends <- function( trends_pts <- dplyr::bind_rows(trends_pts) # buffer based on radius - sf::st_buffer(trends_pts, dist = trends_pts$radii) + return(sf::st_buffer(trends_pts, dist = trends_pts$radii)) } @@ -234,14 +232,13 @@ vectorize_trends <- function( #' cumulative trend resulting from `n_years` years of compounding annual #' trend. #' @export -#' #' @examples #' ppy_trend <- runif(100, min = -100, 100) #' cumulative_trend <- convert_ppy_to_cumulative(ppy_trend, n_years = 5) #' cbind(ppy_trend, cumulative_trend) convert_ppy_to_cumulative <- function(x, n_years) { stopifnot(is.numeric(x), is_count(n_years)) - 100 * ((1 + x / 100)^n_years - 1) + return(100 * ((1 + x / 100)^n_years - 1)) } @@ -258,7 +255,7 @@ trends_raster_template <- function() { "+proj=sinu +lon_0=0 +x_0=0 +y_0=0", "+R=6371007.181 +units=m +no_defs" )) - terra::rast(e, crs = crs, nrows = 626L, ncols = 1502L) + return(terra::rast(e, crs = crs, nrows = 626L, ncols = 1502L)) } categorize <- function(x, breaks, labels) { @@ -268,7 +265,7 @@ categorize <- function(x, breaks, labels) { is.numeric(labels) || is.character(labels), length(labels) == length(breaks) - 1 ) - y <- cut(x, breaks) + y <- cut(x, breaks, include.lowest = TRUE) lvl <- levels(y) - labels[match(y, lvl)] + return(labels[match(y, lvl)]) } diff --git a/R/utils.R b/R/utils.R index 8956c17..fa78db1 100644 --- a/R/utils.R +++ b/R/utils.R @@ -118,7 +118,9 @@ get_species <- function(x) { # internal ---- is_integer <- function(x) { - return(isTRUE(is.integer(x) || (is.numeric(x) && all(x == as.integer(x))))) + return(isTRUE( + is.numeric(x) && !anyNA(x) && all(is.finite(x)) && all(x == as.integer(x)) + )) } is_count <- function(x) { diff --git a/docs/news/index.html b/docs/news/index.html index d71e819..6fa6e52 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -49,6 +49,7 @@

ebirdst 4.2
  • The http fallback for VPNs that block https now also applies to file downloads, not just file listings
  • Errors for data that can’t be found on-demand now include function-specific guidance, e.g. pointing to list_available_pis()
  • +
  • Various small bug fixes and typos discovered by Claude Code
  • ebirdst 4.2023.0

    CRAN release: 2026-07-20

    diff --git a/docs/news/index.md b/docs/news/index.md index c35252f..899f509 100644 --- a/docs/news/index.md +++ b/docs/news/index.md @@ -19,6 +19,7 @@ - Errors for data that can’t be found on-demand now include function-specific guidance, e.g. pointing to [`list_available_pis()`](https://ebird.github.io/ebirdst/reference/load_pi.md) +- Various small bug fixes and typos discovered by Claude Code ## ebirdst 4.2023.0 diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 15ad6b1..3ca7aad 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -7,7 +7,7 @@ articles: articles/product-changelog: product-changelog.html articles/status: status.html articles/trends: trends.html -last_built: 2026-08-01T10:59Z +last_built: 2026-08-01T14:32Z urls: reference: https://ebird.github.io/ebirdst/reference article: https://ebird.github.io/ebirdst/articles diff --git a/docs/reference/ebirdst_runs.html b/docs/reference/ebirdst_runs.html index b32bbee..d8acd79 100644 --- a/docs/reference/ebirdst_runs.html +++ b/docs/reference/ebirdst_runs.html @@ -64,16 +64,16 @@

    Format<
  • is_resident: classifies this species a resident or a migrant.

  • breeding_quality: breeding season quality.

  • breeding_start: breeding season start date.

  • -
  • breeding_end: breeding season start date.

  • +
  • breeding_end: breeding season end date.

  • nonbreeding_quality: non-breeding season quality.

  • nonbreeding_start: non-breeding season start date.

  • -
  • nonbreeding_end: non-breeding season start date.

  • +
  • nonbreeding_end: non-breeding season end date.

  • postbreeding_migration_quality: post-breeding season quality.

  • postbreeding_migration_start: post-breeding season start date.

  • -
  • postbreeding_migration_end: post-breeding season start date.

  • +
  • postbreeding_migration_end: post-breeding season end date.

  • prebreeding_migration_quality: pre-breeding season quality.

  • prebreeding_migration_start: pre-breeding season start date.

  • -
  • prebreeding_migration_end: pre-breeding season start date.

  • +
  • prebreeding_migration_end: pre-breeding season end date.

  • resident_quality: resident quality.

  • resident_start: for resident species, the year-round start date.

  • resident_end: for resident species, the year-round end date.

  • @@ -101,11 +101,11 @@

    Format<

    Details

    For the Status Data Products, the dates defining the boundaries of the -seasons are provided in additional to a quality rating from 0-3 for each +seasons are provided in addition to a quality rating from 0-3 for each season. These dates and quality ratings are assigned through a process of expert review. -expert review. Note that missing dates imply that a season failed expert -review for that species within that season.

    +Note that missing dates imply that a season failed expert review for that +species within that season.

    Trends Data Products are only available for a subset of species, indicated by the has_trends variable, and for each species the trends is estimated for a single season. The two predictive performance metrics (rsquared and diff --git a/docs/reference/ebirdst_runs.md b/docs/reference/ebirdst_runs.md index 41fb64c..84e4c84 100644 --- a/docs/reference/ebirdst_runs.md +++ b/docs/reference/ebirdst_runs.md @@ -27,25 +27,25 @@ A data frame with 29 variables: - `breeding_start`: breeding season start date. -- `breeding_end`: breeding season start date. +- `breeding_end`: breeding season end date. - `nonbreeding_quality`: non-breeding season quality. - `nonbreeding_start`: non-breeding season start date. -- `nonbreeding_end`: non-breeding season start date. +- `nonbreeding_end`: non-breeding season end date. - `postbreeding_migration_quality`: post-breeding season quality. - `postbreeding_migration_start`: post-breeding season start date. -- `postbreeding_migration_end`: post-breeding season start date. +- `postbreeding_migration_end`: post-breeding season end date. - `prebreeding_migration_quality`: pre-breeding season quality. - `prebreeding_migration_start`: pre-breeding season start date. -- `prebreeding_migration_end`: pre-breeding season start date. +- `prebreeding_migration_end`: pre-breeding season end date. - `resident_quality`: resident quality. @@ -89,12 +89,12 @@ A data frame with 29 variables: ## Details For the Status Data Products, the dates defining the boundaries of the -seasons are provided in additional to a quality rating from 0-3 for each +seasons are provided in addition to a quality rating from 0-3 for each season. These dates and quality ratings are assigned through a process of [expert -review](https://science.ebird.org/status-and-trends/faq#seasons). expert -review. Note that missing dates imply that a season failed expert review -for that species within that season. +review](https://science.ebird.org/status-and-trends/faq#seasons). Note +that missing dates imply that a season failed expert review for that +species within that season. Trends Data Products are only available for a subset of species, indicated by the `has_trends` variable, and for each species the trends diff --git a/docs/reference/load_data_coverage.html b/docs/reference/load_data_coverage.html index 609cfa4..2f783ee 100644 --- a/docs/reference/load_data_coverage.html +++ b/docs/reference/load_data_coverage.html @@ -60,7 +60,7 @@

    Load eBird Status and Trends Data Coverage Products

    Usage

    load_data_coverage(
       product = c("spatial-coverage", "selection-probability"),
    -  weeks,
    +  weeks = NULL,
       path = ebirdst_data_dir(),
       force = FALSE,
       show_progress = interactive()
    diff --git a/docs/reference/load_data_coverage.md b/docs/reference/load_data_coverage.md
    index cc1f200..805bef7 100644
    --- a/docs/reference/load_data_coverage.md
    +++ b/docs/reference/load_data_coverage.md
    @@ -12,7 +12,7 @@ will be downloaded automatically on first use.
     ``` r
     load_data_coverage(
       product = c("spatial-coverage", "selection-probability"),
    -  weeks,
    +  weeks = NULL,
       path = ebirdst_data_dir(),
       force = FALSE,
       show_progress = interactive()
    diff --git a/docs/reference/load_fac_map_parameters.html b/docs/reference/load_fac_map_parameters.html
    index 882f6d1..c96c813 100644
    --- a/docs/reference/load_fac_map_parameters.html
    +++ b/docs/reference/load_fac_map_parameters.html
    @@ -109,7 +109,7 @@ 

    Value

    fa_extent_projected: the extent in projected (Equal Earth) coordinates

  • weekly_bins/weekly_labels: weekly abundance bins and labels for the full annual cycle

  • -
  • seasonal_bins/`seasonal_labels: seasonal abundance bins and labels for +

  • seasonal_bins/seasonal_labels: seasonal abundance bins and labels for the full annual cycle

  • diff --git a/docs/reference/load_fac_map_parameters.md b/docs/reference/load_fac_map_parameters.md index 261e531..d18274d 100644 --- a/docs/reference/load_fac_map_parameters.md +++ b/docs/reference/load_fac_map_parameters.md @@ -71,7 +71,7 @@ A list containing elements: - `weekly_bins`/`weekly_labels`: weekly abundance bins and labels for the full annual cycle -- `seasonal_bins`/\`seasonal_labels: seasonal abundance bins and labels +- `seasonal_bins`/`seasonal_labels`: seasonal abundance bins and labels for the full annual cycle ## Examples diff --git a/docs/reference/load_ranges.html b/docs/reference/load_ranges.html index c0a5f63..246bbf8 100644 --- a/docs/reference/load_ranges.html +++ b/docs/reference/load_ranges.html @@ -105,7 +105,7 @@

    Arguments

    Value

    -

    An sf update containing the seasonal range boundaries, with each +

    An sf object containing the seasonal range boundaries, with each season provided as a different feature.

    diff --git a/docs/reference/load_ranges.md b/docs/reference/load_ranges.md index b93efd1..ca2511a 100644 --- a/docs/reference/load_ranges.md +++ b/docs/reference/load_ranges.md @@ -62,7 +62,7 @@ load_ranges( ## Value -An `sf` update containing the seasonal range boundaries, with each +An `sf` object containing the seasonal range boundaries, with each season provided as a different feature. ## Examples diff --git a/docs/search.json b/docs/search.json index d2740b5..3979446 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":null,"dir":"","previous_headings":"","what":"CLAUDE.md","title":"CLAUDE.md","text":"file provides guidance Claude Code (claude.ai/code) working code repository.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"ebirdst--project-instructions-for-claude","dir":"","previous_headings":"","what":"ebirdst — project instructions for Claude","title":"CLAUDE.md","text":"file local-(gitignored) layers top global R style guide ~/.claude/CLAUDE.md. Follow ; file adds project-specific workflow requirements.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"CLAUDE.md","text":"ebirdst R package (CRAN + GitHub) downloading analyzing eBird Status Trends Data Products Cornell Lab Ornithology. fit models — client accessing pre-computed data products (rasters, tabular estimates, range polygons) toolkit loading, subsetting, visualizing, post-processing . two distinct product families separate version years (see ebirdst_version()): Status (weekly relative abundance, occurrence, count, PIs, PPMs, ranges) Trends (per-year population change, subset species/seasons).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"commands","dir":"","previous_headings":"","what":"Commands","title":"CLAUDE.md","text":"Prefer devtools::load_all() iterating (library(ebirdst)). Run one test file: devtools::test_file(\"tests/testthat/test-loading.R\") Run full suite: devtools::test() Re-document roxygen edits: devtools::document() Full package check: devtools::check() Format / lint (scoped R/ config): air format R/ jarl check R/ (autofix: jarl check --fix R/) Full release checklist (vignettes, pkgdown, win-builder): see makefile.R — release time , routine changes. Tests vignettes require \"yebsap-example\" dataset; tests/testthat/ setup.R downloads temp EBIRDST_DATA_DIR whole suite.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"architecture","dir":"","previous_headings":"","what":"Architecture","title":"CLAUDE.md","text":"package organized pipeline stage rather product. Key files R/ fit together: access-key.R — stores/retrieves Status & Trends access key via rappdirs config (set_ebirdst_access_key()); \"*-example\" datasets bypass key requirement. download.R — entry point (ebirdst_download_status(), ebirdst_download_trends(), ebirdst_download_data_coverage()). Downloads laid disk ///.... fixed layout load-bearing: every load_*() function reconstructs paths , renaming/moving downloaded files breaks loading. download_* flags plus pattern regex control files fetched; files mandatory always downloaded. load.R (largest file) — read layer. load_raster() returns terra SpatRaster stacks (52 weekly layers, resolutions like \"27km\"/\"3km\"); loaders return tabular data (load_pis, load_pds, load_ppm, load_regional_stats, load_config) sf objects (load_ranges). load_config() / load_fac_map_parameters() read per-species JSON drives plotting (custom projection, legend bins/labels). sample.R — spatiotemporal subsampling point data (grid_sample(), grid_sample_stratified(), assign_to_grid()) used reduce spatial bias analysis; tied specific data product. trends.R — post-processing Trends tabular data rasters/vectors (rasterize_trends(), vectorize_trends()) unit conversions. manage.R — local data inventory cleanup (ebirdst_data_inventory() print.ebirdst_inventory S3 method, ebirdst_delete()). ebirdst-palettes.R — Status-specific color palettes maps. utils.R — internal validators (is_flag/is_integer/is_count), get_species() (resolves common/scientific name code species code), date_to_st_week(). data.R — documents three bundled datasets data/: ebirdst_runs (authoritative species list, seasons, quality ratings, trends availability), ebirdst_predictors, ebirdst_predictor_descriptions. ebirdst-deprecated.R / ebirdst-defunct.R — version-migration surface; API changes land rather silently breaking callers. zzz.R — .onAttach prints active Status/Trends version years citations. Species referenced throughout six-letter eBird species code (e.g. \"woothr\"), user-facing functions accept common scientific names resolve via get_species() ebirdst_runs.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"formatting-and-linting--always-run-these","dir":"","previous_headings":"","what":"Formatting and linting — always run these","title":"CLAUDE.md","text":"writing editing file R/, run air format R/. repo’s air.toml scopes formatting R/ (data-raw/, examples/, tests/, makefile.R intentionally excluded), air format . also safe run repo root. writing editing file R/, run jarl check R/ (jarl check . — jarl.toml restricts R/ regardless). Fix obvious/auto-fixable issues jarl check --fix R/. warnings require judgment (e.g. internal_function ::: call public alternative), use judgment rather blindly forcing fix. every change, just explicitly asked format lint. Never run air/jarl tests/, data-raw/, examples/, makefile.R — intentionally scope per air.toml / jarl.toml.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"tests","dir":"","previous_headings":"","what":"Tests","title":"CLAUDE.md","text":"Every new exported internal function needs accompanying test tests/testthat/test-{name}.R (see global CLAUDE.md naming structure conventions). Don’t skip change feels small. modifying existing function’s behavior, update extend existing tests rather leaving stale. Run affected test file(s) devtools::test_file() running full suite; run devtools::test() considering change done. Use \"yebsap-example\" example dataset integration tests — ’s already downloaded tests/testthat/setup.R. Don’t add tests require downloading real species data.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"CLAUDE.md","text":"changing roxygen2 comment, re-run devtools::document() (regenerates NAMESPACE man/*.Rd). Never hand-edit NAMESPACE files man/. function’s @export tag missing misplaced, ’s real bug (silently breaks public API) — style nitpick.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"package-development-workflow","dir":"","previous_headings":"","what":"Package development workflow","title":"CLAUDE.md","text":"Bump version DESCRIPTION add bullet NEWS.md user-facing change (new function, changed argument, bug fix affecting output). Prefer devtools::load_all() library(ebirdst)/install.packages() iterating locally. considering larger changes complete, run devtools::check() resolve new NOTEs/WARNINGs/ERRORs introduces (see makefile.R fuller release checklist — vignettes, pkgdown site, win-builder checks — needed release time, routine changes).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"git-and-github","dir":"","previous_headings":"","what":"Git and GitHub","title":"CLAUDE.md","text":"repo typically contributed via fork + upstream remote (see CONTRIBUTING.md): changes land branch, PR ebird/ebirdst. permission run git gh (including gh pr create) directly. Still follow general git safety protocol: create new commits rather amending, never force-push main, never skip hooks unless explicitly asked, confirm anything destructive (reset --hard, force-push, branch deletion) even though command doesn’t require prompt.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"interest fostering open welcoming environment, contributors maintainers pledge making participation project community harassment-free experience everyone, regardless age, body size, disability, ethnicity, gender identity expression, level experience, nationality, personal appearance, race, religion, sexual identity orientation.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes creating positive environment include: Using welcoming inclusive language respectful differing viewpoints experiences Gracefully accepting constructive criticism Focusing best community Showing empathy towards community members Examples unacceptable behavior participants include: use sexualized language imagery unwelcome sexual attention advances Trolling, insulting/derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical electronic address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-responsibilities","dir":"","previous_headings":"","what":"Our Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Project maintainers responsible clarifying standards acceptable behavior expected take appropriate fair corrective action response instances unacceptable behavior. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, ban temporarily permanently contributor behaviors deem inappropriate, threatening, offensive, harmful.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within project spaces public spaces individual representing project community. Examples representing project community include using official project e-mail address, posting via official social media account, acting appointed representative online offline event. Representation project may defined clarified project maintainers.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported contacting project team mta45@cornell.edu. project team review investigate complaints, respond way deems appropriate circumstances. project team obligated maintain confidentiality regard reporter incident. details specific enforcement policies may posted separately. Project maintainers follow enforce Code Conduct good faith may face temporary permanent repercussions determined members project’s leadership.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 1.4, available http://contributor-covenant.org/version/1/4","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"please-contribute","dir":"","previous_headings":"","what":"Please contribute!","title":"CONTRIBUTING","text":"love collaboration.","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"bugs","dir":"","previous_headings":"","what":"Bugs?","title":"CONTRIBUTING","text":"Submit issue Issues page ","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"code-contributions","dir":"","previous_headings":"","what":"Code contributions","title":"CONTRIBUTING","text":"Fork repo Github account Clone version account machine account, e.g,. git clone https://github.com//ebirdst.git Make sure track progress upstream (.e., version ebirdst ebird/ebirdst) git remote add upstream https://github.com/ebird/ebirdst.git. making changes make sure pull changes upstream either git fetch upstream merge later git pull upstream fetch merge one step Make changes (bonus points making changes new branch) alter package functionality (e.g., code , just documentation) please write tests cove new functionality. Push account Submit pull request home base ebird/ebirdst","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc.  Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"api-endpoints","dir":"Articles","previous_headings":"","what":"API Endpoints","title":"eBird Status and Trends Data Products API","text":"eBird Status Trends Data Products API two endpoints: one list available files given species one download single file. list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return: download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"] https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"list","dir":"Articles","previous_headings":"","what":"List","title":"eBird Status and Trends Data Products API","text":"list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"]"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"download","dir":"Articles","previous_headings":"","what":"Download","title":"eBird Status and Trends Data Products API","text":"download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map","dir":"Articles","previous_headings":"","what":"Mapping relative abundance","title":"eBird Status Data Products Applications","text":"section, ’ll demonstrate make simple map relative abundance within given region. example, ’ll make map breeding season relative abundance Western Meadowlark Montana. maps produced using approach suitable many applications; however, high-quality publication-ready maps, may worthwhile using traditional GIS environment QGIS ArcGIS rather R. start loading breeding season relative abundance raster Western Meadowlark. data downloaded automatically first time load , ’s need download explicitly first. simplest way map seasonal relative abundance data use built plot() function terra package. Clearly simple approach doesn’t work well! wide variety issues ’ll tackle one time. raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf(). raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows. relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website. Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# load seasonal mean relative abundance at 3km resolution abd_seasonal <- load_raster( species = \"wesmea\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"3km\" ) # extract just the breeding season relative abundance abd_breeding <- abd_seasonal[[\"breeding\"]] plot(abd_breeding, axes = FALSE) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE) # find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\") # quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-extent","dir":"Articles","previous_headings":"","what":"Cropping and masking","title":"eBird Status Data Products Applications","text":"raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf().","code":"# region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-projection","dir":"Articles","previous_headings":"","what":"Projection","title":"eBird Status Data Products Applications","text":"raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows.","code":"# find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-bins","dir":"Articles","previous_headings":"","what":"Abundance bins","title":"eBird Status Data Products Applications","text":"relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website.","code":"# quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-basemap","dir":"Articles","previous_headings":"","what":"Basemap","title":"eBird Status Data Products Applications","text":"Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron","dir":"Articles","previous_headings":"","what":"Migration chronologies","title":"eBird Status Data Products Applications","text":"Goal: generate migration chronologies set species within region investigate use region changes throughout year different species. information can used inform optimal time year make temporally specific conservation investments. example type conservation intervention, see California Bird Returns project. application ’ll use weekly estimates chart change relative abundance throughout year given region. migration chronologies can useful identifying given geography receives highest intensity use species group species. ’ll start generating chronology confidence intervals single species, demonstrate produce multi-species chronologies. examples, ’ll consider grassland birds Montana. start ’ll load polygon boundary Montana. single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species. Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" ) grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-single","dir":"Articles","previous_headings":"","what":"Single species with uncertainty","title":"eBird Status Data Products Applications","text":"single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species.","code":"# load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-multi","dir":"Articles","previous_headings":"","what":"Multi-species","title":"eBird Status Data Products Applications","text":"Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats","dir":"Articles","previous_headings":"","what":"Regional proportion of population","title":"eBird Status Data Products Applications","text":"Goal: identify proportion species’ population falling within given region. information can used highlight stewardship responsibility species, example, large proportion species’ breeding population falls within region, region said high stewardship responsibility species. eBird Status Trends website provides regional summary statistics country state/province level species. example, can use regional stats see 36% non-breeding population Golden Eagle falls within United States. website also allows users draw customs polygons get summary statistics within polygons. However, cases may want estimate regional summary statistics way isn’t supported website. ’ll provide examples calculating proportion population within region. ’ll use Golden Eagle examples; , required data downloaded automatically first time ’re loaded. example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions. broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population. eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January. one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948 # seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229 # weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694 # non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-seasonal","dir":"Articles","previous_headings":"","what":"Proportion of seasonal population","title":"eBird Status Data Products Applications","text":"example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-relative","dir":"Articles","previous_headings":"","what":"Proportion of North American population","title":"eBird Status Data Products Applications","text":"broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population.","code":"# seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-custom","dir":"Articles","previous_headings":"","what":"Regional stats for weeks and custom time periods","title":"eBird Status Data Products Applications","text":"eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January.","code":"# weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-coastal","dir":"Articles","previous_headings":"","what":"Coastal species","title":"eBird Status Data Products Applications","text":"one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi","dir":"Articles","previous_headings":"","what":"Areas of importance","title":"eBird Status Data Products Applications","text":"Goal: identify areas highest importance set species within region. information can used identify areas prioritize protection conservation interventions. eBird Status Data Products can used identify areas importance species group species, can help prioritize areas protection conservation interventions. context, “areas importance” refer areas within landscape higher concentration given species. application, ’ll use set grassland species Montana breeding season used migration chronology example. simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell. richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"# species list grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") |> st_transform(st_crs(abd_breeding)) |> vect() range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE) prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-richness","dir":"Articles","previous_headings":"","what":"Richness","title":"eBird Status Data Products Applications","text":"simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell.","code":"range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-importance","dir":"Articles","previous_headings":"","what":"Importance","title":"eBird Status Data Products Applications","text":"richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"ppms","dir":"Articles","previous_headings":"","what":"Assessing model performance","title":"eBird Status Data Products Applications","text":"Goal: use spatial predictive performance metrics (PPMs) assess model performance varies across range species. eBird Status Trends species assigned quality scores (0-3) season describing quality model predictions across full range species. example, let’s look breeding season quality Horned Lark. score (2) corresponds “medium quality”, indicating extrapolation omission breeding season predictions. However, Horned Lark broadly distributed species, occurring throughout holarctic realm. Data users typically interested model predictions within particular region, quality score gives indication extrapolation omission occurring, occurs somewhere within range. Someone working predictions Mongolian portion range may dealing different prediction quality someone working predictions part range Western United States. model quality scores quite coarse, spatial predictive performance metrics (PPMs) available species provide much finer scale information model quality. migratory species like Horned Lark, data products provide suite performance metrics weekly 27 km resolution. Let’s load proportion Bernoulli deviance explained metric, typically one useful assessing model quality. PPM downloaded automatically first time ’s loaded. (’d rather download PPMs species front, use ebirdst_download_status(download_ppms = TRUE).) data form 27 km raster 52 layers, one week year. Let’s average PPMs across weeks breeding season, subset just portion range within United States Canada, make map. Negative proportions deviance explained (red map) indicate occurrence model performing worse null model extra caution used using predictions areas.","code":"horlar_review <- filter(ebirdst_runs, species_code == \"horlar\") |> select(breeding_quality, breeding_start, breeding_end) print(horlar_review) #> # A tibble: 1 × 3 #> breeding_quality breeding_start breeding_end #> #> 1 2 2023-06-07 2023-08-09 # load the ppm; it's downloaded automatically if not already present bernoulli_dev <- load_ppm(\"horlar\", ppm = \"occ_bernoulli_dev\") print(bernoulli_dev) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : horlar_ppm_occ-bernoulli-dev_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : -1.20164, -0.340517, -0.220324, -0.184706, -0.167553, -0.217626, ... #> max values : 0.516208, 0.516208, 0.500421, 0.419996, 0.419996, 0.360411, ... # subset to weeks in breeding season and average breeding_dates <- c(horlar_review$breeding_start, horlar_review$breeding_end) |> format(\"%m-%d\") in_breeding <- names(bernoulli_dev) >= breeding_dates[1] & names(bernoulli_dev) <= breeding_dates[2] bernoulli_dev_breeding <- mean(bernoulli_dev[[in_breeding]], na.rm = TRUE) # mask to just canada and the united states us_ca <- ne_countries(country = c(\"United States of America\", \"Canada\")) |> st_transform(st_crs(bernoulli_dev_breeding)) bernoulli_dev_breeding_us_ca <- bernoulli_dev_breeding |> crop(us_ca) |> mask(us_ca) |> trim() # make a map ppm_cols <- rev(scico(100, palette = \"vik\")) max_val <- global(abs(bernoulli_dev_breeding_us_ca), fun = max, na.rm = TRUE) |> as.numeric() plot(bernoulli_dev_breeding_us_ca, range = c(-max_val, max_val), col = ppm_cols, axes = FALSE, box = TRUE ) plot(st_geometry(us_ca), add = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog","dir":"Articles","previous_headings":"","what":"2023 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2023 (available May 2025) Citation: Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 new eBird Trends generated released version. existing versions remain website; please see previous changelog. CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"new eBird Trends generated released version. existing versions remain website; please see previous changelog.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"changes.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive Performance Metrics (PPMs)","title":"eBird Status and Trends Data Products Changelog","text":"Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table .","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-1","dir":"Articles","previous_headings":"","what":"2022 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2022 (available November 2023) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed. ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status-1","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-1","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-1","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates-1","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-1","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-1","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-1","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction-1","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-1","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-1","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends-1","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"covariates","dir":"Articles","previous_headings":"","what":"Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-2","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products-1","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional trends CIs.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-2","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-2","dir":"Articles","previous_headings":"","what":"2021 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2021 (available November 2022) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, . Rodewald, C. Wood, . Davies, . Spencer. 2022. eBird Status Trends, Data Version: 2021; Released: 2022. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2021 CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1. ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-2","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-2","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-2","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-2","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"general","dir":"Articles","previous_headings":"","what":"General","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-2","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"fit-and-predict","dir":"Articles","previous_headings":"","what":"Fit and Predict","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"residents","dir":"Articles","previous_headings":"","what":"Residents","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-3","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-3","dir":"Articles","previous_headings":"","what":"2020 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2020 (available Fall 2021) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, L. Jaromczyk, C. Wood, . Davies, M. Iliff, L. Seitz. 2021. eBird Status Trends, Data Version: 2020; Released: 2021. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2020 CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-3","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-3","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-3","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-3","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-1","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-1","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"resident-methodology","dir":"Articles","previous_headings":"","what":"Resident Methodology","title":"eBird Status and Trends Data Products Changelog","text":"stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-4","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-4","dir":"Articles","previous_headings":"","what":"2019 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2019 (available Fall 2020) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, C. Wood, . Davies, M. Iliff, L. Seitz. 2020. eBird Status Trends, Data Version: 2019; Released: 2020. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2019 CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-4","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-4","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-4","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-4","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-2","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-2","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"seasonal-products","dir":"Articles","previous_headings":"","what":"Seasonal Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-5","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: now 184 species modeled fully global extent. overall species total now 807.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review-1","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Introduction to eBird Status Data Products","text":"study conservation natural world relies detailed information distributions, abundances, population trends species time. many taxa, information challenging obtain relevant geographic scales. goal eBird Status Trends project use data eBird, global participatory science bird monitoring program administered Cornell Lab Ornithology, generate reliable, standardized source biodiversity information world’s bird populations. translate eBird observations robust data products, use machine learning fill spatiotemporal gaps, using local land cover descriptions derived remote sensing data, controlling biases inherent species observations collected community scientists. See Fink et al. (2019) information analysis used generate data. vignette gives overview eBird Status Data Products, estimate full annual cycle distributions, relative abundances, habitat associations 2,980 species year 2023. species, distribution abundance estimates available 52 weeks year across regular 3 km 3 km square grid cells covering globe. Variation detectability associated search effort controlled standardizing estimates expected occurrence rate count species 1 hour, 2 km checklist expert eBird observer optimal time day optimal weather conditions detecting species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"access","dir":"Articles","previous_headings":"","what":"Data access","title":"Introduction to eBird Status Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Filling form generates key used R package. terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided eBird Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided . Throughout vignette, ’ll use simplified example dataset consisting estimates Yellow-bellied Sapsucker Michigan. dataset designed small faster download , unlike data species, accessible without key. data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website. new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"library(dplyr) library(sf) library(terra) library(ebirdst) # download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE) ebirdst_data_inventory() #> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) #> #> 2022 Trends Data Products (9.3 MB) #> Brewer's Sparrow (brespa): 3 files, 4.0 MB #> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB #> Sage Thrasher (sagthr): 3 files, 2.7 MB #> #> 2023 Status Data Products (1.5 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 2 files, 103.7 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"downloading-data","dir":"Articles","previous_headings":"","what":"Downloading data","title":"Introduction to eBird Status Data Products","text":"data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"# download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"managing-downloaded-data","dir":"Articles","previous_headings":"","what":"Managing downloaded data","title":"Introduction to eBird Status Data Products","text":"new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"ebirdst_data_inventory() #> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) #> #> 2022 Trends Data Products (9.3 MB) #> Brewer's Sparrow (brespa): 3 files, 4.0 MB #> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB #> Sage Thrasher (sagthr): 3 files, 2.7 MB #> #> 2023 Status Data Products (1.5 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 2 files, 103.7 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"species","dir":"Articles","previous_headings":"","what":"Species list","title":"Introduction to eBird Status Data Products","text":"data frame ebirdst_runs lists species eBird Status Data Products available download. ’re working RStudio, can use View() interactively explore data frame. species go process review expert species prior released. ebirdst_runs data frame contains information review process. migrants, reviewers assess model estimates four seasons: breeding, non-breeding, pre-breeding migration, post-breeding migration. Resident (.e., non-migratory) species identified TRUE is_resident column ebirdst_runs, species assessed across whole year rather seasonally. ebirdst_runs contains two important pieces information season: quality rating seasonal dates. seasonal dates define weeks fall within season. Breeding non-breeding season dates defined species weeks seasons species’ population move. reason, seasons also described stationary periods. Migration periods defined periods movement stationary non-breeding breeding seasons. Note many species migratory periods include movement breeding grounds non-breeding grounds, also post-breeding dispersal, molt migration, movements. Reviewers also examine model estimates season assess amount extrapolation omission present model, assign associated quality rating ranging 0 (lowest quality) 3 (highest quality). Extrapolation refers cases model predicts occurrence species known absent, omission refers model failing predict occurrence species known present. rating 0 implies season failed review model results used period. Ratings 1-3 correspond gradient less extrapolation /omission, often use traffic light analogy referring : Red light (1): low quality, extensive extrapolation /omission noise, least regions estimates accurate; can used caution certain regions. Yellow light (2): medium quality, extrapolation /omission; use caution. Green light (3): high quality, little extrapolation /omission; seasons can safely used. Let’s look results review example dataset. , can see Yellow-bellied Sapsucker modeled migrant four seasons received quality 3, highest rating. Note variety trends-specific columns end data frame ’ll ignore now; columns covered trends vignette","code":"glimpse(ebirdst_runs) #> Rows: 2,981 #> Columns: 30 #> $ species_code \"yebsap-example\", \"abetow\", \"absfin1\", … #> $ scientific_name \"Sphyrapicus varius\", \"Melozone aberti\"… #> $ common_name \"Yellow-bellied Sapsucker\", \"Abert's To… #> $ is_resident FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, F… #> $ breeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ breeding_start 2023-05-17, NA, NA, 2023-05-31, NA, NA… #> $ breeding_end 2023-08-16, NA, NA, 2023-08-02, NA, NA… #> $ nonbreeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ nonbreeding_start 2023-11-22, NA, NA, 2023-11-22, NA, NA… #> $ nonbreeding_end 2023-03-08, NA, NA, 2023-02-22, NA, NA… #> $ postbreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ postbreeding_migration_start 2023-08-23, NA, NA, 2023-08-09, NA, NA… #> $ postbreeding_migration_end 2023-11-15, NA, NA, 2023-11-15, NA, NA… #> $ prebreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ prebreeding_migration_start 2023-03-15, NA, NA, 2023-03-01, NA, NA… #> $ prebreeding_migration_end 2023-05-10, NA, NA, 2023-05-24, NA, NA… #> $ resident_quality NA, \"3\", \"3\", NA, \"3\", \"3\", NA, \"2\", \"3… #> $ resident_start NA, 2023-01-04, 2023-01-04, NA, 2023-0… #> $ resident_end NA, 2023-12-27, 2023-12-27, NA, 2023-1… #> $ status_version_year 2023, 2023, 2023, 2023, 2023, 2023, 202… #> $ has_trends TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, F… #> $ trends_season \"breeding\", \"resident\", NA, \"breeding\",… #> $ trends_region \"north_america\", \"north_america\", NA, \"… #> $ trends_start_year 2012, 2012, NA, 2012, 2011, NA, NA, NA,… #> $ trends_end_year 2022, 2022, NA, 2022, 2021, NA, NA, NA,… #> $ trends_start_date \"05-24\", \"01-25\", NA, \"05-24\", \"11-01\",… #> $ trends_end_date \"08-16\", \"05-10\", NA, \"08-02\", \"05-03\",… #> $ rsquared 0.8572896, 0.9231821, NA, 0.8570363, 0.… #> $ beta0 0.227000849, -0.013923012, NA, 0.689424… #> $ trends_version_year 2022, 2022, NA, 2022, 2022, NA, NA, NA,… ebirdst_runs |> filter(species_code == \"yebsap-example\") |> glimpse() #> Rows: 1 #> Columns: 30 #> $ species_code \"yebsap-example\" #> $ scientific_name \"Sphyrapicus varius\" #> $ common_name \"Yellow-bellied Sapsucker\" #> $ is_resident FALSE #> $ breeding_quality \"3\" #> $ breeding_start 2023-05-17 #> $ breeding_end 2023-08-16 #> $ nonbreeding_quality \"3\" #> $ nonbreeding_start 2023-11-22 #> $ nonbreeding_end 2023-03-08 #> $ postbreeding_migration_quality \"3\" #> $ postbreeding_migration_start 2023-08-23 #> $ postbreeding_migration_end 2023-11-15 #> $ prebreeding_migration_quality \"3\" #> $ prebreeding_migration_start 2023-03-15 #> $ prebreeding_migration_end 2023-05-10 #> $ resident_quality NA #> $ resident_start NA #> $ resident_end NA #> $ status_version_year 2023 #> $ has_trends TRUE #> $ trends_season \"breeding\" #> $ trends_region \"north_america\" #> $ trends_start_year 2012 #> $ trends_end_year 2022 #> $ trends_start_date \"05-24\" #> $ trends_end_date \"08-16\" #> $ rsquared 0.8572896 #> $ beta0 0.2270008 #> $ trends_version_year 2022"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"types","dir":"Articles","previous_headings":"","what":"Data types","title":"Introduction to eBird Status Data Products","text":"species, variety data products available, can categorized following broad types: Weekly raster estimates: weekly estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. core products products derived. Seasonal raster estimates: seasonal estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. derived corresponding weekly raster data summarizing across weeks falling within season based dates defined ebirdst_runs data frame. seasons passed expert review process included. Seasonal range boundaries: seasonal range boundary polygons GeoPackage format. Regional summary statistics: variety summary statistics countries states/provinces (e.g. proportion total population region) CSV format. Predictive performance metrics (PPMs): suite spatial predictive performance metrics regular 27 km 27 km grid GeoTIFF format. data products covered detail following sections, including details load data R. loading functions take species (given common name, scientific name, species code) first argument. requested data already downloaded, loading functions download automatically first use, calling ebirdst_download_status() advance optional. used non-default path argument ebirdst_download_status() also need provide path argument loading functions. core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis. seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species. Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example: Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value. regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names: subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" ) # seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\") regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985… # download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"weekly-raster-estimates","dir":"Articles","previous_headings":"","what":"Weekly raster estimates","title":"Introduction to eBird Status Data Products","text":"core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"seasonal-raster-estimates","dir":"Articles","previous_headings":"","what":"Seasonal raster estimates","title":"Introduction to eBird Status Data Products","text":"seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species.","code":"# seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" )"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"range-boundaries","dir":"Articles","previous_headings":"","what":"Range boundaries","title":"Introduction to eBird Status Data Products","text":"Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example:","code":"# seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\")"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-summary-statistics","dir":"Articles","previous_headings":"","what":"Regional summary statistics","title":"Introduction to eBird Status Data Products","text":"Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value.","code":"regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985…"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-statistics-for-all-species","dir":"Articles","previous_headings":"","what":"Regional statistics for all species","title":"Introduction to eBird Status Data Products","text":"regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names:","code":"# download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive performance metrics (PPMs)","title":"Introduction to eBird Status Data Products","text":"subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"coverage","dir":"Articles","previous_headings":"","what":"Data coverage","title":"Introduction to eBird Status Data Products","text":"addition species-specific data products discussed , ebirdst provides access two species-agnostic data products data coverage workflow. data products GeoTIFF format provide weekly estimates regular 3 km 3 km grid Site selection probability: modeled probability (0-1) grid cell certain habitat configuration received eBird checklist within region season. Spatial coverage: fraction (0-1) grid cells within region season checklists given week. data products identify areas coverage eBird data relatively high low, can used prioritize areas increased data collection. example, load map site selection probability week May 10, use load_data_coverage(), download requested weeks automatically haven’t already downloaded. prefer download data coverage products advance, use ebirdst_download_data_coverage().","code":"site_sel <- load_data_coverage(\"selection-probability\", weeks = \"05-10\") plot(site_sel, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Introduction to eBird Status Data Products","text":"Fink, D., T. Auer, . Johnston, V. Ruiz‐Gutierrez, W.M. Hochachka, S. Kelling. 2019. Modeling avian full annual cycle distribution population trends citizen science data. Ecological Applications, 00(00):e02056. doi: 10.1002/eap.2056","code":""},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"download","dir":"Articles","previous_headings":"","what":"Downloading data","title":"eBird Trends Data Products","text":"Trends data access granted process eBird Status Data Products. haven’t already requested access key, consult relevant section Introduction eBird Status Data Products vignette. Status Data Products, trends data downloaded automatically first time load , cases don’t need download explicitly. ’d rather download data one species advance, use ebirdst_download_trends(), first argument vector common names, scientific names, species codes. Trends data downloaded centralized directory file management access performed via ebirdst. example, optionally pre-download breeding season trends data Sage Thrasher :","code":"ebirdst_download_trends(\"Sage Thrasher\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"load","dir":"Articles","previous_headings":"","what":"Loading data into R","title":"eBird Trends Data Products","text":"Trends data set species can loaded R using function load_trends(), downloads data automatically aren’t already present. example, can load Sage Thrasher trends estimates : row corresponds trend estimate 27 km 27 km grid cell, identified srd_id column cell center given longitude latitude coordinates. Columns beginning abd_ppy provide estimates percent per year trend relative abundance 80% confidence intervals, beginning abd_trend provide estimates cumulative trend relative abundance 80% confidence intervals time period. abd column gives relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). start_year/end_year start_date/end_date columns provide redundant information available ebirdst_runs. Specifically Sage Thrasher : tells us trend estimates breeding season (May 17 July 12) period 2012-2022.","code":"trends_sagthr <- load_trends(\"Sage Thrasher\") trends_runs |> filter(common_name == \"Sage Thrasher\") |> select( trends_start_year, trends_end_year, trends_start_date, trends_end_date ) #> # A tibble: 1 × 4 #> trends_start_year trends_end_year trends_start_date trends_end_date #> #> 1 2012 2022 05-17 07-12"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial","dir":"Articles","previous_headings":"","what":"Conversion to spatial formats","title":"eBird Trends Data Products","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km 27 km equal area grid. grid cell, coordinates (longitude latitude) provided center grid cell. many applications, explicitly spatial format useful coordinates can use convert tabular format either vector raster format. tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species. tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" ) trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) ) # rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-points","dir":"Articles","previous_headings":"","what":"Vector (points)","title":"eBird Trends Data Products","text":"tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS ","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-circles","dir":"Articles","previous_headings":"","what":"Vector (abundance-scaled circles)","title":"eBird Trends Data Products","text":"produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species.","code":"trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-raster","dir":"Articles","previous_headings":"","what":"Raster","title":"eBird Trends Data Products","text":"tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"# rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"uncertainty","dir":"Articles","previous_headings":"","what":"Uncertainty","title":"eBird Trends Data Products","text":"model used estimate trends produces ensemble 100 estimates location, based random subsample eBird data. ensemble estimates used quantify uncertainty trends estimates. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. wishing access estimates individual folds making ensemble can use fold_estimates = TRUE loading data. fold-level estimates can used quantify uncertainty, example, calculating trend given region. example, let’s load fold-level estimates Sage Thrasher: data frame much concise, giving estimates mid-point relative abundance percent per year trend relative abundance 100 folds grid cell. eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California). cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"trends_sagthr_folds <- load_trends(\"sagthr\", fold_estimates = TRUE) print(trends_sagthr_folds) #> # A tibble: 246,200 × 8 #> species_code season fold srd_id latitude longitude abd abd_ppy #> #> 1 sagthr breeding 1 254264 49.4 -120. 0.000527 -3.11 #> 2 sagthr breeding 1 255764 49.1 -120. 0.0147 -2.97 #> 3 sagthr breeding 1 255765 49.1 -119. 0.000214 -2.25 #> 4 sagthr breeding 1 257264 48.9 -120. 0.00174 -4.53 #> 5 sagthr breeding 1 257265 48.9 -120. 0.0132 -3.86 #> 6 sagthr breeding 1 257266 48.9 -119. 0.00118 -4.04 #> 7 sagthr breeding 1 258765 48.6 -120. 0.00335 -3.08 #> 8 sagthr breeding 1 258766 48.6 -119. 0.0191 -0.459 #> 9 sagthr breeding 1 258767 48.6 -119. 0.00511 -6.40 #> 10 sagthr breeding 1 260264 48.4 -120. 0.000104 -2.71 #> # ℹ 246,190 more rows # boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\") sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-regional","dir":"Articles","previous_headings":"","what":"Regional trends","title":"eBird Trends Data Products","text":"eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California).","code":"# boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-multi","dir":"Articles","previous_headings":"","what":"Multi-species trends","title":"eBird Trends Data Products","text":"cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Matthew Strimas-Mackey. Author, maintainer. Shawn Ligocki. Author. Tom Auer. Author. Daniel Fink. Author. Cornell Lab Ornithology. Copyright holder.","code":""},{"path":"https://ebird.github.io/ebirdst/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Strimas-Mackey M, Ligocki S, Auer T, Fink D (2026). ebirdst: Access Analyze eBird Status Trends Data Products. R package version 4.2023.1, https://ebird.github.io/ebirdst/.","code":"@Manual{, title = {ebirdst: Access and Analyze eBird Status and Trends Data Products}, author = {Matthew Strimas-Mackey and Shawn Ligocki and Tom Auer and Daniel Fink}, year = {2026}, note = {R package version 4.2023.1}, url = {https://ebird.github.io/ebirdst/}, }"},{"path":[]},{"path":"https://ebird.github.io/ebirdst/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Trends project Cornell Lab Ornithology uses machine-learning models estimate distributions, relative abundances, population trends high spatial temporal resolution across full annual cycle 2,980 bird species globally. models learn relationships bird observations collected eBird suite remotely sensed habitat variables, accounting noise bias inherent community science datasets, including variation observer behavior effort. Interactive maps visualizations model estimates can explored online, Status Trends Data Products provide access data behind maps visualizations. ebirdst R package provides set tools downloading data products, loading R, using visualization analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Access and Analyze eBird Status and Trends Data Products","text":"Install ebirdst GitHub : version ebirdst designed work 2023 version Status Data Products 2022 version Trends Data Products. Users strongly discouraged comparing Status Trends results years due methodological differences versions. accessed used previous versions /may need access previous versions reasons related reproducibility, please contact ebird@cornell.edu request considered.","code":"if (!requireNamespace(\"remotes\", quietly = TRUE)) { install.packages(\"remotes\") } remotes::install_github(\"ebird/ebirdst\")"},{"path":"https://ebird.github.io/ebirdst/index.html","id":"webinars","dir":"","previous_headings":"","what":"Webinars","title":"Access and Analyze eBird Status and Trends Data Products","text":"series eBird Status Trends webinars presented collaboration Birds World available YouTube. webinars cover much material vignettes available ebirdst R package website, visual interactive format. webinars follows Estimating Abundance Trends World’s Birds using eBird data: introduction methodology used generate eBird Status Trends Data Products data products used conservation research. Part : introduction range data products available well suite tools training materials available working data. webinar also covers work spatial data products QGIS. Part II: applications eBird Status Data Products. Part III: applications eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"data-access","dir":"","previous_headings":"","what":"Data access","title":"Access and Analyze eBird Status and Trends Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Access form generates key used R package provided immediately (long commercial use requested). terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided .","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"access-outside-of-r","dir":"","previous_headings":"Data access","what":"Access outside of R","title":"Access and Analyze eBird Status and Trends Data Products","text":"interested accessing data outside R, two alternative options: widely used data products available direct download Status Trends website. Spatial data accessible widely adopted GeoTIFF GeoPackage formats, can opened QGIS, ArcGIS, GIS software. API programmatic access outside R. information eBird Status Trends Data Products API, consult associated vignette.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Data Products eBird Trends Data Products come different versions require different citations. Please cite eBird Status Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 Download BibTeX version. Please cite eBird Trends Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 Download BibTeX version.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"vignettes","dir":"","previous_headings":"","what":"Vignettes","title":"Access and Analyze eBird Status and Trends Data Products","text":"full package documentation, including series vignettes covering full spectrum introductory advanced usage, please see package website. available vignettes : Introduction eBird Status Data Products: covers data access, available data products, structure format data files. eBird Status Data Products Applications: demonstrates work raster data products use variety common applications. eBird Trends Data Products: covers downloading working eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"quick-start","dir":"","previous_headings":"","what":"Quick Start","title":"Access and Analyze eBird Status and Trends Data Products","text":"quick start guide shows download data plot relative abundance values similar plotted eBird Status Trends weekly abundance animations. guide, throughout package documentation, simplified example dataset used consisting Yellow-bellied Sapsucker Michigan. full list species available download, look data frame ebirst_runs, included package. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using R package. Downloaded data specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"library(fields) library(rnaturalearth) library(sf) library(terra) library(ebirdst) # load relative abundance raster stack for yellow-bellied sapsucker in michigan # consisting of 52 layers, one for each week # this will download the data if it has not already been downloaded abd <- load_raster(\"yebsap-example\", resolution = \"27km\") # load species specific mapping parameters pars <- load_fac_map_parameters(\"yebsap-example\") # custom coordinate reference system crs <- st_crs(pars$custom_projection) # legend breaks breaks <- pars$weekly_bins # legend labels for top, middle, and bottom labels <- pars$weekly_labels # the date that each raster layer corresponds to is stored within the labels weeks <- as.Date(names(abd)) print(weeks) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # select a week in the middle of the year abd <- abd[[26]] # project to species specific coordinates # the nearest neighbor method preserves cell values across projections abd_prj <- project(trim(abd), crs$wkt, method = \"near\") # get reference data from the rnaturalearth package # the example data currently shows only the US state of Michigan wh_states <- ne_states(country = c(\"United States of America\", \"Canada\"), returnclass = \"sf\") |> st_transform(crs = crs) |> st_geometry() # start plotting par(mfrow = c(1, 1), mar = c(0, 0, 0, 0)) # use raster bounding box to set the spatial extent for the plot bb <- st_as_sfc(st_bbox(trim(abd_prj))) plot(bb, col = \"white\", border = \"white\") # add background reference data plot(wh_states, col = \"#cfcfcf\", border = NA, add = TRUE) # plot zeroes as light gray plot(abd_prj, col = \"#e6e6e6\", maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # define color palette pal <- ebirdst_palettes(length(breaks) - 1, type = \"weekly\") # plot abundance plot(abd_prj, col = pal, breaks = breaks, maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # state boundaries plot(wh_states, add = TRUE, col = NA, border = \"white\", lwd = 1.5) # legend label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot(zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list(at = c(0, 0.5, 1), labels = round(labels, 2), cex.axis = 0.9, lwd.ticks = 0))"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign points to a spacetime grid — assign_to_grid","title":"Assign points to a spacetime grid — assign_to_grid","text":"Given set points space (optionally) time, define regular grid given dimensions, return grid cell index point.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"assign_to_grid( points, coords = NULL, is_lonlat = FALSE, res, jitter_grid = TRUE, grid_definition = NULL )"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign points to a spacetime grid — assign_to_grid","text":"points data frame; points spatial coordinates x y, optional time coordinate t. coords character; names spatial temporal coordinates input dataframe. provide names want overwrite default coordinate names: c(\"x\", \"y\", \"t\") c(\"longitude\", \"latitude\", \"t\") is_lonlat = TRUE. is_lonlat logical; points unprojected, lon-lat coordinates. case, input data frame columns \"longitude\" \"latitude\" points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution grid x, y, t dimensions, respectively. 2 dimensions provided, space grid generated. units res coordinates input data unless is_lonlat true case x y resolution provided meters. jitter_grid logical; whether jitter location origin grid introduce randomness. grid_definition list; object defining grid via origin resolution components. assign multiple sets points exactly grid, assign_to_grid() returns data frame grid_definition attribute can passed subsequent calls assign_to_grid(). res jitter ignored grid_definition provided.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign points to a spacetime grid — assign_to_grid","text":"Data frame indices space-spacetime grid cells. data frame grid_definition attribute can used reconstruct grid.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"set.seed(1) # generate some example points points_xyt <- data.frame(x = runif(100), y = runif(100), t = rnorm(100)) # assign to grid cells <- assign_to_grid(points_xyt, res = c(0.1, 0.1, 0.5)) # assign a second set of points to the same grid assign_to_grid(points_xyt, grid_definition = attr(cells, \"grid_definition\")) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 4-7 4-7-4 #> 2 5-4 5-4-5 #> 3 7-3 7-3-3 #> 4 10-10 10-10-6 #> 5 3-7 3-7-4 #> 6 10-3 10-3-9 #> 7 10-2 10-2-7 #> 8 8-5 8-5-7 #> 9 7-10 7-10-6 #> 10 2-7 2-7-9 #> # ℹ 90 more rows # assign lon-lat points to a 10km space-only grid points_ll <- data.frame(longitude = runif(100, min = -180, max = 180), latitude = runif(100, min = -90, max = 90)) assign_to_grid(points_ll, res = c(10000, 10000), is_lonlat = TRUE) #> # A tibble: 100 × 1 #> cell_xy #> #> 1 2960-1224 #> 2 3184-781 #> 3 2110-1687 #> 4 1254-617 #> 5 2407-1571 #> 6 244-1415 #> 7 3172-924 #> 8 2894-1604 #> 9 1203-769 #> 10 2118-1 #> # ℹ 90 more rows # overwrite default coordinate names, 5km by 1 week grid points_names <- data.frame(lon = runif(100, min = -180, max = 180), lat = runif(100, min = -90, max = 90), day = sample.int(365, size = 100)) assign_to_grid(points_names, res = c(5000, 5000, 7), coords = c(\"lon\", \"lat\", \"day\"), is_lonlat = TRUE) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 5348-68 5348-68-49 #> 2 2294-1332 2294-1332-40 #> 3 2577-1839 2577-1839-16 #> 4 5159-3343 5159-3343-26 #> 5 867-2655 867-2655-5 #> 6 5944-2704 5944-2704-19 #> 7 2254-1551 2254-1551-41 #> 8 3453-166 3453-166-51 #> 9 3515-2926 3515-2926-9 #> 10 4736-1401 4736-1401-33 #> # ℹ 90 more rows"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate MCC and F1 score — calculate_mcc_f1","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"Given binary observed predicted response, estimate Matthews correlation coefficient (MCC) F1 score.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"calculate_mcc_f1(observed, predicted)"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"observed logical 0/1; observed binary response. predicted logical 0/1; predicted binary response. typically need generated applying threshold continuous predicted response.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"list two elements: mcc f1.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"obs <- c(rep(1L, 1000L), rep(0L, 10000L)) pred <- c(rbeta(300L, 12, 2), rbeta(700L, 3, 4), rbeta(10000L, 2, 3)) calculate_mcc_f1(obs > 0, pred > 0.5) #> $f1 #> [1] 0.2227891 #> #> $mcc #> [1] 0.125311 #>"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"Convert percent per year trend cumulative trend","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"convert_ppy_to_cumulative(x, n_years)"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"x numeric; percent per year trend 0-100 scale rather 0-1 scale. n_years integer; number years.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"numeric vector length x contains cumulative trend resulting n_years years compounding annual trend.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"ppy_trend <- runif(100, min = -100, 100) cumulative_trend <- convert_ppy_to_cumulative(ppy_trend, n_years = 5) cbind(ppy_trend, cumulative_trend) #> ppy_trend cumulative_trend #> [1,] 26.5237797 224.235667 #> [2,] -78.7290758 -99.956456 #> [3,] 37.0308294 383.160512 #> [4,] 99.9613629 3096.910224 #> [5,] -60.5870956 -99.048974 #> [6,] -65.7462530 -99.528436 #> [7,] -66.6408817 -99.586883 #> [8,] 93.1104965 2585.526253 #> [9,] -27.6598451 -80.189421 #> [10,] -49.0065226 -96.551953 #> [11,] -72.5135942 -99.843112 #> [12,] -62.3086964 -99.239313 #> [13,] 67.5481140 1220.376291 #> [14,] -98.5543832 -100.000000 #> [15,] -21.6235981 -70.424874 #> [16,] 49.5139800 647.152082 #> [17,] 78.0171083 1687.757918 #> [18,] -37.4275029 -90.407817 #> [19,] -76.0853987 -99.921780 #> [20,] 16.0109404 110.133230 #> [21,] 4.9255232 27.176163 #> [22,] -31.6596431 -85.093139 #> [23,] -98.7014870 -100.000000 #> [24,] 52.0246697 712.026762 #> [25,] 23.2525141 184.432313 #> [26,] 28.6719997 252.712013 #> [27,] 82.5191530 1925.546527 #> [28,] -82.3117551 -99.982685 #> [29,] -28.0494563 -80.717187 #> [30,] -47.2478580 -95.914921 #> [31,] 18.3742505 132.426805 #> [32,] -97.3313568 -99.999999 #> [33,] 24.4785105 198.862837 #> [34,] -59.1507802 -98.862585 #> [35,] 3.2270633 17.210862 #> [36,] 88.5309670 2281.844887 #> [37,] 86.9456285 2183.371470 #> [38,] -18.6704147 -64.416981 #> [39,] -12.7653876 -49.482229 #> [40,] -70.8498831 -99.789525 #> [41,] -33.4829047 -86.978339 #> [42,] -20.7052394 -68.651089 #> [43,] -69.0053591 -99.713956 #> [44,] 92.0461348 2512.328892 #> [45,] 82.8205821 1942.327742 #> [46,] -50.1079920 -96.908602 #> [47,] -51.3973860 -97.287947 #> [48,] 82.6365235 1932.067636 #> [49,] 79.8070486 1779.462055 #> [50,] -37.4815181 -90.449148 #> [51,] 82.5406853 1926.741607 #> [52,] -39.6010438 -91.962015 #> [53,] -63.6699866 -99.367111 #> [54,] 61.6571397 1004.013670 #> [55,] -50.4581128 -97.015561 #> [56,] 75.0888617 1545.479955 #> [57,] 31.6975001 296.175538 #> [58,] -24.0338038 -74.701085 #> [59,] -81.7176180 -99.979575 #> [60,] 26.9031846 229.126312 #> [61,] -4.8496712 -22.007747 #> [62,] -53.2877808 -97.775909 #> [63,] -65.6208901 -99.519744 #> [64,] 71.7607693 1394.926645 #> [65,] -47.6182770 -96.056345 #> [66,] 64.2411353 1095.114984 #> [67,] -35.0734280 -88.462483 #> [68,] -85.2128339 -99.992930 #> [69,] 14.4770744 96.604118 #> [70,] 33.2304805 319.776353 #> [71,] 72.6926422 1435.922035 #> [72,] -91.9113623 -99.999654 #> [73,] 23.6590130 189.153784 #> [74,] -59.7943409 -98.949404 #> [75,] -77.2165910 -99.938611 #> [76,] -45.6508961 -95.257996 #> [77,] 57.0508700 855.436291 #> [78,] 27.5961604 238.211234 #> [79,] -6.0898502 -26.959680 #> [80,] 65.3054437 1134.342770 #> [81,] -1.3583505 -6.609730 #> [82,] 55.0320627 795.586683 #> [83,] 40.7493845 452.373101 #> [84,] -81.9888145 -99.981046 #> [85,] -3.7408039 -17.356034 #> [86,] -83.0425453 -99.985978 #> [87,] -65.6136450 -99.519237 #> [88,] -33.6547709 -87.145698 #> [89,] -85.5264190 -99.993648 #> [90,] 99.3374145 3047.343215 #> [91,] -73.3879390 -99.866527 #> [92,] 0.8804244 4.480322 #> [93,] -58.4314961 -98.758857 #> [94,] 98.8942169 3012.510161 #> [95,] 28.6094997 251.856229 #> [96,] 2.3137241 12.116483 #> [97,] -35.4352674 -88.780415 #> [98,] -92.2750663 -99.999725 #> [99,] -92.3839119 -99.999744 #> [100,] 19.5461488 144.161930"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the Status and Trends week that a date falls into — date_to_st_week","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"Get Status Trends week date falls ","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"date_to_st_week(dates, version = 2022)"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"dates vector dates. version One 2021 date scheme used 2021 prior data releases 2022 date scheme used 2022 subsequent releases. Default 2022.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"integer vector weeks numbers 1-52.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"d <- as.Date(c(\"2016-04-08\", \"2018-12-31\", \"2014-01-01\", \"2018-09-04\")) date_to_st_week(d) #> [1] 15 52 1 36"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":null,"dir":"Reference","previous_headings":"","what":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Tools load, map, plot, analyze eBird Status Trends data products","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Maintainer: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Authors: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Shawn Ligocki sligocki@cornell.edu Tom Auer mta45@cornell.edu (ORCID) Daniel Fink df36@cornell.edu (ORCID) contributors: Cornell Lab Ornithology [copyright holder]","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":null,"dir":"Reference","previous_headings":"","what":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"Identify return path default download directory eBird Status Trends data products. directory can defined setting environment variable EBIRDST_DATA_DIR, otherwise directory returned tools::R_user_dir(\"ebirdst\", = \"data\") used.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"path data download directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir() #> [1] \"/Users/mes335/projects/workshops/2026-08-04_ebirdst-workshop_rao-2026/ebirdst-data/\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":null,"dir":"Reference","previous_headings":"","what":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"Returns summary eBird Status Trends data packages currently downloaded disk, separate rows Status Trends data products species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"ebirdst_data_inventory(path = ebirdst_data_dir()) # S3 method for class 'ebirdst_inventory' print(x, ...)"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"path character; directory data stored. Defaults ebirdst_data_dir(). x ebirdst_inventory object returned ebirdst_data_inventory(). ... ignored.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"tibble class ebirdst_inventory one row per data package found disk, columns species_code, common_name, scientific_name, version_year, dataset (\"status\" \"trends\"), n_files, size_mb. object compact print method displays inventory grouped version year dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"if (FALSE) { # \\dontrun{ # inventory of all data downloaded to the default directory ebirdst_data_inventory() # inventory for a specific directory ebirdst_data_inventory(\"/path/to/data\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":null,"dir":"Reference","previous_headings":"","what":"Delete downloaded eBird Status and Trends data — ebirdst_delete","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Deletes downloaded eBird Status Trends data packages specified species /version years. called interactively without force = TRUE, prints summary data deleted prompts confirmation proceeding.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"ebirdst_delete( species = NULL, year = NULL, path = ebirdst_data_dir(), force = FALSE )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"species character; one species given eBird species codes, scientific names, English common names. NULL (default), data species included. year integer; one version years. NULL (default), data years included. path character; directory data stored. Defaults ebirdst_data_dir(). force logical; TRUE, skip interactive confirmation prompt delete without asking. Required running non-interactive session.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Invisibly returns character vector paths deleted directories.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"if (FALSE) { # \\dontrun{ # review and confirm deletion of example data ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE) # delete a specific species and year ebirdst_delete(species = \"Yellow-bellied Sapsucker\", year = 2022, force = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: site selection probability spatial coverage. function downloads data products raster GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"ebirdst_download_data_coverage( path = ebirdst_data_dir(), pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"Path folder containing downloaded data coverage products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download all data coverage products ebirdst_download_data_coverage() # download just the spatial coverage products ebirdst_download_data_coverage(pattern = \"spatial-coverage\") # download a single week of data coverage products ebirdst_download_data_coverage(pattern = \"01-04\") # download all weeks in april ebirdst_download_data_coverage(pattern = \"04-\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status Data Products — ebirdst_download_status","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Download eBird Status Data Products single species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. low resolution (27 km) data available example data. addition, example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"ebirdst_download_status( species, path = ebirdst_data_dir(), download_abundance = TRUE, download_occurrence = FALSE, download_count = FALSE, download_ranges = FALSE, download_regional = FALSE, download_pis = FALSE, download_ppms = FALSE, download_all = FALSE, pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status Data Products — ebirdst_download_status","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). download_abundance whether download estimates abundance proportion population. download_occurrence logical; whether download estimates occurrence. download_count logical; whether download estimates count. download_ranges logical; whether download range polygons. download_regional logical; whether download regional summary stats, e.g. percent population regions. download_pis logical; whether download spatial estimates predictor importance. download_ppms logical; whether download spatial predictive performance metrics. download_all logical; download files data package. Equivalent setting download_ arguments TRUE. pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Path folder containing downloaded data package given species. dry_run = TRUE list files download returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Download eBird Status Data Products — ebirdst_download_status","text":"complete data package species contains large number files, cataloged vignettes. users require small subset files, default function downloads commonly used files: GeoTIFFs providing estimate relative abundance proportion population. interested additional data products, arguments starting download_ control download products. pattern argument provides even finer grained control gets downloaded.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_status(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_status(\"woothr\") # use pattern to only download low resolution (27 km) geotiff data # dry_run can be used to see what files will be downloaded ebirdst_download_status(\"lobcur\", pattern = \"_27km_\", dry_run = TRUE) # use pattern to only download high resolution (3 km) weekly abundance data ebirdst_download_status(\"lobcur\", pattern = \"abundance_median_3km\", dry_run = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Trends Data Products — ebirdst_download_trends","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Download eBird Trends Data Products set species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"ebirdst_download_trends( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Character vector paths folders containing downloaded data packages given species. trends data trends/ subdirectory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_trends(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_trends(\"woothr\") # multiple species can be downloaded at once ebirdst_download_trends(c(\"Sage Thrasher\", \"Abert's Towhee\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"Generate color palettes used eBird Status Trends relative abundance trends maps.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"ebirdst_palettes( n, type = c(\"weekly\", \"breeding\", \"nonbreeding\", \"migration\", \"prebreeding_migration\", \"postbreeding_migration\", \"year_round\", \"trends\") )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"n integer; number colors palette. type character; type color palette: \"weekly\" weekly relative abundance, \"trends\" trends color palette, season name seasonal relative abundance. Note trends diverging palette returned, palettes sequential.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"character vector hex color codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"# breeding season color palette ebirdst_palettes(10, type = \"breeding\") #> [1] \"#DFC0BC\" \"#DBADA7\" \"#D89A92\" \"#D5887D\" \"#D27568\" \"#CF6252\" \"#CC503E\" #> [8] \"#BB4938\" \"#AA4233\" \"#993C2E\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"Details eBird Status Trends predictor variables , variables derived dataset, details dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"","code":"ebirdst_predictor_descriptions"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"data frame 37 rows 4 columns dataset: dataset name. predictor: predictor name , multiple variables derived dataset, pattern used generate names. description: detailed description dataset variable. reference: reference consult information dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictor variables — ebirdst_predictors","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame predictors used eBird Status Trends models. include effort variables (e.g. distance traveled, number observers, etc.) addition variables describing environment (e.g. elevation, land cover, water cover, etc.). environmental variables derived summarizing remotely sensed datasets (described ebirdst_predictor_descriptions) 3 km diameter neighborhood around checklist. categorical datasets, two variables generated class describing percent cover (pland) edge density (ed).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"","code":"ebirdst_predictors"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame 150 rows 4 columns: predictor: predictor name. dataset: dataset name, can cross referenced ebirdst_predictor_descriptions details. class: class number name categorical variables. label: descriptive labels predictor variable.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Regional summary statistics for all species — ebirdst_regional_stats","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"Load single file regional summary statistics covering species eBird Status Data Products. file downloaded automatically first use loaded single step; subsequent calls load already downloaded file directly. differs load_regional_stats(), loads regional statistics single species species' downloaded data package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"ebirdst_regional_stats( path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"path character; directory data stored . Defaults persistent data directory returned ebirdst_data_dir(). force logical; file already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"data frame regional summary statistics species. columns match returned load_regional_stats().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download (if necessary) and load regional stats for all species regional <- ebirdst_regional_stats() } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":null,"dir":"Reference","previous_headings":"","what":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"dataset listing species eBird Status Trends Data Products available, additional information relevant Status Trends results species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"","code":"ebirdst_runs"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"data frame 29 variables: species_code: alphanumeric eBird species code uniquely identifying species scientific_name: scientific name. common_name: English common name. is_resident: classifies species resident migrant. breeding_quality: breeding season quality. breeding_start: breeding season start date. breeding_end: breeding season start date. nonbreeding_quality: non-breeding season quality. nonbreeding_start: non-breeding season start date. nonbreeding_end: non-breeding season start date. postbreeding_migration_quality: post-breeding season quality. postbreeding_migration_start: post-breeding season start date. postbreeding_migration_end: post-breeding season start date. prebreeding_migration_quality: pre-breeding season quality. prebreeding_migration_start: pre-breeding season start date. prebreeding_migration_end: pre-breeding season start date. resident_quality: resident quality. resident_start: resident species, year-round start date. resident_end: resident species, year-round end date. status_version_year: release version Status data products. has_trends: whether species trends estimates. trends_season: season trend estimated : breeding, nonbreeding, resident. trends_region: geographic region trend model run . Note broadly distributed species (e.g. Barn Swallow) trend estimates regional subset full range. trends_start_year: start year trend time period. trends_end_year: end year trend time period. trends_start_date: start date (MM-DD format) season trend estimated. trends_end_date: end date (MM-DD format) season trend estimated. rsquared: R-squared value comparing actual estimated trends simulations. beta0: intercept linear model fitting actual vs. estimated trends (actual ~ estimated) simulations. Positive values beta0 indicate models systematically underestimating simulated trend species. trends_version_year: release version Trends data products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"Status Data Products, dates defining boundaries seasons provided additional quality rating 0-3 season. dates quality ratings assigned process expert review. expert review. Note missing dates imply season failed expert review species within season. Trends Data Products available subset species, indicated has_trends variable, species trends estimated single season. two predictive performance metrics (rsquared beta0) based comparison actual estimated percent per year trends suite simulations (see Fink et al. 2023 details). trends regions defined follows: aus_nz: Australia New Zealand iberia: Spain Portugal india_se_asia: India, Nepal, Bhutan, Sri Lanka, Thailand, Cambodia, Malaysia, Brunei, Singapore, Philippines japan: Japan north_america: North America including Mexico, Central America, Caribbean, excluding Nunavut, North West Territories, Hawaii south_africa: South Africa, Lesotho, Eswatini south_america: Colombia, Ecuador, Peru, Chile, Argentina, Uruguay taiwan: Taiwan turkey_plus: Turkey, Cyprus, Israel, Palestine, Greece, Armenia, Georgia","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends Data Products version — ebirdst_version","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"Identify version eBird Status Trends Data Products version R package works . Versions defined year model estimates made .","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"list three components: status_version_year version year eBird Status Data Products, trends_version_year version year eBird Trends Data Products, release_year year version data released.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version() #> $status_version_year #> [1] 2023 #> #> $trends_version_year #> [1] 2022 #> #> $release_year #> [1] 2025 #>"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":null,"dir":"Reference","previous_headings":"","what":"Get eBird species code for a set of species — get_species","title":"Get eBird species code for a set of species — get_species","text":"Give vector species codes, common names, /scientific names, return vector 6-letter eBird species codes. function look codes species eBird Status Trends results exist.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(x)"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get eBird species code for a set of species — get_species","text":"x character; vector species codes, common names, /scientific names.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get eBird species code for a set of species — get_species","text":"character vector eBird species codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(c(\"Black-capped Chickadee\", \"Poecile gambeli\", \"carchi\")) #> [1] \"bkcchi\" \"mouchi\" \"carchi\""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the path to the data package for a given species — get_species_path","title":"Get the path to the data package for a given species — get_species_path","text":"helper function can used get path data package given species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"get_species_path( species, path = ebirdst_data_dir(), dataset = c(\"status\", \"trends\"), check_downloaded = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the path to the data package for a given species — get_species_path","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). dataset character; whether path Status Trends data products returned. check_downloaded logical; raise error data downloaded species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the path to the data package for a given species — get_species_path","text":"path data package directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"if (FALSE) { # \\dontrun{ # get the path path <- get_species_path(\"yebsap-example\") # get the path to the full data package for yellow-bellied sapsucker # common name, scientific name, or species code can be used path <- get_species_path(\"Yellow-bellied Sapsucker\") path <- get_species_path(\"Sphyrapicus varius\") path <- get_species_path(\"yebsap\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":null,"dir":"Reference","previous_headings":"","what":"Spatiotemporal grid sampling of observation data — grid_sample","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"Sample observation data spacetime grid reduce spatiotemporal bias.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"grid_sample( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, res = c(3000, 3000, 7), jitter_grid = TRUE, sample_size_per_cell = 1, cell_sample_prop = 0.75, keep_cell_id = FALSE, grid_definition = NULL ) grid_sample_stratified( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, unified_grid = FALSE, keep_cell_id = FALSE, by_year = TRUE, case_control = TRUE, obs_column = \"obs\", sample_by = NULL, min_detection_probability = 0, maximum_ss = NULL, jitter_columns = NULL, jitter_sd = 0.1, cell_quantile_cap = NULL, ... )"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"x data frame; observations sample, including least columns defining location space time. Additional columns can included features later used model training. coords character; names spatial temporal coordinates. default spatial spatial coordinates longitude latitude, temporal coordinate day_of_year. is_lonlat logical; points unprojected, lon-lat coordinates. case, points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution spatiotemporal grid x, y, time dimensions. Unprojected locations projected equal area coordinate system prior sampling, resolution therefore provided units meters. temporal resolution native units time coordinate input data frame, typically number days. jitter_grid logical; whether jitter location origin grid introduce randomness. sample_size_per_cell integer; number observations sample grid cell. cell_sample_prop proportion (0-1]; less 1, proportion cells randomly selected sampling. keep_cell_id logical; whether retain unique cell identifier, stored column named .cell_id. grid_definition list defining spatiotemporal sampling grid returned assign_to_grid() form attribute returned data frame. unified_grid logical; whether single, unified spatiotemporal sampling grid defined used observations x different grid used stratum. by_year logical; whether sampling done stratified year (TRUE) ignoring year (FALSE). sampling year turned , N observations sampled grid cell year, turned , N observations sampled per grid cell across years. using sampling year, input data frame x must year column. case_control logical; whether apply case control sampling whereby presence absence sampled independently. obs_column character; case_control = TRUE, name column x defines detection (obs_column > 0) non-detection (obs_column == 0). sample_by character; additional columns x stratify sampling . example, landscape many small islands (defined island variable) wish sample independently, use sample_by = \"island\". min_detection_probability proportion [0-1); minimum detection probability final dataset. case_control = TRUE, proportion detections grid sampled dataset level, additional detections added via grid sampling detections input dataset least proportion detections appears final dataset. typically result duplication observations final dataset. turn feature use min_detection_probability = 0. maximum_ss integer; maximum sample size final dataset. grid sampling yields number observations, maximum_ss observations selected randomly full set. Note subsampling performed way levels strata least one observation within final dataset, therefore truly randomly sampling. jitter_columns character; detections oversampled achieve minimum detection probability, observations duplicated, can desirable slightly \"jitter\" values model training features duplicated observations. argument defines column names x jittered. jitter_sd numeric; strength jittering units standard deviations, see jitter_columns. cell_quantile_cap proportion (0, 1] NULL; provided, limits many observations single spatial grid cell can contribute grid-sampled data, reducing influence chronically -sampled sites (e.g. bird feeders). observation class, per-cell observation count capped quantile distribution per-cell counts: cells quantile randomly reduced , cells left unchanged. threshold taken data , adapts dataset. Detections non-detections capped independently rule. least one observation every level every column sample_by always retained, even means cell exceeds cap, rare strata (e.g. remote island) never lost; year (by_year = TRUE) protected, years can thinned chronically -sampled cells like observation. NULL (default) value 1 applies cap. ... additional arguments defining spatiotemporal grid; passed grid_sample().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"data frame spatiotemporally sampled data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"grid_sample_stratified() performs stratified case control sampling, independently sampling strata defined , example, year detection/non-detection. Within stratum, grid_sample() used sample observations spatiotemporal grid. addition, case control sampling turned , detections oversampled increase frequency detections dataset. sampling grid defined, assignment locations cells occurs, assign_to_grid(). Consult help function details grid generated locations assigned. Note providing 2-element vectors coords res time component grid can ignored spatial-subsampling performed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"set.seed(1) # generate some example observations n_obs <- 10000 checklists <- data.frame(longitude = rnorm(n_obs, sd = 0.1), latitude = rnorm(n_obs, sd = 0.1), day_of_year = sample.int(28, n_obs, replace = TRUE), year = NA_integer_, obs = rpois(n_obs, lambda = 0.05), forest_cover = runif(n_obs), island = as.integer(runif(n_obs) > 0.95)) # add a year column, giving more data to recent years checklists$year <- sample(seq(2016, 2020), size = n_obs, replace = TRUE, prob = seq(0.3, 0.7, length.out = 5)) # create several rare islands checklists$island[sample.int(nrow(checklists), 9)] <- 2:10 # basic spatiotemporal grid sampling sampled <- grid_sample(checklists) # plot original data and grid sampled data par(mar = c(0, 0, 0, 0)) plot(checklists[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"#00000033\", axes = FALSE) points(sampled[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"red\") # case control sampling stratified by year and island # return a maximum of 1000 checklists sampled_cc <- grid_sample_stratified(checklists, sample_by = \"island\", maximum_ss = 1000) # case control sampling increases the prevalence of detections mean(checklists$obs > 0) #> [1] 0.0532 mean(sampled$obs > 0) #> [1] 0.0505667 mean(sampled_cc$obs > 0) #> [1] 0.09821429 # stratifying by island ensures all levels are retained, even rare ones table(checklists$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 9505 486 1 1 1 1 1 1 1 1 1 # normal grid sampling loses rare island levels table(sampled$island) #> #> 0 1 #> 1099 48 # stratified grid sampling retain at least one observation from each level table(sampled_cc$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 908 91 1 1 1 1 1 1 1 1 1"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products configuration file — load_config","title":"Load eBird Status Data Products configuration file — load_config","text":"Load configuration file eBird Status run. configuration file mostly internal use contains variety parameters used modeling process.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"load_config( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products configuration file — load_config","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products configuration file — load_config","text":"list run configuration parameters.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters p <- load_config(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"data coverage products packaged individual GeoTIFF files product week year. function loads one available data products one weeks R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"load_data_coverage( product = c(\"spatial-coverage\", \"selection-probability\"), weeks, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"product character; data coverage raster product load: spatial coverage site selection probability. weeks character; one weeks (expressed \"MM-DD\" format) load raster layers . argument specified, downloaded weeks loaded. Note rasters quite large recommended load small number weeks data time. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"SpatRaster 1 52 layers given product given weeks, layer names dates (YYYY-MM-DD format) midpoint week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: spatial-coverage: spatially smoothed estimate proportion area covered eBird checklists given week. selection-probability: modeled estimate probability given location habitat sampled eBird data given week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_data_coverage() # load a single week of site selection probability data load_data_coverage(\"selection-probability\", weeks = \"01-04\") # load all weeks of spatial coverage data load_data_coverage(\"spatial-coverage\", weeks = c(\"01-04\", \"01-11\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"Load full annual cycle map parameters — load_fac_map_parameters","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"Get map parameters used eBird Status Trends website optimally display full annual cycle data. includes bins abundance data, projection, extent map. extent spatial extent non-zero data across full annual cycle projection optimized extent.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"load_fac_map_parameters( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"list containing elements: custom_projection: custom projection optimized given species' full annual cycle fa_extent: SpatExtent object storing spatial extent non-zero data given species custom projection res: numeric vector 2 elements giving target resolution raster custom projection fa_extent_projected: extent projected (Equal Earth) coordinates weekly_bins/weekly_labels: weekly abundance bins labels full annual cycle seasonal_bins/`seasonal_labels: seasonal abundance bins labels full annual cycle","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters load_fac_map_parameters(path) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictor importance (PI) rasters — load_pi","title":"Load predictor importance (PI) rasters — load_pi","text":"eBird Status models estimate relative importance core environmental predictor used model (.e. % land water cover variables). predictor importance (PI) data converted ranks (rank 1 important) relative full suite environmental predictors. ranks summarized 27 km resolution raster grid predictor, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use. PI estimates available separately occurrence count sub-model 30 important predictors distributed. Use list_available_pis() see predictors PI data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"load_pi( species, predictor, response = c(\"occurrence\", \"count\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() ) list_available_pis( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictor importance (PI) rasters — load_pi","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". predictor character; predictor PI data loaded . list predictors PI data available varies species, use list_available_pis() get list given species. response character; model (occurrence count) PI data loaded . path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictor importance (PI) rasters — load_pi","text":"SpatRaster object PI ranks given predictor. migrants, estimates weekly raster 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned. list_available_pis() returns data frame listing top 30 predictors PI rasters can loaded. addition predictor names, mean range-wide rank (rank_mean) given well integer rank (rank) relative full suite predictors (environmental effort).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Load predictor importance (PI) rasters — load_pi","text":"list_available_pis(): list predictors PI information species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"if (FALSE) { # \\dontrun{ # identify the top predictor # data will be downloaded automatically if not already present top_preds <- list_available_pis(\"yebsap-example\") print(top_preds[1, ]) # load predictor importance raster of top predictor for occurrence load_pi(\"yebsap-example\", top_preds$predictor[1]) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictive performance metric (PPM) rasters — load_ppm","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"eBird Status models evaluated test set eBird data used model training suite predictive performance metrics (PPMs) calculated. PPMs base model summarized 27 km resolution raster grid, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"load_ppm( species, ppm = c(\"binary_f1\", \"binary_mcc\", \"binary_prevalence\", \"occ_bernoulli_dev\", \"occ_bin_spearman\", \"occ_brier\", \"occ_pr_auc\", \"occ_pr_auc_gt_prev\", \"occ_pr_auc_normalized\", \"count_log_pearson\", \"count_mae\", \"count_poisson_dev\", \"count_rmse\", \"count_spearman\", \"abd_log_pearson\", \"abd_mae\", \"abd_poisson_dev\", \"abd_rmse\", \"abd_spearman\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". ppm character; name single metric load data . See Details definitions metric. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"SpatRaster object PPM data. migrants, rasters weekly 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"Nineteen predictive performance metrics provided: binary_f1: F1-score comparing model predictions converted binary observed detection/non-detection test checklists. binary_mcc: Matthews Correlation Coefficient (MCC) comparing model predictions converted binary observed detection/non-detection test checklists. binary_prevalence: observed detection probability spatiotemporal subsampling. occ_bernoulli_dev: proportion Bernoulli deviance explained comparing predicted occurrence observed detection/non-detection test checklists. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman's rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR AUC) generated comparing predicted encounter rate observed detection/non-detection test checklists. occ_pr_auc_gt_prev: proportion ensemble PR AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count subset test checklists species detected. count_mae: mean absolute error (MAE) comparing observed predicted counts subset test checklists species detected. count_poisson_dev: proportion Poisson deviance explained, comparing observed predicted counts subset test checklists species detected. count_rmse: root mean squared error (RMSE) comparing observed predicted counts subset test checklists species detected. count_spearman: Spearman's rank correlation coefficient comparing observed predicted counts subset test checklists species detected. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count full set test checklists. abd_mae: mean absolute error (MAE) comparing observed counts predicted relative abundance full set test checklists. abd_poisson_dev: proportion Poisson deviance explained, comparing predicted relative abundance observed count full set test checklists. abd_rmse: root mean squared error comparing predicted relative abundance observed count full set test checklists. abd_spearman: Spearman's rank correlation coefficient comparing predicted relative abundance observed count full set test checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"if (FALSE) { # \\dontrun{ # load area under the precision-recall curve PPM raster # data will be downloaded automatically if not already present load_ppm(\"yebsap-example\", ppm = \"binary_pr_auc\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":null,"dir":"Reference","previous_headings":"","what":"Load seasonal eBird Status and Trends range polygons — load_ranges","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"Range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"load_ranges( species, resolution = c(\"9km\", \"27km\"), smoothed = TRUE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". resolution character; raster resolution range polygons derived. smoothed logical; whether smoothed unsmoothed ranges loaded. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"sf update containing seasonal range boundaries, season provided different feature.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load smoothed ranges # note that only 27 km data are provided for the example data ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products raster data — load_raster","title":"Load eBird Status Data Products raster data — load_raster","text":"eBird Status raster products packaged GeoTIFF file representing predictions regular grid. core products occurrence, count, relative abundance, proportion population. function loads one available data products R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"load_raster( species, product = c(\"abundance\", \"count\", \"occurrence\", \"proportion-population\"), period = c(\"weekly\", \"seasonal\", \"full-year\"), metric = NULL, resolution = c(\"3km\", \"9km\", \"27km\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products raster data — load_raster","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". product character; eBird Status raster product load: occurrence, count, relative abundance, proportion population. See Details detailed explanation products. period character; temporal period estimation. eBird Status models make predictions week year; however, convenience, data also provided summarized seasonal annual (\"full-year\") level. metric character; default, weekly products provide estimates median value (metric = \"median\") summarized products cell-wise mean across weeks within season (metric = \"mean\"). However, additional variants exist products. weekly relative abundance, confidence intervals provided: specify metric = \"lower\" get 10th quantile metric = \"upper\" get 90th quantile. seasonal annual products, cell-wise maximum values across weeks can obtained metric = \"max\". resolution character; resolution raster data load. default load native 3 km resolution data; however, applications 9 km 27 km data may suitable. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products raster data — load_raster","text":"weekly cubes, SpatRaster 52 layers given product, layer names dates (YYYY-MM-DD format) midpoint week. Seasonal cubes four layers named corresponding season. full-year products single layer.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status Data Products raster data — load_raster","text":"core eBird Status data products provide weekly estimates across regular spatial grid. packaged rasters 52 layers, corresponding estimates week year, refer \"cubes\" (e.g. \"relative abundance cube\"). estimates median expected value standard 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. products : occurrence: expected probability (0-1) occurrence species. count: expected count species, conditional occurrence given location. abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. proportion-population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster total abundance summed across cells. addition weekly data cubes, function provides access data summarized different periods. Seasonal cubes produced taking cell-wise mean max across weeks within season. boundary dates season species specific available ebirdst_runs, season failed review associated layer included cube. addition, full-year summaries provide mean max across weeks year fall within season passed review. Note necessarily 52 weeks year. example, estimates non-breeding season failed expert review given species, full-year summary species include weeks fall within non-breeding season.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # weekly relative abundance # note that only 27 km data are available for the example data abd_weekly <- load_raster(\"yebsap-example\", \"abundance\", resolution = \"27km\") # the weeks for each layer are stored in the layer names names(abd_weekly) # they can be converted to date objects with as.Date as.Date(names(abd_weekly)) # max seasonal abundance abd_seasonal <- load_raster(\"yebsap-example\", \"abundance\", period = \"seasonal\", metric = \"max\", resolution = \"27km\") # available seasons in stack names(abd_seasonal) # subset to just breeding season abundance abd_seasonal[[\"breeding\"]] } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Load regional summary statistics — load_regional_stats","title":"Load regional summary statistics — load_regional_stats","text":"Load seasonal summary statistics regions consisting countries states/provinces.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load regional summary statistics — load_regional_stats","text":"","code":"load_regional_stats( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load regional summary statistics — load_regional_stats","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load regional summary statistics — load_regional_stats","text":"data frame containing regional summary statistics columns: species_code: alphanumeric eBird species code. region_type: country countries state states, provinces, sub-national regions. region_code: alphanumeric code region. region_name: English name region. continent_code: alphanumeric code continent region belongs . continent_name: name continent region belongs . season: name season summary statistics calculated . abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population falling within region. continent_pop_percent: proportion seasonal modeled population continent (identified continent_name) falling within region. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population falling within region max_week, .e. maximum weekly value. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load regional summary statistics — load_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters regional <- load_regional_stats(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Trends estimates for a set of species — load_trends","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Load relative abundance trend estimates single species set species. Trends estimated 27 km 27 km grid single season per species (breeding, non-breeding, resident). requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"load_trends( species, fold_estimates = FALSE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Trends estimates for a set of species — load_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". fold_estimates logical; default, trends summarized across 100-fold ensemble returned; however, setting fold_estimates = TRUE individual fold-level estimates returned. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Trends estimates for a set of species — load_trends","text":"data frame containing trends estimates set species. following columns included: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. start_year/end_year: start end years trend time period. start_date/end_date: start end dates (MM-DD format) season trend estimated. srd_id: unique integer identifier grid cell. longitude/latitude: longitude latitude grid cell center. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: median estimated percent per year change relative abundance. abd_ppy_lower/abd_ppy_upper: 80% confidence interval estimated percent per year change relative abundance. abd_ppy_nonzero: logical (TRUE/FALSE) value indicating 80% confidence limits overlap zero (FALSE) overlap zero (TRUE) abd_trend: median estimated cumulative change relative abundance trend time period. abd_trend_lower/abd_trend_upper: 80% confidence interval estimated cumulative change relative abundance trend time period. fold_estimates = TRUE, data frame fold-level trend estimates returned following columns: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. srd_id: unique integer identifier grid cell. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: estimated percent per year change relative abundance.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Trends estimates for a set of species — load_trends","text":"trends relative abundance estimated using double machine learning model. quantify uncertainty, ensemble 100 estimates made location, based random subsample eBird data. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. access estimates individual folds making ensemble use fold_estimates = TRUE. fold-level estimates can used quantify uncertainty, example, calculating trend given region. details methodology used estimate trends consult Fink et al. 2023.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Fink, D., Johnston, ., Strimas-Mackey, M., Auer, T., Hochachka, W. M., Ligocki, S., Oldham Jaromczyk, L., Robinson, O., Wood, C., Kelling, S., & Rodewald, . D. (2023). Double machine learning trend model citizen science data. Methods Ecology Evolution, 00, 1–14. https://doi.org/10.1111/2041-210X.14186","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # load fold-level estimates trends_folds <- load_trends(\"yebsap-example\", fold_estimates = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert eBird Trends Data Products to raster format — rasterize_trends","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates raster format terra SpatRaster format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"rasterize_trends( trends, layers = c(\"abd_ppy\", \"abd_ppy_lower\", \"abd_ppy_upper\"), trim = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"trends data frame; trends data single species returned load_trends(). layers character; column names trends data frame rasterize. columns become layers raster created. trim logical; flag indicating returned raster trimmed remove outer rows columns NA. trim = FALSE returned raster global extent, can useful rasters combined across species different ranges.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"SpatRaster object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # rasterize percent per year trend rasterize_trends(trends, \"abd_ppy\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":null,"dir":"Reference","previous_headings":"","what":"Store the eBird Status and Trends access key — set_ebirdst_access_key","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Accessing eBird Status Trends data requires access key, can obtained visiting https://ebird.org/st/request. key must stored environment variable EBIRDST_KEY order ebirdst_download_status() ebirdst_download_trends() use . easiest approach store key .Renviron file can always accessed R sessions. Use function set EBIRDST_KEY .Renviron file provided located standard location home directory. also possible manually edit .Renviron file. access key specific never shared made publicly accessible.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"set_ebirdst_access_key(key, overwrite = FALSE)"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"key character; API key obtained filling form https://ebird.org/st/request. overwrite logical; existing EBIRDST_KEY overwritten already set .Renviron.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Edits .Renviron, returns path file invisibly.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"if (FALSE) { # \\dontrun{ # save the api key, replace XXXXXX with your actual key set_ebirdst_access_key(\"XXXXXX\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert Trends Data Products to points or circles — vectorize_trends","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates points circles sf format. Trends can converted points circles areas roughly proportional relative abundance within 27 km grid cell. abundance-scaled circles used produce trends maps eBird Status Trends website.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"vectorize_trends(trends, output = c(\"circles\", \"points\"), crs = 4326)"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"trends data frame; trends data single species returned load_trends(). output character; \"points\" outputs spatial points \"circles\" outputs circles areas roughly proportional relative abundance within 27 km grid cell. crs character sf crs object; coordinate reference system output results . points, unprojected latitude-longitude coordinates (default) typical, circles use whatever equal area CRS intend use mapping data otherwise \"circles\" appear skewed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"Vectorized trends data sf object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # vectorize as points vectorize_trends(trends, \"points\") # vectorize as circles vectorize_trends(trends, \"circles\", crs = \"+proj=eqearth\") } # }"},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420231","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.1","title":"ebirdst 4.2023.1","text":"Removed functions previously listed deprecated defunct (abundance_palette(), ebirdst_download(), ebirdst_extent(), ebirdst_habitat(), ebirdst_ppms(), ebirdst_ppms_ts(), ebirdst_subset(), load_pds(), load_pis(), load_predictions(), load_stixels(), parse_raster_dates(), plot_pds(), plot_pis(), project_extent(), stixelize()); unavailable erroring since least v3.2022.1 Backend approach file download refactored -demand first approach list_available_pis() longer downloads every predictor importance raster determine availability, pi_rangewide.csv http fallback VPNs block https now also applies file downloads, just file listings Errors data can’t found -demand now include function-specific guidance, e.g. pointing list_available_pis()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420230","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.0","title":"ebirdst 4.2023.0","text":"CRAN release: 2026-07-20 Transition load_*() functions download directly rather call ebirdst_download_status() Converted vignettes Quarto moved website-pkgdown articles; package longer ships built-vignettes CRAN (documentation lives https://ebird.github.io/ebirdst/) Add ebirdst_regional_stats() load regional summary statistics species Add ebirdst_data_inventory() ebirdst_delete() manage files downloaded ebirdst Move air auto-formatting jarl linting Efficiency improvements grid_sample() grid_sample_stratified() gains cell_quantile_cap argument limit many observations single chronically -sampled site (e.g. bird feeder) can contribute","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320231","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.1","title":"ebirdst 3.2023.1","text":"CRAN release: 2025-10-19 added function generate abundance-scaled circles trends fixed bug preventing tibbles passed grid sampling functions clarified documentation sampling function fixed bug get_species() Yellow-bellied Sapsucker","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320230","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.0","title":"ebirdst 3.2023.0","text":"CRAN release: 2025-05-07 update 2023 data release add capability download load data coverage layers Northern Goshawk species code incorrect VPNs downloading https raises error, switch http cases update vignettes: add links YouTube, expand applications, add API vignette","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320223","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.3","title":"ebirdst 3.2022.3","text":"CRAN release: 2024-03-05 arrow back CRAN, move Suggests back Imports add 6 new species Australia","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320222","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.2","title":"ebirdst 3.2022.2","text":"CRAN release: 2024-02-23 switch terminology “trajectory” “migration chronology” ensure rasterize_trends() works older versions terra (issue #7) move arrow package Suggests back CRAN (see https://github.com/apache/arrow/issues/39806)","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320221","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.1","title":"ebirdst 3.2022.1","text":"CRAN release: 2023-12-08 Documented functions deprecated defunct relative version 2.2021.3 topics ebirdst-defunct ebirdst-deprecated added back package. allows packages conditionally reference 2.2021.3 installed still passing CRAN checks.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320220","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.0","title":"ebirdst 3.2022.0","text":"CRAN release: 2023-11-15 new 2022 status data trends data released first time! major overhaul allow targeting downloading data stixel-level results (PPMS/PIs/PDs) removed, replaced spatialized raster versions restart required updating API key change package-level documentation per roxygen2 suggestions","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220213","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.3","title":"ebirdst 2.2021.3","text":"CRAN release: 2023-05-09 fix bug causing stixels missing bounds raise error ebirdst_habitat() add function estimate MCC-F1 ebirdst_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220212","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.2","title":"ebirdst 2.2021.2","text":"CRAN release: 2023-04-27 add robust grid sampling function.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220211","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.1","title":"ebirdst 2.2021.1","text":"CRAN release: 2023-04-06 release final batch 300 species 2021 bringing total 2,282","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220210","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.0","title":"ebirdst 2.2021.0","text":"CRAN release: 2023-01-18 transition using raster terra handling raster data move following packages Imports Suggests: gbm, mgcv, precrec, PresenceAbsence move package eBird GitHub organization https://github.com/ebird/ebirdst","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120213","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.3","title":"ebirdst 1.2021.3","text":"CRAN release: 2023-01-11 patch fix bug introduced last release causing missing config files data downloads [issue #44]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120212","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.2","title":"ebirdst 1.2021.2","text":"CRAN release: 2023-01-06 fix bug causing species base code downloaded together, e.g. leafly also downloads leafly2 [issue #43]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120211","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.1","title":"ebirdst 1.2021.1","text":"CRAN release: 2022-12-07 fix bug extent load_fac_map_parameters(), GitHub issue #40 use dynamic PAT cutoff PPM calculations update species list account second release eBird data year","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120210","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.0","title":"ebirdst 1.2021.0","text":"CRAN release: 2022-11-09 update v2021 eBird Status Trends data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120201","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.1","title":"ebirdst 1.2020.1","text":"CRAN release: 2022-07-08 CRAN checks found files created left behind ~/Desktop, relocated test files tempdir() deleting test completion withr::defer()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120200","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.0","title":"ebirdst 1.2020.0","text":"CRAN release: 2022-07-07 major update align new eBird Status Trends API update align 2020 eBird Status Data Products transition rappdirs tools::R_user_dir() handling download directories new vignettes","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-035","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.5","title":"ebirdst 0.3.5","text":"CRAN release: 2022-04-01 bug fix: API update causing data downloads fail","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-034","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.4","title":"ebirdst 0.3.4","text":"CRAN release: 2022-03-16 rename master branch main GitHub requires different download path example data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-033","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.3","title":"ebirdst 0.3.3","text":"CRAN release: 2021-11-12 move example data GitHub","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-032","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.2","title":"ebirdst 0.3.2","text":"CRAN release: 2021-09-15 try prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031-1","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-030","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.0","title":"ebirdst 0.3.0","text":"CRAN release: 2021-08-10 add support new data structures used 2020 eBird Status Trends functionality handle partial dependence data added overhaul package API intuitive streamlined documentation vignettes updated","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-022","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.2","title":"ebirdst 0.2.2","text":"CRAN release: 2021-01-16 add support variable ensemble support compute_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-021","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.1","title":"ebirdst 0.2.1","text":"CRAN release: 2020-03-23 bug fix: corrected date types seasonal definitions bug fix: fixed possibility ebirdst_extent produce invalid date (day 366 2015) added import pipe operator velox archived, removed dependency Suggests fasterize archived, removed dependency Imports","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-020","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.0","title":"ebirdst 0.2.0","text":"CRAN release: 2020-02-26 change maintainer Matthew Strimas-Mackey update access 2019 status trends data partial dependence data longer available, references PDs removed bug fix: load_raster() gave incorrect names seasonal rasters bug fix: didn’t properly implement quantile binning date_to_st_week() gets status trends week give vector dates","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-010","dir":"Changelog","previous_headings":"","what":"ebirdst 0.1.0","title":"ebirdst 0.1.0","text":"CRAN release: 2019-04-04 first CRAN release","code":""}] +[{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":null,"dir":"","previous_headings":"","what":"CLAUDE.md","title":"CLAUDE.md","text":"file provides guidance Claude Code (claude.ai/code) working code repository.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"ebirdst--project-instructions-for-claude","dir":"","previous_headings":"","what":"ebirdst — project instructions for Claude","title":"CLAUDE.md","text":"file local-(gitignored) layers top global R style guide ~/.claude/CLAUDE.md. Follow ; file adds project-specific workflow requirements.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"CLAUDE.md","text":"ebirdst R package (CRAN + GitHub) downloading analyzing eBird Status Trends Data Products Cornell Lab Ornithology. fit models — client accessing pre-computed data products (rasters, tabular estimates, range polygons) toolkit loading, subsetting, visualizing, post-processing . two distinct product families separate version years (see ebirdst_version()): Status (weekly relative abundance, occurrence, count, PIs, PPMs, ranges) Trends (per-year population change, subset species/seasons).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"commands","dir":"","previous_headings":"","what":"Commands","title":"CLAUDE.md","text":"Prefer devtools::load_all() iterating (library(ebirdst)). Run one test file: devtools::test_file(\"tests/testthat/test-loading.R\") Run full suite: devtools::test() Re-document roxygen edits: devtools::document() Full package check: devtools::check() Format / lint (scoped R/ config): air format R/ jarl check R/ (autofix: jarl check --fix R/) Full release checklist (vignettes, pkgdown, win-builder): see makefile.R — release time , routine changes. Tests vignettes require \"yebsap-example\" dataset; tests/testthat/ setup.R downloads temp EBIRDST_DATA_DIR whole suite.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"architecture","dir":"","previous_headings":"","what":"Architecture","title":"CLAUDE.md","text":"package organized pipeline stage rather product. Key files R/ fit together: access-key.R — stores/retrieves Status & Trends access key via rappdirs config (set_ebirdst_access_key()); \"*-example\" datasets bypass key requirement. download.R — entry point (ebirdst_download_status(), ebirdst_download_trends(), ebirdst_download_data_coverage()). Downloads laid disk ///.... fixed layout load-bearing: every load_*() function reconstructs paths , renaming/moving downloaded files breaks loading. download_* flags plus pattern regex control files fetched; files mandatory always downloaded. load.R (largest file) — read layer. load_raster() returns terra SpatRaster stacks (52 weekly layers, resolutions like \"27km\"/\"3km\"); loaders return tabular data (load_pis, load_pds, load_ppm, load_regional_stats, load_config) sf objects (load_ranges). load_config() / load_fac_map_parameters() read per-species JSON drives plotting (custom projection, legend bins/labels). sample.R — spatiotemporal subsampling point data (grid_sample(), grid_sample_stratified(), assign_to_grid()) used reduce spatial bias analysis; tied specific data product. trends.R — post-processing Trends tabular data rasters/vectors (rasterize_trends(), vectorize_trends()) unit conversions. manage.R — local data inventory cleanup (ebirdst_data_inventory() print.ebirdst_inventory S3 method, ebirdst_delete()). ebirdst-palettes.R — Status-specific color palettes maps. utils.R — internal validators (is_flag/is_integer/is_count), get_species() (resolves common/scientific name code species code), date_to_st_week(). data.R — documents three bundled datasets data/: ebirdst_runs (authoritative species list, seasons, quality ratings, trends availability), ebirdst_predictors, ebirdst_predictor_descriptions. ebirdst-deprecated.R / ebirdst-defunct.R — version-migration surface; API changes land rather silently breaking callers. zzz.R — .onAttach prints active Status/Trends version years citations. Species referenced throughout six-letter eBird species code (e.g. \"woothr\"), user-facing functions accept common scientific names resolve via get_species() ebirdst_runs.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"formatting-and-linting--always-run-these","dir":"","previous_headings":"","what":"Formatting and linting — always run these","title":"CLAUDE.md","text":"writing editing file R/, run air format R/. repo’s air.toml scopes formatting R/ (data-raw/, examples/, tests/, makefile.R intentionally excluded), air format . also safe run repo root. writing editing file R/, run jarl check R/ (jarl check . — jarl.toml restricts R/ regardless). Fix obvious/auto-fixable issues jarl check --fix R/. warnings require judgment (e.g. internal_function ::: call public alternative), use judgment rather blindly forcing fix. every change, just explicitly asked format lint. Never run air/jarl tests/, data-raw/, examples/, makefile.R — intentionally scope per air.toml / jarl.toml.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"tests","dir":"","previous_headings":"","what":"Tests","title":"CLAUDE.md","text":"Every new exported internal function needs accompanying test tests/testthat/test-{name}.R (see global CLAUDE.md naming structure conventions). Don’t skip change feels small. modifying existing function’s behavior, update extend existing tests rather leaving stale. Run affected test file(s) devtools::test_file() running full suite; run devtools::test() considering change done. Use \"yebsap-example\" example dataset integration tests — ’s already downloaded tests/testthat/setup.R. Don’t add tests require downloading real species data.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"CLAUDE.md","text":"changing roxygen2 comment, re-run devtools::document() (regenerates NAMESPACE man/*.Rd). Never hand-edit NAMESPACE files man/. function’s @export tag missing misplaced, ’s real bug (silently breaks public API) — style nitpick.","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"package-development-workflow","dir":"","previous_headings":"","what":"Package development workflow","title":"CLAUDE.md","text":"Bump version DESCRIPTION add bullet NEWS.md user-facing change (new function, changed argument, bug fix affecting output). Prefer devtools::load_all() library(ebirdst)/install.packages() iterating locally. considering larger changes complete, run devtools::check() resolve new NOTEs/WARNINGs/ERRORs introduces (see makefile.R fuller release checklist — vignettes, pkgdown site, win-builder checks — needed release time, routine changes).","code":""},{"path":"https://ebird.github.io/ebirdst/CLAUDE.html","id":"git-and-github","dir":"","previous_headings":"","what":"Git and GitHub","title":"CLAUDE.md","text":"repo typically contributed via fork + upstream remote (see CONTRIBUTING.md): changes land branch, PR ebird/ebirdst. permission run git gh (including gh pr create) directly. Still follow general git safety protocol: create new commits rather amending, never force-push main, never skip hooks unless explicitly asked, confirm anything destructive (reset --hard, force-push, branch deletion) even though command doesn’t require prompt.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"interest fostering open welcoming environment, contributors maintainers pledge making participation project community harassment-free experience everyone, regardless age, body size, disability, ethnicity, gender identity expression, level experience, nationality, personal appearance, race, religion, sexual identity orientation.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes creating positive environment include: Using welcoming inclusive language respectful differing viewpoints experiences Gracefully accepting constructive criticism Focusing best community Showing empathy towards community members Examples unacceptable behavior participants include: use sexualized language imagery unwelcome sexual attention advances Trolling, insulting/derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical electronic address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"our-responsibilities","dir":"","previous_headings":"","what":"Our Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Project maintainers responsible clarifying standards acceptable behavior expected take appropriate fair corrective action response instances unacceptable behavior. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, ban temporarily permanently contributor behaviors deem inappropriate, threatening, offensive, harmful.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within project spaces public spaces individual representing project community. Examples representing project community include using official project e-mail address, posting via official social media account, acting appointed representative online offline event. Representation project may defined clarified project maintainers.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported contacting project team mta45@cornell.edu. project team review investigate complaints, respond way deems appropriate circumstances. project team obligated maintain confidentiality regard reporter incident. details specific enforcement policies may posted separately. Project maintainers follow enforce Code Conduct good faith may face temporary permanent repercussions determined members project’s leadership.","code":""},{"path":"https://ebird.github.io/ebirdst/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 1.4, available http://contributor-covenant.org/version/1/4","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"please-contribute","dir":"","previous_headings":"","what":"Please contribute!","title":"CONTRIBUTING","text":"love collaboration.","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"bugs","dir":"","previous_headings":"","what":"Bugs?","title":"CONTRIBUTING","text":"Submit issue Issues page ","code":""},{"path":"https://ebird.github.io/ebirdst/CONTRIBUTING.html","id":"code-contributions","dir":"","previous_headings":"","what":"Code contributions","title":"CONTRIBUTING","text":"Fork repo Github account Clone version account machine account, e.g,. git clone https://github.com//ebirdst.git Make sure track progress upstream (.e., version ebirdst ebird/ebirdst) git remote add upstream https://github.com/ebird/ebirdst.git. making changes make sure pull changes upstream either git fetch upstream merge later git pull upstream fetch merge one step Make changes (bonus points making changes new branch) alter package functionality (e.g., code , just documentation) please write tests cove new functionality. Push account Submit pull request home base ebird/ebirdst","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc.  Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://ebird.github.io/ebirdst/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"api-endpoints","dir":"Articles","previous_headings":"","what":"API Endpoints","title":"eBird Status and Trends Data Products API","text":"eBird Status Trends Data Products API two endpoints: one list available files given species one download single file. list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return: download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"] https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"list","dir":"Articles","previous_headings":"","what":"List","title":"eBird Status and Trends Data Products API","text":"list available files given species use: species_code 6-letter eBird species code, access_key user specific access key, {version_year} version (2023 Status data products 2022 Trends data products). result list file objects JSON format. example, assuming access key XXXXXXXX, list available Status data products Wood Thrush (species code woothr) use: return:","code":"https://st-download.ebird.org/v1/list-obj/{version_year}/{species_code}?key={access_key} https://st-download.ebird.org/v1/list-obj/2023/woothr?key=XXXXXXXX [\"2023/woothr/config.json\",\"2023/woothr/pis/pi_rangewide.csv\",\"2023/woothr/pis/woothr_end_day_of_year_27km_2023.tif\",\"2023/woothr/pis/woothr_n-folds-modeled_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c12-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_count_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c1-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_astwbd-c3-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_gsw-c2-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c11-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c14-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c15-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c21-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c22-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c31-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs1-c32-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c25-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs2-c36-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c27-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_pi_occurrence_mcd12q1-lccs3-c50-pland_27km_2023.tif\",\"2023/woothr/pis/woothr_start_day_of_year_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_abd-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-f1_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-mcc_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_binary-prevalence_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-log-pearson_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-mae_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-poisson-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-rmse_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_count-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bernoulli-dev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-bin-spearman_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-brier_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-gt-prev_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc-normalized_sd_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_mean_raw_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_27km_2023.tif\",\"2023/woothr/ppms/woothr_ppm_occ-pr-auc_sd_raw_27km_2023.tif\",\"2023/woothr/ranges/woothr_range_raw_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_raw_9km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_27km_2023.gpkg\",\"2023/woothr/ranges/woothr_range_smooth_9km_2023.gpkg\",\"2023/woothr/regional_stats.csv\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_abundance_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_count_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_full-year_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_max_9km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_occurrence_seasonal_mean_9km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_27km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_3km_2023.tif\",\"2023/woothr/seasonal/woothr_proportion-population_seasonal_mean_9km_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_breeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_full-year_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_nonbreeding_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_postbreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_max_2023.tif\",\"2023/woothr/web_download/seasonal/woothr_abundance_seasonal_prebreeding-migration_mean_2023.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-01-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-02-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-03-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-04-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-03.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-10.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-17.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-24.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-05-31.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-07.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-14.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-21.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-06-28.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-05.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-12.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-19.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-07-26.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-02.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-09.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-16.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-23.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-08-30.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-09-27.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-04.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-11.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-18.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-10-25.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-01.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-08.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-15.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-22.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-11-29.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-06.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-13.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-20.tif\",\"2023/woothr/web_download/weekly/woothr_abundance_median_2023-12-27.tif\",\"2023/woothr/web_download/woothr_abundance_median_2023.zip\",\"2023/woothr/web_download/woothr_range_2023.zip\",\"2023/woothr/web_download/woothr_regional_2023.zip\",\"2023/woothr/weekly/band-dates.csv\",\"2023/woothr/weekly/woothr_abundance_lower_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_lower_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_27km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_3km_2023.tif\",\"2023/woothr/weekly/woothr_abundance_upper_9km_2023.tif\",\"2023/woothr/weekly/woothr_centroids.csv\",\"2023/woothr/weekly/woothr_count_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_count_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_occurrence_median_9km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_27km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_3km_2023.tif\",\"2023/woothr/weekly/woothr_proportion-population_median_9km_2023.tif\"]"},{"path":"https://ebird.github.io/ebirdst/articles/api.html","id":"download","dir":"Articles","previous_headings":"","what":"Download","title":"eBird Status and Trends Data Products API","text":"download single file use: object_path path given file object format returned list files API access_key user specific access key. example, assuming access key XXXXXXXX, want download 3 km seasonal mean relative abundance, first find corresponding file object path JSON returned list files API: 2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif. provide object path download API:","code":"https://st-download.ebird.org/v1/fetch?objKey={object_path}&key={access_key} https://st-download.ebird.org/v1/fetch?objKey=2023/woothr/seasonal/woothr_abundance_seasonal_mean_3km_2023.tif&key=XXXXXXXX"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map","dir":"Articles","previous_headings":"","what":"Mapping relative abundance","title":"eBird Status Data Products Applications","text":"section, ’ll demonstrate make simple map relative abundance within given region. example, ’ll make map breeding season relative abundance Western Meadowlark Montana. maps produced using approach suitable many applications; however, high-quality publication-ready maps, may worthwhile using traditional GIS environment QGIS ArcGIS rather R. start loading breeding season relative abundance raster Western Meadowlark. data downloaded automatically first time load , ’s need download explicitly first. simplest way map seasonal relative abundance data use built plot() function terra package. Clearly simple approach doesn’t work well! wide variety issues ’ll tackle one time. raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf(). raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows. relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website. Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# load seasonal mean relative abundance at 3km resolution abd_seasonal <- load_raster( species = \"wesmea\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"3km\" ) # extract just the breeding season relative abundance abd_breeding <- abd_seasonal[[\"breeding\"]] plot(abd_breeding, axes = FALSE) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE) # find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\") # quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-extent","dir":"Articles","previous_headings":"","what":"Cropping and masking","title":"eBird Status Data Products Applications","text":"raster data downloaded package defined global grid, regardless range individual species. result, mapping data produce global map default. However, Western Meadowlark occurs western United States, barely visible global map. need constrain extent map make useful. example, ’ll download boundary Montana (state United States harbors large proportion breeding population Western Meadowlark) use crop mask relative abundance data. region defined Shapefile GeoPackage can instead load polygon defining boundary region using read_sf().","code":"# region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # project boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_breeding)) # crop and mask to boundary of montana abd_breeding_mask <- crop(abd_breeding, region_boundary_proj) |> mask(region_boundary_proj) # map the cropped data plot(abd_breeding_mask, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-projection","dir":"Articles","previous_headings":"","what":"Projection","title":"eBird Status Data Products Applications","text":"raster data provided equal area Earth coordinate reference system. projection designed work location Earth; however, ideal mapping smaller regions. Instead, ’s best select equal area projection tailored region. good general purpose choice Lambert’s azimuthal equal area projection centered focal region. can defined programmatically follows.","code":"# find the centroid of the region region_centroid <- region_boundary |> st_geometry() |> st_transform(crs = 4326) |> st_centroid() |> st_coordinates() |> round(1) # define projection crs_laea <- paste0( \"+proj=laea +lat_0=\", region_centroid[2], \" +lon_0=\", region_centroid[1] ) # transform to the custom projection using nearest neighbor resampling abd_breeding_laea <- project(abd_breeding_mask, crs_laea, method = \"near\") |> # remove areas of the raster containing no data trim() # map the cropped and projected data plot(abd_breeding_laea, axes = FALSE, breakby = \"cases\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-bins","dir":"Articles","previous_headings":"","what":"Abundance bins","title":"eBird Status Data Products Applications","text":"relative abundance data uniformly distributed, can lead challenges distinguishing areas differing levels abundance. especially true highly aggregative species like shorebirds ducks. address , ’ll use quantile bins map, color legend corresponds equal number cells raster. ’ll define bins excluding zeros, assign separate color zeros. can also use function ebirdst_palettes() get set colors use legends eBird Status Trends website.","code":"# quantiles of non-zero values v <- values(abd_breeding_laea, na.rm = TRUE, mat = FALSE) v <- v[v > 0] breaks <- quantile(v, seq(0, 1, by = 0.1)) # add a bin for 0 breaks <- c(0, breaks) # status and trends palette pal <- ebirdst_palettes(length(breaks) - 2) # add a color for zero pal <- c(\"#e6e6e6\", pal) # map using the quantile bins plot(abd_breeding_laea, breaks = breaks, col = pal, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"map-basemap","dir":"Articles","previous_headings":"","what":"Basemap","title":"eBird Status Data Products Applications","text":"Finally, ’ll add state country boundaries provide context generate nicer legend. R package rnaturalearth excellent source attribution free contextual GIS data.","code":"# natural earth boundaries countries <- ne_countries(returnclass = \"sf\") |> st_geometry() |> st_transform(crs_laea) states <- ne_states(iso_a2 = \"US\") |> st_geometry() |> st_transform(crs_laea) # define the map plotting extent with the region boundary polygon region_boundary_laea <- region_boundary |> st_geometry() |> st_transform(crs_laea) plot(region_boundary_laea) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add relative abundance plot(abd_breeding_laea, breaks = breaks, col = pal, maxcell = ncell(abd_breeding_laea), legend = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) lines(vect(region_boundary_laea), col = \"#ffffff\", lwd = 3, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top labels <- quantile(breaks, c(0, 0.5, 1)) label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = round(labels, 2), col.axis = \"black\", fg = NA, cex.axis = 0.9, lwd.ticks = 0, line = -0.5 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron","dir":"Articles","previous_headings":"","what":"Migration chronologies","title":"eBird Status Data Products Applications","text":"Goal: generate migration chronologies set species within region investigate use region changes throughout year different species. information can used inform optimal time year make temporally specific conservation investments. example type conservation intervention, see California Bird Returns project. application ’ll use weekly estimates chart change relative abundance throughout year given region. migration chronologies can useful identifying given geography receives highest intensity use species group species. ’ll start generating chronology confidence intervals single species, demonstrate produce multi-species chronologies. examples, ’ll consider grassland birds Montana. start ’ll load polygon boundary Montana. single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species. Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") # load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" ) grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-single","dir":"Articles","previous_headings":"","what":"Single species with uncertainty","title":"eBird Status Data Products Applications","text":"single species example, let’s chart migration chronology Western Meadowlark Montana. need relevant eBird Status Data Products species: weekly median relative abundance upper lower confidence intervals weekly relative abundance. downloaded automatically first time ’s loaded. Now can calculate mean relative abundance confidence intervals week year within Montana. extract() function extracts raster cells values within given polygon, summarizes values using user-provided function. Finally, let’s use data frame generate migration chronology species.","code":"# load the median weekly relative abundance and lower/upper confidence limits abd_median <- load_raster(\"wesmea\", product = \"abundance\", metric = \"median\") abd_lower <- load_raster(\"wesmea\", product = \"abundance\", metric = \"lower\") abd_upper <- load_raster(\"wesmea\", product = \"abundance\", metric = \"upper\") # project region boundary to match raster data region_boundary_proj <- st_transform(region_boundary, st_crs(abd_median)) # extract values within region and calculate the mean abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"mean\", na.rm = TRUE, ID = FALSE ) # transform to data frame format with rows corresponding to weeks chronology <- data.frame( week = as.Date(names(abd_median)), median = as.numeric(abd_median_region), lower = as.numeric(abd_lower_region), upper = as.numeric(abd_upper_region) ) ggplot(chronology) + aes(x = week, y = median) + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) + geom_line() + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + labs( x = \"Week\", y = \"Mean relative abundance in Montana\", title = \"Migration chronology for Western Meadowlark in Montana\" )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"chron-multi","dir":"Articles","previous_headings":"","what":"Multi-species","title":"eBird Status Data Products Applications","text":"Migration chronologies can also overlaid multiple species, allowing comparison migration timing species. However, comparing eBird Status Data Products across species requires extra caution models give relative rather absolute abundance. example, species differ detectability, may cause differences relative abundance. address , rather use relative abundance within Montana, ’ll calculate proportion global modeled population falling within Montana. Since proportion population ratio relative abundance values, helps control difference detectability, allowing us compare multiple species. Following similar approach used single species chronology , ’ll estimate migration chronologies suite grassland species Montana. However, example ’ll estimate proportion population falling within Montana rather mean abundance. Finally, can use data frame generate migration chronologies species. variety patterns revealed migration chronology. Several grassland species (e.g., Baird’s Sparrow) 30% breeding populations entirely within state Montana. Timing arrival departure varies species, Western Meadowlark spending longest amount time state Bobolink spending least amount time. Finally, Sprague’s Pipit deserves special attention: ’s huge spike proportion population post-breeding migration. true reflection ecology species issue model estimates? ’s important bring critical eye outliers data ask questions. particular case, looking weekly maps eBird Status Trends website end August reveals species appears almost completely disappear couple weeks. Sprague’s Pipit quite challenging detect migration appears models struggling pick signal, resulting estimates missing large parts population. ’ve included species reminder investigate irregularities estimates discover consult expert species needed.","code":"grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) chronologies <- NULL for (species in grassland_species) { # load the median weekly relative abundance and lower/upper confidence limits # the data are downloaded automatically the first time they're loaded abd_median <- load_raster(species) abd_lower <- load_raster(species, metric = \"lower\") abd_upper <- load_raster(species, metric = \"upper\") # total relative abundance across the entire modeled range of the species abd_total <- global(abd_median, fun = sum, na.rm = TRUE)$sum # total abundance within the region of interest abd_median_region <- extract(abd_median, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_lower_region <- extract(abd_lower, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) abd_upper_region <- extract(abd_upper, region_boundary_proj, fun = \"sum\", na.rm = TRUE, ID = FALSE ) # proportion of population within the region of interest prop_pop_median <- as.numeric(abd_median_region) / abd_total prop_pop_lower <- as.numeric(abd_lower_region) / abd_total prop_pop_upper <- as.numeric(abd_upper_region) / abd_total # transform to data frame format with rows corresponding to weeks chronology <- data.frame( species = species, week = as.Date(names(abd_median)), median = prop_pop_median, lower = prop_pop_lower, upper = pmin(prop_pop_upper, 1) ) # combine with other species chronologies <- bind_rows(chronologies, chronology) } ggplot(chronologies) + aes(x = week, y = median, color = species, fill = species) + geom_ribbon(aes(ymin = lower, ymax = upper), color = NA, alpha = 0.2) + geom_line(linewidth = 1) + scale_x_date(date_labels = \"%b\", date_breaks = \"1 month\") + scale_y_continuous(labels = scales::label_percent()) + scale_color_brewer(palette = \"Set1\") + scale_fill_brewer(palette = \"Set1\") + labs( x = NULL, y = \"Percent of population in Montana\", title = \"Migration chronologies for grassland birds in Montana\", color = NULL, fill = NULL ) + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats","dir":"Articles","previous_headings":"","what":"Regional proportion of population","title":"eBird Status Data Products Applications","text":"Goal: identify proportion species’ population falling within given region. information can used highlight stewardship responsibility species, example, large proportion species’ breeding population falls within region, region said high stewardship responsibility species. eBird Status Trends website provides regional summary statistics country state/province level species. example, can use regional stats see 36% non-breeding population Golden Eagle falls within United States. website also allows users draw customs polygons get summary statistics within polygons. However, cases may want estimate regional summary statistics way isn’t supported website. ’ll provide examples calculating proportion population within region. ’ll use Golden Eagle examples; , required data downloaded automatically first time ’re loaded. example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions. broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population. eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January. one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948 # seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229 # weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694 # non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-seasonal","dir":"Articles","previous_headings":"","what":"Proportion of seasonal population","title":"eBird Status Data Products Applications","text":"example, ’ll estimate seasonal proportion population Golden Eagle within state United States. Note Golden Eagles distributed throughout Northern Hemisphere, North America, Asia, Europe. example, ’ll estimating proportion global population, next example ’ll estimate proportion North American population. start, ’ll load seasonal proportion population raster layers polygons defining state. Shapefile GeoPackage defining region interest (e.g., protected area Bird Conservation Region), load using read_sf() function. Now can use extract() function terra calculate proportion population within state season. Setting weights = TRUE triggers extract() calculate weighted sum account partial coverage raster cells region polygons. example, weights argument little impact, can play important role smaller regions.","code":"# seasonal proportion of population prop_pop_seasonal <- load_raster( species = \"goleag\", product = \"proportion-population\", period = \"seasonal\" ) # state boundaries, excluding hawaii states <- ne_states(iso_a2 = \"US\") |> filter(name != \"Hawaii\") |> select(state = name) |> # transform to match projection of raster data st_transform(crs = st_crs(prop_pop_seasonal)) state_prop_pop <- extract( prop_pop_seasonal, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.07868446 9.979945e-05 0.198995523 #> 2 Wyoming 0.02749171 4.757064e-02 0.026007670 #> 3 Montana 0.02354169 5.629944e-02 0.026315816 #> 4 Utah 0.01155014 3.725202e-02 0.016403725 #> 5 Nevada 0.01102989 3.515999e-02 0.015289441 #> 6 California 0.01018862 2.247653e-02 0.009888532 #> postbreeding_migration #> 1 0.07670290 #> 2 0.02503700 #> 3 0.03123912 #> 4 0.01270763 #> 5 0.01244097 #> 6 0.00955948"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-relative","dir":"Articles","previous_headings":"","what":"Proportion of North American population","title":"eBird Status Data Products Applications","text":"broadly distributed species, Golden Eagle, may desirable estimate proportion population relative subset full range. example, let’s calculate proportion North American population within state, define North America include United States, Canada, Mexico. ’ll start creating polygon boundary North America, using mask seasonal relative abundance raster, dividing masked relative abundance raster total relative abundance across North America generate layers showing proportion North American population. Now can calculate proportion population using exactly method previous section. Notice proportions higher previous section since ’re now estimating proportion North American population rather proportion global population. example, 8% global breeding season population occurs Alaska, corresponds 28% North American breeding season population.","code":"# seasonal relative abundance abd_seasonal <- load_raster( species = \"goleag\", product = \"abundance\", period = \"seasonal\" ) # load country polygon, union into a single polygon, and project noram <- ne_countries(country = c( \"United States of America\", \"Canada\", \"Mexico\" )) |> st_union() |> st_transform(crs = st_crs(abd_seasonal)) |> # vect converts an sf object to terra format for mask() vect() # mask seasonal abundance abd_seasonal_noram <- mask(abd_seasonal, noram) # total north american relative abundance for each season abd_noram_total <- global(abd_seasonal_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_noram <- abd_seasonal_noram / abd_noram_total$sum state_prop_noram_pop <- extract( prop_pop_noram, states, fun = \"sum\", na.rm = TRUE, weights = TRUE, bind = TRUE ) |> as.data.frame() |> # sort in descending order of breeding proportion of population arrange(desc(breeding)) #> |---------|---------|---------|---------| ========================================= head(state_prop_noram_pop) #> state breeding nonbreeding prebreeding_migration #> 1 Alaska 0.28015381 0.0002490995 0.37901331 #> 2 Wyoming 0.09848225 0.1236457195 0.04958722 #> 3 Montana 0.08433231 0.1463336443 0.05017475 #> 4 Utah 0.04137551 0.0968255492 0.03127597 #> 5 Nevada 0.03951184 0.0913879306 0.02915144 #> 6 California 0.03645739 0.0583876463 0.01884387 #> postbreeding_migration #> 1 0.19813731 #> 2 0.06488325 #> 3 0.08095603 #> 4 0.03293174 #> 5 0.03224071 #> 6 0.02475229"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-custom","dir":"Articles","previous_headings":"","what":"Regional stats for weeks and custom time periods","title":"eBird Status Data Products Applications","text":"eBird Status Data Products include seasonal raster layers derived weekly rasters based expert defined seasons. seasonal layers convenient work , however, cases may want estimate proportion population within region weekly level custom time period. example, let’s estimate proportion North American population within California week month January. example, ’ll use lower, 27 km resolution data interest speed, since 3 km weekly data can quite slow process. ’ll start estimating weekly proportion North American population following approach similar previous section. data frame gives weekly proportion North American population Golden Eagle California; structure similar data generated migration chronology section. can take one step average proportion population across weeks month January.","code":"# weekly relative abundance, masked to north america abd_weekly_noram <- load_raster( \"goleag\", product = \"abundance\", resolution = \"27km\" ) |> mask(noram) # total north american relative abundance for each week abd_weekly_total <- global(abd_weekly_noram, fun = \"sum\", na.rm = TRUE) # proportion of north american population prop_pop_weekly_noram <- abd_weekly_noram / abd_weekly_total$sum # proportion of weekly population in california california <- filter(states, state == \"California\") cali_prop_noram_pop <- extract(prop_pop_weekly_noram, california, fun = \"sum\", na.rm = TRUE, weights = TRUE, ID = FALSE ) prop_pop_weekly_noram <- data.frame( week = as.Date(names(cali_prop_noram_pop)), prop_pop = as.numeric(cali_prop_noram_pop[1, ]) ) head(prop_pop_weekly_noram) #> week prop_pop #> 1 2023-01-04 0.06017463 #> 2 2023-01-11 0.05451982 #> 3 2023-01-18 0.05542206 #> 4 2023-01-25 0.05536107 #> 5 2023-02-01 0.05683880 #> 6 2023-02-08 0.06034179 prop_pop_weekly_noram |> filter(month(week) == 1) |> summarize(prop_pop = mean(prop_pop)) #> prop_pop #> 1 0.0563694"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"stats-coastal","dir":"Articles","previous_headings":"","what":"Coastal species","title":"eBird Status Data Products Applications","text":"one particular case methods presented far regional statistics can cause issues: species significant proportion population offshore tidal areas. Many regional polygons, including Natural Earth used far, capture land area, resulting large proportion non-zero relative abundance cells falling outside polygons. example, let’s estimate proportion global non-breeding season population Surf Scoter Mexico using naive approach used previous examples. According method, 6% non-breeding population Surf Scoter occurs Mexico. However, Surf Scoter exclusively coastal species naive estimate missing large part population coarse boundary Mexico ’re using doesn’t capture many 3 km raster cells falling offshore. can correct buffering Mexico polygon 5 km try capture coastal cells. ’ll also use touches = TRUE include raster cells touched Mexico polygon; without argument, cells whose centers fall within Mexico polygon included. adjustments estimated proportion population increases 6% 8%. approaches perfect care always taken working eBird Status Trends Data Products coastal species.","code":"# non-breeding season proportion of population abd_nonbreeding <- load_raster(\"Surf Scoter\", product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"nonbreeding\") # load a polygon for the boundary of Mexico mexico <- ne_countries(country = \"Mexico\") |> st_transform(crs = st_crs(abd_nonbreeding)) # proportion in mexico extract(abd_nonbreeding, mexico, fun = \"sum\", na.rm = TRUE, ID = FALSE) #> nonbreeding #> 1 0.06253108 # buffer by 5000m = 5km mexico_buffer <- st_buffer(mexico, dist = 5000) # proportion in mexico extract( abd_nonbreeding, mexico_buffer, fun = \"sum\", na.rm = TRUE, touches = TRUE, ID = FALSE ) #> nonbreeding #> 1 0.07994288"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi","dir":"Articles","previous_headings":"","what":"Areas of importance","title":"eBird Status Data Products Applications","text":"Goal: identify areas highest importance set species within region. information can used identify areas prioritize protection conservation interventions. eBird Status Data Products can used identify areas importance species group species, can help prioritize areas protection conservation interventions. context, “areas importance” refer areas within landscape higher concentration given species. application, ’ll use set grassland species Montana breeding season used migration chronology example. simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell. richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"# species list grassland_species <- c( \"Baird's Sparrow\", \"Bobolink\", \"Chestnut-collared Longspur\", \"Sprague's Pipit\", \"Upland Sandpiper\", \"Western Meadowlark\" ) # region boundary region_boundary <- ne_states(iso_a2 = \"US\") |> filter(name == \"Montana\") |> st_transform(st_crs(abd_breeding)) |> vect() range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE) prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-richness","dir":"Articles","previous_headings":"","what":"Richness","title":"eBird Status Data Products Applications","text":"simplest approach identifying important areas generate richness map showing number species falling within 3 km grid cell. ’ll start converting relative abundance rasters binary presence-absence rasters species within region interest converting non-zero abundance values one. calculate cell-wise sum across binary rasters species generate richness raster. can make simple map shows number species (six total) occur within 3 km grid cell.","code":"range_rasters <- list() for (species in grassland_species) { # load breeding season relative abundance # the data are downloaded automatically the first time they're loaded abd <- load_raster(species, period = \"seasonal\") |> subset(\"breeding\") # crop and mask to region abd_masked <- mask(crop(abd, region_boundary), region_boundary) # convert to binary, presence-absence range_rasters[[species]] <- abd_masked > 0 } # sum across species to calculate richness richness <- sum(rast(range_rasters), na.rm = TRUE) # make a simple map plot(richness, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"aoi-importance","dir":"Articles","previous_headings":"","what":"Importance","title":"eBird Status Data Products Applications","text":"richness map generated previous section intuitive gives general sense grassland species occurring within Montana. However, presence-absence coarse metric: species may occur dramatically different densities location location , general, ’s strategic invest conservation resources areas higher concentrations target species. can take full advantage relative abundance estimates generate importance metric much granular richness. Recall combining estimates across species ’s important use proportion population rather relative abundance account differences detection process. , ’ll load pre-generated proportion population rasters species, average across species produce metric importance. Now let’s make simple map importance metric. metric ranges 0-1 expresses mean proportion population across six grassland species within cell. raw numeric values hard interpret particularly meaningful, ’s important relative ranking cells. can make map useful removing zeros well small values. ’ll drop cell values median, depending application may want chose different value. map better job highlighting important areas grassland birds within Montana. Let’s go one step add better legend re-project data using region-specific coordinate reference system used mapping example vignette. ’ve presented one simple example identifying priority areas birds using eBird Status Data Products; however, method quite flexible can tailored particular use case. least, focal region, season, species modified application. cases, species may present focal region throughout full annual cycle may want consider importance metric derived combining multiple seasons data species using weekly estimates identify week highest importance species. robust approach problem, may want use eBird Status Data Products within framework Systematic Conservation Prioritization. Tools R package prioritizr can used conjunction eBird Status Data Products solve spatial conservation planning problems broad range objectives constraints.","code":"prop_pop <- list() for (species in grassland_species) { # load breeding season proportion of population # the data are downloaded automatically the first time they're loaded pp <- load_raster( species, product = \"proportion-population\", period = \"seasonal\" ) |> subset(\"breeding\") # crop and mask to region prop_pop[[species]] <- mask(crop(pp, region_boundary), region_boundary) } # take mean across species importance <- mean(rast(prop_pop), na.rm = TRUE) plot(importance, axes = FALSE) # drop zeros importance <- ifel(importance == 0, NA, importance) # drop anything below the median cutoff <- global(importance, quantile, probs = 0.5, na.rm = TRUE) |> as.numeric() importance <- ifel(importance > cutoff, importance, NA) # make a simple map plot(importance, axes = FALSE) plot(region_boundary, col = \"grey\", axes = FALSE, add = TRUE) plot(importance, axes = FALSE, legend = FALSE, add = TRUE) # reproject importance_proj <- trim(project(importance, crs_laea)) region_boundary_proj <- project(region_boundary, crs_laea) # basemap par(mar = c(0, 0, 0, 0)) plot(region_boundary_proj, col = \"grey\", axes = FALSE, main = \"Areas of importance for grassland birds in Montana\" ) # add importance raster plot(importance_proj, legend = FALSE, add = TRUE) # add legend fields::image.plot( zlim = c(0, 1), legend.only = TRUE, col = viridisLite::viridis(100), breaks = seq(0, 1, length.out = 101), smallplot = c(0.15, 0.85, 0.12, 0.15), horizontal = TRUE, axis.args = list( at = c(0, 0.5, 1), labels = c(\"Low\", \"Medium\", \"High\"), fg = \"black\", col.axis = \"black\", cex.axis = 0.75, lwd.ticks = 0.5, padj = -1.5 ), legend.args = list( text = \"Relative Importance\", side = 3, col = \"black\", cex = 1, line = 0 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/applications.html","id":"ppms","dir":"Articles","previous_headings":"","what":"Assessing model performance","title":"eBird Status Data Products Applications","text":"Goal: use spatial predictive performance metrics (PPMs) assess model performance varies across range species. eBird Status Trends species assigned quality scores (0-3) season describing quality model predictions across full range species. example, let’s look breeding season quality Horned Lark. score (2) corresponds “medium quality”, indicating extrapolation omission breeding season predictions. However, Horned Lark broadly distributed species, occurring throughout holarctic realm. Data users typically interested model predictions within particular region, quality score gives indication extrapolation omission occurring, occurs somewhere within range. Someone working predictions Mongolian portion range may dealing different prediction quality someone working predictions part range Western United States. model quality scores quite coarse, spatial predictive performance metrics (PPMs) available species provide much finer scale information model quality. migratory species like Horned Lark, data products provide suite performance metrics weekly 27 km resolution. Let’s load proportion Bernoulli deviance explained metric, typically one useful assessing model quality. PPM downloaded automatically first time ’s loaded. (’d rather download PPMs species front, use ebirdst_download_status(download_ppms = TRUE).) data form 27 km raster 52 layers, one week year. Let’s average PPMs across weeks breeding season, subset just portion range within United States Canada, make map. Negative proportions deviance explained (red map) indicate occurrence model performing worse null model extra caution used using predictions areas.","code":"horlar_review <- filter(ebirdst_runs, species_code == \"horlar\") |> select(breeding_quality, breeding_start, breeding_end) print(horlar_review) #> # A tibble: 1 × 3 #> breeding_quality breeding_start breeding_end #> #> 1 2 2023-06-07 2023-08-09 # load the ppm; it's downloaded automatically if not already present bernoulli_dev <- load_ppm(\"horlar\", ppm = \"occ_bernoulli_dev\") print(bernoulli_dev) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : horlar_ppm_occ-bernoulli-dev_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : -1.20164, -0.340517, -0.220324, -0.184706, -0.167553, -0.217626, ... #> max values : 0.516208, 0.516208, 0.500421, 0.419996, 0.419996, 0.360411, ... # subset to weeks in breeding season and average breeding_dates <- c(horlar_review$breeding_start, horlar_review$breeding_end) |> format(\"%m-%d\") in_breeding <- names(bernoulli_dev) >= breeding_dates[1] & names(bernoulli_dev) <= breeding_dates[2] bernoulli_dev_breeding <- mean(bernoulli_dev[[in_breeding]], na.rm = TRUE) # mask to just canada and the united states us_ca <- ne_countries(country = c(\"United States of America\", \"Canada\")) |> st_transform(st_crs(bernoulli_dev_breeding)) bernoulli_dev_breeding_us_ca <- bernoulli_dev_breeding |> crop(us_ca) |> mask(us_ca) |> trim() # make a map ppm_cols <- rev(scico(100, palette = \"vik\")) max_val <- global(abs(bernoulli_dev_breeding_us_ca), fun = max, na.rm = TRUE) |> as.numeric() plot(bernoulli_dev_breeding_us_ca, range = c(-max_val, max_val), col = ppm_cols, axes = FALSE, box = TRUE ) plot(st_geometry(us_ca), add = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog","dir":"Articles","previous_headings":"","what":"2023 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2023 (available May 2025) Citation: Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 new eBird Trends generated released version. existing versions remain website; please see previous changelog. CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"new eBird Trends generated released version. existing versions remain website; please see previous changelog.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept. Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists). changes. CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Input data includes checklists January 1 2009 December 31 2023, updated January 1 2008 December 31 2022. CHANGED: Checklists observations marked public review process excluded (85,882 checklists).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"changes.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: source bathymetry data changed GEBCO, using ice-surface elevation version. ADDED: Bathymetric slope calculated additional feature, using terra::slope function default parameters updated GEBCO bathymetry data summarized within 1.5km radius neighborhood (consistent features). ADDED: Global Mountain Biodiversity Assessment (GMBA) mountain ranges included categorical feature Level 4. Mountain ranges received unique integer IDs locations received value 0. feature treated factor models. ADDED: Monthly 4km mean Chlorophyll concentration NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 4km mean Sea Surface Temperature NOAA Ocean Color Lab added summarized single point values (neighborhood summaries) due coarse spatial resolution data. ADDED: Monthly 5km Sea Surface Temperature Anomaly NOAA Coral Reef Watch added summarized single point values (neighborhood summaries) due coarse spatial resolution data. REMOVED: Annual intertidal mudflat cover removed maintained updated. REMOVED: permanent surface water feature Joint Research Center Global Surface Water yearly dataset dropped, seasonal water feature kept.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models. CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection. CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles. Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table . ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added. CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"Previously, making range boundary presence/absence estimates prediction grid, predicted separate set maximized effort values (opposed prediction unit 1 hour 2 kilometers occurrence rate, count, relative abundance) extract much range boundary signal possible. removed range boundary presence/absence estimates now standard prediction units 1 hour 2 kilometers. Previously, grid sampling checklist data stixel species, oversampled species detections detection probability fell 25%. applying binary classification model, found led overfitting, providing much duplicated signal oversampling, degraded predictive performance. result, oversampling detections excluded binary classification model removed occurrence rate model. Previously, ensemble level, prediction grid cell-level calculation range boundary done taking average number occurrence rate estimates ensemble greater stixel-level local mccf1 threshold comparing arbitrarily set value 0.14 (1 seven, theoretically week) across ensemble. value sometimes lowered expert reviewers, especially cryptic species, improve range boundary. Now threshold set 0.5 species, estimated presence means binary classification model predicted species present given location half time. Expert reviewers can longer change value. FIXED: discovered bug R ranger package used base models, relating features sorted sampled trees. count model, approximately 20-30% stixels bug caused features, often predicted occurrence, feature count model, randomly excluded tree building even specified features must included. bug fixed package author, continued encounter issue ~5% stixels version ranger distributed CRAN, maintained branch package fully fixes issue. CHANGED: “hurdle” model removed count model now includes checklists observed counts greater zero, opposed previously including checklists observed counts greater zero well checklists predicted present occurrence rate model mccf1 threshold count zero. fixing bug implementing new binary classification model, discovered significant decline quality count relative abundance estimates, seen predictive performance metrics (PPMs), particularly Poisson deviance count relative abundance estimates. attributed increase checklists species predicted present observed count zero entering count model, result adding binary classification model potentially exacerbated count models seeing features bugfix. solution remove “hurdle” exclude checklists predicted present observed counts zero include checklists non-zero observed counts count model. resulted substantial improvement PPMs count relative abundance estimates, especially Poisson deviance measure, across set 20 test species full spatiotemporal extent. change also means relative abundance values much higher previous versions. CHANGED: improve computational performance simplify feature sets, now drop features stixel value, random forest effectively ignores features fitting models.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: transitioned new 3 km X 3 km prediction grid widely used Equal Earth equal area projection. Previously predictions made 2.96 km X 2.96 km prediction grid using non-standard sinusoidal projection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: high level, workflow changed run land-(making predictions land grid cells including checklists 10km length anywhere) land--ocean (making predictions locations including checklists 30km length locations 50% ocean). includes number changes stixel design, data coverage, resulting masking rules described . done fully represent species -sea distributions significant land sea distributions (e.g., Phalaropes, Jaegers). CHANGED: maximum allowable stixel size reduced 3000km side 1600km side, due computational constraints previous size generating much extrapolation. CHANGED: number stixel iterations run species reduced 200 100. CHANGED: minimum number checklists stixel increased 500 1000. CHANGED: Stixels generated separately land-land--ocean workflow runs. land-stixel generation, rules allow subdividing coastal stixels, even produce small ocean stixels checklists model, ocean stixels included runs. land--ocean stixels, distinction made, allowing large coastal stixels. Additionally, set checklists considered run differs mentioned : land--ocean stixel generation includes checklists travel distances 30km cover 50% ocean. CHANGED: species’ results masked two predictions generated separate “data coverage” workflows (run separately land-land--ocean): ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration receiving checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). used mask species predictions locations low values estimates, control extrapolation areas insufficient coverage (spatially habitat-specific). Land-land--ocean workflows slightly different cutoffs application values (see ). Finally, spatial coverage values used add “assumed zeroes” areas sufficient data coverage assume species likely present without running models (difference “Modeled Area” “prediction” maps). Masking Threshold Values FIXED: Previously, spatial coverage land-workflow incorrectly included grid cells water calculation spatial coverage, resulting incorrectly low values threshold areas small amounts land large amounts water (e.g., French Polynesia). Subsequently, areas masked , despite sufficient spatial coverage land. Now, spatial coverage land-workflow considers grid cells land spatial coverage calculation, land ocean land--ocean calculation. year, “ensemble support” calculated separately species base models counting many models sufficient data run species base models. requirements sufficient data run species models within stixel : ) least 10 species detections, b) 50 checklists overall grid sampling. done across larger number stixel iterations, without running actual base models iterations. allowed decreasing number base model stixel iterations 200 100 increasing number stixel iterations used ensemble support 200 400. Overall led significant computational cost reduction well higher quality ensemble support range boundaries. CHANGED: minimum ensemble-level range boundary threshold increased 50% 75% models reporting estimates, unchanged maximum value 95%, control extrapolation. However, expert map reviewers can override (weeks year) review process 50%, 90%, 95% 99%, control extrapolation omission, needed. CHANGED: method summarization confidence intervals occurrence, count, relative abundance estimates changed Geyer subsampling simple 90th 10th quantiles.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive Performance Metrics (PPMs)","title":"eBird Status and Trends Data Products Changelog","text":"Precision-Recall AUC uses occurrence probability estimates, binary presence/absence estimates renamed “occ-pr-auc”. Spearman correlation dropped. longer require minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel estimated binary classification model present. longer requires minimum mean count (test data) calculated (previously required value 0.25). calculated 50 grid-sampled test checklists stixel observed count greater 0. CHANGED: list PPMs available expanded. See table .","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional Range Abundance Stats now includes estimates proportion continental population within region addition proportion global population. See FAQ item map continent definitions. ADDED: Regional Range Abundance Stats now includes new regions providing summary stats Exclusive Economic Zones (EEZs) encapsulating offshore waters country. EEZ boundaries provided Flanders Marine Institute’s Maritime Boundaries Exclusive Economic Zones v12. EEZ summaries provided species modeled using land--ocean workflow. CHANGED: download page species website, previously possible download Weekly Abundance Geospatial Data (raster) GeoTIFFs one week time. option download 52 weeks zipped raster cube added.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: spatial predictor importance (PI) layers previously expressed mean rank predictor within grid cell. layers now average predictor importance normalized within stixel predictor importances land water features described percent cover, including edge density, sum one. ADDED: Two data products “data coverage” workflows now available: ) weekly estimates site selection probability (0-1; probability grid cell certain habitat configuration received checklist region season), b) spatial coverage (0-1; regional-seasonal fraction 3km grid cells received checklists given week). available weekly 3 km resolution rasters GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-1","dir":"Articles","previous_headings":"","what":"2022 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2022 (available November 2023) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed. ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"status-1","dir":"Articles","previous_headings":"","what":"Status","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1. CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-1","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped. ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values. CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-1","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1 2008 December 31 2022, updated January 1 2007 December 31 2021. CHANGED: Checklists 30 km length now included species run ocean (e.g., Northern Gannet). CHANGED: Checklists duration less 0.0167 hours (1 minute) dropped. primarily checklists incorrect duration information. CHANGED: Checklist centroids derived tracks now calculated using great circle distance, sinusoidal distance. CHANGED: maximum allowable number observers checklist 50. checklists dropped.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"effort-covariates-1","dir":"Articles","previous_headings":"","what":"Effort Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Rate (kilometers per hour) added effort covariate. Prediction made value 2 kmph, units duration 1 hour distance 2 kilometers. range boundary prediction, rate set result effort_hrs effort_distance_km maximized partial dependence values separately. FIXED: Rainfall Snowfall bug resulted often 0s, due precision errors. corrected tested. CHANGED: CCI Summary: main changes calculation CCI kind model fit checklist species richness using predictive features, deviations model predictions attributed particular observers checklists. Details foundation CCI predictive model checklist-level species richness (SS; .e. number species). updating CCI, changes made form predictive model SS method attributes variation richness particular observers. Prior Version 2022, predictive features comprised weather, landcover, habitat diversity, protocol, day year, variables particular observer: observer_id checklist_number (.e., index many checklists user ever submitted eBird; confused checklist_id). mixed-effects generalized additive model (GAM) fit SS. GAM used predictive features natural log checklist_number, smooth spline solar_noon_diff, raw values predictors, random effect specification observer_id checklist_number. model used make predictions pip_{} SS data representing “standardized search”, features except observer_id checklist_number held constant (column-wise mean) across observations. CCI derived variation resulting predictions, scaled mean 0 variance 1. $$ CCI_{} = \\\\(pi - mean(p)\\\\) / sd(p) $$ Version 2022 changed functional form predictive model (mostly) linear mixed-effects model random forest. , removed observer_id checklist_number suite predictive features; model now blind person-specific effects. Instead, predictions real data absent personal information establish conditional expectations richness given habitat, effort, weather, etc. expected value parameterizes Poisson distribution, used compute exceedance probability actually-observed S, mapped standard-normal quantile. GAM “factor smooth” basis checklist_number observer_id applied smooth raw values observer. CCI currently comprises smoothed values.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-1","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Covariate assignment now uses proper circular buffers neighborhood calculations (1.5 km radius) instead previously used sinusoidal buffer, many locations high skew across globe. ADDED: Information moon added using two covariates R suncalc package. Moon fraction represents fraction disk moon illuminated given time location Moon altitude represents altitude moon (horizon, radians) given location time. ADDED: Joint Research Center Global Surface Water data added yearly variables, representing binary presence either seasonal permanent water (JRC/GSW1_4/YearlyHistory), calculated percent land cover edge density within neighborhood. dataset 30 m spatial resolution. ADDED: Elevation data 30 m resolution added ASTER Global Digital Elevation Model. represented mean standard deviation within neighborhoods. ADDED: MODIS 16-day Enhanced Vegetation Index (EVI) added MOD13Q1. summarized mean standard deviation within neighborhoods. dataset available water artificial boundary northern southern latitudes based availability light, added boolean covariate has_evi describes whether covariate available given date location. ADDED: Data describing shorelines Sayre et al. 2021 included. includes means standard deviations : wave height, tidal range, chlorophyll, turbidity, sinuosity, slope, outflow density; class densities (km coast per square km area neighborhood) four classes erodibility, class densities (km coast per square km area neighborhood) 23 Ecological Marine Units (EMUs) describe sea surface temperature, salinity, dissolved oxygen, well covariates describing unique number erodibility EMU classes neighborhood. EVI, included boolean has_shoreline covariate, shoreline covariates spatially exhaustive, describing whether covariate available given location. UPDATED: MCD12Q1 LCCS land cover, land use, hydrology data updated version 6.1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-1","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa. CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection. CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask. UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-1","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: migrants residents use circularized time covariates day year, sine cosine day normalized within stixel. CHANGED: binary presence/absence occurrence threshold base model level now uses mccf1, replacing Cohen’s Kappa.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"prediction-1","dir":"Articles","previous_headings":"","what":"Prediction","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: calendar dates grid prediction changed result converting prediction values integers (formerly included fractional day information). CHANGED: prediction values effort_distance_km effort_hrs set 90th quantiles making predictions determine range boundary. Previously chosen maximize partial dependence (PD) curve. CHANGED: prediction values CCI time day (solar_noon_diff) now chosen maximize abundance partial dependence (PD) constrained values species detected. Previously chosen using occurrence partial dependence curve constrained detections. CHANGED: maximizing prediction value CCI stixel level, allowable range values now 0-2, 0-1.85, based range new version CCI values overall. CHANGED: prediction value effort_distance_km now 2 km, closely reflect distribution checklists increase overall signal. CHANGED: weather optimization now done relative abundance, occurrence. CHANGED: PD maximization solar_noon_diff allows full range quantiles allow selection highest lowest quantile values often nocturnal. Previously outermost quantile values allowed selection.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-1","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: replacement base model binary presence/absence occurrence threshold MCC-F1, ensemble level percent threshold (PAT) cutoff value fixed 0.14 (interpreted species found least week). ADDED: ensemble support calculation, new product added, spatial coverage. represents fraction 3 km grid cell-weeks checklists within given stixel, averaged across ensemble (essentially spatial smooth). weekly layer used mask predictions species values spatial coverage value 0.00025. helps control extrapolation places like Russia central Africa. CHANGED: ensemble support site selection probability now 0 unsampled islands. CHANGED: ensemble support-based site selection probability mask changed 0.0025. Ocean run species longer use site selection probability mask.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-1","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: prediction definition now: {occurrence, count, relative abundance} individuals given species detected expert eBirder 1 hour, 2 kilometer traveling checklist optimal time day. Predictions optimized user skill, hourly weather moon conditions, specific given region, season, species, order maximize detection rates. REMOVED: Partial dependence values longer calculated distributed.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"trends-1","dir":"Articles","previous_headings":"","what":"Trends","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset. CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22. ADDED: Regional trends CIs. ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"covariates","dir":"Articles","previous_headings":"","what":"Covariates","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: New modified Status covariates added trends model. New covariates include speed (distance / duration), moon fraction altitude, shoreline, 30 m elevation. CHANGED: Water cover now represented static ASTER water bodies dataset instead annual MODIS MOD44W dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ensemble-2","dir":"Articles","previous_headings":"","what":"Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: residual confounding adjustment now spatially explicit adjustment, calculated applied separately pixel. CHANGED: Trends regions now variable start years, trends now run shorter time series, ensure years time series sufficient data model trends. example, North American trends now start 2012 rather 2007. CHANGED: Seasonal dates Trends now identical Status seasonal dates. CHANGED: species trends estimated season crossing year end (e.g. December January), time series shifted back one year ensure number years trend species given region. example, North American breeding trend (e.g. May June) 2012 2022, non-breeding trend (e.g. December January) 2011/12 2021/22.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"web-products-1","dir":"Articles","previous_headings":"","what":"Web Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Regional trends CIs.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-2","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Trends data released first time year. Web download include GeoPackages abundance-scaled trend circles. R package download include ensemble-level trend estimates well fold-level estimates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-2","dir":"Articles","previous_headings":"","what":"2021 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2021 (available November 2022) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, . Rodewald, C. Wood, . Davies, . Spencer. 2022. eBird Status Trends, Data Version: 2021; Released: 2022. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2021 CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1. ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-2","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis. UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-2","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2007 December 31 2021, updated January 1 2006 December 31 2020. CHANGED: Observations reported escapees new eBird exotic species protocols excluded analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-2","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"UPDATED: Data 2020 added primary land cover data source, MCD12Q1.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-2","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water. CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount). CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked. CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists. CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation. CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled. CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"general","dir":"Articles","previous_headings":"","what":"General","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Prediction grid locations ocean now available choice model species land water.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now grid samples training data stixels defined. CHANGED: projection initialization stixel iteration now fully randomized, previously constrained keep boundaries ocean. CHANGED: Stixels now allowed recurse one size smaller, approximately 90km side, remain one size larger (3000km side), except resident-specific stixels maximum remains 1500km side, computational reasons. CHANGED: now separate AdaSTEM partitioning residents uses full year data instead 28 day window. training data partitions also grid sampled definition. stixel parameters set maximum 65,000 checklists per stixel full year, grid sampling, minimum 6,500 checklists per stixel (e.g., stixels allowed subdivided contain less amount).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Models now run 200 replicates (folds). CHANGED: percent threshold (PAT) cutoff replaced data-driven maximization MCC-F1 curve (https://arxiv.org/abs/2006.11278), constrained 0.05 0.25. training data grid sampled optimizing using MCC-F1 curve 25 realizations done taking median PAT value. migrants, done weekly, residents across whole year. CHANGED: process selecting ensemble support cutoff threshold (number models required show predictions) updated training data grid sampled first, optimized true positive rate 99%, cutoff constrained 0.5 0.9. migrants, done weekly, residents across whole year. process done 25 times median threshold value selected. CHANGED: site selection probability layer significantly improved. binary classification model, prediction grid locations >= 50% overlapped 1.5km buffer checklist locations removed. resolves previous, erroneously low values dense, urban areas accurately reflects true probability site selection areas. change impacts species estimates places site selection probability value less 0.5%, species estimates masked.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"base-model-2","dir":"Articles","previous_headings":"","what":"Base Model","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: grid sample method now retains unique values factor variables (e.g., island). CHANGED: grid sampler oversamples detections achieve 25% detection probability training dataset. Previously grid sampler often overshoot 25% target excessively duplicate detections. corrected oversampling never yields detection probabilities greater 25% detections duplicated 25 times. CHANGED: Mean spatial coverage stixel now correctly estimated proportion 3 km pixels contain checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"fit-and-predict","dir":"Articles","previous_headings":"","what":"Fit and Predict","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Maximization partial dependencies prediction (e.g., CCI) longer allows selection highest lowest extreme quantile values, prevent extrapolation.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"residents","dir":"Articles","previous_headings":"","what":"Residents","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Along resident-specific AdaSTEM partitioning, resident models now predict weeks year single stixel. Previously, resident models used data whole year training, predicted four weeks stixel, similar way migrants modeled.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-3","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: occurrence model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variable values used occurrence model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. prediction values retained presence/absence estimation. CHANGED: prediction value Checklist Calibration Index (CCI) now maximized within stixel using partial dependencies. Previously, value set fixed value 1.85 species stixels. CHANGED: Partial dependencies now generated first 50 folds, reduce computational cost. CHANGED: show “year-round” seasonal map now requires 0.1% overlap breeding non-breeding seasons. Previously, four seasons overlap greater 5% required. REMOVED: Habitat plots numerical summaries removed website.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-3","dir":"Articles","previous_headings":"","what":"2020 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2020 (available Fall 2021) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, L. Jaromczyk, C. Wood, . Davies, M. Iliff, L. Seitz. 2021. eBird Status Trends, Data Version: 2020; Released: 2021. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2020 CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-3","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded. CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-3","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: checklists included January 1 2006 December 31 2020, updated January 1 2005 April 15 2020. CHANGED: species now use data globally run spatial subsets. Previously, primarily Western Hemisphere species run spatial extent. CHANGED: checklists using Stationary protocol now include tracks used long distance track protocol type less 700 meters. CHANGED: spatial location checklists eBird Hotspots changed user-reported location centroid tracks associated hotspot. FIXED: Previously, historical checklists lacked complete effort information included. now excluded.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-3","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: SRTM15+ ~250m elevation bathymetry replaces ~1 kilometer SRTM30+ elevation bathymetry product. CHANGED: single year Nighttime Lights replaced -year assignment 2014-2020 using EOG Annual VNL v2 product. CHANGED: Global Intertidal Change dataset updated version 1.2 includes new three-year time step covering 2017 2019. CHANGED: Continents now unique identifiers island categorization. Previously, continents treated “mainland” value. ADDED: Hourly weather variables assigned 30 kilometer spatial resolution using Copernicus ERA5 reanalysis product. ADDED: 90m eastness northness (combined slope aspect) topographic variables Amatulli et al. 2020 included addition 1 kilometer eastness northness. FIXED: Source data updated 2017-2019 MCD12Q1 reported classification errors.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-3","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days. CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates. stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000). CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization. CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-1","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses Icosahedron Gnomic projection generates partitions largely conformal stixel boundaries across globe. CHANGED: temporal width AdaSTEM partitions changed 30.5 days 28 days.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-1","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: percent threshold (PAT) cutoff 3km grid cells reported present changed 0.1 0.143, accommodate increased occurrence rates result including hourly weather account variation detection rates.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"resident-methodology","dir":"Articles","previous_headings":"","what":"Resident Methodology","title":"eBird Status and Trends Data Products Changelog","text":"stixel loads full year training test data, just 28 day window associated given stixel. DAY predictor encoded cyclically using sine cosine transformations allow model wrap year. spatiotemporal grid sampling now seeks maximum sample size 65,000 checklists given stixel (migrants value 5,000).","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-4","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: count model prediction values effort variables now set 1 hour 1 kilometer. Previously, effort variables used count model prediction used occurrence model, sought maximize detection optimizing distance duration effort variables capture much signal possible, 12 hours (6 hours version) 10 kilometers. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now require, average, across -100 models ensemble, 0.5% 3km grid cells filled least 1 checklist given week reported zero. Previously, 0.1% 3km grid cells. adjusted offer appropriately conservative representation absence can assumed based overall data volume. ADDED: Locations (3km grid cells) less 0.5% mean site selection probability now masked final data products reported NA. Mean site selection probability calculated weekly species-agnostic AdaSTEM workflow estimates probability location given habitat configuration visited given region season. ADDED: Spatial representations predictive performance metrics individual model-level summaries generated 27km GeoTIFFs week year. spatialization done assigning stixel-level values every 27km grid cell within stixel averaging across stixels determine regional metrics. FIXED: Caspian Sea now masked data products. CHANGED: Raw test data receive model predictions removed calculation predictive performance metrics. Previously, type test data used form assumed absence calculation binary predictive performance metrics. ADDED: Predictions 3km grid cells now include standardization hourly weather within individual model. hourly weather values set prediction based maximization occurrence estimates 80th 90th percentiles. CHANGED: Calculation individual model partial dependencies now uses train bag data. Previously, train bag data used. ADDED: Predictor Importance Partial Dependency products now included occurrence rate count models. Previously, products available occurrence rate model. CHANGED: time covariate used models, calculated difference local checklist time solar noon checklist location, changed use temporal midpoint checklist calculation. Previously, time start checklist used calculation. FIXED: temporal centroid individual models, used predictor importance partial dependencies, changed represent mean date train bag data. Previously, mean train, test, four weeks 3km grid cell location data. CHANGED: Regional habitat association charts based weighted summary stixel-level predictor importance partial dependence estimates, weighting determined proportion region covered stixel. Previously, stixel centroids used determine set stixels contributing given region, crude approximations stixels rectangles lat-lon coordinates used determine overlap-based weighting. Now, exact stixel shape used calculating regional habitat associations, considering exact set 27km grid cells falling within stixel, determine set stixels used habitat summarization overlap-based weighting given region. CHANGED: Habitat regional abundance range statistical summaries now computed species, globally, using Natural Earth Data Admin 1 data summarization.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Animations longer reviewed resident species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"changelog-4","dir":"Articles","previous_headings":"","what":"2019 Changelog","title":"eBird Status and Trends Data Products Changelog","text":"Data Version: 2019 (available Fall 2020) Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, O. Robinson, S. Ligocki, W. Hochachka, C. Wood, . Davies, M. Iliff, L. Seitz. 2020. eBird Status Trends, Data Version: 2019; Released: 2020. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2019 CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads. CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-inputs-4","dir":"Articles","previous_headings":"","what":"Data Inputs","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly. CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"ebird-checklists-4","dir":"Articles","previous_headings":"","what":"eBird Checklists","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: Checklists included January 1, 2005 April 15, 2020, updated January 1, 2014 December 31, 2018. ADDED: Include checklists International Shorebird Survey (ISS) complete shorebird species. CHANGED: Checklists “slashes” (representing two similar species) non-zero now child species set “X” (present-, count info). FIXED: Subspecies always roll species-level correctly.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"environmental-covariates-4","dir":"Articles","previous_headings":"","what":"Environmental Covariates","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: ASTER Global Water Bodies Database 30m ocean, river, lakes replaces MOD44W 500m resolution, land water classification, ran 2015. ADDED: GLOBIO Global Roads Inventory Project (GRIP) road density (m/km2) five classes roads.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"workflow-and-code-changes-4","dir":"Articles","previous_headings":"","what":"Workflow and Code Changes","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side. ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week. ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year. ADDED: now 184 species modeled fully global extent. overall species total now 807. ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"spatiotemporal-partitioning-2","dir":"Articles","previous_headings":"","what":"Spatiotemporal Partitioning","title":"eBird Status and Trends Data Products Changelog","text":"CHANGED: adaptive partitioning algorithm (AdaSTEM) now uses projected coordinates (sinusoidal) meters instead unprojected coordinates degrees. CHANGED: AdaSTEM partitions now 1500 kilometers side largest 187 kilometers side smallest. CHANGED: AdaSTEM rules now split partitions contain 16,000 checklists larger 1500 kilometers side. CHANGED: AdaSTEM now reverts individual partitions back next largest size partition children contain less 500 checklists mostly open water. Partitions never allowed revert back partitions 1500 kilometers side.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"model-ensemble-2","dir":"Articles","previous_headings":"","what":"Model Ensemble","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Individual models now report 0 predictions training data set contains less 10 positive observations species mean spatial coverage within model greater equal 5%. CHANGED: Range boundaries now set weekly highest level ensemble support, 50% 95% models, including least 99.5% positive observations, changed fixed 75% models previous versions. CHANGED: Zeroes data products outside prediction area species (also known assumed zeroes) now based mean spatial coverage checklists within areas. locations species-specific models report zero non-zero predictions, locations need , average, across -100 models ensemble, 0.1% 3km grid cells filled least 1 checklist given week reported zero. Previously, locations required 95% models given location least 50 complete checklists given week.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"seasonal-products","dir":"Articles","previous_headings":"","what":"Seasonal Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: averaging weekly estimates represent resident species, reviewers select subset weeks, opposed previously averaged entire year.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"data-products-5","dir":"Articles","previous_headings":"","what":"Data Products","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: now 184 species modeled fully global extent. overall species total now 807.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/product-changelog.html","id":"expert-review-1","dir":"Articles","previous_headings":"","what":"Expert Review","title":"eBird Status and Trends Data Products Changelog","text":"ADDED: Expert reviewers now assign quality scores full-year, animations, seasons.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Introduction to eBird Status Data Products","text":"study conservation natural world relies detailed information distributions, abundances, population trends species time. many taxa, information challenging obtain relevant geographic scales. goal eBird Status Trends project use data eBird, global participatory science bird monitoring program administered Cornell Lab Ornithology, generate reliable, standardized source biodiversity information world’s bird populations. translate eBird observations robust data products, use machine learning fill spatiotemporal gaps, using local land cover descriptions derived remote sensing data, controlling biases inherent species observations collected community scientists. See Fink et al. (2019) information analysis used generate data. vignette gives overview eBird Status Data Products, estimate full annual cycle distributions, relative abundances, habitat associations 2,980 species year 2023. species, distribution abundance estimates available 52 weeks year across regular 3 km 3 km square grid cells covering globe. Variation detectability associated search effort controlled standardizing estimates expected occurrence rate count species 1 hour, 2 km checklist expert eBird observer optimal time day optimal weather conditions detecting species.","code":""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"access","dir":"Articles","previous_headings":"","what":"Data access","title":"Introduction to eBird Status Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Filling form generates key used R package. terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided eBird Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided . Throughout vignette, ’ll use simplified example dataset consisting estimates Yellow-bellied Sapsucker Michigan. dataset designed small faster download , unlike data species, accessible without key. data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website. new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"library(dplyr) library(sf) library(terra) library(ebirdst) # download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE) ebirdst_data_inventory() #> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) #> #> 2022 Trends Data Products (9.3 MB) #> Brewer's Sparrow (brespa): 3 files, 4.0 MB #> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB #> Sage Thrasher (sagthr): 3 files, 2.7 MB #> #> 2023 Status Data Products (1.5 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 2 files, 103.7 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"downloading-data","dir":"Articles","previous_headings":"","what":"Downloading data","title":"Introduction to eBird Status Data Products","text":"data loading functions package (beginning load_) download data need automatically first time use , cases don’t need download data explicitly. example, calling load_raster(\"yebsap-example\") download relative abundance data example species isn’t already computer, load R. older versions ebirdst necessary download data ebirdst_download_status() loading ; longer required. However, ebirdst_download_status() still useful want download , specific subset , data products species front rather one time load . first argument defines species (common name, scientific name, species code) remaining arguments control data products downloaded. default commonly used data products downloaded, since vignette covers available data products, ’ll use download_all = TRUE download everything example species now: default, ebirdst_download_status() (load_ functions) download data centralized directory computer. can see directory function ebirdst_data_dir() can change default download directory setting environment variable EBIRDST_DATA_DIR, example calling usethis::edit_r_environ() adding line EBIRDST_DATA_DIR=/custom/download/directory/. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using ebirdst R package. Data downloaded using R package specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"# download all data products for the example species ebirdst_download_status(species = \"yebsap-example\", download_all = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"managing-downloaded-data","dir":"Articles","previous_headings":"","what":"Managing downloaded data","title":"Introduction to eBird Status Data Products","text":"new version data products released year, data multiple versions can accumulate disk time. Use ebirdst_data_inventory() get summary data currently downloaded, separate rows Status Trends data products species. remove data specific species version years, use ebirdst_delete(). called interactively display summary data removed ask confirmation proceeding. skip prompt, use force = TRUE.","code":"ebirdst_data_inventory() #> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) #> #> 2022 Trends Data Products (9.3 MB) #> Brewer's Sparrow (brespa): 3 files, 4.0 MB #> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB #> Sage Thrasher (sagthr): 3 files, 2.7 MB #> #> 2023 Status Data Products (1.5 GB) #> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB #> Baird's Sparrow (baispa): 6 files, 61.5 MB #> Black-headed Duck (blhduc1): 1 files, 17.5 KB #> Bobolink (boboli): 6 files, 103.5 MB #> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB #> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB #> Coscoroba Swan (cosswa1): 2 files, 25.8 MB #> Data Coverage (data_coverage): 2 files, 103.7 MB #> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB #> Golden Eagle (goleag): 4 files, 49.4 MB #> Horned Lark (horlar): 2 files, 4.0 MB #> Lake Duck (lakduc1): 1 files, 17.4 KB #> Red Shoveler (redsho1): 1 files, 17.4 KB #> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB #> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB #> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB #> Silver Teal (siltea1): 1 files, 17.4 KB #> Small-billed Elaenia (smbela1): 10 files, 158.6 MB #> Sprague's Pipit (sprpip): 6 files, 73.7 MB #> Surf Scoter (sursco): 2 files, 2.4 MB #> Upland Sandpiper (uplsan): 6 files, 138.5 MB #> Western Meadowlark (wesmea): 6 files, 224.1 MB #> White-crested Elaenia (whcela1): 4 files, 104.7 MB #> White-cheeked Pintail (whcpin): 1 files, 17.4 KB #> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB #> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB #> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB # review and confirm before deleting ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"species","dir":"Articles","previous_headings":"","what":"Species list","title":"Introduction to eBird Status Data Products","text":"data frame ebirdst_runs lists species eBird Status Data Products available download. ’re working RStudio, can use View() interactively explore data frame. species go process review expert species prior released. ebirdst_runs data frame contains information review process. migrants, reviewers assess model estimates four seasons: breeding, non-breeding, pre-breeding migration, post-breeding migration. Resident (.e., non-migratory) species identified TRUE is_resident column ebirdst_runs, species assessed across whole year rather seasonally. ebirdst_runs contains two important pieces information season: quality rating seasonal dates. seasonal dates define weeks fall within season. Breeding non-breeding season dates defined species weeks seasons species’ population move. reason, seasons also described stationary periods. Migration periods defined periods movement stationary non-breeding breeding seasons. Note many species migratory periods include movement breeding grounds non-breeding grounds, also post-breeding dispersal, molt migration, movements. Reviewers also examine model estimates season assess amount extrapolation omission present model, assign associated quality rating ranging 0 (lowest quality) 3 (highest quality). Extrapolation refers cases model predicts occurrence species known absent, omission refers model failing predict occurrence species known present. rating 0 implies season failed review model results used period. Ratings 1-3 correspond gradient less extrapolation /omission, often use traffic light analogy referring : Red light (1): low quality, extensive extrapolation /omission noise, least regions estimates accurate; can used caution certain regions. Yellow light (2): medium quality, extrapolation /omission; use caution. Green light (3): high quality, little extrapolation /omission; seasons can safely used. Let’s look results review example dataset. , can see Yellow-bellied Sapsucker modeled migrant four seasons received quality 3, highest rating. Note variety trends-specific columns end data frame ’ll ignore now; columns covered trends vignette","code":"glimpse(ebirdst_runs) #> Rows: 2,981 #> Columns: 30 #> $ species_code \"yebsap-example\", \"abetow\", \"absfin1\", … #> $ scientific_name \"Sphyrapicus varius\", \"Melozone aberti\"… #> $ common_name \"Yellow-bellied Sapsucker\", \"Abert's To… #> $ is_resident FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, F… #> $ breeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ breeding_start 2023-05-17, NA, NA, 2023-05-31, NA, NA… #> $ breeding_end 2023-08-16, NA, NA, 2023-08-02, NA, NA… #> $ nonbreeding_quality \"3\", NA, NA, \"3\", NA, NA, \"1\", NA, NA, … #> $ nonbreeding_start 2023-11-22, NA, NA, 2023-11-22, NA, NA… #> $ nonbreeding_end 2023-03-08, NA, NA, 2023-02-22, NA, NA… #> $ postbreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ postbreeding_migration_start 2023-08-23, NA, NA, 2023-08-09, NA, NA… #> $ postbreeding_migration_end 2023-11-15, NA, NA, 2023-11-15, NA, NA… #> $ prebreeding_migration_quality \"3\", NA, NA, \"3\", NA, NA, \"0\", NA, NA, … #> $ prebreeding_migration_start 2023-03-15, NA, NA, 2023-03-01, NA, NA… #> $ prebreeding_migration_end 2023-05-10, NA, NA, 2023-05-24, NA, NA… #> $ resident_quality NA, \"3\", \"3\", NA, \"3\", \"3\", NA, \"2\", \"3… #> $ resident_start NA, 2023-01-04, 2023-01-04, NA, 2023-0… #> $ resident_end NA, 2023-12-27, 2023-12-27, NA, 2023-1… #> $ status_version_year 2023, 2023, 2023, 2023, 2023, 2023, 202… #> $ has_trends TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, F… #> $ trends_season \"breeding\", \"resident\", NA, \"breeding\",… #> $ trends_region \"north_america\", \"north_america\", NA, \"… #> $ trends_start_year 2012, 2012, NA, 2012, 2011, NA, NA, NA,… #> $ trends_end_year 2022, 2022, NA, 2022, 2021, NA, NA, NA,… #> $ trends_start_date \"05-24\", \"01-25\", NA, \"05-24\", \"11-01\",… #> $ trends_end_date \"08-16\", \"05-10\", NA, \"08-02\", \"05-03\",… #> $ rsquared 0.8572896, 0.9231821, NA, 0.8570363, 0.… #> $ beta0 0.227000849, -0.013923012, NA, 0.689424… #> $ trends_version_year 2022, 2022, NA, 2022, 2022, NA, NA, NA,… ebirdst_runs |> filter(species_code == \"yebsap-example\") |> glimpse() #> Rows: 1 #> Columns: 30 #> $ species_code \"yebsap-example\" #> $ scientific_name \"Sphyrapicus varius\" #> $ common_name \"Yellow-bellied Sapsucker\" #> $ is_resident FALSE #> $ breeding_quality \"3\" #> $ breeding_start 2023-05-17 #> $ breeding_end 2023-08-16 #> $ nonbreeding_quality \"3\" #> $ nonbreeding_start 2023-11-22 #> $ nonbreeding_end 2023-03-08 #> $ postbreeding_migration_quality \"3\" #> $ postbreeding_migration_start 2023-08-23 #> $ postbreeding_migration_end 2023-11-15 #> $ prebreeding_migration_quality \"3\" #> $ prebreeding_migration_start 2023-03-15 #> $ prebreeding_migration_end 2023-05-10 #> $ resident_quality NA #> $ resident_start NA #> $ resident_end NA #> $ status_version_year 2023 #> $ has_trends TRUE #> $ trends_season \"breeding\" #> $ trends_region \"north_america\" #> $ trends_start_year 2012 #> $ trends_end_year 2022 #> $ trends_start_date \"05-24\" #> $ trends_end_date \"08-16\" #> $ rsquared 0.8572896 #> $ beta0 0.2270008 #> $ trends_version_year 2022"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"types","dir":"Articles","previous_headings":"","what":"Data types","title":"Introduction to eBird Status Data Products","text":"species, variety data products available, can categorized following broad types: Weekly raster estimates: weekly estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. core products products derived. Seasonal raster estimates: seasonal estimates occurrence, count, relative abundance, proportion population regular grid GeoTIFF format three resolutions. derived corresponding weekly raster data summarizing across weeks falling within season based dates defined ebirdst_runs data frame. seasons passed expert review process included. Seasonal range boundaries: seasonal range boundary polygons GeoPackage format. Regional summary statistics: variety summary statistics countries states/provinces (e.g. proportion total population region) CSV format. Predictive performance metrics (PPMs): suite spatial predictive performance metrics regular 27 km 27 km grid GeoTIFF format. data products covered detail following sections, including details load data R. loading functions take species (given common name, scientific name, species code) first argument. requested data already downloaded, loading functions download automatically first use, calling ebirdst_download_status() advance optional. used non-default path argument ebirdst_download_status() also need provide path argument loading functions. core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis. seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species. Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example: Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value. regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names: subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" ) # seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\") regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985… # download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"weekly-raster-estimates","dir":"Articles","previous_headings":"","what":"Weekly raster estimates","title":"Introduction to eBird Status Data Products","text":"core raster data products weekly estimates occurrence, count, relative abundance. estimates derived ensemble model producing 100 individual estimates expected value quantity. raster data products give median value across ensemble quantity. weekly estimates stored widely used GeoTIFF raster format, refer “weekly cubes” (e.g. “weekly abundance cube”). cubes 52 weeks cover entire globe, even species ranges covering small region. come areas predicted assumed zeroes. cells NA represent areas didn’t produce model estimates. estimates ensemble median expected value 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. Occurrence: expected probability encountering species. Count: expected count species, conditional occurrence given location. Relative abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. addition median relative abundance, upper lower confidence intervals (CIs) provided, defined 10th 90th quantile relative abundance, respectively. Proportion population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster sum cell values predictions made standard 3 km 3 km global grid; however, convenience lower resolution GeoTIFFs also provided, typically much faster work . However, note keep file sizes small, example dataset contains lowest (27 km) resolution data. three resolutions : High resolution (3km): native 3 km resolution data. Medium resolution (9km): 3 km resolution data aggregated factor 3 direction resulting resolution 9 km. Low resolution (27km): 3 km resolution data aggregated factor 9 direction resulting resolution 27 km. function load_raster() used load data R takes arguments product resolution. metric argument can also used access relative abundance CIs. raster products loaded R SpatRaster objects use terra R package. example, object 52 layers, one week year, layer names store dates corresponding midpoints week. GeoTIFFs use Equal Earth coordinate reference system, equal area projection suitable global mapping analysis.","code":"# weekly, 27km res, median relative abundance abd_lr <- load_raster( \"yebsap-example\", product = \"abundance\", resolution = \"27km\" ) # weekly, 27km res, median proportion of population prop_pop_lr <- load_raster( \"yebsap-example\", product = \"proportion-population\", resolution = \"27km\" ) # weekly, 27km res, abundance confidence intervals abd_lower <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"lower\", resolution = \"27km\" ) abd_upper <- load_raster( \"yebsap-example\", product = \"abundance\", metric = \"upper\", resolution = \"27km\" ) as.Date(names(abd_lr)) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\""},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"seasonal-raster-estimates","dir":"Articles","previous_headings":"","what":"Seasonal raster estimates","title":"Introduction to eBird Status Data Products","text":"seasonal raster estimates provided set products three resolutions weekly estimates. ’re derived weekly data taking cell-wise mean max across weeks within season. seasonal boundary dates defined process expert review species, available data frame ebirdst_runs. season also given quality score 0 (fail) 3 (high quality), seasons score 0 provided. function load_raster(period = \"seasonal\") used load data R takes arguments product, metric resolution. data loaded R SpatRaster objects use terra package. example, Finally, convenience, data products include year-round rasters summarizing mean max across weeks fall within season passed expert review process. can accessed similarly seasonal products, period = \"full-year\" instead. example, layers can used conservation planning assess important sites across full range full annual cycle species.","code":"# seasonal, 27km res, mean relative abundance abd_seasonal_mean <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"seasonal\", metric = \"mean\", resolution = \"27km\" ) # season that each layer corresponds to names(abd_seasonal_mean) #> [1] \"breeding\" \"nonbreeding\" \"prebreeding_migration\" #> [4] \"postbreeding_migration\" # just the breeding season layer abd_seasonal_mean[[\"breeding\"]] #> class : SpatRaster #> size : 618, 1276, 1 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_abundance_seasonal_mean_27km_2023.tif #> name : breeding #> min value : 0 #> max value : 1.021968 # seasonal, 27km res, max occurrence occ_seasonal_max <- load_raster( \"yebsap-example\", product = \"occurrence\", period = \"seasonal\", metric = \"max\", resolution = \"27km\" ) # full year, 27km res, maximum relative abundance abd_fy_max <- load_raster( \"yebsap-example\", product = \"abundance\", period = \"full-year\", metric = \"max\", resolution = \"27km\" )"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"range-boundaries","dir":"Articles","previous_headings":"","what":"Range boundaries","title":"Introduction to eBird Status Data Products","text":"Seasonal range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package. provided widely used GeoPackage format can loaded R load_ranges(), returns set spatial features use sf R package. default smoothed ranges returned, using smoothed = FALSE return raw, unsmoothed range polygons. Note low medium resolution ranges provided. example:","code":"# seasonal, 27km res, smoothed ranges ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") ranges #> Simple feature collection with 4 features and 8 fields #> Geometry type: MULTIPOLYGON #> Dimension: XY #> Bounding box: xmin: -90.41254 ymin: 41.69681 xmax: -82.4146 ymax: 48.19076 #> Geodetic CRS: WGS 84 #> # A tibble: 4 × 9 #> species_code scientific_name common_name prediction_year type season #> #> 1 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range breed… #> 2 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range nonbr… #> 3 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range postb… #> 4 yebsap Sphyrapicus varius Yellow-bellied S… 2023 range prebr… #> # ℹ 3 more variables: start_date , end_date , #> # geom # subset to just the breeding season range using dplyr range_breeding <- filter(ranges, season == \"breeding\")"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-summary-statistics","dir":"Articles","previous_headings":"","what":"Regional summary statistics","title":"Introduction to eBird Status Data Products","text":"Regional summaries seasonal raster estimates also provided standard set regions (countries states/provinces). summary statistics can loaded load_regional_stats(): eight summary statistics defined : abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population within region. continent_pop_percent: proportion seasonal modeled population continent within region. continent_name column identifies continent region falls within. Note Yellow-bellied Sapsucker occurs North America total continental proportions identical. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population within region max_week, .e. maximum weekly value.","code":"regional <- load_regional_stats(\"yebsap-example\") glimpse(regional) #> Rows: 8 #> Columns: 15 #> $ species_code \"yebsap-example\", \"yebsap-example\", \"yebsap-exa… #> $ region_type \"country\", \"country\", \"country\", \"country\", \"st… #> $ region_code \"USA\", \"USA\", \"USA\", \"USA\", \"USA-MI\", \"USA-MI\",… #> $ region_name \"United States\", \"United States\", \"United State… #> $ continent_code \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\" #> $ continent_name \"North America\", \"North America\", \"North Americ… #> $ season \"breeding\", \"nonbreeding\", \"postbreeding_migrat… #> $ abundance_mean 0.114652605, 0.123534772, 0.073477334, 0.084178… #> $ total_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ continent_pop_percent 0.3034155366, 0.9497140025, 0.7885750146, 0.435… #> $ range_occupied_percent 0.25990556, 0.40518814, 0.54434548, 0.49810429,… #> $ range_total_percent 0.231714761, 0.801986186, 0.720437099, 0.573623… #> $ range_days_occupation 98, 112, 91, 63, 98, 112, 91, 49 #> $ max_week \"2023-08-16\", \"2023-11-22\", \"2023-10-18\", \"2023… #> $ max_week_percent_pop 0.4100934563, 0.9638256049, 0.9979910064, 0.985…"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"regional-statistics-for-all-species","dir":"Articles","previous_headings":"","what":"Regional statistics for all species","title":"Introduction to eBird Status Data Products","text":"regional summary statistics described also compiled single dataset covering species eBird Status Data Products, rather split across individual species data packages. dataset can accessed ebirdst_regional_stats(), downloads file first use loads single step. Subsequent calls load already downloaded file directly. load_*() functions, download happens automatically without prompting. example, can use dataset get list species breeding resident season estimates given region, e.g. Taiwan. subset region seasons interest, keep just species code, season, proportion population columns, join ebirdst_runs attach common scientific names:","code":"# download (on first use) and load regional stats for all species regional_all <- ebirdst_regional_stats() # breeding and resident species in taiwan taiwan <- regional_all |> filter( region_name == \"Taiwan\", season %in% c(\"breeding\", \"resident\") ) |> select(species_code, season, total_pop_percent) # join to ebirdst_runs to attach common and scientific names taiwan <- taiwan |> inner_join(ebirdst_runs, by = \"species_code\") |> arrange(desc(total_pop_percent)) |> select(species_code, common_name, scientific_name, season, total_pop_percent) taiwan"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"predictive-performance-metrics-ppms","dir":"Articles","previous_headings":"","what":"Predictive performance metrics (PPMs)","title":"Introduction to eBird Status Data Products","text":"subset 10% eBird observations excluded model training used test set. submodel making eBird Status model ensemble, model predictions compared actual occurrence count spatiotemporally subsampled version test dataset generate suite predictive performance metrics (PPMs) base model level. PPMs summarized across ensemble 27 km resolution raster grid, cell values average across models ensemble contributing cell. migrants, PPMs provided weekly temporal resolution, form stack 52 rasters metric, residents, year round PPMs provided form single raster metric. total, nineteen predictive performance metrics provided four categories. Binary PPMs compare predicted presence/absence observed detection/non-detection test checklists. binary_f1: F1-score. binary_mcc: Matthews Correlation Coefficient (MCC). binary_prevalence: observed detection probability spatiotemporal subsampling. Occurrence PPMs compare predicted encounter rate observed detection/non-detection subset test checklists within predicted range boundary. occ_bernoulli_dev: proportion Bernoulli deviance explained. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman’s rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score, .e. mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR-AUC) occ_pr_auc_gt_prev: proportion ensemble PR-AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR-AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. Count PPMs compare predicted count observed count subset test checklists within predicted range boundary species detected. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count. count_mae: mean absolute error (MAE). count_poisson_dev: proportion Poisson deviance explained. count_rmse: root mean squared error (RMSE). count_spearman: Spearman’s rank correlation coefficient. Abundance PPMs compare predicted relative abundance observed count full set tests checklists. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count. abd_mae: mean absolute error (MAE). abd_poisson_dev: proportion Poisson deviance explained. abd_rmse: root mean squared error (RMSE). abd_spearman: Spearman’s rank correlation coefficient. spatial PPMs can loaded using load_ppm(). example, load normalized PR-AUC example dataset use: Since Yellow-bellied Sapsucker migrant, 52 layers, one week year, giving mean PR-AUC 27 km 27 km grid cell. can produce simple plot PR-AUC week middle year. Note trim() used trim global raster just show area data (state Michigan example dataset). See applications vignette detailed example use PPMs.","code":"pr_auc <- load_ppm(\"yebsap-example\", ppm = \"occ_pr_auc_normalized\") print(pr_auc) #> class : SpatRaster #> size : 618, 1276, 52 (nrow, ncol, nlyr) #> resolution : 27000, 27000 (x, y) #> extent : -1.7226e+07, 1.7226e+07, -8343000, 8343000 (xmin, xmax, ymin, ymax) #> coord. ref. : WGS 84 / Equal Earth Greenwich (EPSG:8857) #> source : yebsap-example_ppm_occ-pr-auc-normalized_mean_27km_2023.tif #> names : 01-04, 01-11, 01-18, 01-25, 02-01, 02-08, ... #> min values : 0.111343, 0.098129, 0.018913, 0.018913, 0.018913, 0.014034, ... #> max values : 0.734387, 0.734387, 0.796934, 0.796934, 1, 1, ... plot(trim(pr_auc[[26]]))"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"coverage","dir":"Articles","previous_headings":"","what":"Data coverage","title":"Introduction to eBird Status Data Products","text":"addition species-specific data products discussed , ebirdst provides access two species-agnostic data products data coverage workflow. data products GeoTIFF format provide weekly estimates regular 3 km 3 km grid Site selection probability: modeled probability (0-1) grid cell certain habitat configuration received eBird checklist within region season. Spatial coverage: fraction (0-1) grid cells within region season checklists given week. data products identify areas coverage eBird data relatively high low, can used prioritize areas increased data collection. example, load map site selection probability week May 10, use load_data_coverage(), download requested weeks automatically haven’t already downloaded. prefer download data coverage products advance, use ebirdst_download_data_coverage().","code":"site_sel <- load_data_coverage(\"selection-probability\", weeks = \"05-10\") plot(site_sel, axes = FALSE)"},{"path":"https://ebird.github.io/ebirdst/articles/status.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Introduction to eBird Status Data Products","text":"Fink, D., T. Auer, . Johnston, V. Ruiz‐Gutierrez, W.M. Hochachka, S. Kelling. 2019. Modeling avian full annual cycle distribution population trends citizen science data. Ecological Applications, 00(00):e02056. doi: 10.1002/eap.2056","code":""},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"download","dir":"Articles","previous_headings":"","what":"Downloading data","title":"eBird Trends Data Products","text":"Trends data access granted process eBird Status Data Products. haven’t already requested access key, consult relevant section Introduction eBird Status Data Products vignette. Status Data Products, trends data downloaded automatically first time load , cases don’t need download explicitly. ’d rather download data one species advance, use ebirdst_download_trends(), first argument vector common names, scientific names, species codes. Trends data downloaded centralized directory file management access performed via ebirdst. example, optionally pre-download breeding season trends data Sage Thrasher :","code":"ebirdst_download_trends(\"Sage Thrasher\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"load","dir":"Articles","previous_headings":"","what":"Loading data into R","title":"eBird Trends Data Products","text":"Trends data set species can loaded R using function load_trends(), downloads data automatically aren’t already present. example, can load Sage Thrasher trends estimates : row corresponds trend estimate 27 km 27 km grid cell, identified srd_id column cell center given longitude latitude coordinates. Columns beginning abd_ppy provide estimates percent per year trend relative abundance 80% confidence intervals, beginning abd_trend provide estimates cumulative trend relative abundance 80% confidence intervals time period. abd column gives relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). start_year/end_year start_date/end_date columns provide redundant information available ebirdst_runs. Specifically Sage Thrasher : tells us trend estimates breeding season (May 17 July 12) period 2012-2022.","code":"trends_sagthr <- load_trends(\"Sage Thrasher\") trends_runs |> filter(common_name == \"Sage Thrasher\") |> select( trends_start_year, trends_end_year, trends_start_date, trends_end_date ) #> # A tibble: 1 × 4 #> trends_start_year trends_end_year trends_start_date trends_end_date #> #> 1 2012 2022 05-17 07-12"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial","dir":"Articles","previous_headings":"","what":"Conversion to spatial formats","title":"eBird Trends Data Products","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km 27 km equal area grid. grid cell, coordinates (longitude latitude) provided center grid cell. many applications, explicitly spatial format useful coordinates can use convert tabular format either vector raster format. tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species. tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" ) trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) ) # rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-points","dir":"Articles","previous_headings":"","what":"Vector (points)","title":"eBird Trends Data Products","text":"tabular trend data can converted point vector features use sf package using sf function st_as_sf(). points can exported GeoPackage use GIS QGIS ArcGIS ","code":"trends_sf <- st_as_sf(trends_sagthr, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) print(trends_sf) #> Simple feature collection with 2462 features and 15 fields #> Geometry type: POINT #> Dimension: XY #> Bounding box: xmin: -122.1784 ymin: 33.5256 xmax: -102.975 ymax: 49.35282 #> Geodetic CRS: WGS 84 #> # A tibble: 2,462 × 16 #> species_code season start_year end_year start_date end_date srd_id abd #> * #> 1 sagthr breeding 2012 2022 05-17 07-12 254264 0.000527 #> 2 sagthr breeding 2012 2022 05-17 07-12 255764 0.0147 #> 3 sagthr breeding 2012 2022 05-17 07-12 255765 0.000214 #> 4 sagthr breeding 2012 2022 05-17 07-12 257264 0.00174 #> 5 sagthr breeding 2012 2022 05-17 07-12 257265 0.0132 #> 6 sagthr breeding 2012 2022 05-17 07-12 257266 0.00118 #> 7 sagthr breeding 2012 2022 05-17 07-12 258765 0.00335 #> 8 sagthr breeding 2012 2022 05-17 07-12 258766 0.0191 #> 9 sagthr breeding 2012 2022 05-17 07-12 258767 0.00511 #> 10 sagthr breeding 2012 2022 05-17 07-12 260264 0.000104 #> # ℹ 2,452 more rows #> # ℹ 8 more variables: abd_ppy , abd_ppy_lower , abd_ppy_upper , #> # abd_ppy_nonzero , abd_trend , abd_trend_lower , #> # abd_trend_upper , geometry # be sure to modify the path to save the file to a directory of # your choice on your hard drive write_sf(trends_sf, \"ebird-trends_sagthr_2022.gpkg\", layer = \"sagthr_trends\" )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-circles","dir":"Articles","previous_headings":"","what":"Vector (abundance-scaled circles)","title":"eBird Trends Data Products","text":"produce maps similar eBird Status Trends website, function vectorize_trends() convert tabular trends spatial circles areas roughly proportional relative abundance 27 km 27 km cell. produce circles aren’t skewed ’s important provide coordinate reference system intend map resulting trends . ideally equal area projection example ’ve used Equal Earth projection centered North America. Next, ’ll assign colors based cumulative trend (abd_trend) using breaks used website. Finally, can make trends map species.","code":"trends_circles <- vectorize_trends(trends_sagthr, crs = \"+proj=eqearth +lon_0=-96\" ) # define legend max_trend <- ceiling(max(abs(trends_circles$abd_trend))) legend_breaks <- seq(0, 40, by = 10) legend_breaks[length(legend_breaks)] <- max_trend legend_breaks <- c(-rev(legend_breaks), legend_breaks) |> unique() legend_labels <- c(\"<=-40\", -20, 0, 20, \">=40\") legend_colors <- ebirdst_palettes(length(legend_breaks) - 1, type = \"trends\") # assign colors to circles trends_circles <- trends_circles |> mutate(color = cut(abd_trend, legend_breaks, labels = legend_colors) |> as.character()) # natural earth boundaries countries <- ne_countries(returnclass = \"sf\", continent = \"North America\") |> st_geometry() |> st_transform(st_crs(trends_circles)) states <- ne_states(iso_a2 = c(\"US\", \"CA\", \"MX\")) |> st_geometry() |> st_transform(st_crs(trends_circles)) # set the plotting extent plot(st_geometry(trends_circles), border = NA, col = NA) # add basemap plot(countries, col = \"#cfcfcf\", border = \"#888888\", add = TRUE) # add trends plot(st_geometry(trends_circles), col = trends_circles$color, border = NA, axes = FALSE, bty = \"n\", reset = FALSE, add = TRUE ) # add boundaries lines(vect(countries), col = \"#ffffff\", lwd = 3) lines(vect(states), col = \"#ffffff\", lwd = 1.5, xpd = TRUE) # add legend using the fields package # label the bottom, middle, and top label_breaks <- seq(0, 1, length.out = length(legend_breaks)) image.plot( zlim = c(0, 1), breaks = label_breaks, col = legend_colors, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list( at = c(0, 0.25, 0.5, 0.75, 1), labels = legend_labels, col.axis = \"black\", fg = NA, cex.axis = 0.7, lwd.ticks = 0, line = -0.75 ), legend.args = list( text = \"Abundance Trend [% change]\", side = 2, line = 0.25 ) )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"spatial-raster","dir":"Articles","previous_headings":"","what":"Raster","title":"eBird Trends Data Products","text":"tabular trend estimates can easily converted raster format use terra package using function rasterize_trends(). columns trends data frame can selected using layers argument converted layers resulting raster object. raster objects can exported GeoTIFF files use GIS QGIS ArcGIS simple map data can produced raster data. example, ’ll make map percent per year change relative abundance Sage Thrasher. Note slightly different trends maps Status Trends website, show cumulative trend rather annual trend.","code":"# rasterize the percent per year trend with confidence limits (default) ppy_raster <- rasterize_trends(trends_sagthr) print(ppy_raster) #> class : SpatRaster #> size : 67, 100, 3 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> names : abd_ppy, abd_ppy_lower, abd_ppy_upper #> min values : -14.621424, -17.526549, -11.482195 #> max values : 13.629797, 11.744185, 15.77865 # rasterize the cumulative trend estimate trends_raster <- rasterize_trends(trends_sagthr, layers = \"abd_trend\") print(trends_raster) #> class : SpatRaster #> size : 67, 100, 1 (nrow, ncol, nlyr) #> resolution : 26665.26, 26665.28 (x, y) #> extent : -1.060227e+07, -7935747, 3714548, 5501122 (xmin, xmax, ymin, ymax) #> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs #> source(s) : memory #> name : abd_trend #> min value : -79.417929 #> max value : 258.85772 writeRaster(trends_raster, filename = \"ebird-trends_sagthr_2022.tif\") # define breaks and palettes similar to those on status and trends website breaks <- seq(-4, 4) breaks[1] <- -Inf breaks[length(breaks)] <- Inf pal <- ebirdst_palettes(length(breaks) - 1, type = \"trends\") # make a simple map plot(ppy_raster[[\"abd_ppy\"]], col = pal, breaks = breaks, main = \"Sage Thrasher breeding trend 2012-2022 [% change per year]\", cex.main = 0.75, axes = FALSE )"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"uncertainty","dir":"Articles","previous_headings":"","what":"Uncertainty","title":"eBird Trends Data Products","text":"model used estimate trends produces ensemble 100 estimates location, based random subsample eBird data. ensemble estimates used quantify uncertainty trends estimates. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. wishing access estimates individual folds making ensemble can use fold_estimates = TRUE loading data. fold-level estimates can used quantify uncertainty, example, calculating trend given region. example, let’s load fold-level estimates Sage Thrasher: data frame much concise, giving estimates mid-point relative abundance percent per year trend relative abundance 100 folds grid cell. eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California). cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"trends_sagthr_folds <- load_trends(\"sagthr\", fold_estimates = TRUE) print(trends_sagthr_folds) #> # A tibble: 246,200 × 8 #> species_code season fold srd_id latitude longitude abd abd_ppy #> #> 1 sagthr breeding 1 254264 49.4 -120. 0.000527 -3.11 #> 2 sagthr breeding 1 255764 49.1 -120. 0.0147 -2.97 #> 3 sagthr breeding 1 255765 49.1 -119. 0.000214 -2.25 #> 4 sagthr breeding 1 257264 48.9 -120. 0.00174 -4.53 #> 5 sagthr breeding 1 257265 48.9 -120. 0.0132 -3.86 #> 6 sagthr breeding 1 257266 48.9 -119. 0.00118 -4.04 #> 7 sagthr breeding 1 258765 48.6 -120. 0.00335 -3.08 #> 8 sagthr breeding 1 258766 48.6 -119. 0.0191 -0.459 #> 9 sagthr breeding 1 258767 48.6 -119. 0.00511 -6.40 #> 10 sagthr breeding 1 260264 48.4 -120. 0.000104 -2.71 #> # ℹ 246,190 more rows # boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\") sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-regional","dir":"Articles","previous_headings":"","what":"Regional trends","title":"eBird Trends Data Products","text":"eBird trend estimates made 27 km 27 km grid, allows summarization broader regions states provinces. Since relative abundance species varies throughout range, need weight mean trend calculation relative abundance (abd trends data frame). quantify uncertainty regional trend, can use fold-level data produce 100 distinct estimates regional trend, calculate median 80% confidence intervals. example, let’s calculate state-level mean percent per year trends relative abundance Sage Thrasher. can join state-level trends back state boundaries make map ggplot2. Based data, Sage Thrasher populations appear decline throughout entire range; however, states (e.g. South Dakota) experiencing much steeper declines others (e.g. California).","code":"# boundaries of states in the united states state_boundaries <- ne_states(iso_a2 = \"US\", returnclass = \"sf\") |> filter(iso_a2 == \"US\", !postal %in% c(\"AK\", \"HI\")) |> transmute(state = iso_3166_2) # convert fold-level trends estimates to sf format trends_sagthr_sf <- st_as_sf(trends_sagthr_folds, coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # attach state to the fold-level trends data trends_sagthr_sf <- st_join(trends_sagthr_sf, state_boundaries, left = FALSE) # abundance-weighted average trend by region and fold trends_states_folds <- trends_sagthr_sf |> st_drop_geometry() |> group_by(state, fold) |> summarize( abd_ppy = sum(abd * abd_ppy) / sum(abd), .groups = \"drop\" ) # summarize across folds for each state trends_states <- trends_states_folds |> group_by(state) |> summarise( abd_ppy_median = median(abd_ppy, na.rm = TRUE), abd_ppy_lower = quantile(abd_ppy, 0.10, na.rm = TRUE), abd_ppy_upper = quantile(abd_ppy, 0.90, na.rm = TRUE), .groups = \"drop\" ) |> arrange(abd_ppy_median) trends_states_sf <- left_join(state_boundaries, trends_states, by = \"state\") ggplot(trends_states_sf) + geom_sf(aes(fill = abd_ppy_median)) + scale_fill_distiller( palette = \"Reds\", limits = c(NA, 0), na.value = \"grey80\" ) + guides(fill = guide_colorbar(title.position = \"top\", barwidth = 15)) + labs( title = \"Sage Thrasher state-level breeding trends 2012-2022\", fill = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.position = \"bottom\")"},{"path":"https://ebird.github.io/ebirdst/articles/trends.html","id":"applications-multi","dir":"Articles","previous_headings":"","what":"Multi-species trends","title":"eBird Trends Data Products","text":"cases, may interested trend entire community birds, can estimated calculating cell-wise mean trend across suite species. example, eBird Trends Data Products contain trend estimates three species breed sagebrush: Brewer’s Sparrow, Sagebrush Sparrow, Sage Thrasher. can calculate average trend group species, provide estimate trend sagebrush bird community. First let’s look model information ensure species modeled region, season, range years. Everything looks good, can proceed compare trends species. can load trends three species single call load_trends(), downloads species aren’t already present (Sage Thrasher data downloaded won’t re-downloaded), calculate cell-wise mean. Finally, let’s make map sagebrush trends, focusing cells three species occur.","code":"sagebrush_species <- c(\"Brewer's Sparrow\", \"Sagebrush Sparrow\", \"Sage Thrasher\") trends_runs |> filter(common_name %in% sagebrush_species) #> # A tibble: 3 × 11 #> species_code common_name trends_season trends_region trends_start_year #> #> 1 brespa Brewer's Sparrow breeding north_america 2012 #> 2 sagspa1 Sagebrush Sparrow breeding north_america 2012 #> 3 sagthr Sage Thrasher breeding north_america 2012 #> # ℹ 6 more variables: trends_end_year , trends_start_date , #> # trends_end_date , rsquared , beta0 , #> # trends_version_year trends_sagebrush_species <- load_trends(sagebrush_species) # calculate mean trend for each cell trends_sagebrush <- trends_sagebrush_species |> group_by(srd_id, latitude, longitude) |> summarize( n_species = n(), abd_ppy = mean(abd_ppy, na.rm = TRUE), .groups = \"drop\" ) print(trends_sagebrush) #> # A tibble: 3,265 × 5 #> srd_id latitude longitude n_species abd_ppy #> #> 1 234764 52.5 -118. 1 -8.61 #> 2 234765 52.5 -117. 1 -7.91 #> 3 234766 52.5 -117. 1 -6.30 #> 4 236265 52.2 -118. 1 -0.521 #> 5 236266 52.2 -117. 1 -6.90 #> 6 236267 52.2 -117. 1 -6.56 #> 7 236268 52.2 -116. 1 -5.27 #> 8 237765 52.0 -118. 1 -5.89 #> 9 237766 52.0 -117. 1 -5.68 #> 10 237767 52.0 -117. 1 -9.76 #> # ℹ 3,255 more rows # convert the points to sf format all_species <- trends_sagebrush |> filter(n_species == length(sagebrush_species)) |> st_as_sf( coords = c(\"longitude\", \"latitude\"), crs = 4326 ) # make a map ggplot(all_species) + geom_sf(aes(color = abd_ppy), size = 2) + scale_color_gradient2( low = \"#CB181D\", high = \"#2171B5\", limits = c(-4, 4), oob = scales::oob_squish ) + guides(color = guide_colorbar(title.position = \"left\", barheight = 15)) + labs( title = \"Sagebrush species breeding trends (2012-2022)\", color = \"Relative abundance trend [% change / year]\" ) + theme_bw() + theme(legend.title = element_text(angle = 90))"},{"path":"https://ebird.github.io/ebirdst/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Matthew Strimas-Mackey. Author, maintainer. Shawn Ligocki. Author. Tom Auer. Author. Daniel Fink. Author. Cornell Lab Ornithology. Copyright holder.","code":""},{"path":"https://ebird.github.io/ebirdst/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Strimas-Mackey M, Ligocki S, Auer T, Fink D (2026). ebirdst: Access Analyze eBird Status Trends Data Products. R package version 4.2023.1, https://ebird.github.io/ebirdst/.","code":"@Manual{, title = {ebirdst: Access and Analyze eBird Status and Trends Data Products}, author = {Matthew Strimas-Mackey and Shawn Ligocki and Tom Auer and Daniel Fink}, year = {2026}, note = {R package version 4.2023.1}, url = {https://ebird.github.io/ebirdst/}, }"},{"path":[]},{"path":"https://ebird.github.io/ebirdst/index.html","id":"overview","dir":"","previous_headings":"","what":"Overview","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Trends project Cornell Lab Ornithology uses machine-learning models estimate distributions, relative abundances, population trends high spatial temporal resolution across full annual cycle 2,980 bird species globally. models learn relationships bird observations collected eBird suite remotely sensed habitat variables, accounting noise bias inherent community science datasets, including variation observer behavior effort. Interactive maps visualizations model estimates can explored online, Status Trends Data Products provide access data behind maps visualizations. ebirdst R package provides set tools downloading data products, loading R, using visualization analysis.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Access and Analyze eBird Status and Trends Data Products","text":"Install ebirdst GitHub : version ebirdst designed work 2023 version Status Data Products 2022 version Trends Data Products. Users strongly discouraged comparing Status Trends results years due methodological differences versions. accessed used previous versions /may need access previous versions reasons related reproducibility, please contact ebird@cornell.edu request considered.","code":"if (!requireNamespace(\"remotes\", quietly = TRUE)) { install.packages(\"remotes\") } remotes::install_github(\"ebird/ebirdst\")"},{"path":"https://ebird.github.io/ebirdst/index.html","id":"webinars","dir":"","previous_headings":"","what":"Webinars","title":"Access and Analyze eBird Status and Trends Data Products","text":"series eBird Status Trends webinars presented collaboration Birds World available YouTube. webinars cover much material vignettes available ebirdst R package website, visual interactive format. webinars follows Estimating Abundance Trends World’s Birds using eBird data: introduction methodology used generate eBird Status Trends Data Products data products used conservation research. Part : introduction range data products available well suite tools training materials available working data. webinar also covers work spatial data products QGIS. Part II: applications eBird Status Data Products. Part III: applications eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"data-access","dir":"","previous_headings":"","what":"Data access","title":"Access and Analyze eBird Status and Trends Data Products","text":"Data access granted Access Request Form : https://ebird.org/st/request. Access form generates key used R package provided immediately (long commercial use requested). terms use designed quite permissive many cases, particularly academic research use. requesting data access, please sure carefully read terms use ensure intended use restricted. completing Access Request Form, provided Status Trends Data Products access key, need downloading data. store key package can access downloading data, use function set_ebirdst_access_key(\"XXXXX\"), \"XXXXX\" access key provided .","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"access-outside-of-r","dir":"","previous_headings":"Data access","what":"Access outside of R","title":"Access and Analyze eBird Status and Trends Data Products","text":"interested accessing data outside R, two alternative options: widely used data products available direct download Status Trends website. Spatial data accessible widely adopted GeoTIFF GeoPackage formats, can opened QGIS, ArcGIS, GIS software. API programmatic access outside R. information eBird Status Trends Data Products API, consult associated vignette.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Access and Analyze eBird Status and Trends Data Products","text":"eBird Status Data Products eBird Trends Data Products come different versions require different citations. Please cite eBird Status Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, C. Davis, M. Stokowski, P. Sharma, V. Pantoja, D. Burgin, P. Crowe, M. Bell, S. Ray, . Davies, V. Ruiz-Gutierrez, C. Wood, . Rodewald. 2024. eBird Status Trends, Data Version: 2023; Released: 2025. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/WZTW8903 Download BibTeX version. Please cite eBird Trends Data Products : Fink, D., T. Auer, . Johnston, M. Strimas-Mackey, S. Ligocki, O. Robinson, W. Hochachka, L. Jaromczyk, C. Crowley, K. Dunham, . Stillman, . Davies, . Rodewald, V. Ruiz-Gutierrez, C. Wood. 2023. eBird Status Trends, Data Version: 2022; Released: 2023. Cornell Lab Ornithology, Ithaca, New York. https://doi.org/10.2173/ebirdst.2022 Download BibTeX version.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"vignettes","dir":"","previous_headings":"","what":"Vignettes","title":"Access and Analyze eBird Status and Trends Data Products","text":"full package documentation, including series vignettes covering full spectrum introductory advanced usage, please see package website. available vignettes : Introduction eBird Status Data Products: covers data access, available data products, structure format data files. eBird Status Data Products Applications: demonstrates work raster data products use variety common applications. eBird Trends Data Products: covers downloading working eBird Trends Data Products.","code":""},{"path":"https://ebird.github.io/ebirdst/index.html","id":"quick-start","dir":"","previous_headings":"","what":"Quick Start","title":"Access and Analyze eBird Status and Trends Data Products","text":"quick start guide shows download data plot relative abundance values similar plotted eBird Status Trends weekly abundance animations. guide, throughout package documentation, simplified example dataset used consisting Yellow-bellied Sapsucker Michigan. full list species available download, look data frame ebirst_runs, included package. IMPORTANT: eBird Status Trends Data Products designed downloaded accessed using R package. Downloaded data specific file structure changing file names locations disrupt ability functions package access data. prefer access data use outside R, consider downloading data via eBird Status Trends website.","code":"library(fields) library(rnaturalearth) library(sf) library(terra) library(ebirdst) # load relative abundance raster stack for yellow-bellied sapsucker in michigan # consisting of 52 layers, one for each week # this will download the data if it has not already been downloaded abd <- load_raster(\"yebsap-example\", resolution = \"27km\") # load species specific mapping parameters pars <- load_fac_map_parameters(\"yebsap-example\") # custom coordinate reference system crs <- st_crs(pars$custom_projection) # legend breaks breaks <- pars$weekly_bins # legend labels for top, middle, and bottom labels <- pars$weekly_labels # the date that each raster layer corresponds to is stored within the labels weeks <- as.Date(names(abd)) print(weeks) #> [1] \"2023-01-04\" \"2023-01-11\" \"2023-01-18\" \"2023-01-25\" \"2023-02-01\" #> [6] \"2023-02-08\" \"2023-02-15\" \"2023-02-22\" \"2023-03-01\" \"2023-03-08\" #> [11] \"2023-03-15\" \"2023-03-22\" \"2023-03-29\" \"2023-04-05\" \"2023-04-12\" #> [16] \"2023-04-19\" \"2023-04-26\" \"2023-05-03\" \"2023-05-10\" \"2023-05-17\" #> [21] \"2023-05-24\" \"2023-05-31\" \"2023-06-07\" \"2023-06-14\" \"2023-06-21\" #> [26] \"2023-06-28\" \"2023-07-05\" \"2023-07-12\" \"2023-07-19\" \"2023-07-26\" #> [31] \"2023-08-02\" \"2023-08-09\" \"2023-08-16\" \"2023-08-23\" \"2023-08-30\" #> [36] \"2023-09-06\" \"2023-09-13\" \"2023-09-20\" \"2023-09-27\" \"2023-10-04\" #> [41] \"2023-10-11\" \"2023-10-18\" \"2023-10-25\" \"2023-11-01\" \"2023-11-08\" #> [46] \"2023-11-15\" \"2023-11-22\" \"2023-11-29\" \"2023-12-06\" \"2023-12-13\" #> [51] \"2023-12-20\" \"2023-12-27\" # select a week in the middle of the year abd <- abd[[26]] # project to species specific coordinates # the nearest neighbor method preserves cell values across projections abd_prj <- project(trim(abd), crs$wkt, method = \"near\") # get reference data from the rnaturalearth package # the example data currently shows only the US state of Michigan wh_states <- ne_states(country = c(\"United States of America\", \"Canada\"), returnclass = \"sf\") |> st_transform(crs = crs) |> st_geometry() # start plotting par(mfrow = c(1, 1), mar = c(0, 0, 0, 0)) # use raster bounding box to set the spatial extent for the plot bb <- st_as_sfc(st_bbox(trim(abd_prj))) plot(bb, col = \"white\", border = \"white\") # add background reference data plot(wh_states, col = \"#cfcfcf\", border = NA, add = TRUE) # plot zeroes as light gray plot(abd_prj, col = \"#e6e6e6\", maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # define color palette pal <- ebirdst_palettes(length(breaks) - 1, type = \"weekly\") # plot abundance plot(abd_prj, col = pal, breaks = breaks, maxpixels = ncell(abd_prj), axes = FALSE, legend = FALSE, add = TRUE) # state boundaries plot(wh_states, add = TRUE, col = NA, border = \"white\", lwd = 1.5) # legend label_breaks <- seq(0, 1, length.out = length(breaks)) image.plot(zlim = c(0, 1), breaks = label_breaks, col = pal, smallplot = c(0.90, 0.93, 0.15, 0.85), legend.only = TRUE, axis.args = list(at = c(0, 0.5, 1), labels = round(labels, 2), cex.axis = 0.9, lwd.ticks = 0))"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign points to a spacetime grid — assign_to_grid","title":"Assign points to a spacetime grid — assign_to_grid","text":"Given set points space (optionally) time, define regular grid given dimensions, return grid cell index point.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"assign_to_grid( points, coords = NULL, is_lonlat = FALSE, res, jitter_grid = TRUE, grid_definition = NULL )"},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign points to a spacetime grid — assign_to_grid","text":"points data frame; points spatial coordinates x y, optional time coordinate t. coords character; names spatial temporal coordinates input dataframe. provide names want overwrite default coordinate names: c(\"x\", \"y\", \"t\") c(\"longitude\", \"latitude\", \"t\") is_lonlat = TRUE. is_lonlat logical; points unprojected, lon-lat coordinates. case, input data frame columns \"longitude\" \"latitude\" points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution grid x, y, t dimensions, respectively. 2 dimensions provided, space grid generated. units res coordinates input data unless is_lonlat true case x y resolution provided meters. jitter_grid logical; whether jitter location origin grid introduce randomness. grid_definition list; object defining grid via origin resolution components. assign multiple sets points exactly grid, assign_to_grid() returns data frame grid_definition attribute can passed subsequent calls assign_to_grid(). res jitter ignored grid_definition provided.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign points to a spacetime grid — assign_to_grid","text":"Data frame indices space-spacetime grid cells. data frame grid_definition attribute can used reconstruct grid.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/assign_to_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Assign points to a spacetime grid — assign_to_grid","text":"","code":"set.seed(1) # generate some example points points_xyt <- data.frame(x = runif(100), y = runif(100), t = rnorm(100)) # assign to grid cells <- assign_to_grid(points_xyt, res = c(0.1, 0.1, 0.5)) # assign a second set of points to the same grid assign_to_grid(points_xyt, grid_definition = attr(cells, \"grid_definition\")) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 4-7 4-7-4 #> 2 5-4 5-4-5 #> 3 7-3 7-3-3 #> 4 10-10 10-10-6 #> 5 3-7 3-7-4 #> 6 10-3 10-3-9 #> 7 10-2 10-2-7 #> 8 8-5 8-5-7 #> 9 7-10 7-10-6 #> 10 2-7 2-7-9 #> # ℹ 90 more rows # assign lon-lat points to a 10km space-only grid points_ll <- data.frame(longitude = runif(100, min = -180, max = 180), latitude = runif(100, min = -90, max = 90)) assign_to_grid(points_ll, res = c(10000, 10000), is_lonlat = TRUE) #> # A tibble: 100 × 1 #> cell_xy #> #> 1 2960-1224 #> 2 3184-781 #> 3 2110-1687 #> 4 1254-617 #> 5 2407-1571 #> 6 244-1415 #> 7 3172-924 #> 8 2894-1604 #> 9 1203-769 #> 10 2118-1 #> # ℹ 90 more rows # overwrite default coordinate names, 5km by 1 week grid points_names <- data.frame(lon = runif(100, min = -180, max = 180), lat = runif(100, min = -90, max = 90), day = sample.int(365, size = 100)) assign_to_grid(points_names, res = c(5000, 5000, 7), coords = c(\"lon\", \"lat\", \"day\"), is_lonlat = TRUE) #> # A tibble: 100 × 2 #> cell_xy cell_xyt #> #> 1 5348-68 5348-68-49 #> 2 2294-1332 2294-1332-40 #> 3 2577-1839 2577-1839-16 #> 4 5159-3343 5159-3343-26 #> 5 867-2655 867-2655-5 #> 6 5944-2704 5944-2704-19 #> 7 2254-1551 2254-1551-41 #> 8 3453-166 3453-166-51 #> 9 3515-2926 3515-2926-9 #> 10 4736-1401 4736-1401-33 #> # ℹ 90 more rows"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate MCC and F1 score — calculate_mcc_f1","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"Given binary observed predicted response, estimate Matthews correlation coefficient (MCC) F1 score.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"calculate_mcc_f1(observed, predicted)"},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"observed logical 0/1; observed binary response. predicted logical 0/1; predicted binary response. typically need generated applying threshold continuous predicted response.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"list two elements: mcc f1.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/calculate_mcc_f1.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate MCC and F1 score — calculate_mcc_f1","text":"","code":"obs <- c(rep(1L, 1000L), rep(0L, 10000L)) pred <- c(rbeta(300L, 12, 2), rbeta(700L, 3, 4), rbeta(10000L, 2, 3)) calculate_mcc_f1(obs > 0, pred > 0.5) #> $f1 #> [1] 0.2227891 #> #> $mcc #> [1] 0.125311 #>"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"Convert percent per year trend cumulative trend","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"convert_ppy_to_cumulative(x, n_years)"},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"x numeric; percent per year trend 0-100 scale rather 0-1 scale. n_years integer; number years.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"numeric vector length x contains cumulative trend resulting n_years years compounding annual trend.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/convert_ppy_to_cumulative.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert percent per year trend to cumulative trend — convert_ppy_to_cumulative","text":"","code":"ppy_trend <- runif(100, min = -100, 100) cumulative_trend <- convert_ppy_to_cumulative(ppy_trend, n_years = 5) cbind(ppy_trend, cumulative_trend) #> ppy_trend cumulative_trend #> [1,] 26.5237797 224.235667 #> [2,] -78.7290758 -99.956456 #> [3,] 37.0308294 383.160512 #> [4,] 99.9613629 3096.910224 #> [5,] -60.5870956 -99.048974 #> [6,] -65.7462530 -99.528436 #> [7,] -66.6408817 -99.586883 #> [8,] 93.1104965 2585.526253 #> [9,] -27.6598451 -80.189421 #> [10,] -49.0065226 -96.551953 #> [11,] -72.5135942 -99.843112 #> [12,] -62.3086964 -99.239313 #> [13,] 67.5481140 1220.376291 #> [14,] -98.5543832 -100.000000 #> [15,] -21.6235981 -70.424874 #> [16,] 49.5139800 647.152082 #> [17,] 78.0171083 1687.757918 #> [18,] -37.4275029 -90.407817 #> [19,] -76.0853987 -99.921780 #> [20,] 16.0109404 110.133230 #> [21,] 4.9255232 27.176163 #> [22,] -31.6596431 -85.093139 #> [23,] -98.7014870 -100.000000 #> [24,] 52.0246697 712.026762 #> [25,] 23.2525141 184.432313 #> [26,] 28.6719997 252.712013 #> [27,] 82.5191530 1925.546527 #> [28,] -82.3117551 -99.982685 #> [29,] -28.0494563 -80.717187 #> [30,] -47.2478580 -95.914921 #> [31,] 18.3742505 132.426805 #> [32,] -97.3313568 -99.999999 #> [33,] 24.4785105 198.862837 #> [34,] -59.1507802 -98.862585 #> [35,] 3.2270633 17.210862 #> [36,] 88.5309670 2281.844887 #> [37,] 86.9456285 2183.371470 #> [38,] -18.6704147 -64.416981 #> [39,] -12.7653876 -49.482229 #> [40,] -70.8498831 -99.789525 #> [41,] -33.4829047 -86.978339 #> [42,] -20.7052394 -68.651089 #> [43,] -69.0053591 -99.713956 #> [44,] 92.0461348 2512.328892 #> [45,] 82.8205821 1942.327742 #> [46,] -50.1079920 -96.908602 #> [47,] -51.3973860 -97.287947 #> [48,] 82.6365235 1932.067636 #> [49,] 79.8070486 1779.462055 #> [50,] -37.4815181 -90.449148 #> [51,] 82.5406853 1926.741607 #> [52,] -39.6010438 -91.962015 #> [53,] -63.6699866 -99.367111 #> [54,] 61.6571397 1004.013670 #> [55,] -50.4581128 -97.015561 #> [56,] 75.0888617 1545.479955 #> [57,] 31.6975001 296.175538 #> [58,] -24.0338038 -74.701085 #> [59,] -81.7176180 -99.979575 #> [60,] 26.9031846 229.126312 #> [61,] -4.8496712 -22.007747 #> [62,] -53.2877808 -97.775909 #> [63,] -65.6208901 -99.519744 #> [64,] 71.7607693 1394.926645 #> [65,] -47.6182770 -96.056345 #> [66,] 64.2411353 1095.114984 #> [67,] -35.0734280 -88.462483 #> [68,] -85.2128339 -99.992930 #> [69,] 14.4770744 96.604118 #> [70,] 33.2304805 319.776353 #> [71,] 72.6926422 1435.922035 #> [72,] -91.9113623 -99.999654 #> [73,] 23.6590130 189.153784 #> [74,] -59.7943409 -98.949404 #> [75,] -77.2165910 -99.938611 #> [76,] -45.6508961 -95.257996 #> [77,] 57.0508700 855.436291 #> [78,] 27.5961604 238.211234 #> [79,] -6.0898502 -26.959680 #> [80,] 65.3054437 1134.342770 #> [81,] -1.3583505 -6.609730 #> [82,] 55.0320627 795.586683 #> [83,] 40.7493845 452.373101 #> [84,] -81.9888145 -99.981046 #> [85,] -3.7408039 -17.356034 #> [86,] -83.0425453 -99.985978 #> [87,] -65.6136450 -99.519237 #> [88,] -33.6547709 -87.145698 #> [89,] -85.5264190 -99.993648 #> [90,] 99.3374145 3047.343215 #> [91,] -73.3879390 -99.866527 #> [92,] 0.8804244 4.480322 #> [93,] -58.4314961 -98.758857 #> [94,] 98.8942169 3012.510161 #> [95,] 28.6094997 251.856229 #> [96,] 2.3137241 12.116483 #> [97,] -35.4352674 -88.780415 #> [98,] -92.2750663 -99.999725 #> [99,] -92.3839119 -99.999744 #> [100,] 19.5461488 144.161930"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the Status and Trends week that a date falls into — date_to_st_week","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"Get Status Trends week date falls ","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"date_to_st_week(dates, version = 2022)"},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"dates vector dates. version One 2021 date scheme used 2021 prior data releases 2022 date scheme used 2022 subsequent releases. Default 2022.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"integer vector weeks numbers 1-52.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/date_to_st_week.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the Status and Trends week that a date falls into — date_to_st_week","text":"","code":"d <- as.Date(c(\"2016-04-08\", \"2018-12-31\", \"2014-01-01\", \"2018-09-04\")) date_to_st_week(d) #> [1] 15 52 1 36"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":null,"dir":"Reference","previous_headings":"","what":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Tools load, map, plot, analyze eBird Status Trends data products","code":""},{"path":[]},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"ebirdst: Tools to Load, Map, Plot, and Analyze eBird Status and Trends Data Products — ebirdst-package","text":"Maintainer: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Authors: Matthew Strimas-Mackey mes335@cornell.edu (ORCID) Shawn Ligocki sligocki@cornell.edu Tom Auer mta45@cornell.edu (ORCID) Daniel Fink df36@cornell.edu (ORCID) contributors: Cornell Lab Ornithology [copyright holder]","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":null,"dir":"Reference","previous_headings":"","what":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"Identify return path default download directory eBird Status Trends data products. directory can defined setting environment variable EBIRDST_DATA_DIR, otherwise directory returned tools::R_user_dir(\"ebirdst\", = \"data\") used.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"path data download directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_dir.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Path to eBird Status and Trends data download directory — ebirdst_data_dir","text":"","code":"ebirdst_data_dir() #> [1] \"/Users/mes335/projects/workshops/2026-08-04_ebirdst-workshop_rao-2026/ebirdst-data/\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":null,"dir":"Reference","previous_headings":"","what":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"Returns summary eBird Status Trends data packages currently downloaded disk, separate rows Status Trends data products species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"ebirdst_data_inventory(path = ebirdst_data_dir()) # S3 method for class 'ebirdst_inventory' print(x, ...)"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"path character; directory data stored. Defaults ebirdst_data_dir(). x ebirdst_inventory object returned ebirdst_data_inventory(). ... ignored.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"tibble class ebirdst_inventory one row per data package found disk, columns species_code, common_name, scientific_name, version_year, dataset (\"status\" \"trends\"), n_files, size_mb. object compact print method displays inventory grouped version year dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_data_inventory.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Inventory of downloaded eBird Status and Trends data — ebirdst_data_inventory","text":"","code":"if (FALSE) { # \\dontrun{ # inventory of all data downloaded to the default directory ebirdst_data_inventory() # inventory for a specific directory ebirdst_data_inventory(\"/path/to/data\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":null,"dir":"Reference","previous_headings":"","what":"Delete downloaded eBird Status and Trends data — ebirdst_delete","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Deletes downloaded eBird Status Trends data packages specified species /version years. called interactively without force = TRUE, prints summary data deleted prompts confirmation proceeding.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"ebirdst_delete( species = NULL, year = NULL, path = ebirdst_data_dir(), force = FALSE )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"species character; one species given eBird species codes, scientific names, English common names. NULL (default), data species included. year integer; one version years. NULL (default), data years included. path character; directory data stored. Defaults ebirdst_data_dir(). force logical; TRUE, skip interactive confirmation prompt delete without asking. Required running non-interactive session.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"Invisibly returns character vector paths deleted directories.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_delete.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Delete downloaded eBird Status and Trends data — ebirdst_delete","text":"","code":"if (FALSE) { # \\dontrun{ # review and confirm deletion of example data ebirdst_delete(species = \"yebsap-example\") # delete all data for a given version year without prompting ebirdst_delete(year = 2021, force = TRUE) # delete a specific species and year ebirdst_delete(species = \"Yellow-bellied Sapsucker\", year = 2022, force = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: site selection probability spatial coverage. function downloads data products raster GeoTIFF format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"ebirdst_download_data_coverage( path = ebirdst_data_dir(), pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"Path folder containing downloaded data coverage products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status and Trends Data Coverage Products — ebirdst_download_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download all data coverage products ebirdst_download_data_coverage() # download just the spatial coverage products ebirdst_download_data_coverage(pattern = \"spatial-coverage\") # download a single week of data coverage products ebirdst_download_data_coverage(pattern = \"01-04\") # download all weeks in april ebirdst_download_data_coverage(pattern = \"04-\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Status Data Products — ebirdst_download_status","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Download eBird Status Data Products single species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. low resolution (27 km) data available example data. addition, example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"ebirdst_download_status( species, path = ebirdst_data_dir(), download_abundance = TRUE, download_occurrence = FALSE, download_count = FALSE, download_ranges = FALSE, download_regional = FALSE, download_pis = FALSE, download_ppms = FALSE, download_all = FALSE, pattern = NULL, dry_run = FALSE, force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Status Data Products — ebirdst_download_status","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). download_abundance whether download estimates abundance proportion population. download_occurrence logical; whether download estimates occurrence. download_count logical; whether download estimates count. download_ranges logical; whether download range polygons. download_regional logical; whether download regional summary stats, e.g. percent population regions. download_pis logical; whether download spatial estimates predictor importance. download_ppms logical; whether download spatial predictive performance metrics. download_all logical; download files data package. Equivalent setting download_ arguments TRUE. pattern character; regular expression pattern supply str_detect() filter files download. filter applied addition download_ arguments. Note files mandatory always downloaded. dry_run logical; whether dry run, just listing files downloaded. can useful testing use pattern filter files download. force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Status Data Products — ebirdst_download_status","text":"Path folder containing downloaded data package given species. dry_run = TRUE list files download returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Download eBird Status Data Products — ebirdst_download_status","text":"complete data package species contains large number files, cataloged vignettes. users require small subset files, default function downloads commonly used files: GeoTIFFs providing estimate relative abundance proportion population. interested additional data products, arguments starting download_ control download products. pattern argument provides even finer grained control gets downloaded.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_status.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Status Data Products — ebirdst_download_status","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_status(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_status(\"woothr\") # use pattern to only download low resolution (27 km) geotiff data # dry_run can be used to see what files will be downloaded ebirdst_download_status(\"lobcur\", pattern = \"_27km_\", dry_run = TRUE) # use pattern to only download high resolution (3 km) weekly abundance data ebirdst_download_status(\"lobcur\", pattern = \"abundance_median_3km\", dry_run = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Download eBird Trends Data Products — ebirdst_download_trends","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Download eBird Trends Data Products set species, example species. Downloading Status Trends data requires access key, consult set_ebirdst_access_key() instructions obtain store key. example data consist results Yellow-bellied Sapsucker subset Michigan much smaller full dataset, making data quicker download process. example data accessible without access key.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"ebirdst_download_trends( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"Character vector paths folders containing downloaded data packages given species. trends data trends/ subdirectory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_download_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Download eBird Trends Data Products — ebirdst_download_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download the example data ebirdst_download_trends(\"yebsap-example\") # download the data package for wood thrush ebirdst_download_trends(\"woothr\") # multiple species can be downloaded at once ebirdst_download_trends(c(\"Sage Thrasher\", \"Abert's Towhee\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"Generate color palettes used eBird Status Trends relative abundance trends maps.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"ebirdst_palettes( n, type = c(\"weekly\", \"breeding\", \"nonbreeding\", \"migration\", \"prebreeding_migration\", \"postbreeding_migration\", \"year_round\", \"trends\") )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"n integer; number colors palette. type character; type color palette: \"weekly\" weekly relative abundance, \"trends\" trends color palette, season name seasonal relative abundance. Note trends diverging palette returned, palettes sequential.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"character vector hex color codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_palettes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends color palettes for mapping — ebirdst_palettes","text":"","code":"# breeding season color palette ebirdst_palettes(10, type = \"breeding\") #> [1] \"#DFC0BC\" \"#DBADA7\" \"#D89A92\" \"#D5887D\" \"#D27568\" \"#CF6252\" \"#CC503E\" #> [8] \"#BB4938\" \"#AA4233\" \"#993C2E\""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"Details eBird Status Trends predictor variables , variables derived dataset, details dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"","code":"ebirdst_predictor_descriptions"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictor_descriptions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictors descriptions — ebirdst_predictor_descriptions","text":"data frame 37 rows 4 columns dataset: dataset name. predictor: predictor name , multiple variables derived dataset, pattern used generate names. description: detailed description dataset variable. reference: reference consult information dataset.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends predictor variables — ebirdst_predictors","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame predictors used eBird Status Trends models. include effort variables (e.g. distance traveled, number observers, etc.) addition variables describing environment (e.g. elevation, land cover, water cover, etc.). environmental variables derived summarizing remotely sensed datasets (described ebirdst_predictor_descriptions) 3 km diameter neighborhood around checklist. categorical datasets, two variables generated class describing percent cover (pland) edge density (ed).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"","code":"ebirdst_predictors"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_predictors.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"eBird Status and Trends predictor variables — ebirdst_predictors","text":"data frame 150 rows 4 columns: predictor: predictor name. dataset: dataset name, can cross referenced ebirdst_predictor_descriptions details. class: class number name categorical variables. label: descriptive labels predictor variable.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Regional summary statistics for all species — ebirdst_regional_stats","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"Load single file regional summary statistics covering species eBird Status Data Products. file downloaded automatically first use loaded single step; subsequent calls load already downloaded file directly. differs load_regional_stats(), loads regional statistics single species species' downloaded data package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"ebirdst_regional_stats( path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"path character; directory data stored . Defaults persistent data directory returned ebirdst_data_dir(). force logical; file already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"data frame regional summary statistics species. columns match returned load_regional_stats().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Regional summary statistics for all species — ebirdst_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download (if necessary) and load regional stats for all species regional <- ebirdst_regional_stats() } # }"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":null,"dir":"Reference","previous_headings":"","what":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"dataset listing species eBird Status Trends Data Products available, additional information relevant Status Trends results species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"","code":"ebirdst_runs"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"data frame 29 variables: species_code: alphanumeric eBird species code uniquely identifying species scientific_name: scientific name. common_name: English common name. is_resident: classifies species resident migrant. breeding_quality: breeding season quality. breeding_start: breeding season start date. breeding_end: breeding season end date. nonbreeding_quality: non-breeding season quality. nonbreeding_start: non-breeding season start date. nonbreeding_end: non-breeding season end date. postbreeding_migration_quality: post-breeding season quality. postbreeding_migration_start: post-breeding season start date. postbreeding_migration_end: post-breeding season end date. prebreeding_migration_quality: pre-breeding season quality. prebreeding_migration_start: pre-breeding season start date. prebreeding_migration_end: pre-breeding season end date. resident_quality: resident quality. resident_start: resident species, year-round start date. resident_end: resident species, year-round end date. status_version_year: release version Status data products. has_trends: whether species trends estimates. trends_season: season trend estimated : breeding, nonbreeding, resident. trends_region: geographic region trend model run . Note broadly distributed species (e.g. Barn Swallow) trend estimates regional subset full range. trends_start_year: start year trend time period. trends_end_year: end year trend time period. trends_start_date: start date (MM-DD format) season trend estimated. trends_end_date: end date (MM-DD format) season trend estimated. rsquared: R-squared value comparing actual estimated trends simulations. beta0: intercept linear model fitting actual vs. estimated trends (actual ~ estimated) simulations. Positive values beta0 indicate models systematically underestimating simulated trend species. trends_version_year: release version Trends data products.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_runs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Data frame of species with eBird Status and Trends Data Products — ebirdst_runs","text":"Status Data Products, dates defining boundaries seasons provided addition quality rating 0-3 season. dates quality ratings assigned process expert review. Note missing dates imply season failed expert review species within season. Trends Data Products available subset species, indicated has_trends variable, species trends estimated single season. two predictive performance metrics (rsquared beta0) based comparison actual estimated percent per year trends suite simulations (see Fink et al. 2023 details). trends regions defined follows: aus_nz: Australia New Zealand iberia: Spain Portugal india_se_asia: India, Nepal, Bhutan, Sri Lanka, Thailand, Cambodia, Malaysia, Brunei, Singapore, Philippines japan: Japan north_america: North America including Mexico, Central America, Caribbean, excluding Nunavut, North West Territories, Hawaii south_africa: South Africa, Lesotho, Eswatini south_america: Colombia, Ecuador, Peru, Chile, Argentina, Uruguay taiwan: Taiwan turkey_plus: Turkey, Cyprus, Israel, Palestine, Greece, Armenia, Georgia","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":null,"dir":"Reference","previous_headings":"","what":"eBird Status and Trends Data Products version — ebirdst_version","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"Identify version eBird Status Trends Data Products version R package works . Versions defined year model estimates made .","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version()"},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"list three components: status_version_year version year eBird Status Data Products, trends_version_year version year eBird Trends Data Products, release_year year version data released.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/ebirdst_version.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"eBird Status and Trends Data Products version — ebirdst_version","text":"","code":"ebirdst_version() #> $status_version_year #> [1] 2023 #> #> $trends_version_year #> [1] 2022 #> #> $release_year #> [1] 2025 #>"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":null,"dir":"Reference","previous_headings":"","what":"Get eBird species code for a set of species — get_species","title":"Get eBird species code for a set of species — get_species","text":"Give vector species codes, common names, /scientific names, return vector 6-letter eBird species codes. function look codes species eBird Status Trends results exist.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(x)"},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get eBird species code for a set of species — get_species","text":"x character; vector species codes, common names, /scientific names.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get eBird species code for a set of species — get_species","text":"character vector eBird species codes.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get eBird species code for a set of species — get_species","text":"","code":"get_species(c(\"Black-capped Chickadee\", \"Poecile gambeli\", \"carchi\")) #> [1] \"bkcchi\" \"mouchi\" \"carchi\""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the path to the data package for a given species — get_species_path","title":"Get the path to the data package for a given species — get_species_path","text":"helper function can used get path data package given species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"get_species_path( species, path = ebirdst_data_dir(), dataset = c(\"status\", \"trends\"), check_downloaded = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the path to the data package for a given species — get_species_path","text":"species character; single species given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). dataset character; whether path Status Trends data products returned. check_downloaded logical; raise error data downloaded species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the path to the data package for a given species — get_species_path","text":"path data package directory.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/get_species_path.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the path to the data package for a given species — get_species_path","text":"","code":"if (FALSE) { # \\dontrun{ # get the path path <- get_species_path(\"yebsap-example\") # get the path to the full data package for yellow-bellied sapsucker # common name, scientific name, or species code can be used path <- get_species_path(\"Yellow-bellied Sapsucker\") path <- get_species_path(\"Sphyrapicus varius\") path <- get_species_path(\"yebsap\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":null,"dir":"Reference","previous_headings":"","what":"Spatiotemporal grid sampling of observation data — grid_sample","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"Sample observation data spacetime grid reduce spatiotemporal bias.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"grid_sample( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, res = c(3000, 3000, 7), jitter_grid = TRUE, sample_size_per_cell = 1, cell_sample_prop = 0.75, keep_cell_id = FALSE, grid_definition = NULL ) grid_sample_stratified( x, coords = c(\"longitude\", \"latitude\", \"day_of_year\"), is_lonlat = TRUE, unified_grid = FALSE, keep_cell_id = FALSE, by_year = TRUE, case_control = TRUE, obs_column = \"obs\", sample_by = NULL, min_detection_probability = 0, maximum_ss = NULL, jitter_columns = NULL, jitter_sd = 0.1, cell_quantile_cap = NULL, ... )"},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"x data frame; observations sample, including least columns defining location space time. Additional columns can included features later used model training. coords character; names spatial temporal coordinates. default spatial spatial coordinates longitude latitude, temporal coordinate day_of_year. is_lonlat logical; points unprojected, lon-lat coordinates. case, points projected equal area Eckert IV CRS prior grid assignment. res numeric; resolution spatiotemporal grid x, y, time dimensions. Unprojected locations projected equal area coordinate system prior sampling, resolution therefore provided units meters. temporal resolution native units time coordinate input data frame, typically number days. jitter_grid logical; whether jitter location origin grid introduce randomness. sample_size_per_cell integer; number observations sample grid cell. cell_sample_prop proportion (0-1]; less 1, proportion cells randomly selected sampling. keep_cell_id logical; whether retain unique cell identifier, stored column named .cell_id. grid_definition list defining spatiotemporal sampling grid returned assign_to_grid() form attribute returned data frame. unified_grid logical; whether single, unified spatiotemporal sampling grid defined used observations x different grid used stratum. by_year logical; whether sampling done stratified year (TRUE) ignoring year (FALSE). sampling year turned , N observations sampled grid cell year, turned , N observations sampled per grid cell across years. using sampling year, input data frame x must year column. case_control logical; whether apply case control sampling whereby presence absence sampled independently. obs_column character; case_control = TRUE, name column x defines detection (obs_column > 0) non-detection (obs_column == 0). sample_by character; additional columns x stratify sampling . example, landscape many small islands (defined island variable) wish sample independently, use sample_by = \"island\". min_detection_probability proportion [0-1); minimum detection probability final dataset. case_control = TRUE, proportion detections grid sampled dataset level, additional detections added via grid sampling detections input dataset least proportion detections appears final dataset. typically result duplication observations final dataset. turn feature use min_detection_probability = 0. maximum_ss integer; maximum sample size final dataset. grid sampling yields number observations, maximum_ss observations selected randomly full set. Note subsampling performed way levels strata least one observation within final dataset, therefore truly randomly sampling. jitter_columns character; detections oversampled achieve minimum detection probability, observations duplicated, can desirable slightly \"jitter\" values model training features duplicated observations. argument defines column names x jittered. jitter_sd numeric; strength jittering units standard deviations, see jitter_columns. cell_quantile_cap proportion (0, 1] NULL; provided, limits many observations single spatial grid cell can contribute grid-sampled data, reducing influence chronically -sampled sites (e.g. bird feeders). observation class, per-cell observation count capped quantile distribution per-cell counts: cells quantile randomly reduced , cells left unchanged. threshold taken data , adapts dataset. Detections non-detections capped independently rule. least one observation every level every column sample_by always retained, even means cell exceeds cap, rare strata (e.g. remote island) never lost; year (by_year = TRUE) protected, years can thinned chronically -sampled cells like observation. NULL (default) value 1 applies cap. ... additional arguments defining spatiotemporal grid; passed grid_sample().","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"data frame spatiotemporally sampled data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"grid_sample_stratified() performs stratified case control sampling, independently sampling strata defined , example, year detection/non-detection. Within stratum, grid_sample() used sample observations spatiotemporal grid. addition, case control sampling turned , detections oversampled increase frequency detections dataset. sampling grid defined, assignment locations cells occurs, assign_to_grid(). Consult help function details grid generated locations assigned. Note providing 2-element vectors coords res time component grid can ignored spatial-subsampling performed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/grid_sample.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Spatiotemporal grid sampling of observation data — grid_sample","text":"","code":"set.seed(1) # generate some example observations n_obs <- 10000 checklists <- data.frame(longitude = rnorm(n_obs, sd = 0.1), latitude = rnorm(n_obs, sd = 0.1), day_of_year = sample.int(28, n_obs, replace = TRUE), year = NA_integer_, obs = rpois(n_obs, lambda = 0.05), forest_cover = runif(n_obs), island = as.integer(runif(n_obs) > 0.95)) # add a year column, giving more data to recent years checklists$year <- sample(seq(2016, 2020), size = n_obs, replace = TRUE, prob = seq(0.3, 0.7, length.out = 5)) # create several rare islands checklists$island[sample.int(nrow(checklists), 9)] <- 2:10 # basic spatiotemporal grid sampling sampled <- grid_sample(checklists) # plot original data and grid sampled data par(mar = c(0, 0, 0, 0)) plot(checklists[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"#00000033\", axes = FALSE) points(sampled[, c(\"longitude\", \"latitude\")], pch = 19, cex = 0.3, col = \"red\") # case control sampling stratified by year and island # return a maximum of 1000 checklists sampled_cc <- grid_sample_stratified(checklists, sample_by = \"island\", maximum_ss = 1000) # case control sampling increases the prevalence of detections mean(checklists$obs > 0) #> [1] 0.0532 mean(sampled$obs > 0) #> [1] 0.0505667 mean(sampled_cc$obs > 0) #> [1] 0.09821429 # stratifying by island ensures all levels are retained, even rare ones table(checklists$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 9505 486 1 1 1 1 1 1 1 1 1 # normal grid sampling loses rare island levels table(sampled$island) #> #> 0 1 #> 1099 48 # stratified grid sampling retain at least one observation from each level table(sampled_cc$island) #> #> 0 1 2 3 4 5 6 7 8 9 10 #> 908 91 1 1 1 1 1 1 1 1 1"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products configuration file — load_config","title":"Load eBird Status Data Products configuration file — load_config","text":"Load configuration file eBird Status run. configuration file mostly internal use contains variety parameters used modeling process.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"load_config( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products configuration file — load_config","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products configuration file — load_config","text":"list run configuration parameters.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_config.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products configuration file — load_config","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters p <- load_config(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"data coverage products packaged individual GeoTIFF files product week year. function loads one available data products one weeks R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"load_data_coverage( product = c(\"spatial-coverage\", \"selection-probability\"), weeks = NULL, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"product character; data coverage raster product load: spatial coverage site selection probability. weeks character; one weeks (expressed \"MM-DD\" format) load raster layers . argument specified, downloaded weeks loaded. Note rasters quite large recommended load small number weeks data time. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"SpatRaster 1 52 layers given product given weeks, layer names dates (YYYY-MM-DD format) midpoint week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"addition species-specific data products, eBird Status data products include two products providing estimates weekly data coverage 3 km spatial resolution: spatial-coverage: spatially smoothed estimate proportion area covered eBird checklists given week. selection-probability: modeled estimate probability given location habitat sampled eBird data given week.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_data_coverage.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status and Trends Data Coverage Products — load_data_coverage","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_data_coverage() # load a single week of site selection probability data load_data_coverage(\"selection-probability\", weeks = \"01-04\") # load all weeks of spatial coverage data load_data_coverage(\"spatial-coverage\", weeks = c(\"01-04\", \"01-11\")) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"Load full annual cycle map parameters — load_fac_map_parameters","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"Get map parameters used eBird Status Trends website optimally display full annual cycle data. includes bins abundance data, projection, extent map. extent spatial extent non-zero data across full annual cycle projection optimized extent.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"load_fac_map_parameters( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"list containing elements: custom_projection: custom projection optimized given species' full annual cycle fa_extent: SpatExtent object storing spatial extent non-zero data given species custom projection res: numeric vector 2 elements giving target resolution raster custom projection fa_extent_projected: extent projected (Equal Earth) coordinates weekly_bins/weekly_labels: weekly abundance bins labels full annual cycle seasonal_bins/seasonal_labels: seasonal abundance bins labels full annual cycle","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_fac_map_parameters.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load full annual cycle map parameters — load_fac_map_parameters","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters load_fac_map_parameters(path) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictor importance (PI) rasters — load_pi","title":"Load predictor importance (PI) rasters — load_pi","text":"eBird Status models estimate relative importance core environmental predictor used model (.e. % land water cover variables). predictor importance (PI) data converted ranks (rank 1 important) relative full suite environmental predictors. ranks summarized 27 km resolution raster grid predictor, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use. PI estimates available separately occurrence count sub-model 30 important predictors distributed. Use list_available_pis() see predictors PI data.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"load_pi( species, predictor, response = c(\"occurrence\", \"count\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() ) list_available_pis( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictor importance (PI) rasters — load_pi","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". predictor character; predictor PI data loaded . list predictors PI data available varies species, use list_available_pis() get list given species. response character; model (occurrence count) PI data loaded . path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictor importance (PI) rasters — load_pi","text":"SpatRaster object PI ranks given predictor. migrants, estimates weekly raster 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned. list_available_pis() returns data frame listing top 30 predictors PI rasters can loaded. addition predictor names, mean range-wide rank (rank_mean) given well integer rank (rank) relative full suite predictors (environmental effort).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Load predictor importance (PI) rasters — load_pi","text":"list_available_pis(): list predictors PI information species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_pi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictor importance (PI) rasters — load_pi","text":"","code":"if (FALSE) { # \\dontrun{ # identify the top predictor # data will be downloaded automatically if not already present top_preds <- list_available_pis(\"yebsap-example\") print(top_preds[1, ]) # load predictor importance raster of top predictor for occurrence load_pi(\"yebsap-example\", top_preds$predictor[1]) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":null,"dir":"Reference","previous_headings":"","what":"Load predictive performance metric (PPM) rasters — load_ppm","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"eBird Status models evaluated test set eBird data used model training suite predictive performance metrics (PPMs) calculated. PPMs base model summarized 27 km resolution raster grid, cell values average across models ensemble contributing cell. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"load_ppm( species, ppm = c(\"binary_f1\", \"binary_mcc\", \"binary_prevalence\", \"occ_bernoulli_dev\", \"occ_bin_spearman\", \"occ_brier\", \"occ_pr_auc\", \"occ_pr_auc_gt_prev\", \"occ_pr_auc_normalized\", \"count_log_pearson\", \"count_mae\", \"count_poisson_dev\", \"count_rmse\", \"count_spearman\", \"abd_log_pearson\", \"abd_mae\", \"abd_poisson_dev\", \"abd_rmse\", \"abd_spearman\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". ppm character; name single metric load data . See Details definitions metric. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"SpatRaster object PPM data. migrants, rasters weekly 52 layers, layer names dates (MM-DD format) midpoint week. residents, single year round layer returned.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"Nineteen predictive performance metrics provided: binary_f1: F1-score comparing model predictions converted binary observed detection/non-detection test checklists. binary_mcc: Matthews Correlation Coefficient (MCC) comparing model predictions converted binary observed detection/non-detection test checklists. binary_prevalence: observed detection probability spatiotemporal subsampling. occ_bernoulli_dev: proportion Bernoulli deviance explained comparing predicted occurrence observed detection/non-detection test checklists. occ_bin_spearman: test observations binned predicted encounter rate bin widths 0.05, mean observed prevalence predicted encounter rate calculated within bins. metric Spearman's rank correlation coefficient comparing observed predicted binned mean values. occ_brier: Brier score mean squared difference predicted encounter rate observed detection/non-detection. occ_pr_auc: area precision-recall curve (PR AUC) generated comparing predicted encounter rate observed detection/non-detection test checklists. occ_pr_auc_gt_prev: proportion ensemble PR AUC greater observed prevalence, indicates model performing better random guessing. occ_pr_auc_normalized: PR AUC normalized account class imbalance value 0 represents performance equal random guessing value 1 represents perfect classification. count_log_pearson: Pearson correlation coefficient comparing logarithm predicted count logarithm observed count subset test checklists species detected. count_mae: mean absolute error (MAE) comparing observed predicted counts subset test checklists species detected. count_poisson_dev: proportion Poisson deviance explained, comparing observed predicted counts subset test checklists species detected. count_rmse: root mean squared error (RMSE) comparing observed predicted counts subset test checklists species detected. count_spearman: Spearman's rank correlation coefficient comparing observed predicted counts subset test checklists species detected. abd_log_pearson: Pearson correlation coefficient comparing logarithm predicted relative abundance logarithm observed count full set test checklists. abd_mae: mean absolute error (MAE) comparing observed counts predicted relative abundance full set test checklists. abd_poisson_dev: proportion Poisson deviance explained, comparing predicted relative abundance observed count full set test checklists. abd_rmse: root mean squared error comparing predicted relative abundance observed count full set test checklists. abd_spearman: Spearman's rank correlation coefficient comparing predicted relative abundance observed count full set test checklists.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ppm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load predictive performance metric (PPM) rasters — load_ppm","text":"","code":"if (FALSE) { # \\dontrun{ # load area under the precision-recall curve PPM raster # data will be downloaded automatically if not already present load_ppm(\"yebsap-example\", ppm = \"binary_pr_auc\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":null,"dir":"Reference","previous_headings":"","what":"Load seasonal eBird Status and Trends range polygons — load_ranges","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"Range polygons defined boundaries non-zero seasonal relative abundance estimates, (optionally) smoothed produce aesthetically pleasing polygons using smoothr package.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"load_ranges( species, resolution = c(\"9km\", \"27km\"), smoothed = TRUE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". resolution character; raster resolution range polygons derived. smoothed logical; whether smoothed unsmoothed ranges loaded. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"sf object containing seasonal range boundaries, season provided different feature.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_ranges.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load seasonal eBird Status and Trends range polygons — load_ranges","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load smoothed ranges # note that only 27 km data are provided for the example data ranges <- load_ranges(\"yebsap-example\", resolution = \"27km\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Status Data Products raster data — load_raster","title":"Load eBird Status Data Products raster data — load_raster","text":"eBird Status raster products packaged GeoTIFF file representing predictions regular grid. core products occurrence, count, relative abundance, proportion population. function loads one available data products R SpatRaster object. requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"load_raster( species, product = c(\"abundance\", \"count\", \"occurrence\", \"proportion-population\"), period = c(\"weekly\", \"seasonal\", \"full-year\"), metric = NULL, resolution = c(\"3km\", \"9km\", \"27km\"), path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Status Data Products raster data — load_raster","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". product character; eBird Status raster product load: occurrence, count, relative abundance, proportion population. See Details detailed explanation products. period character; temporal period estimation. eBird Status models make predictions week year; however, convenience, data also provided summarized seasonal annual (\"full-year\") level. metric character; default, weekly products provide estimates median value (metric = \"median\") summarized products cell-wise mean across weeks within season (metric = \"mean\"). However, additional variants exist products. weekly relative abundance, confidence intervals provided: specify metric = \"lower\" get 10th quantile metric = \"upper\" get 90th quantile. seasonal annual products, cell-wise maximum values across weeks can obtained metric = \"max\". resolution character; resolution raster data load. default load native 3 km resolution data; however, applications 9 km 27 km data may suitable. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Status Data Products raster data — load_raster","text":"weekly cubes, SpatRaster 52 layers given product, layer names dates (YYYY-MM-DD format) midpoint week. Seasonal cubes four layers named corresponding season. full-year products single layer.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Status Data Products raster data — load_raster","text":"core eBird Status data products provide weekly estimates across regular spatial grid. packaged rasters 52 layers, corresponding estimates week year, refer \"cubes\" (e.g. \"relative abundance cube\"). estimates median expected value standard 2 km, 1 hour eBird Traveling Count expert eBird observer optimal time day optimal weather conditions observe given species. products : occurrence: expected probability (0-1) occurrence species. count: expected count species, conditional occurrence given location. abundance: expected relative abundance species, computed product probability occurrence count conditional occurrence. proportion-population: proportion total relative abundance within cell. derived product calculated dividing cell value relative abundance raster total abundance summed across cells. addition weekly data cubes, function provides access data summarized different periods. Seasonal cubes produced taking cell-wise mean max across weeks within season. boundary dates season species specific available ebirdst_runs, season failed review associated layer included cube. addition, full-year summaries provide mean max across weeks year fall within season passed review. Note necessarily 52 weeks year. example, estimates non-breeding season failed expert review given species, full-year summary species include weeks fall within non-breeding season.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_raster.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Status Data Products raster data — load_raster","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # weekly relative abundance # note that only 27 km data are available for the example data abd_weekly <- load_raster(\"yebsap-example\", \"abundance\", resolution = \"27km\") # the weeks for each layer are stored in the layer names names(abd_weekly) # they can be converted to date objects with as.Date as.Date(names(abd_weekly)) # max seasonal abundance abd_seasonal <- load_raster(\"yebsap-example\", \"abundance\", period = \"seasonal\", metric = \"max\", resolution = \"27km\") # available seasons in stack names(abd_seasonal) # subset to just breeding season abundance abd_seasonal[[\"breeding\"]] } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":null,"dir":"Reference","previous_headings":"","what":"Load regional summary statistics — load_regional_stats","title":"Load regional summary statistics — load_regional_stats","text":"Load seasonal summary statistics regions consisting countries states/provinces.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load regional summary statistics — load_regional_stats","text":"","code":"load_regional_stats( species, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load regional summary statistics — load_regional_stats","text":"species character; species load data , given scientific name, common name six-letter species code (e.g. \"woothr\"). full list valid species ebirdst_runs data frame included package. download example dataset, use \"yebsap-example\". path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load regional summary statistics — load_regional_stats","text":"data frame containing regional summary statistics columns: species_code: alphanumeric eBird species code. region_type: country countries state states, provinces, sub-national regions. region_code: alphanumeric code region. region_name: English name region. continent_code: alphanumeric code continent region belongs . continent_name: name continent region belongs . season: name season summary statistics calculated . abundance_mean: mean relative abundance region. total_pop_percent: proportion seasonal modeled population falling within region. continent_pop_percent: proportion seasonal modeled population continent (identified continent_name) falling within region. max_week: week year highest proportion modeled population falling within region. max_week_percent_pop: proportion modeled population falling within region max_week, .e. maximum weekly value. range_occupied_percent: proportion region occupied species given season. range_total_percent: proportion species seasonal range falling within region. range_days_occupation: number days season region occupied species.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_regional_stats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load regional summary statistics — load_regional_stats","text":"","code":"if (FALSE) { # \\dontrun{ # download example data if hasn't already been downloaded ebirdst_download_status(\"yebsap-example\") # load configuration parameters regional <- load_regional_stats(\"yebsap-example\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Load eBird Trends estimates for a set of species — load_trends","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Load relative abundance trend estimates single species set species. Trends estimated 27 km 27 km grid single season per species (breeding, non-breeding, resident). requested data already downloaded, downloaded automatically first use.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"load_trends( species, fold_estimates = FALSE, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() )"},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load eBird Trends estimates for a set of species — load_trends","text":"species character; one species given scientific names, common names six-letter species codes (e.g. \"woothr\"). full list valid species can viewed ebirdst_runs data frame included package; species trends estimates indicated has_trends column. access example dataset, use \"yebsap-example\". fold_estimates logical; default, trends summarized across 100-fold ensemble returned; however, setting fold_estimates = TRUE individual fold-level estimates returned. path character; directory download data . downloaded files placed sub-directory directory named data version year, e.g. \"2020\" 2020 Status Data Products. species' data package appear directory named eBird species code. Defaults persistent data directory, can found calling ebirdst_data_dir(). force logical; data already downloaded, fresh copy downloaded anyway. show_progress logical; whether print download progress information. Defaults interactive(), downloads silent non-interactive sessions (e.g. scripts R Markdown).","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load eBird Trends estimates for a set of species — load_trends","text":"data frame containing trends estimates set species. following columns included: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. start_year/end_year: start end years trend time period. start_date/end_date: start end dates (MM-DD format) season trend estimated. srd_id: unique integer identifier grid cell. longitude/latitude: longitude latitude grid cell center. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: median estimated percent per year change relative abundance. abd_ppy_lower/abd_ppy_upper: 80% confidence interval estimated percent per year change relative abundance. abd_ppy_nonzero: logical (TRUE/FALSE) value indicating 80% confidence limits overlap zero (FALSE) overlap zero (TRUE) abd_trend: median estimated cumulative change relative abundance trend time period. abd_trend_lower/abd_trend_upper: 80% confidence interval estimated cumulative change relative abundance trend time period. fold_estimates = TRUE, data frame fold-level trend estimates returned following columns: species_code: alphanumeric eBird species code uniquely identifying species. season: season trend estimated : breeding, non-breeding, resident. srd_id: unique integer identifier grid cell. abd: relative abundance estimate middle trend time period (e.g. 2014 2007-2021 trend). abd_ppy: estimated percent per year change relative abundance.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Load eBird Trends estimates for a set of species — load_trends","text":"trends relative abundance estimated using double machine learning model. quantify uncertainty, ensemble 100 estimates made location, based random subsample eBird data. estimated trend median across ensemble, 80% confidence intervals lower 10th upper 90th percentiles across ensemble. access estimates individual folds making ensemble use fold_estimates = TRUE. fold-level estimates can used quantify uncertainty, example, calculating trend given region. details methodology used estimate trends consult Fink et al. 2023.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Load eBird Trends estimates for a set of species — load_trends","text":"Fink, D., Johnston, ., Strimas-Mackey, M., Auer, T., Hochachka, W. M., Ligocki, S., Oldham Jaromczyk, L., Robinson, O., Wood, C., Kelling, S., & Rodewald, . D. (2023). Double machine learning trend model citizen science data. Methods Ecology Evolution, 00, 1–14. https://doi.org/10.1111/2041-210X.14186","code":""},{"path":"https://ebird.github.io/ebirdst/reference/load_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load eBird Trends estimates for a set of species — load_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # load fold-level estimates trends_folds <- load_trends(\"yebsap-example\", fold_estimates = TRUE) } # }"},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert eBird Trends Data Products to raster format — rasterize_trends","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates raster format terra SpatRaster format.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"rasterize_trends( trends, layers = c(\"abd_ppy\", \"abd_ppy_lower\", \"abd_ppy_upper\"), trim = TRUE )"},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"trends data frame; trends data single species returned load_trends(). layers character; column names trends data frame rasterize. columns become layers raster created. trim logical; flag indicating returned raster trimmed remove outer rows columns NA. trim = FALSE returned raster global extent, can useful rasters combined across species different ranges.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"SpatRaster object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/rasterize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert eBird Trends Data Products to raster format — rasterize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # rasterize percent per year trend rasterize_trends(trends, \"abd_ppy\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":null,"dir":"Reference","previous_headings":"","what":"Store the eBird Status and Trends access key — set_ebirdst_access_key","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Accessing eBird Status Trends data requires access key, can obtained visiting https://ebird.org/st/request. key must stored environment variable EBIRDST_KEY order ebirdst_download_status() ebirdst_download_trends() use . easiest approach store key .Renviron file can always accessed R sessions. Use function set EBIRDST_KEY .Renviron file provided located standard location home directory. also possible manually edit .Renviron file. access key specific never shared made publicly accessible.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"set_ebirdst_access_key(key, overwrite = FALSE)"},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"key character; API key obtained filling form https://ebird.org/st/request. overwrite logical; existing EBIRDST_KEY overwritten already set .Renviron.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"Edits .Renviron, returns path file invisibly.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/set_ebirdst_access_key.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Store the eBird Status and Trends access key — set_ebirdst_access_key","text":"","code":"if (FALSE) { # \\dontrun{ # save the api key, replace XXXXXX with your actual key set_ebirdst_access_key(\"XXXXXX\") } # }"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert Trends Data Products to points or circles — vectorize_trends","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"eBird trends data stored tabular format, row gives trend estimate single cell 27 km x 27 km equal area grid. many applications, explicitly spatial format useful. function uses cell center coordinates convert tabular trend estimates points circles sf format. Trends can converted points circles areas roughly proportional relative abundance within 27 km grid cell. abundance-scaled circles used produce trends maps eBird Status Trends website.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"vectorize_trends(trends, output = c(\"circles\", \"points\"), crs = 4326)"},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"trends data frame; trends data single species returned load_trends(). output character; \"points\" outputs spatial points \"circles\" outputs circles areas roughly proportional relative abundance within 27 km grid cell. crs character sf crs object; coordinate reference system output results . points, unprojected latitude-longitude coordinates (default) typical, circles use whatever equal area CRS intend use mapping data otherwise \"circles\" appear skewed.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"Vectorized trends data sf object.","code":""},{"path":"https://ebird.github.io/ebirdst/reference/vectorize_trends.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert Trends Data Products to points or circles — vectorize_trends","text":"","code":"if (FALSE) { # \\dontrun{ # download example trends data if it hasn't already been downloaded ebirdst_download_trends(\"yebsap-example\") # load trends trends <- load_trends(\"yebsap-example\") # vectorize as points vectorize_trends(trends, \"points\") # vectorize as circles vectorize_trends(trends, \"circles\", crs = \"+proj=eqearth\") } # }"},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420231","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.1","title":"ebirdst 4.2023.1","text":"Removed functions previously listed deprecated defunct (abundance_palette(), ebirdst_download(), ebirdst_extent(), ebirdst_habitat(), ebirdst_ppms(), ebirdst_ppms_ts(), ebirdst_subset(), load_pds(), load_pis(), load_predictions(), load_stixels(), parse_raster_dates(), plot_pds(), plot_pis(), project_extent(), stixelize()); unavailable erroring since least v3.2022.1 Backend approach file download refactored -demand first approach list_available_pis() longer downloads every predictor importance raster determine availability, pi_rangewide.csv http fallback VPNs block https now also applies file downloads, just file listings Errors data can’t found -demand now include function-specific guidance, e.g. pointing list_available_pis() Various small bug fixes typos discovered Claude Code","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-420230","dir":"Changelog","previous_headings":"","what":"ebirdst 4.2023.0","title":"ebirdst 4.2023.0","text":"CRAN release: 2026-07-20 Transition load_*() functions download directly rather call ebirdst_download_status() Converted vignettes Quarto moved website-pkgdown articles; package longer ships built-vignettes CRAN (documentation lives https://ebird.github.io/ebirdst/) Add ebirdst_regional_stats() load regional summary statistics species Add ebirdst_data_inventory() ebirdst_delete() manage files downloaded ebirdst Move air auto-formatting jarl linting Efficiency improvements grid_sample() grid_sample_stratified() gains cell_quantile_cap argument limit many observations single chronically -sampled site (e.g. bird feeder) can contribute","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320231","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.1","title":"ebirdst 3.2023.1","text":"CRAN release: 2025-10-19 added function generate abundance-scaled circles trends fixed bug preventing tibbles passed grid sampling functions clarified documentation sampling function fixed bug get_species() Yellow-bellied Sapsucker","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320230","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2023.0","title":"ebirdst 3.2023.0","text":"CRAN release: 2025-05-07 update 2023 data release add capability download load data coverage layers Northern Goshawk species code incorrect VPNs downloading https raises error, switch http cases update vignettes: add links YouTube, expand applications, add API vignette","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320223","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.3","title":"ebirdst 3.2022.3","text":"CRAN release: 2024-03-05 arrow back CRAN, move Suggests back Imports add 6 new species Australia","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320222","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.2","title":"ebirdst 3.2022.2","text":"CRAN release: 2024-02-23 switch terminology “trajectory” “migration chronology” ensure rasterize_trends() works older versions terra (issue #7) move arrow package Suggests back CRAN (see https://github.com/apache/arrow/issues/39806)","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320221","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.1","title":"ebirdst 3.2022.1","text":"CRAN release: 2023-12-08 Documented functions deprecated defunct relative version 2.2021.3 topics ebirdst-defunct ebirdst-deprecated added back package. allows packages conditionally reference 2.2021.3 installed still passing CRAN checks.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-320220","dir":"Changelog","previous_headings":"","what":"ebirdst 3.2022.0","title":"ebirdst 3.2022.0","text":"CRAN release: 2023-11-15 new 2022 status data trends data released first time! major overhaul allow targeting downloading data stixel-level results (PPMS/PIs/PDs) removed, replaced spatialized raster versions restart required updating API key change package-level documentation per roxygen2 suggestions","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220213","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.3","title":"ebirdst 2.2021.3","text":"CRAN release: 2023-05-09 fix bug causing stixels missing bounds raise error ebirdst_habitat() add function estimate MCC-F1 ebirdst_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220212","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.2","title":"ebirdst 2.2021.2","text":"CRAN release: 2023-04-27 add robust grid sampling function.","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220211","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.1","title":"ebirdst 2.2021.1","text":"CRAN release: 2023-04-06 release final batch 300 species 2021 bringing total 2,282","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-220210","dir":"Changelog","previous_headings":"","what":"ebirdst 2.2021.0","title":"ebirdst 2.2021.0","text":"CRAN release: 2023-01-18 transition using raster terra handling raster data move following packages Imports Suggests: gbm, mgcv, precrec, PresenceAbsence move package eBird GitHub organization https://github.com/ebird/ebirdst","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120213","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.3","title":"ebirdst 1.2021.3","text":"CRAN release: 2023-01-11 patch fix bug introduced last release causing missing config files data downloads [issue #44]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120212","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.2","title":"ebirdst 1.2021.2","text":"CRAN release: 2023-01-06 fix bug causing species base code downloaded together, e.g. leafly also downloads leafly2 [issue #43]","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120211","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.1","title":"ebirdst 1.2021.1","text":"CRAN release: 2022-12-07 fix bug extent load_fac_map_parameters(), GitHub issue #40 use dynamic PAT cutoff PPM calculations update species list account second release eBird data year","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120210","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2021.0","title":"ebirdst 1.2021.0","text":"CRAN release: 2022-11-09 update v2021 eBird Status Trends data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120201","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.1","title":"ebirdst 1.2020.1","text":"CRAN release: 2022-07-08 CRAN checks found files created left behind ~/Desktop, relocated test files tempdir() deleting test completion withr::defer()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-120200","dir":"Changelog","previous_headings":"","what":"ebirdst 1.2020.0","title":"ebirdst 1.2020.0","text":"CRAN release: 2022-07-07 major update align new eBird Status Trends API update align 2020 eBird Status Data Products transition rappdirs tools::R_user_dir() handling download directories new vignettes","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-035","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.5","title":"ebirdst 0.3.5","text":"CRAN release: 2022-04-01 bug fix: API update causing data downloads fail","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-034","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.4","title":"ebirdst 0.3.4","text":"CRAN release: 2022-03-16 rename master branch main GitHub requires different download path example data","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-033","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.3","title":"ebirdst 0.3.3","text":"CRAN release: 2021-11-12 move example data GitHub","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-032","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.2","title":"ebirdst 0.3.2","text":"CRAN release: 2021-09-15 try prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-031-1","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.1","title":"ebirdst 0.3.1","text":"CRAN release: 2021-08-18 prevent tests examples leaving files behind pass CRAN checks","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-030","dir":"Changelog","previous_headings":"","what":"ebirdst 0.3.0","title":"ebirdst 0.3.0","text":"CRAN release: 2021-08-10 add support new data structures used 2020 eBird Status Trends functionality handle partial dependence data added overhaul package API intuitive streamlined documentation vignettes updated","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-022","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.2","title":"ebirdst 0.2.2","text":"CRAN release: 2021-01-16 add support variable ensemble support compute_ppms()","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-021","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.1","title":"ebirdst 0.2.1","text":"CRAN release: 2020-03-23 bug fix: corrected date types seasonal definitions bug fix: fixed possibility ebirdst_extent produce invalid date (day 366 2015) added import pipe operator velox archived, removed dependency Suggests fasterize archived, removed dependency Imports","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-020","dir":"Changelog","previous_headings":"","what":"ebirdst 0.2.0","title":"ebirdst 0.2.0","text":"CRAN release: 2020-02-26 change maintainer Matthew Strimas-Mackey update access 2019 status trends data partial dependence data longer available, references PDs removed bug fix: load_raster() gave incorrect names seasonal rasters bug fix: didn’t properly implement quantile binning date_to_st_week() gets status trends week give vector dates","code":""},{"path":"https://ebird.github.io/ebirdst/news/index.html","id":"ebirdst-010","dir":"Changelog","previous_headings":"","what":"ebirdst 0.1.0","title":"ebirdst 0.1.0","text":"CRAN release: 2019-04-04 first CRAN release","code":""}] diff --git a/man/ebirdst_runs.Rd b/man/ebirdst_runs.Rd index 23a90b3..19d9d28 100644 --- a/man/ebirdst_runs.Rd +++ b/man/ebirdst_runs.Rd @@ -14,16 +14,16 @@ species \item \code{is_resident}: classifies this species a resident or a migrant. \item \code{breeding_quality}: breeding season quality. \item \code{breeding_start}: breeding season start date. -\item \code{breeding_end}: breeding season start date. +\item \code{breeding_end}: breeding season end date. \item \code{nonbreeding_quality}: non-breeding season quality. \item \code{nonbreeding_start}: non-breeding season start date. -\item \code{nonbreeding_end}: non-breeding season start date. +\item \code{nonbreeding_end}: non-breeding season end date. \item \code{postbreeding_migration_quality}: post-breeding season quality. \item \code{postbreeding_migration_start}: post-breeding season start date. -\item \code{postbreeding_migration_end}: post-breeding season start date. +\item \code{postbreeding_migration_end}: post-breeding season end date. \item \code{prebreeding_migration_quality}: pre-breeding season quality. \item \code{prebreeding_migration_start}: pre-breeding season start date. -\item \code{prebreeding_migration_end}: pre-breeding season start date. +\item \code{prebreeding_migration_end}: pre-breeding season end date. \item \code{resident_quality}: resident quality. \item \code{resident_start}: for resident species, the year-round start date. \item \code{resident_end}: for resident species, the year-round end date. @@ -59,11 +59,11 @@ Trends results for each species. } \details{ For the Status Data Products, the dates defining the boundaries of the -seasons are provided in additional to a quality rating from 0-3 for each +seasons are provided in addition to a quality rating from 0-3 for each season. These dates and quality ratings are assigned through a process of \href{https://science.ebird.org/status-and-trends/faq#seasons}{expert review}. -expert review. Note that missing dates imply that a season failed expert -review for that species within that season. +Note that missing dates imply that a season failed expert review for that +species within that season. Trends Data Products are only available for a subset of species, indicated by the \code{has_trends} variable, and for each species the trends is estimated for a diff --git a/man/load_data_coverage.Rd b/man/load_data_coverage.Rd index e275a2c..00726af 100644 --- a/man/load_data_coverage.Rd +++ b/man/load_data_coverage.Rd @@ -6,7 +6,7 @@ \usage{ load_data_coverage( product = c("spatial-coverage", "selection-probability"), - weeks, + weeks = NULL, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() diff --git a/man/load_fac_map_parameters.Rd b/man/load_fac_map_parameters.Rd index b128181..dd4ae85 100644 --- a/man/load_fac_map_parameters.Rd +++ b/man/load_fac_map_parameters.Rd @@ -44,7 +44,7 @@ raster in the custom projection \item \code{fa_extent_projected}: the extent in projected (Equal Earth) coordinates \item \code{weekly_bins}/\code{weekly_labels}: weekly abundance bins and labels for the full annual cycle -\item \code{seasonal_bins}/`seasonal_labels: seasonal abundance bins and labels for +\item \code{seasonal_bins}/\code{seasonal_labels}: seasonal abundance bins and labels for the full annual cycle } } diff --git a/man/load_ranges.Rd b/man/load_ranges.Rd index feb59d5..63f543a 100644 --- a/man/load_ranges.Rd +++ b/man/load_ranges.Rd @@ -40,7 +40,7 @@ Defaults to \code{interactive()}, so downloads are silent in non-interactive sessions (e.g. scripts and R Markdown).} } \value{ -An \code{sf} update containing the seasonal range boundaries, with each +An \code{sf} object containing the seasonal range boundaries, with each season provided as a different feature. } \description{ From 0cfa99fb6844a8bd5c099e3d7f6345f5dc2d270b Mon Sep 17 00:00:00 2001 From: Matt Strimas-Mackey Date: Thu, 20 Aug 2026 14:39:14 -0700 Subject: [PATCH 4/4] bunch of tidying for on demand downloading --- NEWS.md | 10 +- R/download.R | 9 + R/fetch.R | 320 ++++++++++++++++----- R/load.R | 95 ++++-- R/manage.R | 5 + R/utils.R | 8 +- cran-comments.md | 8 +- docs/articles/status.html | 37 +-- docs/articles/status.md | 35 --- docs/news/index.html | 14 +- docs/news/index.md | 29 +- docs/pkgdown.yml | 2 +- docs/reference/ebirdst_data_dir.html | 2 +- docs/reference/ebirdst_data_dir.md | 2 +- docs/reference/load_data_coverage.html | 14 +- docs/reference/load_data_coverage.md | 15 +- docs/search.json | 2 +- man/load_data_coverage.Rd | 14 +- tests/testthat/test_fetch.R | 382 ++++++++++++++++++++++++- tests/testthat/test_loading.R | 58 ++++ tests/testthat/test_manage.R | 42 +++ tests/testthat/test_sample.R | 9 + tests/testthat/test_trends.R | 22 ++ tests/testthat/test_utils.R | 23 ++ vignettes/articles/status.qmd | 1 + 25 files changed, 935 insertions(+), 223 deletions(-) diff --git a/NEWS.md b/NEWS.md index 703153a..a30aa2a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -9,9 +9,15 @@ since at least v3.2022.1 - Backend approach to file download has been refactored to an on-demand first approach - `list_available_pis()` no longer downloads every predictor importance raster to determine availability, only `pi_rangewide.csv` -- The http fallback for VPNs that block https now also applies to file downloads, not just file listings +- The http fallback for VPNs that block https now also applies to file downloads, not just file listings. The fallback is only attempted when https fails to reach the server at all, never when the server responds, so the access key isn't sent over an unencrypted connection unnecessarily - Errors for data that can't be found on-demand now include function-specific guidance, e.g. pointing to `list_available_pis()` -- Various small bug fixes and typos discovered by Claude Code +- Files are now downloaded to a temporary file and only moved into place once the transfer completes. Previously a transfer that was cut short part way left a partial file behind, which was treated as a completed download and never re-downloaded; a forced re-download that failed also deleted the existing local copy of the file +- Downloads that fail for a reason other than the data not being available, e.g. a dropped connection, now raise an error saying so rather than reporting the data as missing +- The access key is no longer included in download error messages. The key is passed to the API in the query string of the request URL, and errors from failed downloads quoted that URL, so users reporting a download problem were inadvertently sharing their private key. Download errors now report the reason for the failure with the key redacted +- `vectorize_trends()` now assigns the smallest circle radius to locations with zero relative abundance; previously these locations were given a missing radius +- `ebirdst_palettes()` now requires `n` to be a whole number, rather than accepting a value such as `n = 10.5` +- `ebirdst_regional_stats()` no longer prints a message while downloading +- Various small bug fixes and typos # ebirdst 4.2023.0 diff --git a/R/download.R b/R/download.R index 3234ae7..eb029fe 100644 --- a/R/download.R +++ b/R/download.R @@ -236,6 +236,15 @@ ebirdst_download_trends <- function( keys <- list_object_keys(species_code = s, dataset = "trends") # only trends files keys <- keys[stringr::str_detect(keys, "/trends/")] + if (length(keys) == 0) { + stop( + "No Trends Data Products are available for ", + s, + ", despite it being identified as having trends estimates in ", + "ebirdst_runs. Please report this at ", + "https://github.com/ebird/ebirdst/issues" + ) + } # path to data package run_path <- file.path(path, ebirdst_version()[["trends_version_year"]], s) diff --git a/R/fetch.R b/R/fetch.R index d54f349..c2e296c 100644 --- a/R/fetch.R +++ b/R/fetch.R @@ -9,8 +9,10 @@ # internal ---- # session-cached API base url; some VPNs block https to the download API, so -# a fallback to http is cached here once discovered so it isn't re-probed on -# every request +# a fallback to http is cached here once a request over http is known to have +# succeeded, to avoid re-probing on every request. the access key is passed in +# the query string, so the downgrade is only ever cached on success and only +# for a connection-level failure (see try_url()) ebirdst_env <- new.env(parent = emptyenv()) ebirdst_env$api_base_url <- "https://st-download.ebird.org/v1" @@ -18,16 +20,119 @@ api_base_url <- function() { return(ebirdst_env$api_base_url) } +http_url <- function(url) { + return(sub("^https://", "http://", url)) +} + use_http_fallback <- function() { - ebirdst_env$api_base_url <- sub( - "^https://", - "http://", - ebirdst_env$api_base_url - ) + ebirdst_env$api_base_url <- http_url(ebirdst_env$api_base_url) return(invisible(ebirdst_env$api_base_url)) } +# the access key is passed to the API in the query string of the request url, and +# both download.file() and read_json() name that url in the conditions they +# raise. those messages get pasted into bug reports and emails, so the key has to +# be stripped out of anything the package passes on to the user. the query +# parameter is matched rather than the key itself so that this works even when no +# key is set locally, e.g. for the example data; the key is then also matched +# literally in case it ever appears somewhere the query string pattern doesn't +redact_access_key <- function(x) { + redacted <- stringr::str_replace_all( + x, + "([?&])key=[^&'\"\\s]*", + "\\1key=" + ) + + # Sys.getenv() is used directly because get_ebirdst_access_key() errors when + # no key is set, and redacting must never itself be a point of failure + access_key <- Sys.getenv("EBIRDST_KEY") + if (nzchar(access_key)) { + redacted <- stringr::str_replace_all( + redacted, + stringr::fixed(access_key), + "" + ) + } + + return(redacted) +} + + +# attempt to access a url, returning the value of `expr` (NULL on failure) +# alongside a flag indicating whether the failure was an http status error. +# an http status error means the server was reached and responded, so the +# object simply isn't available; any other failure (dns, tls, proxy, timeout) +# is a connection-level problem and is the only case where retrying over http +# could help. this distinction matters because the access key travels in the +# query string, so http must never be probed for a request that already got a +# response over https +try_url <- function(expr) { + messages <- character() + value <- withCallingHandlers( + tryCatch( + expr, + error = function(e) { + messages <<- c(messages, conditionMessage(e)) + return(NULL) + } + ), + warning = function(w) { + messages <<- c(messages, conditionMessage(w)) + invokeRestart("muffleWarning") + } + ) + + # note that a connection-level failure reports "status was ''" + # without the "HTTP " prefix, so this matches responses only + http_status <- any(stringr::str_detect(messages, "HTTP status")) + + # the underlying message is the only clue as to why a request failed, so it's + # worth reporting, but only ever redacted + reason <- redact_access_key(paste(unique(messages), collapse = "; ")) + + return(list(value = value, http_status = http_status, reason = reason)) +} + + +# object keys are appended to the data directory to give the local path of a +# downloaded file, and most of them come from the API listing rather than from +# the user, so check that none of them could write outside the data directory +# before using one as a path +check_object_keys <- function(keys) { + stopifnot(is.character(keys), length(keys) >= 1, !anyNA(keys)) + + segments <- strsplit(keys, "[/\\\\]") + traversal <- vapply(segments, function(x) any(x == ".."), logical(1)) + absolute <- stringr::str_detect(keys, "^([/\\\\]|[A-Za-z]:)") + invalid <- keys[traversal | absolute | keys == ""] + if (length(invalid) > 0) { + stop( + "The following data files have invalid names:\n ", + paste(invalid, collapse = "\n ") + ) + } + + return(invisible(keys)) +} + + +# downloads are written to a temporary file with this suffix alongside their +# destination and only moved into place once complete, so the suffix is defined +# here rather than inline in download_files(): ebirdst_data_inventory() needs it +# to recognize and ignore a partial download left behind by a session that was +# killed mid-transfer +partial_suffix <- ".part" + +partial_download_path <- function(path) { + return(paste0(path, partial_suffix)) +} + +is_partial_download <- function(path) { + return(stringr::str_ends(path, stringr::fixed(partial_suffix))) +} + + # resolve a species name/code to its eBird species code; mirrors the # validation in get_species_path() but doesn't require path to already exist resolve_species <- function(species) { @@ -67,6 +172,19 @@ trends_key <- function(species_code, ...) { } +# request the object listing for a species from a given API base url; returns +# the result of try_url(), so the caller can tell a missing listing apart from +# an unreachable server +read_object_list <- function(version_year, species_code, base_url) { + key <- get_ebirdst_access_key() + list_obj_url <- stringr::str_glue( + "{base_url}/list-obj/{version_year}/", + "{species_code}?key={key}" + ) + return(try_url(jsonlite::read_json(list_obj_url, simplifyVector = TRUE))) +} + + # list all object keys available for a species, for callers that don't # already know the exact key(s) they want: flag/pattern-based selection in # ebirdst_download_status()/ebirdst_download_trends(), and PI availability in @@ -90,39 +208,41 @@ list_object_keys <- function(species_code, dataset = c("status", "trends")) { ) keys <- readLines(fl) } else { - key <- get_ebirdst_access_key() - list_obj_url <- stringr::str_glue( - "{api_base_url()}/list-obj/{version_year}/", - "{species_code}?key={key}" - ) - keys <- tryCatch( - suppressWarnings({ - jsonlite::read_json(list_obj_url, simplifyVector = TRUE) - }), - error = function(e) NULL - ) - if (is.null(keys)) { - # try http instead in case of ssl issues on vpn - use_http_fallback() - list_obj_url <- stringr::str_glue( - "{api_base_url()}/list-obj/{version_year}/", - "{species_code}?key={key}" + attempt <- read_object_list(version_year, species_code, api_base_url()) + keys <- attempt$value + + # some vpns block https to the download api, so retry over http, but only + # if https failed to connect at all rather than returning a response + retry_http <- is.null(keys) && + !attempt$http_status && + startsWith(api_base_url(), "https://") + if (retry_http) { + attempt <- read_object_list( + version_year, + species_code, + http_url(api_base_url()) ) - keys <- tryCatch( - suppressWarnings({ - jsonlite::read_json(list_obj_url, simplifyVector = TRUE) - }), - error = function(e) NULL - ) - if (is.null(keys)) { - stop( - "Cannot access Status and Trends data URL. Ensure that you have ", - "a working internet connection and a valid API key for the ", - "Status and Trends data. Note that the API keys expire after ", - "6 months, so you may need to update your key. ", - "Visit https://ebird.org/st/request" - ) + keys <- attempt$value + # only cache the downgrade now that it's known to work + if (!is.null(keys)) { + use_http_fallback() + } + } + + if (is.null(keys)) { + reason <- if (nzchar(attempt$reason)) { + paste0("\nThe following error occurred:\n ", attempt$reason) + } else { + "" } + stop( + "Cannot access Status and Trends data URL. Ensure that you have ", + "a working internet connection and a valid API key for the ", + "Status and Trends data. Note that the API keys expire after ", + "6 months, so you may need to update your key. ", + "Visit https://ebird.org/st/request", + reason + ) } # remove web_download folder @@ -252,6 +372,7 @@ fetch_data <- function( hint = NULL, report_existing = FALSE ) { + check_object_keys(keys) ensure_data_dir(path) dest_paths <- file.path(path, keys) exists <- file.exists(dest_paths) @@ -278,13 +399,32 @@ fetch_data <- function( dir.create(d, showWarnings = FALSE, recursive = TRUE) } - download_files( + result <- download_files( object_key_url(to_fetch), fetch_dest, to_fetch, show_progress = show_progress ) + # a download that failed for any reason other than the data not existing, e.g. + # a dropped connection, isn't something the caller can fix by requesting + # different data, so it gets its own error rather than the hint below. any + # local copy of these files is left as it was + failed <- !result$success & !result$not_found + if (any(failed)) { + detail <- ifelse( + is.na(result$reason[failed]) | result$reason[failed] == "", + to_fetch[failed], + paste0(to_fetch[failed], ": ", result$reason[failed]) + ) + stop( + "The following files failed to download:\n ", + paste(detail, collapse = "\n "), + "\nThis is usually a temporary problem, check your internet connection ", + "and try again." + ) + } + missing <- keys[!file.exists(dest_paths)] if (length(missing) > 0) { msg <- paste0( @@ -301,18 +441,37 @@ fetch_data <- function( } -# download files from src urls to local destination paths; on failure, retry -# once over http in case https is being blocked (e.g. by a VPN), caching the -# fallback for the rest of the session if it succeeds. a file that still -# can't be downloaded after the retry is simply left missing on disk, so -# fetch_data() can report it (with its caller-specific hint) rather than -# failing here with a generic message. `keys` is used only to report progress +# download files from src urls to local destination paths, returning the outcome +# for each file: `success`, `not_found` for the files the server responded to +# with an http status error, meaning the data simply isn't there as opposed to +# the download failing for some other reason, and `reason`, the redacted message +# from the failed attempt (NA where the download succeeded). fetch_data() needs +# these to report a useful error. `keys` is used only to report progress +# +# each file is downloaded to a temporary file alongside its destination and only +# moved into place once the transfer has completed, because download.file() +# leaves a partial file behind when a transfer is cut short part way, and +# deletes any existing destination file when it fails. the temporary file is a +# sibling of the destination rather than in tempdir() so the rename stays within +# one filesystem, and every temporary file is removed on any exit from this +# function, including an error or interrupt +# +# if https can't be reached at all, retry once over http in case it's being +# blocked (e.g. by a VPN), caching the fallback for the rest of the session only +# once it's known to work download_files <- function(src, dest, keys, show_progress) { n_files <- length(src) old_timeout <- getOption("timeout") options(timeout = max(3000, old_timeout)) on.exit(options(timeout = old_timeout), add = TRUE) + tmp <- partial_download_path(dest) + on.exit(unlink(tmp), add = TRUE) + + success <- rep(FALSE, n_files) + not_found <- rep(FALSE, n_files) + reason <- rep(NA_character_, n_files) + for (i in seq_len(n_files)) { if (show_progress) { message(stringr::str_glue( @@ -320,40 +479,49 @@ download_files <- function(src, dest, keys, show_progress) { "{basename(keys[i])}" )) } - dl_response <- tryCatch( - suppressWarnings( - utils::download.file(src[i], dest[i], quiet = TRUE, mode = "wb") - ), - error = function(e) 1L + attempt <- try_url( + utils::download.file(src[i], tmp[i], quiet = TRUE, mode = "wb") ) - if ( - dl_response != 0 && stringr::str_starts(src[i], "https://st-download") - ) { - use_http_fallback() - src[i:n_files] <- sub("^https://", "http://", src[i:n_files]) - tryCatch( - suppressWarnings( - utils::download.file(src[i], dest[i], quiet = TRUE, mode = "wb") - ), - error = function(e) 1L + ok <- identical(attempt$value, 0L) + + # an http status, or a partial file, means the server responded, so only a + # failure that left nothing at all behind is a connection-level problem + # worth retrying over http + retry_http <- !ok && + !attempt$http_status && + !file.exists(tmp[i]) && + stringr::str_starts(src[i], "https://st-download") + if (retry_http) { + attempt <- try_url( + utils::download.file( + http_url(src[i]), + tmp[i], + quiet = TRUE, + mode = "wb" + ) ) + ok <- identical(attempt$value, 0L) + # only cache the downgrade, and apply it to the files still to come, + # once it's known to work + if (ok) { + use_http_fallback() + is_api <- stringr::str_starts(src, "https://st-download") + src[is_api] <- http_url(src[is_api]) + } } - } - - return(invisible(n_files)) -} - -# check that the geotiff driver is installed; required to load any of the -# raster data products -check_gtiff_support <- function() { - drv <- terra::gdal(drivers = TRUE) - drv <- drv$name[stringr::str_detect(drv$can, "read")] - if (!"GTiff" %in% drv) { - stop( - "GDAL does not have GeoTIFF support. GeoTIFF support is required to ", - "load Status and Trends raster data." - ) + if (ok) { + success[i] <- file.rename(tmp[i], dest[i]) + } else { + not_found[i] <- attempt$http_status + reason[i] <- attempt$reason + unlink(tmp[i]) + } } - return(invisible(TRUE)) + + return(invisible(list( + success = success, + not_found = not_found, + reason = reason + ))) } diff --git a/R/load.R b/R/load.R index 77ae167..325274c 100644 --- a/R/load.R +++ b/R/load.R @@ -353,11 +353,11 @@ load_trends <- function( #' #' @param product character; data coverage raster product to load: spatial #' coverage or site selection probability. -#' @param weeks character; one or more weeks (expressed in `"MM-DD"` format) to -#' load the raster layers for. If this argument is not specified, all -#' downloaded weeks will be loaded. **Note that these rasters are quite large -#' so it's recommended to only load a small number of weeks of data at the -#' same time.** +#' @param weeks character; one or more of the 52 weeks (expressed in `"MM-DD"` +#' format) to load the raster layers for. Layers are always returned in +#' chronological order regardless of the order given here. **Note that these +#' rasters are quite large (roughly 50 MB per week) so it's recommended to +#' only load a small number of weeks of data at the same time.** #' @inheritParams ebirdst_download_status #' #' @details In addition to the species-specific data products, the eBird Status @@ -383,17 +383,22 @@ load_trends <- function( #' # load a single week of site selection probability data #' load_data_coverage("selection-probability", weeks = "01-04") #' -#' # load all weeks of spatial coverage data +#' # load multiple weeks of spatial coverage data #' load_data_coverage("spatial-coverage", weeks = c("01-04", "01-11")) #' } load_data_coverage <- function( product = c("spatial-coverage", "selection-probability"), - weeks = NULL, + weeks, path = ebirdst_data_dir(), force = FALSE, show_progress = interactive() ) { - stopifnot(is.null(weeks) || is.character(weeks)) + stopifnot( + !missing(weeks), + is.character(weeks), + length(weeks) >= 1, + !anyNA(weeks) + ) stopifnot(is.character(path), length(path) == 1) stopifnot(is_flag(force), is_flag(show_progress)) product <- match.arg(product) @@ -403,19 +408,18 @@ load_data_coverage <- function( # generate vector of valid weeks valid_weeks <- as.Date(paste(2018, seq(4, 366, 7)), format = "%Y %j") valid_weeks <- format(valid_weeks, format = "%m-%d") - if (!is.null(weeks) && !all(weeks %in% valid_weeks)) { + if (!all(weeks %in% valid_weeks)) { stop( "The following weeks are invalid: ", - paste(weeks[!weeks %in% valid_weeks], collapse = ", "), + paste(unique(weeks[!weeks %in% valid_weeks]), collapse = ", "), "\n", "Valid weeks include: ", paste(valid_weeks, collapse = ", ") ) } - # subset to selected weeks - if (!is.null(weeks)) { - valid_weeks <- intersect(valid_weeks, weeks) - } + + # subset to selected weeks, keeping them in chronological order + valid_weeks <- intersect(valid_weeks, weeks) valid_weeks <- paste( ebirdst_version()[["status_version_year"]], valid_weeks, @@ -1021,26 +1025,61 @@ load_ppm <- function( # internal ---- -# identify which predictors have pi rasters available for a species. prefers -# a single remote listing call, which requires no downloads, and falls back -# to globbing any pi tifs already downloaded locally if the listing can't be -# reached (e.g. offline). filtering on "_pi_(occurrence|count)_" excludes the -# other tifs that live alongside the pi rasters in the pis/ directory, e.g. -# n-folds-modeled, start_day_of_year, end_day_of_year +# check that the geotiff driver is installed; required to load any of the +# raster data products +check_gtiff_support <- function() { + drv <- terra::gdal(drivers = TRUE) + drv <- drv$name[stringr::str_detect(drv$can, "read")] + if (!"GTiff" %in% drv) { + stop( + "GDAL does not have GeoTIFF support. GeoTIFF support is required to ", + "load Status and Trends raster data." + ) + } + return(invisible(TRUE)) +} + + +# identify which predictors have pi rasters available for a species. the remote +# listing is the authoritative source because it covers every raster in the data +# package rather than just the ones already downloaded, so it's only bypassed +# when it can't be reached, e.g. offline or with an expired access key. in that +# case the files already on disk are all there is to go on and the answer may be +# incomplete, so the failure is reported rather than silently swallowed. +# filtering on "_pi_(occurrence|count)_" excludes the other tifs that live +# alongside the pi rasters in the pis/ directory, e.g. n-folds-modeled, +# start_day_of_year, end_day_of_year available_pi_predictors <- function(species_code, path) { pi_pattern <- "_pi_(occurrence|count)_" - tifs <- tryCatch( - { - keys <- list_object_keys(species_code, dataset = "status") - keys <- keys[stringr::str_detect(keys, "/pis/")] - basename(keys[stringr::str_detect(basename(keys), pi_pattern)]) - }, - error = function(e) NULL + listing <- tryCatch( + list_object_keys(species_code, dataset = "status"), + error = function(e) e ) - if (is.null(tifs)) { + + if (inherits(listing, "error")) { pis_path <- file.path(path, status_key(species_code, "pis")) tifs <- list.files(pis_path, pattern = paste0(pi_pattern, ".*\\.tif$")) + + # with no listing and nothing downloaded there's no basis for an answer, so + # report the underlying problem instead of an empty result + if (length(tifs) == 0) { + stop( + "The predictors with PI data could not be determined because the list ", + "of available data could not be accessed:\n ", + conditionMessage(listing) + ) + } + warning( + "The list of available data could not be accessed, so only PI data that ", + "has already been downloaded is reported and the list may be ", + "incomplete. The following error occurred:\n ", + conditionMessage(listing), + call. = FALSE + ) + } else { + keys <- listing[stringr::str_detect(listing, "/pis/")] + tifs <- basename(keys[stringr::str_detect(basename(keys), pi_pattern)]) } preds <- stringr::str_remove(tifs, paste0("^[^_]+", pi_pattern)) diff --git a/R/manage.R b/R/manage.R index ea70053..2fe5a9a 100644 --- a/R/manage.R +++ b/R/manage.R @@ -55,7 +55,11 @@ ebirdst_data_inventory <- function(path = ebirdst_data_dir()) { for (sp_dir in sp_dirs) { sp_code <- basename(sp_dir) + + # a partial download left behind by a session that was killed mid-transfer + # isn't data, so it shouldn't be counted or have its size reported all_files <- list.files(sp_dir, recursive = TRUE, full.names = TRUE) + all_files <- all_files[!is_partial_download(all_files)] # files in the trends/ subdirectory are trends data products; all others # are status data products @@ -66,6 +70,7 @@ ebirdst_data_inventory <- function(path = ebirdst_data_dir()) { recursive = TRUE, full.names = TRUE ) + trends_files <- trends_files[!is_partial_download(trends_files)] } else { trends_files <- character(0) } diff --git a/R/utils.R b/R/utils.R index fa78db1..7ecda57 100644 --- a/R/utils.R +++ b/R/utils.R @@ -118,8 +118,14 @@ get_species <- function(x) { # internal ---- is_integer <- function(x) { + # the range check has to come before as.integer(), which warns when it + # introduces NAs for values outside the range of an integer return(isTRUE( - is.numeric(x) && !anyNA(x) && all(is.finite(x)) && all(x == as.integer(x)) + is.numeric(x) && + !anyNA(x) && + all(is.finite(x)) && + all(abs(x) <= .Machine$integer.max) && + all(x == as.integer(x)) )) } diff --git a/cran-comments.md b/cran-comments.md index ebcb79a..1502584 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,9 +1,13 @@ # ebirdst 4.2023.1 +- Removed all functions previously listed as deprecated or defunct; they have been unavailable or erroring since at least v3.2022.1 - Backend approach to file download has been refactored to an on-demand first approach - `list_available_pis()` no longer downloads every predictor importance raster to determine availability, only `pi_rangewide.csv` -- The http fallback for VPNs that block https now also applies to file downloads, not just file listings +- Files are now downloaded to a temporary file and only moved into place once the transfer completes, so an interrupted download can no longer leave a partial file behind +- The http fallback for VPNs that block https now also applies to file downloads, not just file listings, and is only attempted when https fails to reach the server at all +- The access key, which is passed to the API in the query string of the request URL, is now redacted from download error messages so users reporting a problem don't inadvertently share it - Errors for data that can't be found on-demand now include function-specific guidance, e.g. pointing to `list_available_pis()` +- `vectorize_trends()` now assigns the smallest circle radius to locations with zero relative abundance, which previously got a missing radius ## Test environments @@ -17,7 +21,7 @@ 0 errors | 0 warnings | 1 notes -- NOTE: Version contains large components (4.2023.1). We've aligned our version numbers with the version numbers for the API that this package interacts with. The eBird Status and Trends data products are given a version corresponding to a year, with the current version being 2022, so we've included that year in our version number to indicate that this package only works with the 2023 version of the data. +- NOTE: Version contains large components (4.2023.1). We've aligned our version numbers with the version numbers for the API that this package interacts with. The eBird Status and Trends data products are given a version corresponding to a year, with the current version being 2023, so we've included that year in our version number to indicate that this package only works with the 2023 version of the data. ## revdepcheck results diff --git a/docs/articles/status.html b/docs/articles/status.html index 7a9da7d..43b0938 100644 --- a/docs/articles/status.html +++ b/docs/articles/status.html @@ -107,42 +107,7 @@

    Introduction to eBird Status Data Products

    Because a new version of the data products is released each year, data for multiple versions can accumulate on disk over time. Use ebirdst_data_inventory() to get a summary of all data currently downloaded, with separate rows for the Status and Trends data products for each species.

    -ebirdst_data_inventory()
    -#> eBird Status and Trends data: 30 species, 30 packages (1.5 GB)
    -#> 
    -#> 2022 Trends Data Products (9.3 MB)
    -#>   Brewer's Sparrow (brespa): 3 files, 4.0 MB
    -#>   Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB
    -#>   Sage Thrasher (sagthr): 3 files, 2.7 MB
    -#> 
    -#> 2023 Status Data Products (1.5 GB)
    -#>   Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB
    -#>   Baird's Sparrow (baispa): 6 files, 61.5 MB
    -#>   Black-headed Duck (blhduc1): 1 files, 17.5 KB
    -#>   Bobolink (boboli): 6 files, 103.5 MB
    -#>   Chestnut-collared Longspur (chclon): 6 files, 86.0 MB
    -#>   Chiloe Wigeon (chiwig1): 2 files, 23.8 MB
    -#>   Coscoroba Swan (cosswa1): 2 files, 25.8 MB
    -#>   Data Coverage (data_coverage): 2 files, 103.7 MB
    -#>   Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB
    -#>   Golden Eagle (goleag): 4 files, 49.4 MB
    -#>   Horned Lark (horlar): 2 files, 4.0 MB
    -#>   Lake Duck (lakduc1): 1 files, 17.4 KB
    -#>   Red Shoveler (redsho1): 1 files, 17.4 KB
    -#>   Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB
    -#>   Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB
    -#>   Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB
    -#>   Silver Teal (siltea1): 1 files, 17.4 KB
    -#>   Small-billed Elaenia (smbela1): 10 files, 158.6 MB
    -#>   Sprague's Pipit (sprpip): 6 files, 73.7 MB
    -#>   Surf Scoter (sursco): 2 files, 2.4 MB
    -#>   Upland Sandpiper (uplsan): 6 files, 138.5 MB
    -#>   Western Meadowlark (wesmea): 6 files, 224.1 MB
    -#>   White-crested Elaenia (whcela1): 4 files, 104.7 MB
    -#>   White-cheeked Pintail (whcpin): 1 files, 17.4 KB
    -#>   Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB
    -#>   Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB
    -#>   Yellow-billed Teal (yebtea1): 2 files, 39.0 MB
    +ebirdst_data_inventory()

    To remove data for specific species or version years, use ebirdst_delete(). When called interactively it will display a summary of the data to be removed and ask for confirmation before proceeding. To skip the prompt, use force = TRUE.

    diff --git a/docs/articles/status.md b/docs/articles/status.md index 58dec6c..8f998d4 100644 --- a/docs/articles/status.md +++ b/docs/articles/status.md @@ -114,41 +114,6 @@ for the Status and Trends data products for each species. ``` r ebirdst_data_inventory() -#> eBird Status and Trends data: 30 species, 30 packages (1.5 GB) -#> -#> 2022 Trends Data Products (9.3 MB) -#> Brewer's Sparrow (brespa): 3 files, 4.0 MB -#> Sagebrush Sparrow (sagspa1): 3 files, 2.5 MB -#> Sage Thrasher (sagthr): 3 files, 2.7 MB -#> -#> 2023 Status Data Products (1.5 GB) -#> Ashy-headed Goose (ashgoo1): 1 files, 17.4 KB -#> Baird's Sparrow (baispa): 6 files, 61.5 MB -#> Black-headed Duck (blhduc1): 1 files, 17.5 KB -#> Bobolink (boboli): 6 files, 103.5 MB -#> Chestnut-collared Longspur (chclon): 6 files, 86.0 MB -#> Chiloe Wigeon (chiwig1): 2 files, 23.8 MB -#> Coscoroba Swan (cosswa1): 2 files, 25.8 MB -#> Data Coverage (data_coverage): 2 files, 103.7 MB -#> Elegant Crested-Tinamou (elctin1): 58 files, 177.2 MB -#> Golden Eagle (goleag): 4 files, 49.4 MB -#> Horned Lark (horlar): 2 files, 4.0 MB -#> Lake Duck (lakduc1): 1 files, 17.4 KB -#> Red Shoveler (redsho1): 1 files, 17.4 KB -#> Rosy-billed Pochard (robpoc1): 2 files, 27.0 MB -#> Rufous-chested Dotterel (rucdot1): 2 files, 449.8 KB -#> Ruddy-headed Goose (ruhgoo1): 2 files, 17.5 MB -#> Silver Teal (siltea1): 1 files, 17.4 KB -#> Small-billed Elaenia (smbela1): 10 files, 158.6 MB -#> Sprague's Pipit (sprpip): 6 files, 73.7 MB -#> Surf Scoter (sursco): 2 files, 2.4 MB -#> Upland Sandpiper (uplsan): 6 files, 138.5 MB -#> Western Meadowlark (wesmea): 6 files, 224.1 MB -#> White-crested Elaenia (whcela1): 4 files, 104.7 MB -#> White-cheeked Pintail (whcpin): 1 files, 17.4 KB -#> Yellow-billed Pintail (yebpin1): 2 files, 31.5 MB -#> Yellow-bellied Sapsucker (yebsap-example): 52 files, 9.9 MB -#> Yellow-billed Teal (yebtea1): 2 files, 39.0 MB ``` To remove data for specific species or version years, use diff --git a/docs/news/index.html b/docs/news/index.html index 6fa6e52..fb74590 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -46,10 +46,20 @@

    ebirdst 4.2
  • list_available_pis() no longer downloads every predictor importance raster to determine availability, only pi_rangewide.csv
  • -
  • The http fallback for VPNs that block https now also applies to file downloads, not just file listings
  • +
  • The http fallback for VPNs that block https now also applies to file downloads, not just file listings. The fallback is only attempted when https fails to reach the server at all, never when the server responds, so the access key isn’t sent over an unencrypted connection unnecessarily
  • Errors for data that can’t be found on-demand now include function-specific guidance, e.g. pointing to list_available_pis()
  • -
  • Various small bug fixes and typos discovered by Claude Code
  • +
  • Files are now downloaded to a temporary file and only moved into place once the transfer completes. Previously a transfer that was cut short part way left a partial file behind, which was treated as a completed download and never re-downloaded; a forced re-download that failed also deleted the existing local copy of the file
  • +
  • Downloads that fail for a reason other than the data not being available, e.g. a dropped connection, now raise an error saying so rather than reporting the data as missing
  • +
  • The access key is no longer included in download error messages. The key is passed to the API in the query string of the request URL, and errors from failed downloads quoted that URL, so users reporting a download problem were inadvertently sharing their private key. Download errors now report the reason for the failure with the key redacted
  • +
  • +vectorize_trends() now assigns the smallest circle radius to locations with zero relative abundance; previously these locations were given a missing radius
  • +
  • +ebirdst_palettes() now requires n to be a whole number, rather than accepting a value such as n = 10.5 +
  • +
  • +ebirdst_regional_stats() no longer prints a message while downloading
  • +
  • Various small bug fixes and typos
  • ebirdst 4.2023.0

    CRAN release: 2026-07-20

    diff --git a/docs/news/index.md b/docs/news/index.md index 899f509..cc6acea 100644 --- a/docs/news/index.md +++ b/docs/news/index.md @@ -15,11 +15,36 @@ no longer downloads every predictor importance raster to determine availability, only `pi_rangewide.csv` - The http fallback for VPNs that block https now also applies to file - downloads, not just file listings + downloads, not just file listings. The fallback is only attempted when + https fails to reach the server at all, never when the server + responds, so the access key isn’t sent over an unencrypted connection + unnecessarily - Errors for data that can’t be found on-demand now include function-specific guidance, e.g. pointing to [`list_available_pis()`](https://ebird.github.io/ebirdst/reference/load_pi.md) -- Various small bug fixes and typos discovered by Claude Code +- Files are now downloaded to a temporary file and only moved into place + once the transfer completes. Previously a transfer that was cut short + part way left a partial file behind, which was treated as a completed + download and never re-downloaded; a forced re-download that failed + also deleted the existing local copy of the file +- Downloads that fail for a reason other than the data not being + available, e.g. a dropped connection, now raise an error saying so + rather than reporting the data as missing +- The access key is no longer included in download error messages. The + key is passed to the API in the query string of the request URL, and + errors from failed downloads quoted that URL, so users reporting a + download problem were inadvertently sharing their private key. + Download errors now report the reason for the failure with the key + redacted +- [`vectorize_trends()`](https://ebird.github.io/ebirdst/reference/vectorize_trends.md) + now assigns the smallest circle radius to locations with zero relative + abundance; previously these locations were given a missing radius +- [`ebirdst_palettes()`](https://ebird.github.io/ebirdst/reference/ebirdst_palettes.md) + now requires `n` to be a whole number, rather than accepting a value + such as `n = 10.5` +- [`ebirdst_regional_stats()`](https://ebird.github.io/ebirdst/reference/ebirdst_regional_stats.md) + no longer prints a message while downloading +- Various small bug fixes and typos ## ebirdst 4.2023.0 diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 3ca7aad..edcb763 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -7,7 +7,7 @@ articles: articles/product-changelog: product-changelog.html articles/status: status.html articles/trends: trends.html -last_built: 2026-08-01T14:32Z +last_built: 2026-08-20T21:20Z urls: reference: https://ebird.github.io/ebirdst/reference article: https://ebird.github.io/ebirdst/articles diff --git a/docs/reference/ebirdst_data_dir.html b/docs/reference/ebirdst_data_dir.html index eddbda9..500ae44 100644 --- a/docs/reference/ebirdst_data_dir.html +++ b/docs/reference/ebirdst_data_dir.html @@ -66,7 +66,7 @@

    Value

    Examples

    ebirdst_data_dir()
    -#> [1] "/Users/mes335/projects/workshops/2026-08-04_ebirdst-workshop_rao-2026/ebirdst-data/"
    +#> [1] "/Users/mes335/data/ebirdst"