Ensures that a fitted point process model satisfies the integrability conditions for existence of the point process.

`project.ppm(object, …, fatal=FALSE, trace=FALSE)`# S3 method for ppm
emend(object, …, fatal=FALSE, trace=FALSE)

object

Fitted point process model (object of class `"ppm"`

).

…

Ignored.

fatal

Logical value indicating whether to generate an error if the model cannot be projected to a valid model.

trace

Logical value indicating whether to print a trace of the decision process.

Another point process model (object of class `"ppm"`

).

The functions `emend.ppm`

and `project.ppm`

are identical:
`emend.ppm`

is a method for the generic `emend`

,
while `project.ppm`

is an older name for the same function.

The purpose of the function is to ensure that a fitted model is valid.

The model-fitting function `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 `emend.ppm`

or `project.ppm`

modifies the model `object`

so that the model is valid. It
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 `emend.ppm`

or `project.ppm`

is the
true maximum pseudolikelihood fit to the data.

For large datasets or complex models, the algorithm used in
`emend.ppm`

or
`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.

# NOT RUN { fit <- ppm(redwood ~1, Strauss(0.1)) coef(fit) fit2 <- emend(fit) coef(fit2) # }