kstest(...)
## S3 method for class 'ppp':
kstest(X, covariate, ..., jitter=TRUE)
## S3 method for class 'ppm':
kstest(model, covariate, ..., jitter=TRUE)
## S3 method for class 'slrm':
kstest(model, covariate, ..., modelname=NULL, covname=NULL)
"ppp"
)."ppm"
)
or fitted spatial logistic regression (object of class "slrm"
)."im"
),
a list of pixel images, or one of the characters
"x"
or "y"
indicating the Cartesian coordinates.ks.test
to control the test.jitter=TRUE
, values of the covariate
will be slightly perturbed at random, to avoid tied values in the test.model
and covariate
to be used in labelling plot axes."htest"
containing the results of the
test. See ks.test
for details. The return value can be
printed to give an informative summary of the test. The value also belongs to the class "kstest"
for which there is
a plot method.
kstest
is executed twice, the
$p$-values will not be exactly the same. To avoid this behaviour,
set jitter=FALSE
. The function kstest
is generic, with methods for
point patterns ("ppp"
), point process models ("ppm"
)
and spatial logistic regression models ("slrm"
).
X
is a point pattern dataset (object of class"ppp"
), thenkstest(X, ...)
performs a goodness-of-fit test of the
uniform Poisson point process (Complete Spatial Randomness, CSR)
for this dataset.
For a multitype point pattern, the uniform intensity
is assumed to depend on the type of point (sometimes called
Complete Spatial Randomness and Independence, CSRI).model
is a fitted point process model
(object of class"ppm"
) thenkstest(model, ...)
performs
a test of goodness-of-fit for this fitted model. In this case,model
should be a Poisson point process.model
is a fitted spatial logistic regression
(object of class"slrm"
) thenkstest(model, ...)
performs
a test of goodness-of-fit for this fitted model.X
is a point pattern that does not have marks,
the argument covariate
should be either a function(x,y)
or a pixel image (object of class "im"
containing the values
of a spatial function, or one of the characters "x"
or
"y"
indicating the Cartesian 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
.
If X
is a multitype point pattern, the argument covariate
can be either a function(x,y,marks)
,
or a pixel image, or a list of pixel images corresponding to
each possible mark value, or one of the characters "x"
or
"y"
indicating the Cartesian coordinates.
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. The
Kolmogorov-Smirnov test of uniformity is applied using
ks.test
.
This test was apparently first described (in the context of spatial data) by Berman (1986). See also Baddeley et al (2005).
The return value is an object of class "htest"
containing the
results of the hypothesis test. The print method for this class
gives an informative summary of the test outcome.
The return value also belongs to the class "kstest"
for which there is a plot method plot.kstest
.
The plot method displays the empirical cumulative distribution
function of the covariate at the data points, and the predicted
cumulative distribution function of the covariate under the model,
plotted against the value of the covariate.
The argument jitter
controls whether covariate values are
randomly perturbed, in order to avoid ties.
If the original data contains any ties in the covariate (i.e. points
with equal values of the covariate), and if jitter=FALSE
, then
the Kolmogorov-Smirnov test implemented in ks.test
will issue a warning that it cannot calculate the exact $p$-value.
To avoid this, if jitter=TRUE
each value of the covariate will
be perturbed by adding a small random value. The perturbations are
normally distributed with standard deviation equal to one hundredth of
the range of values of the covariate. This prevents ties,
and the $p$-value is still correct. There is
a very slight loss of power.
Berman, M. (1986) Testing for spatial association between a point process and another stochastic process. Applied Statistics 35, 54--62.
plot.kstest
,
quadrat.test
,
bermantest
,
ks.test
,
ppm
# real data: NZ trees
data(nztrees)
# test of CSR using x coordinate
kstest(nztrees, "x")
# test of CSR using a function of x and y
fun <- function(x,y){2* x + y}
kstest(nztrees, fun)
# test of CSR using an image covariate
funimage <- as.im(fun, W=as.owin(nztrees))
kstest(nztrees, funimage)
# fit inhomogeneous Poisson model and test
model <- ppm(nztrees, ~x)
kstest(model, "x")
# synthetic data: nonuniform Poisson process
X <- rpoispp(function(x,y) { 100 * exp(x) }, win=square(1))
# fit uniform Poisson process
fit0 <- ppm(X, ~1)
# fit correct nonuniform Poisson process
fit1 <- ppm(X, ~x)
# test wrong model
kstest(fit0, "x")
# test right model
kstest(fit1, "x")
# multitype point pattern
data(amacrine)
kstest(amacrine, "x")
yimage <- as.im(function(x,y){y}, W=as.owin(amacrine))
kstest(ppm(amacrine, ~marks+y), yimage)
Run the code above in your browser using DataLab