Learn R Programming

sgsR - structurally guided sampling

Installation :computer:

Install the stable version of sgsRfrom CRAN with:

install.packages("sgsR")
library(sgsR)

Install the most recent development version of sgsR from Github with:

install.packages("devtools")
devtools::install_github("https://github.com/tgoodbody/sgsR")
library(sgsR)

Citing sgsR in literature

Open access publication: sgsR: a structurally guided sampling toolbox for LiDAR-based forest inventories

To cite sgsR use citation() from within R with:

print(citation("sgsR"), bibtex = TRUE)
#> To cite package 'sgsR' in publications use:
#> 
#>   Goodbody, TRH., Coops, NC., Queinnec, M., White, JC., Tompalski, P.,
#>   Hudak, AT., Auty, D., Valbuena, R., LeBoeuf, A., Sinclair, I.,
#>   McCartney, G., Prieur, J-F., Woods, ME. (2023). sgsR: a structurally
#>   guided sampling toolbox for LiDAR-based forest inventories. Forestry:
#>   An International Journal of Forest Research.
#>   10.1093/forestry/cpac055.
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Manual{,
#>     title = {sgsR: a structurally guided sampling toolbox for LiDAR-based forest inventories.},
#>     author = {Tristan R.H. Goodbody and Nicholas C. Coops and Martin Queinnec and Joanne C. White and Piotr Tompalski and Andrew T. Hudak and David Auty and Ruben Valbuena and Antoine LeBoeuf and Ian Sinclair and Grant McCartney and Jean-Francois Prieur and Murray E. Woods},
#>     journal = {Forestry: An International Journal of Forest Research},
#>     year = {2023},
#>     doi = {10.1093/forestry/cpac055},
#>   }
#> 
#>   Tristan RH Goodbody, Nicholas C Coops and Martin Queinnec (2025).
#>   Structurally Guided Sampling. R package version 1.4.6.
#>   https://cran.r-project.org/package=sgsR.
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Manual{,
#>     title = {Structurally Guided Sampling},
#>     author = {Tristan RH Goodbody and Nicholas C Coops and Martin Queinnec},
#>     year = {2025},
#>     note = {R package version 1.4.6},
#>     url = {https://cran.r-project.org/package=sgsR},
#>   }

Overview

sgsR provides a collection of stratification and sampling algorithms that use auxiliary information for allocating sample units over an areal sampling frame. ALS metrics, like those derived from the lidR package are the intended inputs.

Other remotely sensed or auxiliary data can also be used (e.g. optical satellite imagery, climate data, drone-based products).

sgsR is being actively developed, so you may encounter bugs. If that happens, please report your issue here by providing a reproducible example.

Example usage :bar_chart:

#--- Load mraster files ---#
r <- system.file("extdata", "mraster.tif", package = "sgsR")

#--- load the mraster using the terra package ---#
mraster <- terra::rast(r)

#--- apply quantiles algorithm to mraster ---#
sraster <- strat_quantiles(mraster = mraster$zq90, # use mraster as input for stratification
                           nStrata = 4) # produce 4 strata
                        
#--- apply stratified sampling ---#
existing <- sample_strat(sraster = sraster, # use sraster as input for sampling
                         nSamp = 200, # request 200 samples
                         mindist = 100, # samples must be 100 m apart
                         plot = TRUE) # plot output

Resources & Vignettes :books:

Check out the package documentation to see how you can use sgsR functions for your work.

sgsR was presented at the ForestSAT 2022 Conference in Berlin. Slides for the presentation can be found here.

Collaborators :woman: :man:

We are thankful for continued collaboration with academic, private industry, and government institutions to help improve sgsR. Special thanks to to:

CollaboratorAffiliation
Martin QueinnecUniversity of British Columbia
Joanne C. WhiteCanadian Forest Service
Piotr TompalskiCanadian Forest Service
Andrew T. HudakUnited States Forest Service
Ruben ValbuenaSwedish University of Agricultural Sciences
Antoine LeBoeufMinistère des Forêts, de la Faune et des Parcs
Ian SinclairMinistry of Northern Development, Mines, Natural Resources and Forestry
Grant McCartneyForsite Consultants Ltd.
Jean-Francois PrieurUniversité de Sherbrooke
Murray Woods(Retired) Ministry of Northern Development, Mines, Natural Resources and Forestry

Funding :raised_hands:

Development of sgsR was made possible thanks to the financial support of the Canadian Wood Fibre Centre’s Forest Innovation Program.

Copy Link

Version

Install

install.packages('sgsR')

Monthly Downloads

347

Version

1.5.0

License

GPL (>= 3)

Issues

Pull Requests

Stars

Forks

Maintainer

Tristan RH Goodbody

Last Published

June 18th, 2025

Functions in sgsR (1.5.0)

sample_nc

Nearest centroid (NC) sampling
sample_existing_srs

Randomly sample from an existing dataset
sample_clhs

Conditioned Latin Hypercube Sampling
sample_sys_strat

Systematic stratified sampling
strat_breaks

Breaks stratification
sgsR-package

sgsR: Structurally Guided Sampling
strat_kmeans

k-means stratification
strat_map

Map a raster stack of a list of rasters
strat_quantiles

Quantiles stratification
strat_poly

Stratify using polygons
sample_existing_balanced

Sample Existing Data Using Balanced Sampling
sample_systematic

Systematic sampling
write

Write
vectorize

Vectorization helpers
take_samples

Take Samples Based on Strata
allocating

Allocating strata: `existing`
calculate_lhsOpt

Analyze optimal Latin hypercube sample number
calculate_pop

Population descriptors
extract_metrics

Extract metrics
extract_strata

Extract strata
sample_ahels

Adapted Hypercube Evaluation of a Legacy Sample (ahels)
sample_srs

Simple random sampling
sample_existing

Sample existing
sample_balanced

Balanced sampling
calculate_pcomp

Raster principal components
sample_strat

Stratified sampling
check_existing

Check existing sample data against requirements
plot

Plot
coords_existing

Get existing and XY coordinates
rules

Sampling rules
masking

Masking
calculate_coobs

coobs algorithm sampling
calculate_representation

Compare sample representation within sraster strata
calculate_allocation

Sample allocation type and count
calculate_distance

Distance to access layer
calculate_sampsize

Sample size determination
prepare_existing

Prepare existing sample data
sample_existing_strat

Sample Existing Data Based on Strata
sample_existing_clhs

Sub-sample using the conditional Latin hypercube sampling (CLHS)
matrices

Matrices
calculate_allocation_existing

Sample allocation type and count