# Benchmark

### a comparison to known estimates

#### Koen Hufkens

This benchmark visually compares the results of `skytrackr` to results from the geolocation manual. In particular it compares the results of the SGAT and FlightR outputs to `skytrackr` approximations. The vignette isn’t run online, with rendered results included as images, however all the code can be used in a reproducible way (to track changes between updates).

# 1 SGAT

The SGAT demo includes data from the European bee-eater, recorded from a Swiss Ornithological Institute logger.

    # read the data from the geolocation manual repo
    df <- stk_read_glf(
      "https://raw.githubusercontent.com/slisovski/TheGeolocationManual/refs/heads/master/data/RawData/MerApi/14SA.glf",
       verbose = FALSE)

    # automatically screen most spurious days
    df <- df |>
      stk_screen_twl(filter = TRUE)

    # estimate upper scale value
    scale <- stk_calibrate(df)

    # set the twilight range
    # note that these values are generally larger
    # for the SOI loggers
    range <- c(1.5, 3000)

    # define land mask with a bounding box
    # and an off-shore buffer (in km), in addition
    # you can specifiy the resolution of the resulting raster
    mask <- stk_mask(
      bbox  =  c(-20, -40, 70, 70), #xmin, ymin, xmax, ymax
      buffer = 10,
      resolution = 0.5 # map grid in degrees corresponding to the buffer in km
    )

    # define a step selection distribution
    ssf <- function(x, shape = 0.7, scale = 100, tolerance = 1500){
      # normalize over expected range with km increments
      norm <- sum(stats::dgamma(1:tolerance, shape = shape, scale = scale))
      prob <- stats::dgamma(x, shape = shape, scale = scale) / norm
      return(prob)
    }

    locations <- df |>
        skytrackr(
          mask = mask,
          plot = FALSE,
          start_location = c(51.32, 11.96),
          tolerance = 1500, # in km
          scale = log(scale),
          range = range,
          control = list(
            sampler = 'DEzs',
            settings = list(
              burnin = 1000,
              iterations = 3000,
              message = FALSE
            )
          ),
          window_size = 1,
          step_selection = ssf
        )

    # save results
    saveRDS(locations, "sgat_locations.rds", compress = "xz")

    # render map
    locations |> stk_map()

# 2 FlightR