project.ppm(object, ..., fatal=FALSE, trace=FALSE)
"ppm"
)."ppm"
).ppm
fits Gibbs point process models to point pattern data.
By default, the fitted model returned by ppm
may not
actually exist as a point process. First, some of the fitted coefficients of the model
may be NA
or infinite values.
This usually occurs when the data are insufficient to estimate
all the parameters. The model is said to be
unidentifiable or confounded.
Second, unlike a regression model, which is well-defined for any finite values
of the fitted regression coefficients, a Gibbs point process model
is only well-defined if the fitted interaction parameters
satisfy some constraints.
A famous example is the Strauss process (see Strauss
)
which exists only when the interaction parameter $\gamma$
is less than or equal to 1. For values $\gamma > 1$,
the probability density is not integrable and the process does not
exist (and cannot be simulated).
By default, ppm
does not enforce the constraint that
a fitted Strauss process (for example) must satisfy
$\gamma \le 1$.
This is because a fitted parameter value of $\gamma > 1$
could be useful information for data analysis, as it indicates that
the Strauss model is not appropriate, and suggests a clustered model should be
fitted.
The function project.ppm
modifies the model object
so that the model is valid.
project.ppm
identifies the terms in the model object
that are associated with illegal parameter values (i.e. parameter
values which are either NA
, infinite, or outside their permitted
range). It considers all possible sub-models of object
obtained by deleting one or more
of these terms. It identifies which of these submodels are valid,
and chooses the valid submodel with the largest pseudolikelihood. The result
of project.ppm
is the true maximum pseudolikelihood fit to the
data.
For large datasets or complex models, the algorithm used in
project.ppm
may be time-consuming, because it takes time to
compute all the sub-models. A faster, approximate
algorithm can be applied by setting
spatstat.options(project.fast=TRUE)
. This produces a
valid submodel, which may not be the maximum pseudolikelihood submodel.
Use the function valid.ppm
to check whether a fitted model
object specifies a well-defined point process.
Use the expression all(is.finite(coef(object)))
to determine
whether all parameters are identifiable.
ppm
,
valid.ppm
,
spatstat.options
fit <- ppm(redwood, ~1, Strauss(0.1))
coef(fit)
fit2 <- project.ppm(fit)
coef(fit2)
Run the code above in your browser using DataLab