spatstat (version 1.48-0)

envelope: Simulation Envelopes of Summary Function

Description

Computes simulation envelopes of a summary function.

Usage

envelope(Y, fun, ...)
"envelope"(Y, fun=Kest, nsim=99, nrank=1, ..., funargs=list(), funYargs=funargs, simulate=NULL, fix.n=FALSE, fix.marks=FALSE, verbose=TRUE, clipdata=TRUE, transform=NULL, global=FALSE, ginterval=NULL, use.theory=NULL, alternative=c("two.sided", "less", "greater"), scale=NULL, clamp=FALSE, savefuns=FALSE, savepatterns=FALSE, nsim2=nsim, VARIANCE=FALSE, nSD=2, Yname=NULL, maxnerr=nsim, do.pwrong=FALSE, envir.simul=NULL)
"envelope"(Y, fun=Kest, nsim=99, nrank=1, ..., funargs=list(), funYargs=funargs, simulate=NULL, fix.n=FALSE, fix.marks=FALSE, verbose=TRUE, clipdata=TRUE, start=NULL, control=update(default.rmhcontrol(Y), nrep=nrep), nrep=1e5, transform=NULL, global=FALSE, ginterval=NULL, use.theory=NULL, alternative=c("two.sided", "less", "greater"), scale=NULL, clamp=FALSE, savefuns=FALSE, savepatterns=FALSE, nsim2=nsim, VARIANCE=FALSE, nSD=2, Yname=NULL, maxnerr=nsim, do.pwrong=FALSE, envir.simul=NULL)
"envelope"(Y, fun=Kest, nsim=99, nrank=1, ..., funargs=list(), funYargs=funargs, simulate=NULL, verbose=TRUE, clipdata=TRUE, transform=NULL, global=FALSE, ginterval=NULL, use.theory=NULL, alternative=c("two.sided", "less", "greater"), scale=NULL, clamp=FALSE, savefuns=FALSE, savepatterns=FALSE, nsim2=nsim, VARIANCE=FALSE, nSD=2, Yname=NULL, maxnerr=nsim, do.pwrong=FALSE, envir.simul=NULL)

Arguments

Y
Object containing point pattern data. A point pattern (object of class "ppp") or a fitted point process model (object of class "ppm" or "kppm").
fun
Function that computes the desired summary statistic for a point pattern.
nsim
Number of simulated point patterns to be generated when computing the envelopes.
nrank
Integer. Rank of the envelope value amongst the nsim simulated values. A rank of 1 means that the minimum and maximum simulated values will be used.
...
Extra arguments passed to fun.
funargs
A list, containing extra arguments to be passed to fun.
funYargs
Optional. A list, containing extra arguments to be passed to fun when applied to the original data Y only.
simulate
Optional. Specifies how to generate the simulated point patterns. If simulate is an expression in the R language, then this expression will be evaluated nsim times, to obtain nsim point patterns which are taken as the simulated patterns from which the envelopes are computed. If simulate is a list of point patterns, then the entries in this list will be treated as the simulated patterns from which the envelopes are computed. Alternatively simulate may be an object produced by the envelope command: see Details.
fix.n
Logical. If TRUE, simulated patterns will have the same number of points as the original data pattern. This option is currently not available for envelope.kppm.
fix.marks
Logical. If TRUE, simulated patterns will have the same number of points and the same marks as the original data pattern. In a multitype point pattern this means that the simulated patterns will have the same number of points of each type as the original data. This option is currently not available for envelope.kppm.
verbose
Logical flag indicating whether to print progress reports during the simulations.
clipdata
Logical flag indicating whether the data point pattern should be clipped to the same window as the simulated patterns, before the summary function for the data is computed. This should usually be TRUE to ensure that the data and simulations are properly comparable.
start,control
Optional. These specify the arguments start and control of rmh, giving complete control over the simulation algorithm. Applicable only when Y is a fitted model of class "ppm".
nrep
Number of iterations in the Metropolis-Hastings simulation algorithm. Applicable only when Y is a fitted model of class "ppm".
transform
Optional. A transformation to be applied to the function values, before the envelopes are computed. An expression object (see Details).
global
Logical flag indicating whether envelopes should be pointwise (global=FALSE) or simultaneous (global=TRUE).
ginterval
Optional. A vector of length 2 specifying the interval of $r$ values for the simultaneous critical envelopes. Only relevant if global=TRUE.
use.theory
Logical value indicating whether to use the theoretical value, computed by fun, as the reference value for simultaneous envelopes. Applicable only when global=TRUE. Default is use.theory=TRUE if Y is a point pattern, or a point process model equivalent to Complete Spatial Randomness, and use.theory=FALSE otherwise.
alternative
Character string determining whether the envelope corresponds to a two-sided test (side="two.sided", the default) or a one-sided test with a lower critical boundary (side="less") or a one-sided test with an upper critical boundary (side="greater").
scale
Optional. Scaling function for global envelopes. A function in the R language which determines the relative scale of deviations, as a function of distance $r$, when computing the global envelopes. Applicable only when global=TRUE. Summary function values for distance r will be divided by scale(r) before the maximum deviation is computed. The resulting global envelopes will have width proportional to scale(r).
clamp
Logical value indicating how to compute envelopes when alternative="less" or alternative="greater". Deviations of the observed summary function from the theoretical summary function are initially evaluated as signed real numbers, with large positive values indicating consistency with the alternative hypothesis. If clamp=FALSE (the default), these values are not changed. If clamp=TRUE, any negative values are replaced by zero.
savefuns
Logical flag indicating whether to save all the simulated function values.
savepatterns
Logical flag indicating whether to save all the simulated point patterns.
nsim2
Number of extra simulated point patterns to be generated if it is necessary to use simulation to estimate the theoretical mean of the summary function. Only relevant when global=TRUE and the simulations are not based on CSR.
VARIANCE
Logical. If TRUE, critical envelopes will be calculated as sample mean plus or minus nSD times sample standard deviation.
nSD
Number of estimated standard deviations used to determine the critical envelopes, if VARIANCE=TRUE.
Yname
Character string that should be used as the name of the data point pattern Y when printing or plotting the results.
maxnerr
Maximum number of rejected patterns. If fun yields an error when applied to a simulated point pattern (for example, because the pattern is empty and fun requires at least one point), the pattern will be rejected and a new random point pattern will be generated. If this happens more than maxnerr times, the algorithm will give up.
do.pwrong
Logical. If TRUE, the algorithm will also estimate the true significance level of the “wrong” test (the test that declares the summary function for the data to be significant if it lies outside the pointwise critical boundary at any point). This estimate is printed when the result is printed.
envir.simul
Environment in which to evaluate the expression simulate, if not the current environment.

Value

An object of class "envelope" and "fv", see fv.object, which can be printed and plotted directly.Essentially a data frame containing columnsand eitherAdditionally, if savepatterns=TRUE, the return value has an attribute "simpatterns" which is a list containing the nsim simulated patterns. If savefuns=TRUE, the return value has an attribute "simfuns" which is an object of class "fv" containing the summary functions computed for each of the nsim simulated patterns.

Errors and warnings

An error may be generated if one of the simulations produces a point pattern that is empty, or is otherwise unacceptable to the function fun. The upper envelope may be NA (plotted as plus or minus infinity) if some of the function values computed for the simulated point patterns are NA. Whether this occurs will depend on the function fun, but it usually happens when the simulated point pattern does not contain enough points to compute a meaningful value.

Confidence intervals

Simulation envelopes do not compute confidence intervals; they generate significance bands. If you really need a confidence interval for the true summary function of the point process, use lohboot. See also varblock.

Edge corrections

It is common to apply a correction for edge effects when calculating a summary function such as the $K$ function. Typically the user has a choice between several possible edge corrections. In a call to envelope, the user can specify the edge correction to be applied in fun, using the argument correction. See the Examples below.

Details

The envelope command performs simulations and computes envelopes of a summary statistic based on the simulations. The result is an object that can be plotted to display the envelopes. The envelopes can be used to assess the goodness-of-fit of a point process model to point pattern data.

For the most basic use, if you have a point pattern X and you want to test Complete Spatial Randomness (CSR), type plot(envelope(X, Kest,nsim=39)) to see the $K$ function for X plotted together with the envelopes of the $K$ function for 39 simulations of CSR. The envelope function is generic, with methods for the classes "ppp", "ppm" and "kppm" described here. There are also methods for the classes "pp3", "lpp" and "lppm" which are described separately under envelope.pp3 and envelope.lpp. Envelopes can also be computed from other envelopes, using envelope.envelope. To create simulation envelopes, the command envelope(Y, ...) first generates nsim random point patterns in one of the following ways.

  • If Y is a point pattern (an object of class "ppp") and simulate=NULL, then we generate nsim simulations of Complete Spatial Randomness (i.e. nsim simulated point patterns each being a realisation of the uniform Poisson point process) with the same intensity as the pattern Y. (If Y is a multitype point pattern, then the simulated patterns are also given independent random marks; the probability distribution of the random marks is determined by the relative frequencies of marks in Y.)
  • If Y is a fitted point process model (an object of class "ppm" or "kppm") and simulate=NULL, then this routine generates nsim simulated realisations of that model.
  • If simulate is supplied, then it determines how the simulated point patterns are generated. It may be either
    • an expression in the R language, typically containing a call to a random generator. This expression will be evaluated nsim times to yield nsim point patterns. For example if simulate=expression(runifpoint(100)) then each simulated pattern consists of exactly 100 independent uniform random points.
    • a list of point patterns. The entries in this list will be taken as the simulated patterns.
    • an object of class "envelope". This should have been produced by calling envelope with the argument savepatterns=TRUE. The simulated point patterns that were saved in this object will be extracted and used as the simulated patterns for the new envelope computation. This makes it possible to plot envelopes for two different summary functions based on exactly the same set of simulated point patterns.

The summary statistic fun is applied to each of these simulated patterns. Typically fun is one of the functions Kest, Gest, Fest, Jest, pcf, Kcross, Kdot, Gcross, Gdot, Jcross, Jdot, Kmulti, Gmulti, Jmulti or Kinhom. It may also be a character string containing the name of one of these functions.

The statistic fun can also be a user-supplied function; if so, then it must have arguments X and r like those in the functions listed above, and it must return an object of class "fv".

Upper and lower critical envelopes are computed in one of the following ways:

The return value is an object of class "fv" containing the summary function for the data point pattern, the upper and lower simulation envelopes, and the theoretical expected value (exact or estimated) of the summary function for the model being tested. It can be plotted using plot.envelope.

If VARIANCE=TRUE then the return value also includes the sample mean, sample variance and other quantities.

Arguments can be passed to the function fun through .... This means that you simply specify these arguments in the call to envelope, and they will be passed to fun. In particular, the argument correction determines the edge correction to be used to calculate the summary statistic. See the section on Edge Corrections, and the Examples.

Arguments can also be passed to the function fun through the list funargs. This mechanism is typically used if an argument of fun has the same name as an argument of envelope. The list funargs should contain entries of the form name=value, where each name is the name of an argument of fun.

There is also an option, rarely used, in which different function arguments are used when computing the summary function for the data Y and for the simulated patterns. If funYargs is given, it will be used when the summary function for the data Y is computed, while funargs will be used when computing the summary function for the simulated patterns. This option is only needed in rare cases: usually the basic principle requires that the data and simulated patterns must be treated equally, so that funargs and funYargs should be identical.

If Y is a fitted cluster point process model (object of class "kppm"), and simulate=NULL, then the model is simulated directly using simulate.kppm. If Y is a fitted Gibbs point process model (object of class "ppm"), and simulate=NULL, then the model is simulated by running the Metropolis-Hastings algorithm rmh. Complete control over this algorithm is provided by the arguments start and control which are passed to rmh.

For simultaneous critical envelopes (global=TRUE) the following options are also useful:

It is also possible to extract the summary functions for each of the individual simulated point patterns, by setting savefuns=TRUE. Then the return value also has an attribute "simfuns" containing all the summary functions for the individual simulated patterns. It is an "fv" object containing functions named sim1, sim2, ... representing the nsim summary functions.

It is also possible to save the simulated point patterns themselves, by setting savepatterns=TRUE. Then the return value also has an attribute "simpatterns" which is a list of length nsim containing all the simulated point patterns.

See plot.envelope and plot.fv for information about how to plot the envelopes.

Different envelopes can be recomputed from the same data using envelope.envelope. Envelopes can be combined using pool.envelope.

References

Baddeley, A., Diggle, P.J., Hardegen, A., Lawrence, T., Milne, R.K. and Nair, G. (2014) On tests of spatial pattern based on simulation envelopes. Ecological Monographs, to appear. Cressie, N.A.C. Statistics for spatial data. John Wiley and Sons, 1991.

Diggle, P.J. Statistical analysis of spatial point patterns. Arnold, 2003.

Ripley, B.D. (1981) Spatial statistics. John Wiley and Sons.

Ripley, B.D. Statistical inference for spatial processes. Cambridge University Press, 1988.

Stoyan, D. and Stoyan, H. (1994) Fractals, random shapes and point fields: methods of geometrical statistics. John Wiley and Sons.

See Also

dclf.test, mad.test for envelope-based tests. fv.object, plot.envelope, plot.fv, envelope.envelope, pool.envelope for handling envelopes. There are also methods for print and summary. Kest, Gest, Fest, Jest, pcf, ppp, ppm, default.expand

Examples

Run this code
 X <- simdat

 # Envelope of K function under CSR
 ## Not run: 
#  plot(envelope(X))
#  ## End(Not run)
 

 # Translation edge correction (this is also FASTER):
 ## Not run: 
#  plot(envelope(X, correction="translate"))
#  ## End(Not run)
 

# Global envelopes
 ## Not run: 
#  plot(envelope(X, Lest, global=TRUE))
#  plot(envelope(X, Kest,  global=TRUE, scale=function(r) { r }))
#  ## End(Not run)
 

 # Envelope of K function for simulations from Gibbs model 
 ## Not run: 
#  fit <- ppm(cells ~1, Strauss(0.05))
#  plot(envelope(fit))
#  plot(envelope(fit), global=TRUE)
#  ## End(Not run)
 

 # Envelope of K function for simulations from cluster model 
 fit <- kppm(redwood ~1, "Thomas")
 ## Not run: 
#  plot(envelope(fit, Gest))
#  plot(envelope(fit, Gest, global=TRUE))
#  ## End(Not run)
 

 # Envelope of G function under CSR
 ## Not run: 
#  plot(envelope(X, Gest))
#  ## End(Not run)
 

 # Envelope of L function under CSR
 #  L(r) = sqrt(K(r)/pi)
 ## Not run: 
#   E <- envelope(X, Kest)
#   plot(E, sqrt(./pi) ~ r)
#  ## End(Not run)
 

 # Simultaneous critical envelope for L function
 # (alternatively, use Lest)
 ## Not run: 
#   plot(envelope(X, Kest, transform=expression(sqrt(./pi)), global=TRUE))
#  ## End(Not run)
 

 ## One-sided envelope
 ## Not run: 
#   plot(envelope(X, Lest, alternative="less"))
#  ## End(Not run)
 
 
 # How to pass arguments needed to compute the summary functions:
 # We want envelopes for Jcross(X, "A", "B") 
 # where "A" and "B" are types of points in the dataset 'demopat'

 data(demopat)
 ## Not run: 
#  plot(envelope(demopat, Jcross, i="A", j="B"))
#  ## End(Not run)
 
 
 # Use of `simulate'
 ## Not run: 
#  plot(envelope(cells, Gest, simulate=expression(runifpoint(42))))
#  plot(envelope(cells, Gest, simulate=expression(rMaternI(100,0.02))))
#  ## End(Not run)
 

 # Envelope under random toroidal shifts
 data(amacrine)
 ## Not run: 
#  plot(envelope(amacrine, Kcross, i="on", j="off",
#                simulate=expression(rshift(amacrine, radius=0.25)))) 
#  ## End(Not run)

 # Envelope under random shifts with erosion
 ## Not run: 
#  plot(envelope(amacrine, Kcross, i="on", j="off",
#               simulate=expression(rshift(amacrine, radius=0.1, edge="erode"))))
#  ## End(Not run)
  
 # Envelope of INHOMOGENEOUS K-function with fitted trend

 # The following is valid.
 # Setting lambda=fit means that the fitted model is re-fitted to
 # each simulated pattern to obtain the intensity estimates for Kinhom.
 # (lambda=NULL would also be valid)

 fit <- kppm(redwood ~1, clusters="MatClust")
 ## Not run: 
#     plot(envelope(fit, Kinhom, lambda=fit, nsim=19))
#  ## End(Not run)
 

 # Note that the principle of symmetry, essential to the validity of
 # simulation envelopes, requires that both the observed and
 # simulated patterns be subjected to the same method of intensity
 # estimation. In the following example it would be incorrect to set the
 # argument 'lambda=red.dens' in the envelope command, because this
 # would mean that the inhomogeneous K functions of the simulated
 # patterns would be computed using the intensity function estimated
 # from the original redwood data, violating the symmetry.  There is
 # still a concern about the fact that the simulations are generated
 # from a model that was fitted to the data; this is only a problem in
 # small datasets.

## Not run: 
#  red.dens <- density(redwood, sigma=bw.diggle)
#  plot(envelope(redwood, Kinhom, sigma=bw.diggle,
#          simulate=expression(rpoispp(red.dens))))
#  ## End(Not run)

 # Precomputed list of point patterns
## Not run: 
#  nX <- npoints(X)
#  PatList <- list()
#  for(i in 1:19) PatList[[i]] <- runifpoint(nX)
#  E <- envelope(X, Kest, nsim=19, simulate=PatList)
# ## End(Not run)


# re-using the same point patterns
## Not run: 
#  EK <- envelope(X, Kest, savepatterns=TRUE)
#  EG <- envelope(X, Gest, simulate=EK)
# ## End(Not run)

Run the code above in your browser using DataLab