---
title: "sgsR"
output: rmarkdown::html_vignette
description: >
Learn how to use sgsR.
vignette: >
%\VignetteIndexEntry{sgsR}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
## Algorithm structure {#str .unnumbered}
`sgsR` is scripted using the `terra` package to handle raster processing, and `sf` package for vector manipulation.
Four primary function verbs exist:
### `strat_*`
Stratification algorithms within `sgsR`. These algorithms use auxiliary raster data (e.g. ALS metric populations) as inputs and provide stratified areas of interest as outputs. Algorithms are either supervised (e.g. `strat_breaks()`), where the user provides quantitative values that drive stratifications, or unsupervised (e.g. `strat_quantiles()`), where the user specifies the desired number of output strata (`nStrata`) and stratification is handled by the algorithm.
### `sample_*`
Sampling algorithms in `sgsR`. Depending on the sampling algorithm, users are able to provide either auxiliary metrics or stratifications derived from `strat_*` functions as inputs. A number of customizable parameters can be set including the sample size (`nSamp`), a minimum distance threshold (`mindist`) between allocated sample units, and the ability for the user to define an access network (`access`) and assign minimum (`buff_inner`) and maximum (`buff_outer`) buffer distances to constrain sampling extents.
### `calculate_*` & `extract_*`
Additional helper functions that `calculate` varying descriptive / summary statistics and values to use in processing. `extract_*` functions derive metric values from co-located sample units.
## Parameters {#params .unnumbered}
`sgsR` uses common words that define algorithm parameters:
```{r echo=FALSE}
p <- c("`mraster`", "`sraster`", "`access`", "`existing`", "`plot`")
d <- c("Metric raster(s)", "Stratified raster", "Linear vectors representing access routes", "Existing sample units", "Visually displays raster and samples")
df <- data.frame(Parameter = p, Description = d)
knitr::kable(df, align = "c")
```
### `mraster` {#mrast .unnumbered}
`mraster` are input raster(s). All raster data used by `sgsR` must be must be a [`terra SpatRaster`](https://cran.r-project.org/package=terra) class.
```{r,warning=F,message=F}
library(sgsR)
library(terra)
library(sf)
#--- Load mraster from internal data ---#
r <- system.file("extdata", "mraster.tif", package = "sgsR")
#--- load mraster using the terra package ---#
mraster <- terra::rast(r)
```
### `sraster` {#srast .unnumbered}
`sraster` are derived from `strat_*` algorithms (e.g. see `strat_quantiles()` below). The function below used the distribution of `mraster$zq90` and stratified data into 4 equally sized strata.
```{r,warning=F,message=F}
#--- apply kmeans algorithm to metrics raster ---#
sraster <- strat_quantiles(
mraster = mraster$zq90, # use mraster as input for sampling
nStrata = 4, # algorithm will produce 4 strata
plot = TRUE
) # algorithm will plot output
```
The `sraster` output can then become an input parameter (`sraster`) for the `sample_strat()` algorithm.
```{r,warning=F,message=F}
#--- apply stratified sampling ---#
existing <- sample_strat(
sraster = sraster, # use mraster as input for sampling
nSamp = 200, # request 200 samples be taken
mindist = 100, # define that samples must be 100 m apart
plot = TRUE
) # algorithm will plot output
```
### `access` {#access .unnumbered}
One key feature of using some `sample_*` functions is its ability to define `access` corridors. Users can supply a road `access` network (must be `sf` line objects) and define buffers around `access` where samples should be excluded and included.
Relevant and applicable parameters when `access` is defined are:
* `buff_inner` - Can be left as `NULL` (default). Inner buffer parameter that defines the distance from `access` where samples cannot be taken (i.e. if you don't want samples within 50 m of your `access` layer set `buff_inner = 50`).
* `buff_outer` - Outer buffer parameter that defines the maximum distance that the samples can be located from `access` (i.e. if you don't want samples more than 200 meters from your `access` layer set `buff_inner = 200`).
```{r,warning=F,message=F}
a <- system.file("extdata", "access.shp", package = "sgsR")
#--- load the access vector using the sf package ---#
access <- sf::st_read(a)
```
```{r,warning=F,message=F}
terra::plot(mraster$zq90)
terra::plot(access, add = TRUE, col = "black")
```
From the plot output we see the first band (`zq90`) of the `mraster` with the `access` vector overlaid.
## `%>%` {#pipe .unnumbered}
The sgsR package leverages the `%>%` operator from the [`magrittr package`](https://cran.r-project.org/package=magrittr).
```{r pipe, eval= FALSE}
#--- non piped ---#
sraster <- strat_quantiles(
mraster = mraster$zq90, # use mraster as input for sampling
nStrata = 4
) # algorithm will produce 4 strata
existing <- sample_strat(
sraster = sraster, # use mraster as input for sampling
nSamp = 200, # request 200 samples be taken
mindist = 100
) # define that samples must be 100 m apart
extract_metrics(
mraster = mraster,
existing = existing
)
#--- piped ---#
strat_quantiles(mraster = mraster$zq90, nStrata = 4) %>%
sample_strat(., nSamp = 200, mindist = 100) %>%
extract_metrics(mraster = mraster, existing = .)
```