Nothing
## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
library(kableExtra)
## ----echo = FALSE, results='hide', message=FALSE, warning=FALSE---------------
library(GGally)
# refactor from sp to sf when meuse dataset available through sf
library(ggspatial)
library(spData)
library(sf)
library(cowplot)
library(giscoR)
library(wesanderson)
library(magrittr)
library(kableExtra)
library(knitr)
library(ggplot2)
library(inlabru)
library(fmesher)
## -----------------------------------------------------------------------------
# load data
library(sp)
data("meuse")
data("meuse.riv")
data("meuse.grid")
## ----sample, fig.height = 4, fig.width = 6, fig.cap = "Sample locations of heavy metal concentration levels (ppm) of four metals in the topsoil of the Meuse river floodplain, Netherlands.", echo = FALSE----
# map study area
# read in and project spatial data
m.river <- as.data.frame(meuse.riv[meuse.riv[, 2] > 329000 & meuse.riv[, 2] < 334200, ])
colnames(m.river) <- c("x", "y")
m.river <- sf::st_as_sf(m.river,
coords = c("x", "y"),
crs = 28992
) %>%
dplyr::summarise(geometry = sf::st_combine(geometry)) %>%
sf::st_cast("POLYGON")
m.grid <- sf::st_as_sf(meuse.grid,
coords = c("x", "y"),
crs = 28992
)
m.data <- sf::st_as_sf(meuse,
coords = c("x", "y"),
crs = 28992
)
mRiv <- sf::st_transform(m.river, crs = 4326)
mGrid <- sf::st_transform(m.grid, crs = 4326)
mDat <- sf::st_transform(m.data, crs = 4326)
# create map breaks and labels
xbreaks <- seq(5.72, 5.76, .01)
xlabels <- unlist(sapply(xbreaks, function(x) paste(x, "°E")))
ybreaks <- seq(50.95, 51.00, .01)
ylabels <- unlist(sapply(ybreaks, function(x) paste(x, "°N")))
# create reference map
Europe <- giscoR::gisco_get_countries(region = "Europe")
r.bb <- sf::st_bbox(mRiv)
r.bb[1] <- r.bb[1] - 0.5
r.bb[2] <- r.bb[2] - 0.3
r.bb[3] <- r.bb[3] + 0.5
r.bb[4] <- r.bb[4] + 0.3
rbox <- sf::st_as_sfc(r.bb)
ggm1 <- ggplot2::ggplot() +
ggplot2::geom_sf(data = Europe, fill = "cornsilk") +
ggplot2::geom_sf(data = rbox, fill = NA, color = "red", size = 1.2) +
coord_sf(
xlim = c(-5, 20),
ylim = c(46.5, 56.5)
) +
theme_void() +
theme(
panel.background = element_rect(fill = "#c9f4fe"),
panel.border = element_rect(
colour = "black",
fill = NA,
linewidth = 1.5
)
)
# create site map
ggm2 <- ggplot2::ggplot() +
ggplot2::geom_sf(data = mDat) +
theme_classic() +
geom_sf(data = mRiv, fill = "lightblue") +
ggspatial::annotation_north_arrow(
which_north = "grid", height = unit(1, "cm"), width = unit(1, "cm"),
pad_y = unit(4, "cm")
)
cowplot::ggdraw() + cowplot::draw_plot(ggm2) + cowplot::draw_plot(ggm1, x = .18, y = 0.7, width = 0.35, height = 0.23)
## ----pairs-expl, fig.height = 4, fig.width = 6, fig.cap = "Pairs plots of the concentration levels (ppm) of four heavy metals measured in the topsoil of the Meuse river floodplain, Netherlands.", echo = FALSE----
# Visualize heavy metal data
ggpairs(meuse[, 3:6])
## ----warning = FALSE----------------------------------------------------------
library(clustTMB)
mod.gauss <- clustTMB(response = meuse[, 3:6], G = 3, covariance.structure = "VVV")
## -----------------------------------------------------------------------------
mod.ln <- clustTMB(
response = meuse[, 3:6],
family = lognormal(link = "identity"),
G = 3, covariance.structure = "VVV"
)
## -----------------------------------------------------------------------------
library(fmesher)
loc <- meuse[, 1:2]
Bnd <- fmesher::fm_nonconvex_hull(as.matrix(loc), convex = 200)
meuse.mesh <- fmesher::fm_mesh_2d(as.matrix(loc),
max.edge = c(300, 1000),
boundary = Bnd
)
## ----fig1, fig.height = 3, fig.width = 4, warning = FALSE---------------------
ggplot() +
inlabru::gg(meuse.mesh) +
geom_point(mapping = aes(x = loc[, 1], y = loc[, 2], size = 0.5), size = 0.5) +
theme_classic()
## ----warning = FALSE----------------------------------------------------------
# convert coordinates to a spatial point data frame
Loc <- sf::st_as_sf(loc, coords = c("x", "y"))
# define spatial prediction coordinates
data("meuse.grid")
Meuse.Grid <- sf::st_as_sf(meuse.grid, coords = c("x", "y"))
mod.ln.sp <- clustTMB(
response = meuse[, 3:6],
family = lognormal(link = "identity"),
gatingformula = ~ gmrf(0 + 1 | loc),
G = 4, covariance.structure = "VVV",
spatial.list = list(loc = Loc, mesh = meuse.mesh),
projection.dat = Meuse.Grid
)
## -----------------------------------------------------------------------------
# Estimated fixed parameters
summary(mod.ln.sp$sdr, "fixed")
# Minimum negative log likelihood
mod.ln.sp$opt$objective
## ----BIC, echo = FALSE--------------------------------------------------------
df <- data.frame(
family = c(rep("lognormal", 2), rep("Gaussian", 2)),
space = c(1, 0, 1, 0),
clusters = c(4, 4, 6, 3),
BIC = c(4805, 4861, 4861, 4910)
)
kable_styling(
kable(df,
booktabs = TRUE,
caption = "Optimum cluster size and BIC scores for lognormal and Gaussian models with (1) and without (0) spatial random effects in the gating network."
),
full_width = TRUE
)
## ----pairs, fig.height = 4, fig.width = 6, fig.cap = "Pairs plots of the concentration levels (ppm) of four heavy metals measured in the topsoil of the Meuse river floodplain, Netherlands. Colors represent the four clusters estimated in the spatial lognormal FMM.", echo = FALSE----
# Visualize heavy metal data
Cluster <- factor(mod.ln.sp$report$classification)
ggpairs(meuse[, 3:6], aes(color = Cluster, alpha = 90.5)) +
scale_color_manual(values = wes_palette("Moonrise2", 4)) +
scale_fill_manual(values = wes_palette("Moonrise2", 4))
## ----pred, fig.height = 4, fig.width = 6, fig.cap = "Predicted cluster distribution of heavy metal concentration levels (ppm) of four metals in the topsoil of the Meuse river floodplain, Netherlands. Colors represent the four clusters estimated in the spatial lognormal FMM.", echo = FALSE, warning = FALSE----
Cluster <- factor(mod.ln.sp$report$Class_pred)
# create site map
ggm2 <- ggplot2::ggplot(mGrid) +
ggplot2::stat_sf_coordinates(aes(color = Cluster), geom = "point") +
theme_classic() +
scale_color_manual(values = wes_palette("Moonrise2", 4)) +
geom_sf(data = mRiv, fill = "lightblue") +
ggspatial::annotation_north_arrow(
which_north = "grid", height = unit(1, "cm"), width = unit(1, "cm"),
pad_y = unit(4, "cm")
)
cowplot::ggdraw() + cowplot::draw_plot(ggm2) + cowplot::draw_plot(ggm1, x = .18, y = 0.7, width = 0.35, height = 0.23)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.