Spatial Distribution Test for Multiple Point Process Model
Performs a spatial distribution test of a point process model fitted to multiple spatial point patterns. The test compares the observed and predicted distributions of the values of a spatial covariate, using either the Kolmogorov-Smirnov, Cramer-von Mises or Anderson-Darling test of goodness-of-fit.
## S3 method for class 'mppm' cdf.test(model, covariate, test=c("ks", "cvm", "ad"), ..., nsim=19, verbose=TRUE, interpolate=FALSE, fast=TRUE, jitter=TRUE)
model |
An object of class |
covariate |
The spatial covariate on which the test will be based.
A function, a pixel image, a list of functions, a list of pixel
images, a hyperframe, a character string containing the name
of one of the covariates in |
test |
Character string identifying the test to be performed:
|
... |
Arguments passed to |
nsim |
Number of simulated realisations which should be generated, if a Monte Carlo test is required. |
verbose |
Logical flag indicating whether to print progress reports. |
interpolate |
Logical flag indicating whether to interpolate between pixel values when codecovariate is a pixel image. See Details. |
fast |
Logical flag. If |
jitter |
Logical flag. If |
This function is a method for the generic function
cdf.test
for the class mppm
.
This function performs a goodness-of-fit test of a point process model that has been fitted to multiple point patterns. The observed distribution of the values of a spatial covariate at the data points, and the predicted distribution of the same values under the model, are compared using the Kolmogorov-Smirnov, Cramer-von Mises or Anderson-Darling test of goodness-of-fit. These are exact tests if the model is Poisson; otherwise, for a Gibbs model, a Monte Carlo p-value is computed by generating simulated realisations of the model and applying the selected goodness-of-fit test to each simulation.
The argument model
should be a fitted point process model
fitted to multiple point patterns
(object of class "mppm"
).
The argument covariate
contains the values of a spatial
function. It can be
a function(x,y)
a pixel image (object of class "im"
a list of function(x,y)
, one for each point pattern
a list of pixel images, one for each point pattern
a hyperframe (see hyperframe
)
of which the first
column will be taken as containing the covariate
a character string giving the name of one of the covariates
in model
one of the character strings "x"
or "y"
,
indicating the spatial coordinates.
If covariate
is an image, it should have numeric values,
and its domain should cover the observation window of the
model
. If covariate
is a function, it should expect
two arguments x
and y
which are vectors of coordinates,
and it should return a numeric vector of the same length
as x
and y
.
First the original data point pattern is extracted from model
.
The values of the covariate
at these data points are
collected.
The predicted distribution of the values of the covariate
under the fitted model
is computed as follows.
The values of the covariate
at all locations in the
observation window are evaluated,
weighted according to the point process intensity of the fitted model,
and compiled into a cumulative distribution function F using
ewcdf
.
The probability integral transformation is then applied:
the values of the covariate
at the original data points
are transformed by the predicted cumulative distribution function
F into numbers between 0 and 1. If the model is correct,
these numbers are i.i.d. uniform random numbers.
A goodness-of-fit test of the uniform distribution is applied
to these numbers using ks.test
,
cvm.test
or ad.test
.
The argument interpolate
determines
how pixel values will be handled when codecovariate is a pixel image.
The value of the covariate at a data point is obtained
by looking up the value of the nearest pixel if
interpolate=FALSE
, or by linearly interpolating
between the values of the four nearest pixels
if interpolate=TRUE
. Linear interpolation is slower,
but is sometimes necessary to avoid tied values of the covariate
arising when the pixel grid is coarse.
If model
is a Poisson point process, then the
Kolmogorov-Smirnov,
Cramer-von Mises
and Anderson-Darling tests are theoretically exact.
This test was apparently first described (in the context of
spatial data, and for Kolmogorov-Smirnov) by Berman (1986).
See also Baddeley et al (2005).
If model
is not a Poisson point process, then the
Kolmogorov-Smirnov,
Cramer-von Mises
and Anderson-Darling tests are biased.
Instead they are used as the basis of a Monte Carlo test.
First nsim
simulated realisations of the model will be generated.
Each simulated realisation consists of a list of simulated point
patterns, one for each of the original data patterns. This
can take a very long time. The model is then re-fitted to each
simulation, and the refitted model is subjected to the goodness-of-fit
test described above. A Monte Carlo p-value is then computed by
comparing the p-value of the original test with the
p-values obtained from the simulations.
An object of class "cdftest"
and "htest"
containing the results of the
test. See cdf.test
for details.
Adrian Baddeley Adrian.Baddeley@curtin.edu.au, Ida-Maria Sintorn and Leanne Bischoff. Implemented by Adrian Baddeley Adrian.Baddeley@curtin.edu.au, Rolf Turner r.turner@auckland.ac.nz and Ege Rubak rubak@math.aau.dk.
Baddeley, A., Rubak, E. and Turner, R. (2015) Spatial Point Patterns: Methodology and Applications with R. London: Chapman and Hall/CRC Press.
Baddeley, A., Turner, R., Moller, J. and Hazelton, M. (2005) Residual analysis for spatial point processes. Journal of the Royal Statistical Society, Series B 67, 617–666.
Berman, M. (1986) Testing for spatial association between a point process and another stochastic process. Applied Statistics 35, 54–62.
# three i.i.d. realisations of nonuniform Poisson process lambda <- as.im(function(x,y) { 300 * exp(x) }, square(1)) dat <- hyperframe(X=list(rpoispp(lambda), rpoispp(lambda), rpoispp(lambda))) # fit uniform Poisson process fit0 <- mppm(X~1, dat) # fit correct nonuniform Poisson process fit1 <- mppm(X~x, dat) # test wrong model cdf.test(fit0, "x") # test right model cdf.test(fit1, "x") # Gibbs model fitGibbs <- update(fit0, interaction=Strauss(0.07)) ns <- if(interactive()) 19 else 3 cdf.test(fitGibbs, "x", nsim=ns)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.