Computes adaptive smoothing bandwidths according to the inverse-square-root rule of Abramson (1982).
bw.abram(X, h0, at=c("points", "pixels"),
…, hp = h0, pilot = NULL, trim=5)
A point pattern (object of class "ppp"
)
for which the variable bandwidths should be computed.
A scalar value giving the global smoothing bandwidth
in the same units as the coordinates of X
.
The default is h0=bw.ppl(X)
.
Character string (partially matched) specifying whether
to compute bandwidth values at the points of X
(at="points"
, the default) or to compute bandwidths
at every pixel in a fine pixel grid (at="pixels"
).
Additional arguments passed to
either density.ppp
and as.im
to control the pixel resolution
and the type of smoothing.
Optional. A scalar pilot bandwidth, for fixed-bandwidth estimation
of the pilot density. Ignored if pilot
is a pixel image
(object of class "im"
); see below.
Optional. Specification of a pilot density
(possibly unnormalised).
If pilot=NULL
(the default) the pilot density
is computed using a fixed-bandwidth estimate based
on X
and hp
.
If pilot
is a point pattern, the pilot density is
is computed using a fixed-bandwidth estimate based
on pilot
and hp
.
If pilot
is a pixel image (object of class "im"
),
this is taken to be the (possibly unnormalised)
pilot density, and hp
is ignored.
A trimming value required to curb excessively large bandwidths. See Details. The default is sensible in most cases.
Either a numeric vector of length npoints(X)
giving the Abramson bandwidth for each point
(when at = "points"
, the default),
or the entire pixel im
age
of the Abramson bandwidths over the relevant spatial domain
(when at = "pixels"
).
This function computes adaptive smoothing bandwidths using the methods of Abramson (1982) and Hall and Marron (1988).
If at="points"
(the default) a smoothing bandwidth is
computed for each point in the pattern X
. Alternatively if
at="pixels"
a smoothing bandwidth is computed for
each spatial location in a pixel grid.
Under the Abramson-Hall-Marron rule, the bandwidth at location \(u\) is
$$
h(u) = \mbox{\texttt{h0}}
* \mbox{min}[ \frac{\tilde{f}(u)^{-1/2}}{\gamma}, \mbox{\texttt{trim}} ]
$$
where \(\tilde{f}(u)\) is a pilot estimate of the spatially varying
probability density. The variable bandwidths are rescaled by \(\gamma\), the
geometric mean of the \(\tilde{f}(u)^{-1/2}\) terms evaluated at the
data; this allows the global bandwidth h0
to be considered on
the same scale as a corresponding fixed bandwidth. The trimming value
trim
has the same interpretation as the required `clipping' of
the pilot density at some small nominal value (see Hall and Marron,
1988), to necessarily prevent extreme bandwidths (which
can occur at very isolated observations).
The pilot density or intensity is determined as follows:
If pilot
is a pixel image, this is taken as the
pilot density or intensity.
If pilot
is NULL
, then the pilot intensity is
computed as a fixed-bandwidth kernel
intensity estimate using density.ppp
applied to
the data pattern X
using
the pilot bandwidth hp
.
If pilot
is a different point pattern on the same spatial
domain as X
, then the pilot intensity is
computed as a fixed-bandwidth kernel
intensity estimate using density.ppp
applied to
pilot
.
In each case the pilot density or intensity is renormalised to become a probability density, and then the Abramson rule is applied.
Abramson, I. (1982) On bandwidth variation in kernel estimates --- a square root law. Annals of Statistics, 10(4), 1217-1223.
Davies, T.M. and Baddeley, A. (2018) Fast computation of spatially adaptive kernel estimates. Statistics and Computing, 28(4), 937-956.
Davies, T.M., Marshall, J.C., and Hazelton, M.L. (2018) Tutorial on kernel estimation of continuous spatial and spatiotemporal relative risk. Statistics in Medicine, 37(7), 1191-1221.
Hall, P. and Marron, J.S. (1988) Variable window width kernel density estimates of probability densities. Probability Theory and Related Fields, 80, 37-49.
Silverman, B.W. (1986) Density Estimation for Statistics and Data Analysis. Chapman and Hall, New York.
# NOT RUN {
# 'ch' just 58 laryngeal cancer cases
ch <- split(chorley)[[1]]
h <- bw.abram(ch,h0=1,hp=0.7)
length(h)
summary(h)
if(interactive()) hist(h)
# calculate pilot based on all 1036 observations
h.pool <- bw.abram(ch,h0=1,hp=0.7,pilot=chorley)
length(h.pool)
summary(h.pool)
if(interactive()) hist(h.pool)
# get full image used for 'h' above
him <- bw.abram(ch,h0=1,hp=0.7,at="pixels")
plot(him);points(ch,col="grey")
# }
Run the code above in your browser using DataCamp Workspace