# Smooth.ppp

##### Spatial smoothing of observations at irregular points

Performs spatial smoothing of numeric values observed at a set of irregular locations. Uses Gaussian kernel smoothing and least-squares cross-validated bandwidth selection.

##### Usage

```
# S3 method for ppp
Smooth(X, sigma=NULL,
...,
weights = rep(1, npoints(X)),
at="pixels",
edge=TRUE, diggle=FALSE, geometric=FALSE)
```markmean(X, ...)

markvar(X, sigma=NULL, ..., weights=NULL, varcov=NULL)

##### Arguments

- X
A marked point pattern (object of class

`"ppp"`

).- sigma
Smoothing bandwidth. A single positive number, a numeric vector of length 2, or a function that selects the bandwidth automatically. See

`density.ppp`

.- …
Further arguments passed to

`bw.smoothppp`

and`density.ppp`

to control the kernel smoothing and the pixel resolution of the result.- weights
Optional weights attached to the observations. A numeric vector, numeric matrix, an

`expression`

or a pixel image. See`density.ppp`

.- at
String specifying whether to compute the smoothed values at a grid of pixel locations (

`at="pixels"`

) or only at the points of`X`

(`at="points"`

).- edge,diggle
Arguments passed to

`density.ppp`

to determine the edge correction.- varcov
Variance-covariance matrix. An alternative to

`sigma`

. See`density.ppp`

.- geometric
Logical value indicating whether to perform geometric mean smoothing instead of arithmetic mean smoothing. See Details.

##### Details

The function `Smooth.ppp`

performs spatial smoothing of numeric values
observed at a set of irregular locations. The functions
`markmean`

and `markvar`

are wrappers for `Smooth.ppp`

which compute the spatially-varying mean and variance of the marks of
a point pattern.

`Smooth.ppp`

is a method for the generic function
`Smooth`

for the class `"ppp"`

of point patterns.
Thus you can type simply `Smooth(X)`

.

Smoothing is performed by Gaussian kernel weighting. If the observed values are \(v_1,\ldots,v_n\) at locations \(x_1,\ldots,x_n\) respectively, then the smoothed value at a location \(u\) is (ignoring edge corrections) $$ g(u) = \frac{\sum_i k(u-x_i) v_i}{\sum_i k(u-x_i)} $$ where \(k\) is a Gaussian kernel. This is known as the Nadaraya-Watson smoother (Nadaraya, 1964, 1989; Watson, 1964). By default, the smoothing kernel bandwidth is chosen by least squares cross-validation (see below).

The argument `X`

must be a marked point pattern (object
of class `"ppp"`

, see `ppp.object`

).
The points of the pattern are taken to be the
observation locations \(x_i\), and the marks of the pattern
are taken to be the numeric values \(v_i\) observed at these
locations.

The marks are allowed to be a data frame (in
`Smooth.ppp`

and `markmean`

). Then the smoothing procedure is applied to each
column of marks.

The numerator and denominator are computed by `density.ppp`

.
The arguments `...`

control the smoothing kernel parameters
and determine whether edge correction is applied.
The smoothing kernel bandwidth can be specified by either of the arguments
`sigma`

or `varcov`

which are passed to `density.ppp`

.
If neither of these arguments is present, then by default the
bandwidth is selected by least squares cross-validation,
using `bw.smoothppp`

.

The optional argument `weights`

allows numerical weights to
be applied to the data. If a weight \(w_i\)
is associated with location \(x_i\), then the smoothed
function is
(ignoring edge corrections)
$$
g(u) = \frac{\sum_i k(u-x_i) v_i w_i}{\sum_i k(u-x_i) w_i}
$$

If `geometric=TRUE`

then geometric mean smoothing
is performed instead of arithmetic mean smoothing.
The mark values must be non-negative numbers.
The logarithm of the mark values is computed; these logarithmic values are
kernel-smoothed as described above; then the exponential function
is applied to the smoothed values.

An alternative to kernel smoothing is inverse-distance weighting,
which is performed by `idw`

.

##### Value

*If X has a single column of marks:*

If

`at="pixels"`

(the default), the result is a pixel image (object of class`"im"`

). Pixel values are values of the interpolated function.If

`at="points"`

, the result is a numeric vector of length equal to the number of points in`X`

. Entries are values of the interpolated function at the points of`X`

.

*If X has a data frame of marks:*

If

`at="pixels"`

(the default), the result is a named list of pixel images (object of class`"im"`

). There is one image for each column of marks. This list also belongs to the class`"solist"`

, for which there is a plot method.If

`at="points"`

, the result is a data frame with one row for each point of`X`

, and one column for each column of marks. Entries are values of the interpolated function at the points of`X`

.

The return value has attributes
`"sigma"`

and `"varcov"`

which report the smoothing
bandwidth that was used.

##### Very small bandwidth

If the chosen bandwidth `sigma`

is very small,
kernel smoothing is mathematically equivalent
to nearest-neighbour interpolation; the result will
be computed by `nnmark`

. This is
unless `at="points"`

and `leaveoneout=FALSE`

,
when the original mark values are returned.

##### References

Nadaraya, E.A. (1964) On estimating regression.
*Theory of Probability and its Applications*
**9**, 141--142.

Nadaraya, E.A. (1989)
*Nonparametric estimation of probability densities
and regression curves*.
Kluwer, Dordrecht.

Watson, G.S. (1964)
Smooth regression analysis.
*Sankhya A* **26**, 359--372.

##### See Also

`density.ppp`

,
`bw.smoothppp`

,
`nnmark`

,
`ppp.object`

,
`im.object`

.

See `idw`

for inverse-distance weighted smoothing.

To perform interpolation, see also the `akima`

package.

##### Examples

```
# NOT RUN {
# Longleaf data - tree locations, marked by tree diameter
# Local smoothing of tree diameter (automatic bandwidth selection)
Z <- Smooth(longleaf)
# Kernel bandwidth sigma=5
plot(Smooth(longleaf, 5))
# mark variance
plot(markvar(longleaf, sigma=5))
# data frame of marks: trees marked by diameter and height
plot(Smooth(finpines, sigma=2))
head(Smooth(finpines, sigma=2, at="points"))
# }
```

*Documentation reproduced from package spatstat, version 1.56-1, License: GPL (>= 2)*