--- title: "LBI tutorial" author: "Pierre Denelle & Pieter Sanczuk" date: "`r Sys.Date()`" output: rmarkdown::html_vignette: toc: true vignette: > %\VignetteIndexEntry{LBI tutorial} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, fig.width = 4, fig.height = 4, fig.align = "center") # Packages -------------------------------------------------------------------- suppressPackageStartupMessages({ suppressWarnings({ library("latbias") library("sf") library("elevatr") library("rnaturalearth") }) }) options(tinytex.verbose = TRUE) ```
LBI stands for Latitudinal Bias Index.
The following R packages are required to build this vignette: ```{r, echo=TRUE, eval=FALSE} library("latbias") library("sf") library("elevatr") library("rnaturalearth") ```

# 1. Latitudinal Bias Index (LBI) The LBI, representing the probability to detect more pronounced latitudinal rather than longitudinal range shifts due to the polygon geometry. It is calculated as the odd-ratio of latitudinal and longitudinal distances, following this equation: $$LBI = 2\times(\frac{mean(|\frac{A_nlat}{A_nlon}|)}{1+mean(|\frac{A_nlat}{A_nlon}|)}-0.5)$$ with $A_nlat$ and $A_nlon$ denoting the geographic displacement of the centroid positions of both sets of observation in the $n^{th}$ iteration by means in the latitudinal and the longitudinal dimension. An LBI value of zero represents a perfect balanced study design, meaning that the likelihood to record more pronounced latitudinal range shifts due to the study area geometry is 0%. By contrast, an LBI value of +1 denotes a 100% probability to exclusively record latitudinal shifts as would be the case for range shift data recorded along a perfectly South-North oriented straight line, whereas and an LBI value of -1 indicates a 100% probability to exclusively record longitudinal shifts as would be the case for range shift data recorded along a perfectly East-West oriented straight line. # 2. Computing the LBI We first take the polygon delineating Sweden as an example. ```{r study_case} study_area <- rnaturalearth::ne_countries(scale = 50, continent = "Europe", country = "Sweden", type = "map_units", returnclass = "sf") study_area <- sf::st_union(study_area) ``` We then calculate the LBI with the shape of Sweden. ```{r LBI_calculation, echo = TRUE, eval = FALSE} lbi_sweden <- LBI(study_area_id = "Sweden", study_area_polygon = study_area, nobs = 10, nboot = 50, fact_location = 5, elevation = NULL) lbi_sweden ``` In addition to the geographic distance between sampled points, we can also include the difference in terms of elevation. An unprojected raster can be added with teh argument `elevation` in the function `LBI()`. ```{r LBI_elevation, echo = TRUE, eval = FALSE} # With elevation elevation_df <- elevatr::get_elev_raster(locations = st_as_sf(study_area), z = 5) lbi_elev <- LBI(study_area_id = "Sweden", study_area_polygon = study_area, nobs = 10, nboot = 10, fact_location = 5, elevation = elevation_df) ```
# 3. Plotting one windrose The argument `raw_output` allows the `LBI` function to return all bootstraps results. ```{r one_bootstrap} lbi_sweden_all <- LBI(study_area_id = "Sweden", study_area_polygon = study_area, nobs = 10, nboot = 50, fact_location = 5, elevation = NULL, raw_output = TRUE) ``` We can then select the raw results and plot the direction and speed of all observed shifts, using the function `windrose()`. ```{r windrose} test <- as.data.frame( lbi_sweden_all$all[, c("study_area_id", "distance_km", "bearing", "rep")]) test$distance_km <- as.numeric(test$distance_km) windrose(data = test, spd = "distance_km", dir = "bearing") ``` # 4. References When using the LBI R package, please cite the following reference: Sanczuk, P., Lenoir, J., Denelle, P., Rumpf, S.B., Borderieux, J., Geppert, C., Oliveira, B.F. & Staude, I.R. Global bias towards recording latitudinal range shifts. *submitted*