Construct an SPDE mesh for use with sdmTMB.
Usage
make_mesh(
data,
xy_cols,
type = c("kmeans", "cutoff", "cutoff_search"),
cutoff,
n_knots,
seed = 42,
mesh = NULL,
fmesher_func = fmesher::fm_rcdt_2d_inla,
convex = NULL,
concave = convex,
...
)
# S3 method for class 'sdmTMBmesh'
plot(x, ...)
Arguments
- data
A data frame.
- xy_cols
A character vector of x and y column names contained in
data
. These should likely be in an equal distance projection. For a helper function to convert to UTMs, seeadd_utm_columns()
.- type
Method to create the mesh. Also see
mesh
argument to supply your own mesh.- cutoff
An optional cutoff if type is
"cutoff"
. The minimum allowed triangle edge length.- n_knots
The number of desired knots if
type
is not"cutoff"
.- seed
Random seed. Affects
stats::kmeans()
determination of knot locations iftype = "kmeans"
.- mesh
An optional mesh created via fmesher instead of using the above convenience options.
- fmesher_func
Which fmesher function to use. Options include
fmesher::fm_rcdt_2d_inla()
andfmesher::fm_mesh_2d_inla()
along with version without the_inla
on the end.- convex
If specified, passed to
fmesher::fm_nonconvex_hull()
. Distance to extend non-convex hull from data.- concave
If specified, passed to
fmesher::fm_nonconvex_hull()
. "Minimum allowed reentrant curvature". Defaults toconvex
.- ...
Passed to
graphics::plot()
.- x
Output from
make_mesh()
.
Value
make_mesh()
: A list of class sdmTMBmesh
. The element mesh
is the output
from fmesher_func
(default is fmesher::fm_mesh_2d_inla()
). See
mesh$mesh$n
for the number of vertices.
plot.sdmTMBmesh()
: A plot of the mesh and data points. To make your
own ggplot2 version, pass your_mesh$mesh
to inlabru::gg()
.
Examples
# Extremely simple cutoff:
mesh <- make_mesh(pcod, c("X", "Y"), cutoff = 5, type = "cutoff")
plot(mesh)
# Using a k-means algorithm to assign vertices:
mesh <- make_mesh(pcod, c("X", "Y"), n_knots = 50, type = "kmeans")
plot(mesh)
# \donttest{
# But, it's better to develop more tailored meshes:
# Pass arguments via '...' to fmesher::fm_mesh_2d_inla():
mesh <- make_mesh(
pcod, c("X", "Y"),
fmesher_func = fmesher::fm_mesh_2d_inla,
cutoff = 8, # minimum triangle edge length
max.edge = c(20, 40), # inner and outer max triangle lengths
offset = c(5, 40) # inner and outer border widths
)
plot(mesh)
# Or define a mesh directly with fmesher (formerly in INLA):
inla_mesh <- fmesher::fm_mesh_2d_inla(
loc = cbind(pcod$X, pcod$Y), # coordinates
max.edge = c(25, 50), # max triangle edge length; inner and outer meshes
offset = c(5, 25), # inner and outer border widths
cutoff = 5 # minimum triangle edge length
)
mesh <- make_mesh(pcod, c("X", "Y"), mesh = inla_mesh)
plot(mesh)
# }