polyCub.iso  R Documentation 
polyCub.iso
numerically integrates a radially symmetric function
f(x,y) = f_r((x,y)\boldsymbol{\mu})
,
with \mu
being the center of isotropy, over a polygonal domain.
It internally approximates a line integral along the polygon boundary using
integrate
. The integrand requires the antiderivative of
r f_r(r)
), which should be supplied as argument intrfr
(f
itself is only required if check.intrfr=TRUE
).
The twodimensional integration problem thereby reduces to an efficient
adaptive quadrature in one dimension.
If intrfr
is not available analytically, polyCub.iso
can use a
numerical approximation (meaning integrate
within integrate
),
but the generalpurpose cubature method polyCub.SV
might be
more efficient in this case.
See Meyer and Held (2014, Supplement B, Section 2.4) for mathematical
details.
.polyCub.iso
is a “barebone” version of polyCub.iso
.
polyCub.iso(polyregion, f, intrfr, ..., center, control = list(),
check.intrfr = FALSE, plot = FALSE)
.polyCub.iso(polys, intrfr, ..., center, control = list(),
.witherror = FALSE)
polyregion 
a polygonal domain.
The following classes are supported:

f 
a twodimensional realvalued function. As its first argument it must take a coordinate matrix, i.e., a numeric matrix with two columns, and it must return a numeric vector of length the number of coordinates. 
intrfr 
a 
... 
further arguments for 
center 
numeric vector of length 2, the center of isotropy. 
control 
list of arguments passed to 
check.intrfr 
logical (or numeric vector) indicating if
(for which 
plot 
logical indicating if an image of the function should be plotted
together with the polygonal domain, i.e.,

polys 
something like 
.witherror 
logical indicating if an upper bound for the absolute integration error should be attached as an attribute to the result? 
The approximate integral of the isotropic function
f
over polyregion
.
If the intrfr
function is provided (which is assumed to be exact), an
upper bound for the absolute integration error is appended to the result as
attribute "abs.error"
. It equals the sum of the absolute errors
reported by all integrate
calls
(there is one for each edge of polyregion
).
Sebastian Meyer
The basic mathematical formulation of this efficient integration for radially symmetric functions was ascertained with great support by Emil Hedevang (2013), Dept. of Mathematics, Aarhus University, Denmark.
Hedevang, E. (2013). Personal communication at the Summer School on Topics in SpaceTime Modeling and Inference (May 2013, Aalborg, Denmark).
Meyer, S. and Held, L. (2014). Powerlaw models for infectious disease spread. The Annals of Applied Statistics, 8 (3), 16121639. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1214/14AOAS743")}
system.file("include", "polyCubAPI.h", package = "polyCub")
for a full Cimplementation of this cubature method (for a single
polygon). The corresponding Croutine polyCub_iso
can be used by
other R packages, notably surveillance, via ‘LinkingTo: polyCub’
(in the ‘DESCRIPTION’) and ‘#include <polyCubAPI.h>’ (in suitable
‘/src’ files). Note that the intrfr
function must then also be
supplied as a Croutine. An example can be found in the package tests.
Other polyCubmethods:
polyCub.SV()
,
polyCub.exact.Gauss()
,
polyCub.midpoint()
,
polyCub()
## we use the example polygon and f (exponential decay) from
example(plotpolyf)
## numerical approximation of 'intrfr' (not recommended)
(intISOnum < polyCub.iso(letterR, f, center = fcenter))
## analytical 'intrfr'
## intrfr(R) = int_0^R r*f(r) dr, for f(r) = dexp(r), gives
intrfr < function (R, rate = 1) pgamma(R, 2, rate) / rate
(intISOana < polyCub.iso(letterR, f, intrfr = intrfr, center = fcenter,
check.intrfr = TRUE))
## f is only used to check 'intrfr' against a numerical approximation
stopifnot(all.equal(intISOana, intISOnum, check.attributes = FALSE))
### polygon area: f(r) = 1, f(x,y) = 1, center does not really matter
## intrfr(R) = int_0^R r*f(r) dr = int_0^R r dr = R^2/2
intrfr.const < function (R) R^2/2
(area.ISO < polyCub.iso(letterR, intrfr = intrfr.const, center = c(0,0)))
if (require("spatstat.geom")) { # check against area.owin()
stopifnot(all.equal(area.owin(owin(poly = letterR)),
area.ISO, check.attributes = FALSE))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.