Calculate Sum of Exponentially Decaying Contributions (SEDC) covariates
Source:R/calculate_covariates.R
sum_edc.Rd
Calculate Sum of Exponentially Decaying Contributions (SEDC) covariates
Usage
sum_edc(
from = NULL,
locs = NULL,
locs_id = NULL,
sedc_bandwidth = NULL,
target_fields = NULL,
geom = FALSE
)
Arguments
- from
SpatVector
(1). Point locations which contain point-source covariate data.- locs
sf/SpatVector(1). Locations where the sum of exponentially decaying contributions are calculated.
- locs_id
character(1). Name of the unique id field in
point_to
.- sedc_bandwidth
numeric(1). Distance at which the source concentration is reduced to
exp(-3)
(approximately -95 %)- target_fields
character(varying). Field names in characters.
- geom
FALSE/"sf"/"terra".. Should the function return with geometry? Default is
FALSE
, options with geometry are "sf" or "terra". The coordinate reference system of thesf
orSpatVector
is that offrom.
Value
a data.frame (tibble) or SpatVector object with input field names with
a suffix "_sedc"
where the sums of EDC are stored.
Additional attributes are attached for the EDC information.
`attr(result, "sedc_bandwidth")“: the bandwidth where concentration reduces to approximately five percent
`attr(result, "sedc_threshold")“: the threshold distance at which emission source points are excluded beyond that
Note
The function is originally from
chopin
Distance calculation is done with terra functions internally.
Thus, the function internally converts sf objects in
point_*
arguments to terra.
The threshold should be carefully chosen by users.
Examples
set.seed(101)
ncpath <- system.file("gpkg/nc.gpkg", package = "sf")
nc <- terra::vect(ncpath)
nc <- terra::project(nc, "EPSG:5070")
pnt_locs <- terra::centroids(nc, inside = TRUE)
pnt_locs <- pnt_locs[, "NAME"]
pnt_from <- terra::spatSample(nc, 10L)
pnt_from$pid <- seq(1, 10)
pnt_from <- pnt_from[, "pid"]
pnt_from$val1 <- rgamma(10L, 1, 0.05)
pnt_from$val2 <- rgamma(10L, 2, 1)
vals <- c("val1", "val2")
sum_edc(pnt_locs, pnt_from, "NAME", 1e4, vals)
#> Joining with `by = join_by(from_id)`
#> Joining with `by = join_by(to_id)`
#> Joining with `by = join_by(from_id, to_id)`
#> NAME val1 val2
#> 1 Currituck 0.39651678 0.119400641
#> 2 Franklin 0.00767532 0.000963305
#> 3 Madison 0.00858568 0.003998301
#> 4 Polk 0.06034160 0.003668522
#> 5 Randolph 0.03433355 0.046817979
#> 6 Rutherford 0.11657394 0.007087217
#> 7 Stokes 0.04433759 0.004935366
#> 8 Yancey 0.05592440 0.026043667