| Title: | Random Fields on Metric Graphs |
|---|---|
| Description: | Facilitates creation and manipulation of metric graphs, such as street or river networks. Further facilitates operations and visualizations of data on metric graphs, and the creation of a large class of random fields and stochastic partial differential equations on such spaces. These random fields can be used for simulation, prediction and inference. In particular, linear mixed effects models including random field components can be fitted to data based on computationally efficient sparse matrix representations. Interfaces to the R packages 'INLA' and 'inlabru' are also provided, which facilitate working with Bayesian statistical models on metric graphs. The main references for the methods are Bolin, Simas and Wallin (2024) <doi:10.3150/23-BEJ1647>, Bolin, Kovacs, Kumar and Simas (2023) <doi:10.1090/mcom/3929> and Bolin, Simas and Wallin (2023) <doi:10.48550/arXiv.2304.03190> and <doi:10.48550/arXiv.2304.10372>. |
| Authors: | David Bolin [cre, aut], Alexandre Simas [aut], Jonas Wallin [aut] |
| Maintainer: | David Bolin <[email protected]> |
| License: | GPL (>=2) |
| Version: | 1.6.0.9000 |
| Built: | 2026-06-05 07:59:14 UTC |
| Source: | https://github.com/davidbolin/metricgraph |
'MetricGraph' is used for creation and manipulation of metric graphs, such as street or river networks. It also has several functions thatfacilitates operations and visualizations of data on metric graphs, and the creation of a large class of random fields and stochastic partial differential equations on such spaces. The main models are the Whittle-Matérn fields, which are specified through the fractional elliptic SPDE
and are parameters and is Gaussian white noise.
It contains exact implementations of the above model for and ,
and contains approximate implementations, via the finite element method, for any .
It also implements models based on graph Laplacians and isotropic covariance functions.
Several utility functions for specifying graphs, computing likelihoods, performing
prediction, simulating processes, and visualizing results on metric graphs are provided.
In particular, linear mixed effects models including random field components can be fitted to
data based on computationally efficient sparse matrix representations. Interfaces to the R
packages 'INLA' and 'inlabru' are also provided, which facilitate working with Bayesian statistical
models on metric graphs.
At the heart of the package is the R6 class [metric_graph()]. This is used for specifying
metric graphs, and contains various utility functions which are needed for specifying Gaussian
processes on such spaces.
Linear mixed effects models are provided (see
[graph_lme]) and perform
predictions (see [predict.graph_lme]). The package also has interfaces for
'INLA' (see [graph_spde]), and it this interface also works with 'inlabru'.
For a more detailed introduction to the package, see the 'MetricGraph' Vignettes.
Maintainer: David Bolin [email protected]
Authors:
David Bolin [email protected]
Alexandre Simas [email protected]
Jonas Wallin [email protected]
Useful links:
Report bugs at https://github.com/davidbolin/MetricGraph/issues
graph_lme objectAugment accepts a model object and a dataset and adds information about each observation in the dataset. It includes
predicted values in the .fitted column, residuals in the .resid column, and standard errors for the fitted values in a .se.fit column.
It also contains the New columns always begin with a . prefix to avoid overwriting columns in the original dataset.
## S3 method for class 'graph_lme' augment( x, newdata = NULL, which_repl = NULL, sd_post_re = FALSE, se_fit = FALSE, conf_int = FALSE, pred_int = FALSE, level = 0.95, edge_number = "edge_number", distance_on_edge = "distance_on_edge", coord_x = "coord_x", coord_y = "coord_y", data_coords = c("PtE", "spatial"), normalized = FALSE, no_nugget = FALSE, check_euclidean = FALSE, ... )## S3 method for class 'graph_lme' augment( x, newdata = NULL, which_repl = NULL, sd_post_re = FALSE, se_fit = FALSE, conf_int = FALSE, pred_int = FALSE, level = 0.95, edge_number = "edge_number", distance_on_edge = "distance_on_edge", coord_x = "coord_x", coord_y = "coord_y", data_coords = c("PtE", "spatial"), normalized = FALSE, no_nugget = FALSE, check_euclidean = FALSE, ... )
x |
A |
newdata |
A |
which_repl |
Which replicates to obtain the prediction. If |
sd_post_re |
Logical indicating whether or not a .sd_post_re column should be added to the augmented output containing the posterior standard deviations of the random effects. |
se_fit |
Logical indicating whether or not a .se_fit column should be added to the augmented output containing the standard errors of the fitted values. If |
conf_int |
Logical indicating whether or not confidence intervals for the posterior mean of the random effects should be built. |
pred_int |
Logical indicating whether or not prediction intervals for the fitted values should be built. If |
level |
Level of confidence and prediction intervals if they are constructed. |
edge_number |
Name of the variable that contains the edge number, the
default is |
distance_on_edge |
Name of the variable that contains the distance on
edge, the default is |
coord_x |
Column (or entry on the list) of the |
coord_y |
Column (or entry on the list) of the |
data_coords |
To be used only if |
normalized |
Are the distances on edges normalized? |
no_nugget |
Should the prediction be done without nugget? |
check_euclidean |
Check if the graph used to compute the resistance distance has Euclidean edges? The graph used to compute the resistance distance has the observation locations as vertices. |
... |
Additional arguments. |
A tidyr::tibble() with columns:
.fitted Fitted or predicted value.
.relwrconf Lower bound of the confidence interval of the random effects, if conf_int = TRUE
.reuprconf Upper bound of the confidence interval of the random effects, if conf_int = TRUE
.fittedlwrpred Lower bound of the prediction interval, if conf_int = TRUE
.fitteduprpred Upper bound of the prediction interval, if conf_int = TRUE
.fixed Prediction of the fixed effects.
.random Prediction of the random effects.
.resid The ordinary residuals, that is, the difference between observed and fitted values.
.std_resid The standardized residuals, that is, the ordinary residuals divided by the standard error of the fitted values (by the prediction standard error), if se_fit = TRUE or pred_int = TRUE.
.se_fit Standard errors of fitted values, if se_fit = TRUE.
.sd_post_re Standard deviation of the posterior mean of the random effects, if se_fit = TRUE.
Metric graph 'inlabru' mapper
## S3 method for class 'inla_metric_graph_spde' bru_get_mapper(model, ...) ## S3 method for class 'bru_mapper_inla_metric_graph_spde' ibm_n(mapper, ...) ## S3 method for class 'bru_mapper_inla_metric_graph_spde' ibm_values(mapper, ...) ## S3 method for class 'bru_mapper_inla_metric_graph_spde' ibm_jacobian(mapper, input, ...)## S3 method for class 'inla_metric_graph_spde' bru_get_mapper(model, ...) ## S3 method for class 'bru_mapper_inla_metric_graph_spde' ibm_n(mapper, ...) ## S3 method for class 'bru_mapper_inla_metric_graph_spde' ibm_values(mapper, ...) ## S3 method for class 'bru_mapper_inla_metric_graph_spde' ibm_jacobian(mapper, input, ...)
model |
An |
... |
Arguments passed on to other methods |
mapper |
A |
input |
The values for which to produce a mapping matrix |
Mirrors rSPDE::cross_validation() for bru fits (output from inlabru::bru()).
For each fold, the held-out responses are set to NA with
inlabru::bru_set_missing() and the model is refit with inlabru::bru_rerun().
When true_CV = FALSE, the original fit's mode$theta is held fixed so only
the latent posterior is updated; when TRUE, theta is re-estimated. Posterior
response samples are then drawn at the held-out locations via inlabru::generate().
Works with the exact, non-FEM SPDE models in MetricGraph
(inla_metric_graph_spde) and FEM-based rSPDE models alike.
cross_validation( models, model_names = NULL, scores = c("mae", "mse", "crps", "scrps", "dss"), cv_type = c("k-fold", "loo", "lpo"), weight_thr = NULL, k = 5, percentage = 20, number_folds = 10, n_samples = 1000, return_scores_folds = FALSE, orientation_results = c("negative", "positive"), include_best = TRUE, train_test_indexes = NULL, return_train_test = FALSE, return_post_samples = FALSE, return_true_test_values = FALSE, parallelize_RP = FALSE, n_cores_RP = parallel::detectCores() - 1, true_CV = TRUE, save_settings = FALSE, model_options_bru = list(), print = TRUE, fit_verbose = FALSE )cross_validation( models, model_names = NULL, scores = c("mae", "mse", "crps", "scrps", "dss"), cv_type = c("k-fold", "loo", "lpo"), weight_thr = NULL, k = 5, percentage = 20, number_folds = 10, n_samples = 1000, return_scores_folds = FALSE, orientation_results = c("negative", "positive"), include_best = TRUE, train_test_indexes = NULL, return_train_test = FALSE, return_post_samples = FALSE, return_true_test_values = FALSE, parallelize_RP = FALSE, n_cores_RP = parallel::detectCores() - 1, true_CV = TRUE, save_settings = FALSE, model_options_bru = list(), print = TRUE, fit_verbose = FALSE )
models |
A fitted model from |
model_names |
Character vector of model names. Defaults to |
scores |
Subset of |
cv_type |
One of |
weight_thr |
Threshold for |
k |
Number of folds for |
percentage |
Train percentage (1-99) for |
number_folds |
Number of folds for |
n_samples |
Number of posterior samples for sample-based scoring. |
return_scores_folds |
If |
orientation_results |
One of |
include_best |
Add a |
train_test_indexes |
Optional pre-built fold list. If supplied,
|
return_train_test |
Return the train/test indices used. |
return_post_samples |
Return posterior response samples (forces
|
return_true_test_values |
Return the true response values at test points. |
parallelize_RP |
Parallelize CRPS/SCRPS pairwise integrals. |
n_cores_RP |
Number of cores for |
true_CV |
If |
save_settings |
If |
model_options_bru |
List of options passed to inlabru. |
print |
Print partial progress. |
fit_verbose |
Pass |
Either a data.frame (default), or a list with scores_df plus the
optional components requested by return_* / save_settings arguments.
tidyr::drop_na() function for datasets on metric graphsApplies tidyr::drop_na() function for datasets obtained from a metric graph object.
## S3 method for class 'metric_graph_data' drop_na(data, ...)## S3 method for class 'metric_graph_data' drop_na(data, ...)
data |
The data list or |
... |
Additional parameters to be passed to |
A tidyr::tibble with the resulting selected columns.
Evaluates the exponential covariance function
exp_covariance(h, theta)exp_covariance(h, theta)
h |
Distances to evaluate the covariance function at. |
theta |
A vector |
A vector with the values of the covariance function.
dplyr::filter() function for datasets on metric graphsApplies dplyr::filter() function for datasets obtained from a metric graph object.
## S3 method for class 'metric_graph_data' filter(.data, ...)## S3 method for class 'metric_graph_data' filter(.data, ...)
.data |
The data list or |
... |
Additional parameters to be passed to |
A tidyr::tibble with the resulting selected columns.
Returns a 'ggplot2'-friendly data-frame with the marginal posterior densities.
## S3 method for class 'metric_graph_spde_result' gg_df( result, parameter = result$params, transform = TRUE, restrict_x_axis = parameter, restrict_quantiles = list(sigma = c(0, 1), range = c(0, 1), kappa = c(0, 1), sigma = c(0, 1)), ... )## S3 method for class 'metric_graph_spde_result' gg_df( result, parameter = result$params, transform = TRUE, restrict_x_axis = parameter, restrict_quantiles = list(sigma = c(0, 1), range = c(0, 1), kappa = c(0, 1), sigma = c(0, 1)), ... )
result |
A metric_graph_spde_result object. |
parameter |
Vector. Which parameters to get the posterior density in the
data.frame? The options are |
transform |
Should the posterior density be given in the original scale? |
restrict_x_axis |
Variables to restrict the range of x axis based on quantiles. |
restrict_quantiles |
List of quantiles to restrict x axis. |
... |
Not being used. |
A data.frame containing the posterior densities.
graph_lme objectGlance accepts a graph_lme object and returns a
tidyr::tibble() with exactly one row of model summaries.
The summaries are the square root of the estimated variance of the measurement error, residual
degrees of freedom, AIC, BIC, log-likelihood,
the type of latent model used in the fit and the total number of observations.
## S3 method for class 'graph_lme' glance(x, ...)## S3 method for class 'graph_lme' glance(x, ...)
x |
A |
... |
Additional arguments. Currently not used. |
A tidyr::tibble() with exactly one row and columns:
nobs Number of observations used.
sigma the square root of the estimated residual variance
logLik The log-likelihood of the model.
AIC Akaike's Information Criterion for the model.
BIC Bayesian Information Criterion for the model.
deviance Deviance of the model.
df.residual Residual degrees of freedom.
model.type Type of latent model fitted.
Prepare data frames or data lists to be used with 'inlabru' in metric graphs
graph_bru_process_data( data, edge_number = "edge_number", distance_on_edge = "distance_on_edge", loc = "loc" )graph_bru_process_data( data, edge_number = "edge_number", distance_on_edge = "distance_on_edge", loc = "loc" )
data |
A |
edge_number |
Name of the variable that contains the edge number, the
default is |
distance_on_edge |
Name of the variable that contains the distance on
edge, the default is |
loc |
character. Name of the locations to be used in 'inlabru' component. |
A list containing the processed data to be used in a user-friendly manner by 'inlabru'.
Extracts data from metric graphs to be used by 'INLA' and 'inlabru'.
graph_data_spde( graph_spde, name = "field", repl = NULL, repl_col = NULL, group = NULL, group_col = NULL, likelihood_col = NULL, resp_col = NULL, covariates = NULL, only_pred = FALSE, loc_name = NULL, tibble = FALSE, drop_na = FALSE, drop_all_na = TRUE, loc = deprecated() )graph_data_spde( graph_spde, name = "field", repl = NULL, repl_col = NULL, group = NULL, group_col = NULL, likelihood_col = NULL, resp_col = NULL, covariates = NULL, only_pred = FALSE, loc_name = NULL, tibble = FALSE, drop_na = FALSE, drop_all_na = TRUE, loc = deprecated() )
graph_spde |
An |
name |
A character string with the base name of the effect. |
repl |
Which replicates? If there is no replicates, one
can set |
repl_col |
Column containing the replicates. If the replicate is the internal group variable, set the replicates
to ".group". If not replicates, set to |
group |
Which groups? If there is no groups, one
can set |
group_col |
Which "column" of the data contains the group variable? |
likelihood_col |
If only a single likelihood, this variable should be |
resp_col |
If only a single likelihood, this variable should be |
covariates |
Vector containing the column names of the covariates. If no covariates, then it should be |
only_pred |
Should only return the |
loc_name |
Character with the name of the location variable to be used in 'inlabru' prediction. |
tibble |
Should the data be returned as a |
drop_na |
Should the rows with at least one NA for one of the columns be removed? DEFAULT is |
drop_all_na |
Should the rows with all variables being NA be removed? DEFAULT is |
loc |
An 'INLA' and 'inlabru' friendly list with the data.
This function simulates point patterns from a log-Gaussian Cox process (LGCP)
driven by Whittle-Matérn Gaussian random fields on metric graphs. The intensity
function is modeled as , where is an intercept parameter
and is a Gaussian field with Whittle-Matérn covariance.
graph_lgcp_sim(n = 1, intercept = 0, sigma, range, alpha, graph)graph_lgcp_sim(n = 1, intercept = 0, sigma, range, alpha, graph)
n |
Integer. Number of replicate point patterns to simulate. Default is 1. |
intercept |
Numeric scalar or vector. Mean value(s) of the log-intensity field. Can be a constant or vary spatially if provided as a vector of length equal to the number of mesh nodes. |
sigma |
Numeric. Marginal standard deviation parameter of the Gaussian field. |
range |
Numeric. Practical correlation range parameter of the Gaussian field. |
alpha |
Numeric. Smoothness parameter of the Whittle-Matérn field. Currently supports values 1 and 2, corresponding to exponential and Matérn-3/2 covariance functions respectively. |
graph |
A |
The function implements a two-step simulation procedure:
Simulate the Gaussian random field u(s) using finite element methods
Generate point locations using acceptance-rejection sampling from the
intensity
The Gaussian field is characterized by the SPDE:
where are derived from the range and sigma parameters, and is white noise.
If n = 1, returns a list with components:
Numeric vector of the simulated Gaussian field values at mesh nodes
Integer vector of edge numbers where points were simulated
Numeric vector of locations along edges (normalized coordinates)
If n > 1, returns a list of length n, where each element is a list with
the above components.
lgcp_graph for fitting LGCP models,
precompute_lgcp_graph for efficient model fitting
## Not run: # Create a metric graph and build mesh graph <- metric_graph$new() graph$build_mesh(h = 0.1) graph$compute_fem() # Simulate a single point pattern lgcp_data <- graph_lgcp_sim( intercept = -1, sigma = 0.5, range = 2, alpha = 2, graph = graph ) # Simulate multiple replicates lgcp_replicates <- graph_lgcp_sim( n = 10, intercept = -1, sigma = 0.5, range = 2, alpha = 2, graph = graph ) # Plot the simulated intensity graph$plot_function(X = exp(lgcp_data$u), vertex_size = 0) ## End(Not run)## Not run: # Create a metric graph and build mesh graph <- metric_graph$new() graph$build_mesh(h = 0.1) graph$compute_fem() # Simulate a single point pattern lgcp_data <- graph_lgcp_sim( intercept = -1, sigma = 0.5, range = 2, alpha = 2, graph = graph ) # Simulate multiple replicates lgcp_replicates <- graph_lgcp_sim( n = 10, intercept = -1, sigma = 0.5, range = 2, alpha = 2, graph = graph ) # Plot the simulated intensity graph$plot_function(X = exp(lgcp_data$u), vertex_size = 0) ## End(Not run)
Fitting linear mixed effects model in metric graphs. The random effects can be Gaussian Whittle-Matern fields, discrete Gaussian Markov random fields based on the graph Laplacian, as well as Gaussian random fields with isotropic covariance functions.
graph_lme( formula, graph, model = list(type = "linearModel"), which_repl = NULL, optim_method = "L-BFGS-B", possible_methods = "L-BFGS-B", model_options = list(), BC = 1, previous_fit = NULL, fix_coeff = FALSE, parallel = FALSE, n_cores = parallel::detectCores() - 1, optim_controls = list(), improve_hessian = FALSE, hessian_args = list(), check_euclidean = TRUE )graph_lme( formula, graph, model = list(type = "linearModel"), which_repl = NULL, optim_method = "L-BFGS-B", possible_methods = "L-BFGS-B", model_options = list(), BC = 1, previous_fit = NULL, fix_coeff = FALSE, parallel = FALSE, n_cores = parallel::detectCores() - 1, optim_controls = list(), improve_hessian = FALSE, hessian_args = list(), check_euclidean = TRUE )
formula |
Formula object describing the relation between the response variables and the fixed effects. |
graph |
A |
model |
The random effects model that will be used (it also includes the
option of not having any random effects). It can be either a character,
whose options are 'lm', for linear models without random effects; 'WM1' and
'WM2' for Whittle-Matern models with |
which_repl |
Vector or list containing which replicates to consider in
the model. If |
optim_method |
The method to be used with |
possible_methods |
Which methods to try in case the optimization fails or the hessian is not positive definite. The options are 'Nelder-Mead', 'L-BFGS-B', 'BFGS', 'CG' and 'SANN'. By default only 'L-BFGS-B' is considered. |
model_options |
A list containing additional options to be used in the model. Currently, it is possible to fix parameters during the estimation or change the starting values of the parameters. The general structure of the elements of the list is |
BC |
For |
previous_fit |
An object of class |
fix_coeff |
If using a previous fit, should all coefficients be fixed at the starting values? |
parallel |
logical. Indicating whether to use |
n_cores |
Number of cores to be used if parallel is true. |
optim_controls |
Additional controls to be passed to |
improve_hessian |
Should a more precise estimate of the hessian be obtained? Turning on might increase the overall time. |
hessian_args |
List of controls to be used if |
check_euclidean |
Check if the graph used to compute the resistance distance has Euclidean edges? The graph used to compute the resistance distance has the observation locations as vertices. |
A list containing the fitted model.
This function creates an 'INLA' object that can be used in 'INLA' or 'inlabru' to fit Whittle-Matérn fields on metric graphs.
graph_spde( graph_object, alpha = 1, LGCP = FALSE, directional = FALSE, stationary_endpoints = "all", parameterization = c("matern", "spde"), start_range = NULL, prior_range = NULL, range_lower_bound = NULL, range_upper_bound = NULL, range_prec_inc = 1, start_kappa = NULL, prior_kappa = NULL, kappa_lower_bound = NULL, kappa_upper_bound = NULL, kappa_prec_inc = 1, start_sigma = NULL, prior_sigma = NULL, sigma_lower_bound = NULL, sigma_upper_bound = NULL, sigma_prec_inc = 1, start_tau = NULL, prior_tau = NULL, tau_lower_bound = NULL, tau_upper_bound = NULL, tau_prec_inc = 1, factor_start_range = 0.3, type_start_range_bbox = "diag", shared_lib = "detect", debug = FALSE, verbose = 0 )graph_spde( graph_object, alpha = 1, LGCP = FALSE, directional = FALSE, stationary_endpoints = "all", parameterization = c("matern", "spde"), start_range = NULL, prior_range = NULL, range_lower_bound = NULL, range_upper_bound = NULL, range_prec_inc = 1, start_kappa = NULL, prior_kappa = NULL, kappa_lower_bound = NULL, kappa_upper_bound = NULL, kappa_prec_inc = 1, start_sigma = NULL, prior_sigma = NULL, sigma_lower_bound = NULL, sigma_upper_bound = NULL, sigma_prec_inc = 1, start_tau = NULL, prior_tau = NULL, tau_lower_bound = NULL, tau_upper_bound = NULL, tau_prec_inc = 1, factor_start_range = 0.3, type_start_range_bbox = "diag", shared_lib = "detect", debug = FALSE, verbose = 0 )
graph_object |
A |
alpha |
The order of the SPDE. |
LGCP |
Logical. If TRUE, the model will be used as a latent model for a Log-Gaussian Cox Process. Default is FALSE. |
directional |
Should a directional model be used? Currently only implemented for |
stationary_endpoints |
Which vertices of degree 1 should contain stationary boundary conditions? Set to "all" for all vertices of degree 1, "none" for none of the vertices of degree 1, or pass the indices of the vertices of degree 1 for which stationary conditions are desired. |
parameterization |
Which parameterization to be used? The options are 'matern' (sigma and range) and 'spde' (sigma and kappa). |
start_range |
Starting value for range parameter. |
prior_range |
a |
range_lower_bound |
Lower bound for the range parameter. Default is NULL (no lower bound, or 0). |
range_upper_bound |
Upper bound for the range parameter. Default is NULL (no upper bound). If specified, a beta prior will be used. |
range_prec_inc |
Amount to increase the precision in the beta prior distribution for the range parameter. Default is 1. Similar to nu.prec.inc in rspde.matern(). |
start_kappa |
Starting value for kappa. |
prior_kappa |
a |
kappa_lower_bound |
Lower bound for the kappa parameter. Default is NULL (no lower bound, or 0). |
kappa_upper_bound |
Upper bound for the kappa parameter. Default is NULL (no upper bound). If specified, a beta prior will be used. |
kappa_prec_inc |
Amount to increase the precision in the beta prior distribution for the kappa parameter. Default is 1. |
start_sigma |
Starting value for sigma. |
prior_sigma |
a |
sigma_lower_bound |
Lower bound for the sigma parameter. Default is NULL (no lower bound, or 0). |
sigma_upper_bound |
Upper bound for the sigma parameter. Default is NULL (no upper bound). If specified, a beta prior will be used. |
sigma_prec_inc |
Amount to increase the precision in the beta prior distribution for the sigma parameter. Default is 1. |
start_tau |
Starting value for tau. |
prior_tau |
a |
tau_lower_bound |
Lower bound for the tau parameter. Default is NULL (no lower bound, or 0). |
tau_upper_bound |
Upper bound for the tau parameter. Default is NULL (no upper bound). If specified, a beta prior will be used. |
tau_prec_inc |
Amount to increase the precision in the beta prior distribution for the tau parameter. Default is 1. |
factor_start_range |
Factor to multiply the max/min dimension of the bounding box to obtain a starting value for range. Default is 0.3. |
type_start_range_bbox |
Which dimension from the bounding box should be used? The options are 'diag', the default, 'max' and 'min'. |
shared_lib |
Which shared lib to use for the cgeneric implementation? If "detect", it will check if the shared lib exists locally, in which case it will use it. Otherwise it will use 'INLA's shared library. If 'INLA', it will use the shared lib from 'INLA's installation. If 'rSPDE', then it will use the local installation of the rSPDE package (does not work if your installation is from CRAN). Otherwise, you can directly supply the path of the .so (or .dll) file. |
debug |
Should debug be displayed? |
verbose |
Level of verbosity. 0 is silent, 1 prints basic information, 2 prints more. |
This function is used to construct a Matern SPDE model on a metric graph.
The latent field is the solution of the SPDE
where is Gaussian
white noise on the metric graph. This model implements exactly
the cases in which or . For a finite
element approximation for general we refer the reader to the
'rSPDE' package and to the Whittle–Matérn fields with general smoothness vignette.
We also have the alternative parameterization ,
which can be interpreted as a range parameter.
Let and be the starting values for and
, we write and .
We assume priors on and to be normally distributed
with mean, respectively, and , and variance 10.
Similarly, if we let be the starting value for , then
we write and assume a normal prior for ,
with mean and variance 10.
An 'INLA' object.
Constructs observation/prediction weight matrices for metric graph models.
graph_spde_basis(graph_spde, repl = NULL, drop_na = FALSE, drop_all_na = TRUE)graph_spde_basis(graph_spde, repl = NULL, drop_na = FALSE, drop_all_na = TRUE)
graph_spde |
An |
repl |
Which replicates? If there is no replicates, or to
use all replicates, one can set to |
drop_na |
Should the rows with at least one NA for one of the columns be removed? DEFAULT is |
drop_all_na |
Should the rows with all variables being NA be removed? DEFAULT is |
The observation matrix.
Constructs observation/prediction weight matrices for metric graph models.
graph_spde_make_A(graph_spde, repl = NULL)graph_spde_make_A(graph_spde, repl = NULL)
graph_spde |
An |
repl |
Which replicates? If there is no replicates, or to
use all replicates, one can set to |
The observation matrix.
Computes appropriate starting values for optimization of Gaussian random field models on metric graphs.
graph_starting_values( graph, model = c("alpha1", "alpha2", "isoExp", "GL1", "GL2"), data = TRUE, data_name = NULL, range_par = FALSE, nu = FALSE, manual_data = NULL, like_format = FALSE, log_scale = FALSE, model_options = list(), rec_tau = TRUE, factor_start_range = 0.3, type_start_range_bbox = "diag" )graph_starting_values( graph, model = c("alpha1", "alpha2", "isoExp", "GL1", "GL2"), data = TRUE, data_name = NULL, range_par = FALSE, nu = FALSE, manual_data = NULL, like_format = FALSE, log_scale = FALSE, model_options = list(), rec_tau = TRUE, factor_start_range = 0.3, type_start_range_bbox = "diag" )
graph |
A |
model |
Type of model, "alpha1", "alpha2", "isoExp", "GL1", and "GL2" are supported. |
data |
Should the data be used to obtain improved starting values? |
data_name |
The name of the response variable in |
range_par |
Should an initial value for range parameter be returned instead of for kappa? |
nu |
Should an initial value for nu be returned? |
manual_data |
A vector (or matrix) of response variables. |
like_format |
Should the starting values be returned with sigma.e as the last element? This is the format for the likelihood constructor from the 'rSPDE' package. |
log_scale |
Should the initial values be returned in log scale? |
model_options |
List object containing the model options. |
rec_tau |
Should a starting value for the reciprocal of tau be given? |
factor_start_range |
Factor to multiply the max/min/diagonal dimension of the bounding box to obtain a starting value for range. Default is 0.5. |
type_start_range_bbox |
Which dimension from the bounding box should be used? The options are 'diag', the default, 'max' and 'min'. |
A vector, c(start_sigma_e, start_sigma, start_kappa)
This function fits log-Gaussian Cox process (LGCP) models for point pattern data on metric graphs using R-INLA. It handles the complex setup required for LGCP modeling, including creation of integration points, data preparation, and interface with INLA's Poisson likelihood framework. The function supports both exact and rational SPDE approximations, multiple replicates, and efficient refitting using precomputed quantities.
lgcp_graph( formula, graph, interpolate = TRUE, manual_integration_points = NULL, manual_covariates = NULL, use_current_mesh = TRUE, new_h = NULL, new_n = NULL, repl = ".all", repl_col = ".group", clone_graph = TRUE, precomputed_data = NULL, ... )lgcp_graph( formula, graph, interpolate = TRUE, manual_integration_points = NULL, manual_covariates = NULL, use_current_mesh = TRUE, new_h = NULL, new_n = NULL, repl = ".all", repl_col = ".group", clone_graph = TRUE, precomputed_data = NULL, ... )
formula |
A formula object specifying the model structure. Should follow
INLA syntax, e.g., |
graph |
A |
interpolate |
Logical. If |
manual_integration_points |
Data frame with columns |
manual_covariates |
Data frame containing covariate values at integration
points when |
use_current_mesh |
Logical. If |
new_h |
Numeric. Mesh resolution for creating a new mesh when
|
new_n |
Integer. Alternative to |
repl |
Character vector or |
repl_col |
Character. Name of the column in the graph data that contains
replicate identifiers. Default is |
clone_graph |
Logical. If |
precomputed_data |
Optional object of class |
... |
Additional arguments passed to |
The function implements LGCP modeling using the approach of Simpson et al. (2016),
where the log-Gaussian Cox process with intensity is
approximated using a Poisson likelihood with carefully constructed integration
points and weights.
The key steps are:
Create integration points (typically mesh nodes) across the graph
Set up data with observed points (response = 1, weights = 0) and integration points (response = 0, weights = integration weights)
Fit using Poisson regression with the constructed weights as exposure
The spatial component can be modeled using:
Exact SPDE models via graph_spde() (slower setup, exact likelihood)
Rational SPDE approximations via rspde.metric_graph() (faster, approximate)
An object of class "inla" containing the fitted LGCP model. This
includes posterior marginal distributions for model parameters, fitted
values, and other standard INLA output components. Use
spde_metric_graph_result() to extract spatial parameter estimates in
their original scale.
For fitting multiple models with the same spatial structure:
Use precompute_lgcp_graph() first, then lgcp_graph() with
precomputed_data for substantial speedups
Set clone_graph = FALSE for additional performance gains when
you don't need to preserve the original graph
Simpson, D., Illian, J., Lindgren, F., Sørbye, S., & Rue, H. (2016). Going off grid: Computationally efficient inference for log-Gaussian Cox processes. Biometrika, 103(1), 49-70.
graph_lgcp_sim for simulating LGCP data,
precompute_lgcp_graph for efficient model refitting,
graph_spde for exact SPDE models,
spde_metric_graph_result for extracting spatial parameter estimates
## Not run: # Setup: Create graph with mesh and add point pattern data graph <- metric_graph$new() graph$build_mesh(h = 0.1) graph$add_observations(data = your_point_data, edge_number = "edge_id", distance_on_edge = "location") # Create SPDE model spde_model <- graph_spde(graph, alpha = 1) # or: rspde_model <- rspde.metric_graph(graph, nu = 1.5) # Fit basic LGCP model fit1 <- lgcp_graph(y ~ 1 + f(field, model = spde_model), graph = graph) # Fit model with covariates fit2 <- lgcp_graph(y ~ elevation + temperature + f(field, model = spde_model), graph = graph) # Extract spatial parameter estimates spde_result <- spde_metric_graph_result(fit2, "field", spde_model) summary(spde_result) # Efficient fitting of multiple models precomputed <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature", "slope") ) # Now fit multiple models efficiently fit_a <- lgcp_graph(y ~ elevation + f(field, model = spde_model), graph = graph, precomputed_data = precomputed) fit_b <- lgcp_graph(y ~ elevation + temperature + f(field, model = spde_model), graph = graph, precomputed_data = precomputed) fit_c <- lgcp_graph(y ~ slope + f(field, model = spde_model), graph = graph, precomputed_data = precomputed) # Model with replicates fit_rep <- lgcp_graph(y ~ covariate + f(field, model = spde_model, replicate = field.repl), graph = graph) ## End(Not run)## Not run: # Setup: Create graph with mesh and add point pattern data graph <- metric_graph$new() graph$build_mesh(h = 0.1) graph$add_observations(data = your_point_data, edge_number = "edge_id", distance_on_edge = "location") # Create SPDE model spde_model <- graph_spde(graph, alpha = 1) # or: rspde_model <- rspde.metric_graph(graph, nu = 1.5) # Fit basic LGCP model fit1 <- lgcp_graph(y ~ 1 + f(field, model = spde_model), graph = graph) # Fit model with covariates fit2 <- lgcp_graph(y ~ elevation + temperature + f(field, model = spde_model), graph = graph) # Extract spatial parameter estimates spde_result <- spde_metric_graph_result(fit2, "field", spde_model) summary(spde_result) # Efficient fitting of multiple models precomputed <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature", "slope") ) # Now fit multiple models efficiently fit_a <- lgcp_graph(y ~ elevation + f(field, model = spde_model), graph = graph, precomputed_data = precomputed) fit_b <- lgcp_graph(y ~ elevation + temperature + f(field, model = spde_model), graph = graph, precomputed_data = precomputed) fit_c <- lgcp_graph(y ~ slope + f(field, model = spde_model), graph = graph, precomputed_data = precomputed) # Model with replicates fit_rep <- lgcp_graph(y ~ covariate + f(field, model = spde_model, replicate = field.repl), graph = graph) ## End(Not run)
linnet object to a metric graph objectThis function converts a linnet object (from the spatstat package) into a metric graph object.
linnet.to.graph(linnet.object, crs, ...)linnet.to.graph(linnet.object, crs, ...)
linnet.object |
A |
crs |
The coordinate reference system of the graph. |
... |
Additional arguments to be passed to the |
A metric graph object with edges defined by the network.
Create lines for package name
logo_lines()logo_lines()
SpatialLines object with package name.
The precision matrix for all vertices for space-time field
make_Q_euler(graph, t, kappa, rho, gamma, alpha, beta, sigma, theta = 1)make_Q_euler(graph, t, kappa, rho, gamma, alpha, beta, sigma, theta = 1)
graph |
A |
t |
Vector of time points. |
kappa |
Spatial range parameter. |
rho |
Drift parameter. |
gamma |
Temporal range parameter. |
alpha |
Smoothness parameter (integer) for spatial operator. |
beta |
Smoothness parameter (integer) for Q-Wiener process. |
sigma |
Variance parameter. |
theta |
Parameter theta for the Euler scheme. |
Precision matrix.
The precision matrix for all vertices for space-time field.
make_Q_spacetime(graph, t, kappa, rho, gamma, alpha, beta, sigma)make_Q_spacetime(graph, t, kappa, rho, gamma, alpha, beta, sigma)
graph |
A |
t |
Vector of time points. |
kappa |
Spatial range parameter. |
rho |
Drift parameter. |
gamma |
Temporal range parameter. |
alpha |
Smoothness parameter (integer) for spatial operator. |
beta |
Smoothness parameter (integer) for Q-Wiener process. |
sigma |
Variance parameter. |
Precision matrix.
Reorders the rows of a data frame to align with the specific ordering of points along the edges of a metric graph's mesh. This ensures that data associated with locations on the graph are correctly aligned with the graph's internal mesh structure, which is essential for spatial operations and visualizations.
match_mesh_data( graph, data, edge_col = ".edge_number", dist_col = ".distance_on_edge" )match_mesh_data( graph, data, edge_col = ".edge_number", dist_col = ".distance_on_edge" )
graph |
A metric graph object with a mesh component containing VtE. |
data |
A data.frame to be reordered. It must contain columns for edge numbers and distances along those edges. |
edge_col |
Character. Name of the column in |
dist_col |
Character. Name of the column in |
A reordered data.frame where rows correspond to the order of
points in graph$mesh$VtE. If the input data was an sf object,
the returned object will also be an sf object with its geometry
reordered accordingly.
Class representing a general metric graph.
A graph object created from vertex and edge matrices, or from an
sp::SpatialLines object where each line is representing and edge. For more
details, see the vignette:
vignette("metric_graph", package = "MetricGraph")
Object of R6Class for creating metric graphs.
VMatrix with positions in Euclidean space of the vertices of the graph.
nVThe number of vertices.
EMatrix with the edges of the graph, where each row represents an
edge, E[i,1] is the vertex at the start of the ith edge and E[i,2] is
the vertex at the end of the edge.
nEThe number of edges.
edge_lengthsVector with the lengths of the edges in the graph.
CConstraint matrix used to set Kirchhoff constraints.
CoBChange-of-basis object used for Kirchhoff constraints.
PtVVector with the indices of the vertices which are observation locations.
meshMesh object used for plotting.
edgesThe coordinates of the edges in the graph.
DirectionalWeightFunction_inFunction for inwards weights in directional models
DirectionalWeightFunction_outFunction for outwards weights in directional models
verticesThe coordinates of the vertices in the graph, along with several attributes.
geo_distGeodesic distances between the vertices in the graph.
res_distResistance distances between the observation locations.
LaplacianThe weighted graph Laplacian of the vertices in the graph. The weights are given by the edge lengths.
characteristicsList with various characteristics of the graph.
metric_graph$new()Create a new metric_graph object.
metric_graph$new( edges = NULL, V = NULL, E = NULL, vertex_unit = NULL, length_unit = NULL, edge_weights = NULL, kirchhoff_weights = NULL, directional_weights = NULL, longlat = NULL, crs = NULL, proj4string = NULL, which_longlat = "sp", include_obs = NULL, include_edge_weights = NULL, project = FALSE, project_data = FALSE, which_projection = "Winkel tripel", manual_edge_lengths = NULL, perform_merges = NULL, approx_edge_PtE = TRUE, tolerance = list(vertex_vertex = 0.001, vertex_edge = 0.001, edge_edge = 0), check_connected = TRUE, remove_deg2 = FALSE, merge_close_vertices = NULL, factor_merge_close_vertices = 1, remove_circles = FALSE, auto_remove_point_edges = TRUE, verbose = 1, add_obs_options = list(return_removed = FALSE, verbose = verbose), lines = deprecated(), .assemble = NULL )
edgesA list containing coordinates as m x 2 matrices (that is,
of matrix type) or m x 2 data frames (data.frame type) of sequence of
points connected by straightlines. Alternatively, you can also prove an
object of type SSN, osmdata_sp, osmdata_sf, SpatialLinesDataFrame
or SpatialLines (from sp package) or MULTILINESTRING (from sf package).
Vn x 2 matrix with Euclidean coordinates of the n vertices. If non-NULL, no merges will be performed.
Em x 2 matrix where each row represents one of the m edges. If non-NULL, no merges will be performed.
vertex_unitThe unit in which the vertices are specified.
The options are 'degree' (the great circle distance in km), 'km', 'm'
and 'miles'. The default is NULL, which means no unit. However, if you
set length_unit, you need to set vertex_unit.
length_unitThe unit in which the lengths will be computed.
The options are 'km', 'm' and 'miles'. The default, when longlat is TRUE,
or an sf or sp objects are provided, is 'km'.
edge_weightsEither a number, a numerical vector with length given by
the number of edges, providing the edge weights, or a data.frame with the
number of rows being equal to the number of edges, where
each row gives a vector of weights to its corresponding edge. Can be changed
by using the set_edge_weights() method.
kirchhoff_weightsIf non-null, the name (or number) of the column of
edge_weights that contain the Kirchhoff weights. Must be equal to 1 (or TRUE)
in case edge_weights is a single number and those are the Kirchhoff weights.
directional_weightsIf non-null, the name (or number) of the column of
edge_weights that contain the directional weights. The default is the
first column of the edge weights.
longlatThere are three options: NULL, TRUE or FALSE. If NULL
(the default option), the edges argument will be checked to see if there
is a CRS or proj4string available, if so, longlat will be set to TRUE,
otherwise, it will be set to FALSE. If TRUE, then it is assumed that the
coordinates are given.
in Longitude/Latitude and that distances should be computed in meters. If TRUE
it takes precedence over
vertex_unit and length_unit, and is equivalent to vertex_unit = 'degree'
and length_unit = 'm'.
crsCoordinate reference system to be used in case longlat is set
to TRUE and which_longlat is sf. Object of class crs. The default
choice, if the edges object does not have CRS nor proj4string, is sf::st_crs(4326).
proj4stringProjection string of class CRS-class to be used in
case longlat is set to TRUE and which_longlat is sp. The default
choice, if the edges object does not have CRS nor proj4string, is
sp::CRS("+proj=longlat +datum=WGS84").
which_longlatCompute the distance using which package? The options
are sp and sf. The default is sp.
include_obsIf the object is of class SSN, should the observations
be added? If NULL and the edges are of class SSN, the data will be
automatically added. If FALSE, the data will not be added. Alternatively,
one can set this argument to the numbers or names of the columns of the
observations to be added as observations.
include_edge_weightsIf the object is of class SSN, osmdata_sp,
osmdata_sf, SpatialLinesDataFrame, MULTILINESTRING, LINESTRING,
sfc_LINESTRING, sfc_MULTILINESTRING, should the edge data (if any) be
added as edge weights? If NULL, the edge data will be added as edge weights,
if FALSE they will not be added. Alternatively, one can set this argument
to the numbers or names of the columns of the edge data to be added as edge
weights.
projectIf longlat is TRUE should a projection be used to
compute the distances to be used for the tolerances (see tolerance below)?
The default is FALSE. When TRUE, the construction of the graph is faster.
project_dataIf longlat is TRUE should the vertices be project
to planar coordinates? The default is FALSE. When TRUE, the construction
of the graph is faster.
which_projectionWhich projection should be used in case project
is TRUE? The options are Robinson, Winkel tripel or a proj4string.
The default is Winkel tripel.
manual_edge_lengthsIf non-NULL, a vector containing the edges
lengths, and all the quantities related to edge lengths will be computed
in terms of these. If merges are performed, it is likely that the merges
will override the manual edge lengths. In such a case, to provide manual
edge lengths, one should either set the perform_merges argument to FALSE
or use the set_manual_edge_lengths() method.
perform_mergesThere are three options, NULL, TRUE or FALSE.
The default option is NULL. If NULL, it will be set to FALSE unless
'edges', 'V' and 'E' are NULL, in which case it will be set to TRUE.
If FALSE, this will take priority over the other arguments, and no merges
(except the optional merge_close_vertices below) will be performed.
Note that the merge on the additional merge_close_vertices might still
be performed, if it is set to TRUE.
approx_edge_PtEShould the relative positions on the edges be
approximated? The default is TRUE. If FALSE, the speed can be considerably
slower, especially for large metric graphs.
toleranceList that provides tolerances during the construction of the graph:
vertex_vertex Vertices that are closer than this number are merged (default = 1e-7).
vertex_edge If a vertex at the end of one edge is closer than this
number to another edge, this vertex is connected to that edge
(default = 1e-7). Previously vertex_line, which is now deprecated.
edge_edge If two edges at some point are closer than this number, a new
vertex is added at that point and the two edges are connected (default = 0).
vertex_line, Deprecated. Use vertex_edge instead.
line_line, Deprecated. Use edge_edge instead.
In case longlat = TRUE, the tolerances are given in length_unit.
check_connectedIf TRUE, it is checked whether the graph is
connected and a warning is given if this is not the case.
remove_deg2Set to TRUE to remove all vertices of degree 2 in the
initialization. Default is FALSE.
merge_close_verticesShould an additional step to merge close vertices
be done? The options are NULL (the default), TRUE or FALSE. If NULL,
it will be determined automatically. If TRUE this step will be performed
even if perfom_merges is set to FALSE.
factor_merge_close_verticesWhich factor to be multiplied by tolerance
vertex_vertex when merging close vertices at the additional step?
remove_circlesAll circlular edges with a length smaller than this
number are removed. If TRUE, the vertex_vertex tolerance will be used.
If FALSE, no circles will be removed.
auto_remove_point_edgesShould edges of length zero, that is, edges that are actually points, be automatically removed?
verbosePrint progress of graph creation. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
add_obs_optionsList containing additional options to be passed to
the add_observations() method when adding observations from SSN data?
lines.assembleExpert option for assembling the graph by skipping the entire constructor pipeline and instead populate the R6 object directly from a pre-computed list. Intended for internal use.
A graph object can be initialized in two ways. The first method
is to specify V and E. In this case, all edges are assumed to be straight
lines. The second option is to specify the graph via the lines input.
In this case, the vertices are set by the end points of the lines.
Thus, if two lines are intersecting somewhere else, this will not be
viewed as a vertex.
A metric_graph object.
metric_graph$remove_small_circles()Sets the edge weights
metric_graph$remove_small_circles(tolerance, verbose = 1)
toleranceTolerance at which circles with length less than this will be removed.
verbosePrint progress of graph creation. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
No return value. Called for its side effects.
metric_graph$get_edges()Exports the edges of the MetricGraph object as an sf or sp.
metric_graph$get_edges(format = c("sf", "sp", "list"))
formatThe format for the exported object. The options are sf (default), sp and list.
For format == "sf", the function returns an sf object of LINESTRING
geometries, where the associated data frame includes edge weights.
For format == "sp", the function returns a SpatialLinesDataFrame where
the data frame includes edge weights.
metric_graph$get_bounding_box()Bounding box of the metric graph
metric_graph$get_bounding_box(format = "sf")
formatIf the metric graph has a coordinate reference system, the
format for the exported object. The options are sf (default), sp
and matrix.
A bounding box of the metric graph
metric_graph$get_vertices()Exports the vertices of the MetricGraph object as an sf,
sp or as a matrix.
metric_graph$get_vertices(format = c("sf", "sp", "list"))
formatThe format for the exported object. The options are sf
(default), sp and matrix.
For which_format == "sf", the function returns an sf object of POINT
geometries.
For which_format == "sp", the function returns a SpatialPointsDataFrame
object.
metric_graph$export()Exports the MetricGraph object as an sf or sp object.
metric_graph$export(format = "sf")
formatThe format for the exported object. The options are sf
(default) and sp.
Returns a list with three elements: edges, vertices, and data.
For format == "sf", edges is an sf object of LINESTRING geometries
with edge weights, and vertices and data are sf objects with
POINT geometries.
For format == "sp", edges is a SpatialLinesDataFrame with edge weights,
and vertices and data are SpatialPointsDataFrame.
metric_graph$leaflet()Return the metric graph as a leaflet::leaflet() object to
be built upon.
metric_graph$leaflet( width = NULL, height = NULL, padding = 0, options = leafletOptions(), elementId = NULL, sizingPolicy = leafletSizingPolicy(padding = padding) )
widththe width of the map
heightthe height of the map
paddingthe padding of the map
optionsthe map options
elementIdUse an explicit element ID for the widget (rather than an automatically generated one).
sizingPolicyhtmlwidgets sizing policy object. Defaults to
leafletSizingPolicy().
metric_graph$mapview()Returns a mapview::mapview() object of the metric graph
metric_graph$mapview(...)
...Additional arguments to be passed to mapview::mapview().
The x argument of mapview, containing the metric graph is already
passed internally.
metric_graph$set_edge_weights()Sets the edge weights
metric_graph$set_edge_weights( weights = NULL, kirchhoff_weights = NULL, directional_weights = NULL, verbose = 0 )
weightsEither a number, a numerical vector with length given by
the number of edges, providing the edge weights, or a data.frame with
the number of rows being equal to the number of edges, where
each row gives a vector of weights to its corresponding edge.
kirchhoff_weightsIf non-null, the name (or number) of the column
of weights that contain the Kirchhoff weights. Must be equal to 1
(or TRUE) in case weights is a single number and those are the
Kirchhoff weights.
directional_weightsIf non-null, the name (or number) of the column
of weights that contain the directional weights.
verboseThere are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
No return value. Called for its side effects.
metric_graph$get_edge_weights()Gets the edge weights
metric_graph$get_edge_weights(
data.frame = FALSE,
format = c("tibble", "sf", "sp", "list"),
tibble = deprecated()
)
data.frameIf the edge weights are given as vectors, should the result be returned as a data.frame?
formatWhich format should the data be returned? The options are
tibble for tidyr::tibble, sf for POINT, sp for
SpatialPointsDataFrame and list for the internal list format.
tibbleA vector or data.frame containing the edge weights.
metric_graph$get_vertices_incomp_dir()Gets vertices with incompatible directions
metric_graph$get_vertices_incomp_dir()
A vector containing the vertices with incompatible directions.
metric_graph$summary()Prints a summary of various informations of the graph
metric_graph$summary( messages = FALSE, compute_characteristics = NULL, check_euclidean = NULL, check_distance_consistency = NULL )
messagesShould message explaining how to build the results be given for missing quantities?
compute_characteristicsShould the characteristics of the graph
be computed? If NULL it will be determined based on the size of the graph.
check_euclideanCheck if the graph has Euclidean edges? If NULL
it will be determined based on the size of the graph.
check_distance_consistencyCheck the distance consistency assumption?
If NULL it will be determined based on the size of the graph.
No return value. Called for its side effects.
metric_graph$print()Prints various characteristics of the graph
metric_graph$print()
No return value. Called for its side effects.
metric_graph$compute_characteristics()Computes various characteristics of the graph
metric_graph$compute_characteristics(check_euclidean = FALSE)
check_euclideanAlso check if the graph has Euclidean edges? This essentially means that the distance consistency check will also be perfomed. If the graph does not have Euclidean edges due to another reason rather than the distance consistency, then it will already be indicated that the graph does not have Euclidean edges.
No return value. Called for its side effects. The computed
characteristics are stored in the characteristics element of the
metric_graph object.
metric_graph$check_euclidean()Check if the graph has Euclidean edges.
metric_graph$check_euclidean()
Returns TRUE if the graph has Euclidean edges, or FALSE otherwise.
The result is stored in the characteristics element of the metric_graph object.
The result is displayed when the graph is printed.
metric_graph$check_distance_consistency()Checks distance consistency of the graph.
metric_graph$check_distance_consistency()
No return value.
The result is stored in the characteristics element of the metric_graph object.
The result is displayed when the graph is printed.
metric_graph$compute_geodist()Computes shortest path distances between the vertices in the graph
metric_graph$compute_geodist( obs = TRUE, include_vertices = FALSE, all_groups = FALSE, group = NULL, verbose = 0, full = lifecycle::deprecated() )
obsShould the geodesic distances be computed at the observation locations or only at vertices?
include_verticesIf obs is TRUE, should the vertex locations be
included in the resulting distance matrix?
all_groupsShould the geodesic distances be computed for all
the available locations accross all groups? If FALSE, it will be computed
separately for the locations of each group.
groupVector or list containing which groups to compute the distance
for. If NULL, it will be computed for all groups.
verbosePrint progress of the computation of the geodesic distances. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
fullNo return value. Called for its side effects. The computed geodesic
distances are stored in the geo_dist element of the metric_graph object.
metric_graph$compute_geodist_PtE()Computes shortest path distances between the vertices in the graph.
metric_graph$compute_geodist_PtE( PtE, normalized = TRUE, include_vertices = TRUE, verbose = 0 )
PtEPoints to compute the metric for.
normalizedare the locations in PtE in normalized distance?
include_verticesShould the original vertices be included in the distance matrix?
verbosePrint progress of the computation of the geodesic distances. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
A matrix containing the geodesic distances.
metric_graph$compute_geodist_mesh()Computes shortest path distances between the vertices in the mesh.
metric_graph$compute_geodist_mesh()
No return value. Called for its side effects. The geodesic distances
on the mesh are stored in mesh$geo_dist in the metric_graph object.
metric_graph$compute_resdist()Computes the resistance distance between the observation locations.
metric_graph$compute_resdist( full = FALSE, obs = TRUE, group = NULL, check_euclidean = FALSE, include_vertices = FALSE, verbose = 0 )
fullShould the resistance distances be computed for all
the available locations. If FALSE, it will be computed
separately for the locations of each group.
obsShould the resistance distances be computed at the observation locations?
groupVector or list containing which groups to compute the distance
for. If NULL, it will be computed for all groups.
check_euclideanCheck if the graph used to compute the resistance distance has Euclidean edges? The graph used to compute the resistance distance has the observation locations as vertices.
include_verticesShould the vertices of the graph be also included
in the resulting matrix when using FULL=TRUE?
verbosePrint progress of the computation of the resistance distances. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
No return value. Called for its side effects. The geodesic distances
are stored in the res_dist element of the metric_graph object.
metric_graph$compute_resdist_PtE()Computes the resistance distance between the observation locations.
metric_graph$compute_resdist_PtE( PtE, normalized = TRUE, include_vertices = FALSE, check_euclidean = FALSE, verbose = 0 )
PtEPoints to compute the metric for.
normalizedAre the locations in PtE in normalized distance?
include_verticesShould the original vertices be included in the Laplacian matrix?
check_euclideanCheck if the graph used to compute the resistance distance has Euclidean edges? The graph used to compute the resistance distance has the observation locations as vertices.
verbosePrint progress of the computation of the resistance distances. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
A matrix containing the resistance distances.
metric_graph$get_degrees()Returns the degrees of the vertices in the metric graph.
metric_graph$get_degrees(which = "degree")
whichIf "degree", returns the degree of the vertex. If "indegree", returns the indegree, and if "outdegree", it returns the outdegree.
A vector containing the degrees of the vertices.
metric_graph$compute_PtE_edges()Computes the relative positions of the coordinates of the
edges and save it as an attribute to each edge. This improves the quality
of plots obtained by the plot_function() method, however it might
be costly to compute.
metric_graph$compute_PtE_edges(approx = TRUE, verbose = 0)
approxShould the computation of the relative positions be
approximate? Default is TRUE. If FALSE, the speed can be considerably
slower, especially for large metric graphs.
verboseLevel of verbosity, 0, 1 or 2. The default is 0.
No return value, called for its side effects.
metric_graph$compute_resdist_mesh()Computes the resistance metric between the vertices in the mesh.
metric_graph$compute_resdist_mesh()
No return value. Called for its side effects. The geodesic distances
on the mesh are stored in the mesh$res_dist element in the metric_graph
object.
metric_graph$compute_laplacian()Computes the weigthed graph Laplacian for the graph.
metric_graph$compute_laplacian( full = FALSE, obs = TRUE, group = NULL, verbose = 0 )
fullShould the resistance distances be computed for all
the available locations. If FALSE, it will be computed
separately for the locations of each group.
obsShould the resistance distances be computed at the observation locations? It will only compute for locations in which there is at least one observations that is not NA.
groupVector or list containing which groups to compute the
Laplacian for. If NULL, it will be computed for all groups.
verbosePrint progress of the computation of the Laplacian. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
No reutrn value. Called for its side effects. The Laplacian is stored
in the Laplacian element in the metric_graph object.
metric_graph$prune_vertices()Removes vertices of degree 2 from the metric graph.
metric_graph$prune_vertices( check_weights = TRUE, check_circles = TRUE, verbose = FALSE )
check_weightsIf TRUE will only prune edges with different weights.
check_circlesIf TRUE will not prune a vertex such that the
resulting edge is a circle.
verbosePrint progress of pruning. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
Vertices of degree 2 are removed as long as the corresponding edges that would be merged are compatible in terms of direction.
No return value. Called for its side effects.
metric_graph$set_manual_edge_lengths()Gets the groups from the data.
metric_graph$set_manual_edge_lengths(edge_lengths, unit = NULL)
edge_lengthsedge lengths to be set to the metric graph edges.
unitset or override the edge lengths unit.
does not return anything. Called for its side effects.
metric_graph$get_groups()Gets the groups from the data.
metric_graph$get_groups(get_cols = FALSE)
get_colsShould the names of the columns that created the group variable be returned?
A vector containing the available groups in the internal data.
metric_graph$get_PtE()Gets PtE from the data.
metric_graph$get_PtE()
A matrix with two columns, where the first column contains the edge number and the second column contains the distance on edge of the observation locations.
metric_graph$get_edge_lengths()Gets the edge lengths with the corresponding unit.
metric_graph$get_edge_lengths(unit = NULL)
unitIf non-NULL, changes from length_unit from the graph
construction to unit.
a vector with the length unit (if the graph was constructed with a length unit).
metric_graph$get_locations()Gets the spatial locations from the data.
metric_graph$get_locations()
A data.frame object with observation locations. If longlat = TRUE,
the column names are lon and lat, otherwise the column names are x and y.
metric_graph$observation_to_vertex()Adds observation locations as vertices in the graph.
metric_graph$observation_to_vertex( mesh_warning = TRUE, verbose = 0, tolerance = deprecated() )
mesh_warningDisplay a warning if the graph structure change and the metric graph has a mesh object.
verbosePrint progress of the steps when adding observations. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
toleranceshare_weightsShould the same weight be shared among the split
edges? If FALSE, the weights will be removed, and a common weight given
by 1 will be given.
No return value. Called for its side effects.
metric_graph$edgeweight_to_data()Turns edge weights into data on the metric graph
metric_graph$edgeweight_to_data(
loc = NULL,
mesh = FALSE,
data_loc = FALSE,
weight_col = NULL,
add = TRUE,
data_coords = c("PtE", "spatial"),
normalized = FALSE,
tibble = FALSE,
format = c("tibble", "sf", "sp", "list"),
verbose = 1,
suppress_warnings = FALSE,
return = FALSE
)
locA matrix or data.frame with two columns containing the
locations to generate the data from the edge weights. If data_coords
is 'spatial', the first column must be the x-coordinate of the data, and
the second column must be the y-coordinate. If data_coords is 'PtE', the
first column must be the edge number and the second column must be the
distance on edge.
meshShould the data be generated to the mesh locations? In this
case, the loc argument will be ignored. Observe that the metric graph
must have a mesh built for one to use this option. CAUTION: To add
edgeweight to data to both the data locations and mesh locations, please,
add at the data locations first, then to mesh locations.
data_locShould the data be generated to the data locations? In
this case, the loc argument will be ignored. Observe that the metric
graph must have data for one to use this option. CAUTION: To add edgeweight
to data to both the data locations and mesh locations, please, add at the
data locations first, then to mesh locations.
weight_colWhich columns of the edge weights should be turned into
data? If NULL, all columns will be turned into data.
addShould the data generated be added to the metric graph internal data?
data_coordsTo be used only if mesh is FALSE. It decides which
coordinate system to use. If PtE, the user must provide edge_number and
distance_on_edge, otherwise if spatial, the user must provide
coord_x and coord_y.
normalizedif TRUE, then the distances in distance_on_edge are
assumed to be normalized to (0,1). Default FALSE.
tibbleShould the data be returned in a tibble format?
formatIf return is TRUE, the format of the output: "tibble",
"sf", or "sp". Default is "tibble".
verbosePrint progress of the steps when adding observations. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
suppress_warningsSuppress warnings related to duplicated observations?
returnShould the data be returned? If return_removed is TRUE,
only the removed locations will be return (if there is any).
metric_graph$get_mesh_locations()Returns a list or a matrix with the mesh locations.
metric_graph$get_mesh_locations(
bru = FALSE,
loc = c(".edge_number", ".distance_on_edge"),
loc_name = NULL,
normalized = TRUE
)
bruShould an 'inlabru'-friendly list be returned?
locIf bru is set to TRUE, the column names of the location
variables.
The default name is c('.edge_number', '.distance_on_edge').
loc_nameThe name of the location variables. Not needed for
rSPDE models.
normalizedIf TRUE, then the distances in distance_on_edge are
assumed to be normalized to (0,1). Default TRUE.
A list or a matrix containing the mesh locations.
metric_graph$clear_observations()Clear all observations from the metric_graph object.
metric_graph$clear_observations()
No return value. Called for its side effects.
metric_graph$process_data()Process data to the metric graph data format.
metric_graph$process_data(
data = NULL,
edge_number = "edge_number",
distance_on_edge = "distance_on_edge",
coord_x = "coord_x",
coord_y = "coord_y",
data_coords = c("PtE", "spatial"),
group = NULL,
group_sep = ".",
normalized = FALSE,
format = c("tibble", "sf", "sp", "list"),
duplicated_strategy = "closest",
include_distance_to_graph = TRUE,
only_return_removed = FALSE,
tolerance = max(self$edge_lengths)/2,
verbose = FALSE,
suppress_warnings = FALSE,
Spoints = lifecycle::deprecated(),
tibble = lifecycle::deprecated()
)
dataA data.frame or named list containing the observations. In
case of groups, the data.frames for the groups should be stacked vertically,
with a column indicating the index of the group. If data is not NULL,
it takes priority over any eventual data in Spoints.
edge_numberColumn (or entry on the list) of the data that
contains the edge numbers. If not supplied, the column with name
"edge_number" will be chosen. Will not be used if Spoints is not NULL.
distance_on_edgeColumn (or entry on the list) of the data that
contains the edge numbers. If not supplied, the column with name
"distance_on_edge" will be chosen. Will not be used if Spoints is not
NULL.
coord_xColumn (or entry on the list) of the data that contains
the x coordinate. If not supplied, the column with name "coord_x" will be
chosen. Will not be used if Spoints is not NULL or if data_coords is
PtE.
coord_yColumn (or entry on the list) of the data that contains
the y coordinate. If not supplied, the column with name "coord_x" will be
chosen. Will not be used if Spoints is not NULL or if data_coords is
PtE.
data_coordsIt decides which
coordinate system to use. If PtE, the user must provide edge_number and
distance_on_edge, otherwise if spatial, the user must provide
coord_x and coord_y. The option euclidean is .
Use
spatial instead.
groupVector. If the data is grouped (for example measured at
different time points), this argument specifies the columns (or entries
on the list) in which the group variables are stored. It will be stored
as a single column .group with the combined entries.
group_sepseparator character for creating the new group variable when grouping two or more variables.
normalizedif TRUE, then the distances in distance_on_edge are
assumed to be normalized to (0,1). Default FALSE.
formatWhich format should the data be returned? The options are
tibble for tidyr::tibble, sf for POINT, sp for SpatialPointsDataFrame
and list for the internal list format.
duplicated_strategyWhich strategy to handle observations on the same location on the metric graph (that is, if there are two or more observations projected at the same location). The options are 'closest' and 'jitter'. If 'closest', only the closest observation will be used. If 'jitter', a small perturbation will be performed on the projected observation location. The default is 'closest'.
include_distance_to_graphWhen data_coord is 'spatial', should
the distance of the observations to the graph be included as a column?
only_return_removedShould the removed data (if it exists) when
using 'closest' duplicated_strategy be returned instead of the processed
data?
toleranceParameter to control a warning when adding observations. If the distance of some location and the closest point on the graph is greater than the tolerance, the function will display a warning. This helps detecting mistakes on the input locations when adding new data.
verboseIf TRUE, report steps and times.
suppress_warningsSuppress warnings related to duplicated observations?
SpointstibbleNo return value. Called for its side effects. The observations are
stored in the data element of the metric_graph object.
metric_graph$add_observations()Add observations to the metric graph.
metric_graph$add_observations(
data = NULL,
edge_number = "edge_number",
distance_on_edge = "distance_on_edge",
coord_x = "coord_x",
coord_y = "coord_y",
data_coords = c("PtE", "spatial"),
group = NULL,
group_sep = ".",
normalized = FALSE,
clear_obs = FALSE,
tibble = FALSE,
tolerance = max(self$edge_lengths)/2,
duplicated_strategy = "closest",
include_distance_to_graph = TRUE,
return_removed = TRUE,
tolerance_merge = 0,
merge_strategy = "merge",
verbose = 1,
suppress_warnings = FALSE,
Spoints = lifecycle::deprecated()
)
dataA data.frame or named list containing the observations. In
case of groups, the data.frames for the groups should be stacked vertically,
with a column indicating the index of the group. data can also be an
sf object, a SpatialPointsDataFrame object or an SSN object.
in which case data_coords will automatically be spatial, and there is
no need to specify the coord_x or coord_y arguments.
edge_numberColumn (or entry on the list) of the data that
contains the edge numbers. If not supplied, the column with name
"edge_number" will be chosen. Will not be used if Spoints is not NULL.
distance_on_edgeColumn (or entry on the list) of the data that
contains the edge numbers. If not supplied, the column with name
"distance_on_edge" will be chosen. Will not be used if Spoints is not
NULL.
coord_xColumn (or entry on the list) of the data that contains
the x coordinate. If not supplied, the column with name "coord_x" will be
chosen. Will not be used if Spoints is not NULL or if data_coords is
PtE.
coord_yColumn (or entry on the list) of the data that contains
the y coordinate. If not supplied, the column with name "coord_x" will be
chosen. Will not be used if Spoints is not NULL or if data_coords
is PtE.
data_coordsIt decides which
coordinate system to use. If PtE, the user must provide edge_number
and distance_on_edge, otherwise if spatial, the user must provide
coord_x and coord_y. The option euclidean is
. Use
spatial instead.
groupVector. If the data is grouped (for example measured at
different time points), this argument specifies the columns (or entries
on the list) in which the group variables are stored. It will be stored
as a single column .group with the combined entries.
group_sepseparator character for creating the new group variable when grouping two or more variables.
normalizedif TRUE, then the distances in distance_on_edge are
assumed to be normalized to (0,1). Default FALSE.
clear_obsShould the existing observations be removed before adding the data?
tibbleShould the data be returned as a tidyr::tibble?
toleranceParameter to control a warning when adding observations. If the distance of some location and the closest point on the graph is greater than the tolerance, the function will display a warning. This helps detecting mistakes on the input locations when adding new data.
duplicated_strategyWhich strategy to handle observations on the same location on the metric graph (that is, if there are two or more observations projected at the same location). The options are 'closest' and 'jitter'. If 'closest', only the closest observation will be used. If 'jitter', a small perturbation will be performed on the projected observation location. The default is 'closest'.
include_distance_to_graphWhen data_coord is 'spatial', should
the distance of the observations to the graph be included as a column?
return_removedShould the removed data (if it exists) due to being
projected to the same place when using 'closest' duplicated_strategy,
or due to some merge strategy, be returned?
tolerance_mergetolerance (in edge_length units) for merging points that are very close and are on a common edge. By default, this tolerance is zero, meaning no merges will be performed.
merge_strategyThe strategies to handle observations that are
within the tolerance. The options are remove, merge, average.
The default is merge, in which one of the observations will be chosen,
and the remaining will be used to try to fill all columns with non-NA values.
The second strategy is remove, meaning that if two observations are within
the tolerance one of them will be removed. Finally, average will take
the average over the close observations for numerical variables, and will
choose one non-NA for non-numerical variables.
verbosePrint progress of the steps when adding observations. There are 3 levels of verbose, level 0, 1 and 2. In level 0, no messages are printed. In level 1, only messages regarding important steps are printed. Finally, in level 2, messages detailing all the steps are printed. The default is 1.
suppress_warningsSuppress warnings related to duplicated observations?
SpointsNo return value. Called for its side effects. The observations are
stored in the data element of the metric_graph object.
metric_graph$mutate_weights()Use dplyr::mutate function on the internal edge weights object.
metric_graph$mutate_weights( ..., .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::mutate().
.drop_naShould the rows with at least one NA for one of the columns
be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::mutate() on the internal edge weights
object and return the result in the requested format.
A tidyr::tibble, sf or sp object containing the resulting
data list after the mutate.
metric_graph$select_weights()Use dplyr::select function on the internal edge weights object.
metric_graph$select_weights( ..., .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::select().
.drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::select() on the internal edge weights
object and return the result in the requested format.
A tidyr::tibble, sf or sp object containing the resulting
data list after the select.
metric_graph$filter_weights()Use dplyr::filter function on the internal edge weights object.
metric_graph$filter_weights( ..., .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::filter().
.drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::filter() on the internal edge weights
object and return the result in the requested format.
A tidyr::tibble, sf or sp object containing the resulting
data list after the filter.
metric_graph$summarise_weights()Use dplyr::summarise function on the internal edge weights
object grouped by the edge numbers.
metric_graph$summarise_weights( ..., .groups = NULL, .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::summarise().
.groupsA vector of strings containing the names of the columns to
be grouped, when computing the summaries. The default is NULL.
.drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::summarise() on the internal edge weights
object and return the result in the requested format.
A tidyr::tibble, sf or sp object containing the resulting
data list after the summarise.
metric_graph$drop_na_weights()Use tidyr::drop_na() function on the internal edge
weights object.
metric_graph$drop_na_weights(..., format = "tibble")
...Arguments to be passed to tidyr::drop_na().
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use tidyr::drop_na() within the internal edge
weights object.
A tidyr::tibble, sf, or sp object containing the resulting
data list after the drop_na.
metric_graph$mutate()Use dplyr::mutate function on the internal metric graph
data object.
metric_graph$mutate( ..., .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::mutate().
.drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::mutate() within the internal metric graph
data object and return the result in the requested format.
A tidyr::tibble, sf, or sp object containing the resulting
data list after the mutate.
metric_graph$drop_na()Use tidyr::drop_na() function on the internal metric graph
data object.
metric_graph$drop_na(..., format = "tibble")
...Arguments to be passed to tidyr::drop_na().
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::drop_na() within the internal metric
graph data object.
A tidyr::tibble object containing the resulting data list
after the drop_na.
metric_graph$select()Use dplyr::select function on the internal metric graph
data object.
metric_graph$select( ..., .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::select().
.drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be
removed? DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::select() within the internal metric
graph data object. Observe that it is a bit different from directly
using dplyr::select() since it does not allow to remove the internal
positions that are needed for the metric_graph methods to work.
A tidyr::tibble object containing the resulting data list
after the selection.
metric_graph$filter()Use dplyr::filter function on the internal metric graph
data object.
metric_graph$filter( ..., .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::filter().
.drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be
removed? DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::filter() within the internal metric
graph data object.
A tidyr::tibble object containing the resulting data list
after the filter.
metric_graph$summarise()Use dplyr::summarise function on the internal metric graph
data object grouped by the spatial locations and the internal group variable.
metric_graph$summarise( ..., .include_graph_groups = FALSE, .groups = NULL, .drop_na = FALSE, .drop_all_na = TRUE, format = "tibble" )
...Arguments to be passed to dplyr::summarise().
.include_graph_groupsShould the internal graph groups be included
in the grouping variables? The default is FALSE. This means that, when
summarising, the data will be grouped by the internal group variable
together with the spatial locations.
.groupsA vector of strings containing the names of the columns to
be additionally grouped, when computing the summaries. The default is NULL.
.drop_naShould the rows with at least one NA for one of the columns
be removed? DEFAULT is FALSE.
.drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
formatThe format of the output: "tibble", "sf", or "sp". Default is "tibble".
A wrapper to use dplyr::summarise() within the internal metric
graph data object grouped by manually inserted groups (optional), the
internal group variable (optional) and the spatial locations. Observe
that if the integral group variable was not used as a grouping variable
for the summarise, a new column, called .group, will be added, with the
same value 1 for all rows.
A tidyr::tibble object containing the resulting data list after
the summarise.
metric_graph$get_data()Return the internal data with the option to filter by groups.
metric_graph$get_data(
group = NULL,
format = c("tibble", "sf", "sp", "list"),
drop_na = FALSE,
drop_all_na = TRUE,
tibble = deprecated()
)
groupA vector contaning which groups should be returned?
The default is NULL, which gives the result for the all groups.
formatWhich format should the data be returned? The options are
tibble for tidyr::tibble, sf for POINT, sp for SpatialPointsDataFrame
and list for the internal list format.
drop_naShould the rows with at least one NA for one of the
columns be removed? DEFAULT is FALSE.
drop_all_naShould the rows with all variables being NA be removed?
DEFAULT is TRUE.
tibblemetric_graph$setDirectionalWeightFunction()Define the columns to be used for creating the directional vertex weights. Also possible to supply user defined functions for input and output to create ones own weights.
metric_graph$setDirectionalWeightFunction(f_in = NULL, f_out = NULL)
f_infunctions for the input vertex (default w/sum(w)) uses the
columns of name_column
f_outfunctions for the output vertex (deafult rep(-1,length(w)))
uses the columns of name_column
For more details see paper (that does not exists yet).
No return value.
metric_graph$buildDirectionalConstraints()Build directional ODE constraint matrix from edges.
metric_graph$buildDirectionalConstraints(alpha = 1)
alphahow many derivatives the processes has
weightweighting for each vertex used in the constraint (E x 2)
Currently not implemented for circles (edges that start and end in the same vertex)
No return value. Called for its side effects.
metric_graph$buildC()Build Kirchoff constraint matrix from edges.
metric_graph$buildC(alpha = 2, edge_constraint = FALSE)
alphathe type of constraint (currently only supports 2)
edge_constraintif TRUE, add constraints on vertices of degree 1
Currently not implemented for circles (edges that start and end in the same vertex)
No return value. Called for its side effects.
metric_graph$build_mesh()Builds mesh object for graph.
metric_graph$build_mesh( h = NULL, n = NULL, continuous = TRUE, continuous.outs = FALSE, continuous.deg2 = FALSE )
hMaximum distance between mesh nodes (should be provided if n is not provided).
nMaximum number of nodes per edge (should be provided if h is not provided).
continuousIf TRUE (default), the mesh contains only one node per vertex.
If FALSE, each vertex v is split into deg(v) disconnected nodes to allow
for the creation of discontinuities at the vertices.
continuous.outsIf continuous = FALSE and continuous.outs = TRUE,
continuity is assumed for the outgoing edges from each vertex.
continuous.deg2If TRUE, continuity is assumed at degree 2 vertices.
The mesh is a list with the objects:
PtE The mesh locations excluding the original vertices;
V The verties of the mesh;
E The edges of the mesh;
n_e The number of vertices in the mesh per original edge in the graph;
h_e The mesh width per edge in the graph;
ind The indices of the vertices in the mesh;
VtE All mesh locations including the original vertices.
No return value. Called for its side effects. The mesh is stored in
the mesh element of the metric_graph object.
metric_graph$get_version()Get the version of MetricGraph package used to build the graph
metric_graph$get_version()
A character string with the version number
metric_graph$is_disconnected()Does this graph have more than one connected component? The decomposition is computed and cached at construction time, so this is an O(1) lookup.
metric_graph$is_disconnected()
TRUE if the graph has two or more connected components,
FALSE otherwise.
metric_graph$get_components()Return the connected components of the graph as a
list of metric_graph objects. For a connected graph this is
simply list(self). For a disconnected graph, the components are
returned in order of decreasing total edge length and any
observations stored on self are routed to the appropriate
component. The result is cached internally; subsequent calls are
O(1) until observations change (which invalidates the cache).
metric_graph$get_components(verbose = 0)
verboseVerbosity level passed to the per-component
constructors (default 0).
A list of metric_graph objects.
metric_graph$which_component()For each spatial point, determine which connected component of the graph it belongs to. The component is the one whose nearest edge is closest in Euclidean distance to the point.
metric_graph$which_component(XY)
XYAn n x 2 matrix of spatial coordinates (or a
length-2 numeric vector for a single point).
An integer vector of length n with the component
index for each point. Indices match those of
get_components() (i.e. components are sorted by total edge
length, descending).
metric_graph$compute_fem()Build mass and stiffness matrices for given mesh object.
metric_graph$compute_fem(petrov = FALSE)
petrovCompute Petrov-Galerkin matrices? (default FALSE). These
are defined as and ,
where are piecewise constant basis functions on the edges of
the mesh.
The function builds: The matrix C which is the mass matrix with
elements , the matrix G which is the stiffness
matrix with elements , the matrix B with
elements , the matrix D with elements
, and the vector with weights
.
No return value. Called for its side effects. The finite element
matrices C, G and B are stored in the mesh element in the
metric_graph object. If petrov=TRUE, the corresponding Petrov-Galerkin
matrices are stored in Cpet and Gpet.
metric_graph$compute_mesh_weights()Compute the weights of the mesh nodes.
metric_graph$compute_mesh_weights()
Compute the weights of the mesh nodes.
No return value. Called for its side effects.
The weights are stored in the mesh element in the
metric_graph object.
metric_graph$mesh_A()Deprecated - Computes observation matrix for mesh.
in favour of
metric_graph$fem_basis().
metric_graph$mesh_A(PtE)
PtELocations given as (edge number in graph, normalized location on edge)
For n locations and a mesh with m nodes, A is an n x m matrix with
elements .
The observation matrix.
metric_graph$fem_basis()Computes observation matrix for mesh.
metric_graph$fem_basis(PtE)
PtELocations given as (edge number in graph, normalized location on edge)
For n locations and a mesh with m nodes, A is an n x m matrix with
elements .
The observation matrix.
metric_graph$VtEfirst()Find one edge corresponding to each vertex.
metric_graph$VtEfirst()
A nV x 2 matrix the first element of the ith row is the edge
number corresponding to the ith vertex and the second value is 0
if the vertex is at the start of the edge and 1 if the vertex
is at the end of the edge.
metric_graph$plot()Plots the metric graph.
metric_graph$plot(
data = NULL,
newdata = NULL,
group = 1,
type = c("ggplot", "plotly", "mapview"),
interactive = FALSE,
vertex_size = 3,
vertex_color = "black",
edge_width = 0.3,
edge_color = "black",
data_size = 1,
support_width = 0.5,
support_color = "gray",
mesh = FALSE,
X = NULL,
X_loc = NULL,
p = NULL,
degree = FALSE,
direction = FALSE,
arrow_size = ggplot2::unit(0.25, "inches"),
edge_weight = NULL,
edge_width_weight = NULL,
scale_color_main = ggplot2::scale_color_viridis_c(option = "D"),
scale_color_weights = ggplot2::scale_color_viridis_c(option = "C"),
scale_color_degree = ggplot2::scale_color_viridis_d(option = "D"),
scale_color_weights_discrete = ggplot2::scale_color_viridis_d(option = "C"),
scale_color_main_discrete = ggplot2::scale_color_viridis_d(option = "C"),
add_new_scale_weights = TRUE,
scale_color_mapview = viridis::viridis(100, option = "D"),
scale_color_weights_mapview = viridis::viridis(100, option = "C"),
scale_color_weights_discrete_mapview = NULL,
scale_color_degree_mapview = NULL,
plotly = deprecated(),
components = FALSE,
...
)
dataWhich column of the data to plot? If NULL, no data will be
plotted.
newdataA dataset of class metric_graph_data, obtained by any
get_data(), mutate(), filter(), summarise(), drop_na() methods
of metric graphs, see the vignette on data manipulation for more details.
groupIf there are groups, which group to plot? If group is a
number and newdata is NULL, it will be the index of the group as stored
internally and if newdata is provided, it will be the index of the group
stored in newdata. If group
is a character, then the group will be chosen by its name.
typeThe type of plot to be returned. The options are ggplot (the default),
that uses ggplot2; plotly that uses plot_ly for 3D plots, which
requires the plotly package, and mapview that uses the mapview function,
to build interactive plots, which requires the mapview package.
interactiveOnly works for 2d plots. If TRUE, an interactive plot
will be displayed. Unfortunately, interactive is not compatible with
edge_weight if add_new_scale_weights is TRUE.
vertex_sizeSize of the vertices.
vertex_colorColor of vertices.
edge_widthLine width for edges. If edge_width_weight is not NULL,
this determines the maximum edge width.
edge_colorColor of edges.
data_sizeSize of markers for data.
support_widthFor 3D plot, width of support lines.
support_colorFor 3D plot, color of support lines.
meshPlot the mesh locations?
XAdditional values to plot.
X_locLocations of the additional values in the format (edge, normalized distance on edge).
pExisting objects obtained from 'ggplot2' or 'plotly' to add the graph to
degreeShow the degrees of the vertices?
directionShow the direction of the edges? For type == "mapview"
the arrows are not shown, only the color of the vertices indicating whether
they are problematic or not.
arrow_sizeThe size of the arrows if direction is TRUE.
edge_weightWhich column from edge weights to determine the colors
of the edges? If NULL edge weights are not plotted. To plot the edge
weights when the metric graph edge_weights is a vector instead of a
data.frame, simply set to 1. edge_weight is only available for 2d plots.
For 3d plots with edge weights, please use the plot_function() method.
edge_width_weightWhich column from edge weights to determine the
edges widths? If NULL edge width will be determined from edge_width.
Currently it is not supported for type = "mapview".
scale_color_mainColor scale for the data to be plotted.
scale_color_weightsColor scale for the edge weights. Will only
be used if add_new_scale_weights is TRUE.
scale_color_degreeColor scale for the degrees.
scale_color_weights_discreteColor scale for discrete edge weights.
Will only be used if add_new_scale_weights is TRUE.
scale_color_main_discreteColor scale for the data to be plotted, for discrete data.
add_new_scale_weightsShould a new color scale for the edge weights be created?
scale_color_mapviewColor scale to be applied for data when type = "mapview".
scale_color_weights_mapviewColor scale to be applied for edge
weights when type = "mapview".
scale_color_weights_discrete_mapviewColor scale to be applied for
degrees when type = "mapview". If NULL RColorBrewer::brewer.pal(n = n_weights, "Set1")
will be used where n_weights is the number of different degrees.
scale_color_degree_mapviewColor scale to be applied for degrees
when type = "mapview". If NULL RColorBrewer::brewer.pal(n = n_degrees, "Set1")
will be used where n_degrees is the number of different degrees.
plotlycomponentsColor the connected components separately.
Either FALSE (the default; the graph is plotted as-is),
TRUE (each component is drawn in a randomly-chosen color), or
an n x 3 numeric matrix of RGB values in [0, 1] (one row
per component, indices matching get_components()).
...Additional arguments to pass to ggplot() or plot_ly()
A plot_ly (if type = "plotly") or ggplot object.
metric_graph$plot_connections()Plots the connections in the graph
metric_graph$plot_connections()
No return value. Called for its side effects.
metric_graph$is_tree()Checks if the graph is a tree (without considering directions)
metric_graph$is_tree()
TRUE if the graph is a tree and FALSE otherwise.
metric_graph$plot_function()Plots continuous function on the graph.
metric_graph$plot_function(
data = NULL,
newdata = NULL,
group = 1,
type = c("ggplot", "plotly", "mapview"),
continuous = TRUE,
interpolate_plot = TRUE,
edge_weight = NULL,
vertex_size = 5,
vertex_color = "black",
edge_width = 1,
edge_color = "black",
line_width = NULL,
line_color = "rgb(0,0,200)",
scale_color = ggplot2::scale_color_viridis_c(option = "D"),
scale_color_mapview = viridis::viridis(100, option = "D"),
support_width = 0.5,
support_color = "gray",
mapview_caption = "Function",
p = NULL,
plotly = deprecated(),
improve_plot = deprecated(),
X = deprecated(),
...
)
dataWhich column of the data to plot? If NULL, no data will be
plotted.
newdataA dataset of class metric_graph_data, obtained by any
get_data(), mutate(), filter(), summarise(), drop_na() methods
of metric graphs, see the vignette on data manipulation for more details.
groupIf there are groups, which group to plot? If group is a
number, it will be the index of the group as stored internally. If group
is a character, then the group will be chosen by its name.
typeThe type of plot to be returned. The options are ggplot
(the default), that uses ggplot2; plotly that uses plot_ly for 3D
plots, which requires the plotly package, and mapview that uses the
mapview function, to build interactive plots, which requires the
mapview package.
continuousShould continuity be assumed when the plot uses newdata?
interpolate_plotShould the values to be plotted be interpolated?
edge_weightWhich column from edge weights to plot? If NULL edge
weights are not plotted. To plot the edge weights when the metric graph
edge_weights is a vector instead of a data.frame, simply set to 1.
vertex_sizeSize of the vertices.
vertex_colorColor of vertices.
edge_widthWidth for edges.
edge_colorFor 3D plot, color of edges.
line_widthFor 3D plot, line width of the function curve.
line_colorColor of the function curve.
scale_colorColor scale to be used for data and weights.
scale_color_mapviewColor scale to be applied for data when type = "mapview".
support_widthFor 3D plot, width of support lines.
support_colorFor 3D plot, color of support lines.
mapview_captionCaption for the function if type = "mapview".
pPrevious plot to which the new plot should be added.
plotlyimprove_plot Use
interpolate
instead. There is no need to use it to improve the edges.
X...Additional arguments for ggplot() or plot_ly()
Either a ggplot (if plotly = FALSE) or a plot_ly object.
metric_graph$plot_movie()Plots a movie of a continuous function evolving on the graph.
metric_graph$plot_movie( X, type = "plotly", vertex_size = 5, vertex_color = "black", edge_width = 1, edge_color = "black", line_width = NULL, line_color = "rgb(0,0,200)", ... )
XA m x T matrix where the ith column represents the function at the ith time, evaluated at the mesh locations.
typeType of plot. Either "plotly" or "ggplot".
vertex_sizeSize of the vertices.
vertex_colorColor of vertices.
edge_widthWidth for edges.
edge_colorFor 3D plot, color of edges.
line_widthFor 3D plot, line width of the function curve.
line_colorColor of the function curve.
...Additional arguments for ggplot or plot_ly.
Either a ggplot (if plotly=FALSE) or a plot_ly object.
metric_graph$add_mesh_observations()Add observations on mesh to the object.
metric_graph$add_mesh_observations(data = NULL, group = NULL)
dataA data.frame or named list containing the observations.
In case of groups, the data.frames for the groups should be stacked vertically,
with a column indicating the index of the group. If data_frame is not
NULL, it takes priority over any eventual data in Spoints.
groupIf the data_frame contains groups, one must provide the column in which the group indices are stored.
No return value. Called for its side effects. The observations are
stored in the data element in the metric_graph object.
metric_graph$get_initial_graph()Returns a copy of the initial metric graph.
metric_graph$get_initial_graph()
A metric_graph object.
metric_graph$update_graph()Update an older version metric graph to the current package version.
metric_graph$update_graph(verbose = TRUE)
verbosePrint progress messages. Default is TRUE.
This function creates a new metric_graph object from an existing one, preserving all data, edge weights, mesh, distances, and other components while ensuring compatibility with the current package version. The new graph is created with minimal changes by disabling merges and other transformations.
A new metric_graph object compatible with the current package version.
metric_graph$coordinates()Convert between locations on the graph and Euclidean coordinates.
metric_graph$coordinates(PtE = NULL, XY = NULL, normalized = TRUE)
PtEMatrix with locations on the graph (edge number and normalized position on the edge).
XYMatrix with locations in Euclidean space
normalizedIf TRUE, it is assumed that the positions in PtE are
normalized to (0,1), and the object returned if XY is specified contains
normalized locations.
If PtE is specified, then a matrix with Euclidean coordinates of
the locations is returned. If XY is provided, then a matrix with the
closest locations on the graph is returned.
Gets the edge weights
data.frame If the edge weights are given as vectors, should the result
be returned as a data.frame?
A vector or data.frame containing the edge weights.
data List containing data on the metric graph.
metric_graph$clone()The objects of this class are cloneable with this method.
metric_graph$clone(deep = FALSE)
deepWhether to make a deep clone.
edge1 <- rbind(c(0, 0), c(2, 0)) edge2 <- rbind(c(2, 0), c(1, 1)) edge3 <- rbind(c(1, 1), c(0, 0)) edges <- list(edge1, edge2, edge3) graph <- metric_graph$new(edges) graph$plot()edge1 <- rbind(c(0, 0), c(2, 0)) edge2 <- rbind(c(2, 0), c(1, 1)) edge3 <- rbind(c(1, 1), c(0, 0)) edges <- list(edge1, edge2, edge3) graph <- metric_graph$new(edges) graph$plot()
dplyr::mutate() function for datasets on metric graphsApplies dplyr::mutate() function for datasets obtained from a metric graph object.
## S3 method for class 'metric_graph_data' mutate(.data, ...)## S3 method for class 'metric_graph_data' mutate(.data, ...)
.data |
The data list or |
... |
Additional parameters to be passed to |
A tidyr::tibble with the resulting selected columns.
Data set of traffic speed observations on highways in the city of San Jose, California.
pemspems
pemsA list with two elements:
A list object containing the coordinates of the road segments.
Locations of the observations on the road segments as a
data.frame with 325 rows and 3 columns. The first column indicates the edge
number, the second column indicates the distance on edge of the position,
and the third column indicates the average speed observed.
https://www.openstreetmap.org
https://github.com/spbu-math-cs/Graph-Gaussian-Processes/blob/main/examples/data/PEMS.zip
Chen, C., K. Petty, A. Skabardonis, P. Varaiya, and Z. Jia (2001). Freeway performance measurement system: mining loop detector data. Transportation Research Record 1748(1), 96-102.
OpenStreetMap contributors (2017). Planet dump retrieved from https://planet.osm.org. https://www.openstreetmap.org.
Data set of traffic speed observations on highways in the city of San Jose, California.
pems_replpems_repl
pems_replA list with two elements:
A list object containing the coordinates of the road segments.
Locations of the observations on the road segments as a
data.frame with 325 rows and 4 columns. The first column indicates the observed speed,
the second column indicates the edge
number, the third column indicates the distance on edge of the position,
and the fourth column indicates the replicate number.
https://www.openstreetmap.org
https://github.com/spbu-math-cs/Graph-Gaussian-Processes/blob/main/examples/data/PEMS.zip
Chen, C., K. Petty, A. Skabardonis, P. Varaiya, and Z. Jia (2001). Freeway performance measurement system: mining loop detector data. Transportation Research Record 1748(1), 96-102.
OpenStreetMap contributors (2017). Planet dump retrieved from https://planet.osm.org. https://www.openstreetmap.org.
Auxiliary function to obtain plots of the predictions of the field using 'inlabru'.
## S3 method for class 'graph_bru_pred' plot(x, y = NULL, vertex_size = 0, ...)## S3 method for class 'graph_bru_pred' plot(x, y = NULL, vertex_size = 0, ...)
x |
A predicted object obtained with the |
y |
Not used. |
vertex_size |
Size of the vertices. |
... |
Additional parameters to be passed to plot_function. |
A 'ggplot2' object.
Auxiliary function to obtain plots of the processed predictions of the field using 'inlabru'.
## S3 method for class 'graph_bru_proc_pred' plot(x, y = NULL, vertex_size = 0, ...)## S3 method for class 'graph_bru_proc_pred' plot(x, y = NULL, vertex_size = 0, ...)
x |
A processed predicted object obtained with the |
y |
Not used. |
vertex_size |
Size of the vertices. |
... |
Additional parameters to be passed to plot_function. |
A 'ggplot2' object.
graph_lme models assuming observations at
the vertices of metric graphsThis function performs cross-validation by computing predictions for test data using either the posterior distribution from a fitted model (pseudo-CV) or by refitting the model for each fold (true CV).
posterior_crossvalidation( object, scores = c("logscore", "crps", "scrps", "mae", "rmse"), mode = "k-fold", k = 10, percentage = 20, number_folds = 10, train_test_indices = NULL, true_CV = FALSE, factor = 1, tibble = TRUE, parallel_folds = FALSE, parallel_fitting = FALSE, n_cores = parallel::detectCores() - 1, print = FALSE, seed = NULL, return_indices = FALSE, use_precomputed = TRUE )posterior_crossvalidation( object, scores = c("logscore", "crps", "scrps", "mae", "rmse"), mode = "k-fold", k = 10, percentage = 20, number_folds = 10, train_test_indices = NULL, true_CV = FALSE, factor = 1, tibble = TRUE, parallel_folds = FALSE, parallel_fitting = FALSE, n_cores = parallel::detectCores() - 1, print = FALSE, seed = NULL, return_indices = FALSE, use_precomputed = TRUE )
object |
A fitted model using the |
scores |
A vector of scores to compute. The options are "logscore", "crps", "scrps", "mae", and "rmse". By default, all scores are computed. |
mode |
Cross-validation mode. Options are "k-fold", "loo" (leave-one-out), or "lpo" (leave-percentage-out). Default is "k-fold". |
k |
Number of folds for k-fold cross-validation. Default is 10. |
percentage |
The percentage (from 1 to 99) of the data to be used to train the model. Will only be used if |
number_folds |
Number of folds to be done if |
train_test_indices |
Optional list containing train and test indices for each fold. If provided, k, mode, and percentage are ignored. |
true_CV |
Logical indicating whether to refit the model for each fold (TRUE) or use the posterior distribution from the fitted model (FALSE). Default is FALSE. |
factor |
Which factor to multiply the scores. The default is 1. |
tibble |
Return the scores as a |
parallel_folds |
Logical indicating whether to run computations in parallel across folds. Default is FALSE. |
parallel_fitting |
Logical indicating whether to run model fitting in parallel. Default is FALSE. |
n_cores |
Number of cores to use for parallel computation. Default is parallel::detectCores() - 1. |
print |
Logical indicating whether to print progress of which fold is being processed. Default is FALSE. |
seed |
Random seed for reproducibility in fold creation. Default is NULL. |
return_indices |
Logical indicating whether to return the train/test indices used. Default is FALSE. |
use_precomputed |
Logical indicating whether to use precomputation for faster CV. Default is TRUE. |
Vector with the posterior expectations and variances as well as mean absolute error (MAE), root mean squared errors (RMSE), and three negatively oriented proper scoring rules: log-score, CRPS, and scaled CRPS.
graph_lme models assuming observations at
the vertices of metric graphsThis function performs pseudo-crossvalidation by computing leave-one-out predictions using the posterior distribution from a fitted model. In pseudo-crossvalidation, the model parameters are kept fixed at the values estimated from the full dataset (those provided in the object), rather than re-estimating them for each fold.
posterior_crossvalidation_loo( object, factor = 1, tibble = TRUE, which_repl = NULL )posterior_crossvalidation_loo( object, factor = 1, tibble = TRUE, which_repl = NULL )
object |
A fitted model using the |
factor |
Which factor to multiply the scores. The default is 1. |
tibble |
Return the scores as a |
which_repl |
Which replicates to consider? |
Vector with the posterior expectations and variances as well as mean absolute error (MAE), root mean squared errors (RMSE), and three negatively oriented proper scoring rules: log-score, CRPS, and scaled CRPS.
This function precomputes the computationally expensive quantities needed for fitting log-Gaussian Cox process (LGCP) models on metric graphs. It enables efficient refitting of multiple models with different formulas while reusing the same spatial structure, integration points, and covariates. This is particularly beneficial for model selection, cross-validation, or sensitivity analysis scenarios.
precompute_lgcp_graph( graph, resp_variable_name, model_name, spde_model, covariates = NULL, interpolate = TRUE, manual_integration_points = NULL, manual_covariates = NULL, use_current_mesh = TRUE, new_h = NULL, new_n = NULL, repl = ".all", repl_col = ".group", clone_graph = TRUE )precompute_lgcp_graph( graph, resp_variable_name, model_name, spde_model, covariates = NULL, interpolate = TRUE, manual_integration_points = NULL, manual_covariates = NULL, use_current_mesh = TRUE, new_h = NULL, new_n = NULL, repl = ".all", repl_col = ".group", clone_graph = TRUE )
graph |
A |
resp_variable_name |
Character. Name of the response variable (typically binary: 0 or 1) in the graph data that represents point occurrences. |
model_name |
Character. Name to be used for the spatial field in INLA
formulas (e.g., "field" for |
spde_model |
An SPDE model object of class |
covariates |
Character vector. Names of covariates to include in the precomputation. Only covariates listed here can be used in subsequent model fits with the precomputed data. |
interpolate |
Logical. If |
manual_integration_points |
Data frame with columns |
manual_covariates |
Data frame or named list containing covariate values
at integration points. Required when |
use_current_mesh |
Logical. If |
new_h |
Numeric. Mesh resolution for creating a new mesh when
|
new_n |
Integer. Alternative to |
repl |
Character vector or |
repl_col |
Character. Name of the column in the graph data that contains
replicate identifiers. Default is |
clone_graph |
Logical. If |
This function is most beneficial when:
Fitting multiple models with different covariate combinations
Performing model selection or cross-validation
Using exact SPDE models (which have higher setup costs)
Working with large graphs or complex spatial structures
The speedup typically becomes apparent when fitting 3 or more models, with greater benefits for more complex spatial structures and exact SPDE models.
A list of class "precomputed_lgcp" containing:
The modified metric_graph object with integration points
Vector of available covariate names
Precomputed INLA stack object
Name of the response variable
The SPDE model object prepared for the graph
Type of SPDE model ("exact" or "rational")
Name of the spatial field for formulas
All covariates you plan to use must be specified in the initial precomputation
The spatial structure (mesh, integration points) is fixed during precomputation
Manual covariate values should correspond to mesh nodes in
graph$mesh$VtE when interpolate = FALSE
lgcp_graph for fitting LGCP models with precomputed data,
graph_lgcp_sim for simulating LGCP data,
graph_spde for exact SPDE models,
spde_metric_graph_result for extracting spatial parameter estimates
## Not run: # Setup: Create graph with mesh and add point pattern data graph <- metric_graph$new() graph$build_mesh(h = 0.1) # Add point pattern data with covariates point_data <- data.frame( y = 1, # All observed locations have y = 1 edge_number = c(1, 2, 3, 1, 2), distance_on_edge = c(0.1, 0.3, 0.8, 0.9, 0.2), elevation = c(100, 150, 200, 120, 180), temperature = c(15, 12, 8, 14, 10) ) graph$add_observations(point_data, normalized = TRUE) # Create SPDE model spde_model <- graph_spde(graph, alpha = 1) # Precompute for multiple model fitting scenarios precomputed_data <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature"), use_current_mesh = TRUE ) # Now fit multiple models efficiently # Model selection: compare different covariate combinations fit1 <- lgcp_graph(y ~ elevation + f(field, model = spde_model), graph = graph, precomputed_data = precomputed_data) fit2 <- lgcp_graph(y ~ temperature + f(field, model = spde_model), graph = graph, precomputed_data = precomputed_data) fit3 <- lgcp_graph(y ~ elevation + temperature + f(field, model = spde_model), graph = graph, precomputed_data = precomputed_data) # Compare models using log marginal likelihood c(fit1$mlik[1], fit2$mlik[1], fit3$mlik[1]) # Using manual covariates (exact values at mesh nodes) manual_covs <- data.frame( elevation = graph$mesh$VtE[,1] * 50 + 100, # Synthetic elevation temperature = 20 - graph$mesh$VtE[,1] * 10, # Synthetic temperature .group = 1 ) precomputed_manual <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature"), manual_covariates = manual_covs, interpolate = FALSE ) # For maximum performance (modifies original graph) precomputed_fast <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature"), clone_graph = FALSE ) # Example with replicates replicate_data <- data.frame( y = 1, edge_number = c(1, 2, 1, 3, 2, 3), distance_on_edge = c(0.2, 0.4, 0.7, 0.1, 0.8, 0.6), elevation = c(110, 160, 130, 190, 170, 210), replicate_id = c(1, 1, 1, 2, 2, 2) ) graph$clear_observations() graph$add_observations(replicate_data, normalized = TRUE, group = "replicate_id") precomputed_reps <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = "elevation", repl = ".all", repl_col = "replicate_id" ) fit_reps <- lgcp_graph(y ~ elevation + f(field, model = spde_model, replicate = field.repl), graph = graph, precomputed_data = precomputed_reps) ## End(Not run)## Not run: # Setup: Create graph with mesh and add point pattern data graph <- metric_graph$new() graph$build_mesh(h = 0.1) # Add point pattern data with covariates point_data <- data.frame( y = 1, # All observed locations have y = 1 edge_number = c(1, 2, 3, 1, 2), distance_on_edge = c(0.1, 0.3, 0.8, 0.9, 0.2), elevation = c(100, 150, 200, 120, 180), temperature = c(15, 12, 8, 14, 10) ) graph$add_observations(point_data, normalized = TRUE) # Create SPDE model spde_model <- graph_spde(graph, alpha = 1) # Precompute for multiple model fitting scenarios precomputed_data <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature"), use_current_mesh = TRUE ) # Now fit multiple models efficiently # Model selection: compare different covariate combinations fit1 <- lgcp_graph(y ~ elevation + f(field, model = spde_model), graph = graph, precomputed_data = precomputed_data) fit2 <- lgcp_graph(y ~ temperature + f(field, model = spde_model), graph = graph, precomputed_data = precomputed_data) fit3 <- lgcp_graph(y ~ elevation + temperature + f(field, model = spde_model), graph = graph, precomputed_data = precomputed_data) # Compare models using log marginal likelihood c(fit1$mlik[1], fit2$mlik[1], fit3$mlik[1]) # Using manual covariates (exact values at mesh nodes) manual_covs <- data.frame( elevation = graph$mesh$VtE[,1] * 50 + 100, # Synthetic elevation temperature = 20 - graph$mesh$VtE[,1] * 10, # Synthetic temperature .group = 1 ) precomputed_manual <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature"), manual_covariates = manual_covs, interpolate = FALSE ) # For maximum performance (modifies original graph) precomputed_fast <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = c("elevation", "temperature"), clone_graph = FALSE ) # Example with replicates replicate_data <- data.frame( y = 1, edge_number = c(1, 2, 1, 3, 2, 3), distance_on_edge = c(0.2, 0.4, 0.7, 0.1, 0.8, 0.6), elevation = c(110, 160, 130, 190, 170, 210), replicate_id = c(1, 1, 1, 2, 2, 2) ) graph$clear_observations() graph$add_observations(replicate_data, normalized = TRUE, group = "replicate_id") precomputed_reps <- precompute_lgcp_graph( graph = graph, resp_variable_name = "y", model_name = "field", spde_model = spde_model, covariates = "elevation", repl = ".all", repl_col = "replicate_id" ) fit_reps <- lgcp_graph(y ~ elevation + f(field, model = spde_model, replicate = field.repl), graph = graph, precomputed_data = precomputed_reps) ## End(Not run)
Prediction for a mixed effects regression model on a metric graph
## S3 method for class 'graph_lme' predict( object, newdata = NULL, mesh = FALSE, mesh_h = 0.01, which_repl = NULL, compute_variances = FALSE, compute_pred_variances = FALSE, posterior_samples = FALSE, pred_samples = FALSE, n_samples = 100, edge_number = "edge_number", distance_on_edge = "distance_on_edge", normalized = FALSE, no_nugget = FALSE, return_as_list = FALSE, return_original_order = TRUE, check_euclidean = TRUE, advanced_options = list(), ..., data = deprecated() )## S3 method for class 'graph_lme' predict( object, newdata = NULL, mesh = FALSE, mesh_h = 0.01, which_repl = NULL, compute_variances = FALSE, compute_pred_variances = FALSE, posterior_samples = FALSE, pred_samples = FALSE, n_samples = 100, edge_number = "edge_number", distance_on_edge = "distance_on_edge", normalized = FALSE, no_nugget = FALSE, return_as_list = FALSE, return_original_order = TRUE, check_euclidean = TRUE, advanced_options = list(), ..., data = deprecated() )
object |
The fitted object with the |
newdata |
A |
mesh |
Obtain predictions for mesh nodes? The graph must have a mesh and should not have covariates. |
mesh_h |
If the graph does not have a mesh, one will be created with this value of 'h'. |
which_repl |
Which replicates to obtain the prediction. If |
compute_variances |
Set to TRUE to compute the kriging variances. |
compute_pred_variances |
Set to TRUE to compute the prediction variances. Will only be computed if newdata is |
posterior_samples |
If |
pred_samples |
If |
n_samples |
Number of samples to be returned. Will only be used if
|
edge_number |
Name of the variable that contains the edge number, the
default is |
distance_on_edge |
Name of the variable that contains the distance on
edge, the default is |
normalized |
Are the distances on edges normalized? |
no_nugget |
Should the prediction be carried out without the nugget? |
return_as_list |
Should the means of the predictions and the posterior samples be returned as a list, with each replicate being an element? |
return_original_order |
Should the results be return in the original (input) order or in the order inside the graph? |
check_euclidean |
Check if the graph used to compute the resistance distance has Euclidean edges? The graph used to compute the resistance distance has the observation locations as vertices. |
advanced_options |
Advanced options for internal use only. This parameter is intended to be used by the cross-validation function and should not be used otherwise. |
... |
Not used. |
data |
A list with elements mean, which contains the means of the
predictions, fe_mean, which is the prediction for the fixed effects, re_mean, which is the prediction for the random effects, variance (if compute_variance is TRUE), which contains the
posterior variances of the random effects, samples (if posterior_samples is TRUE),
which contains the posterior samples.
Auxiliar function to obtain predictions of the field using 'inlabru'.
## S3 method for class 'inla_metric_graph_spde' predict( object, cmp, bru_fit, newdata = NULL, formula = NULL, data_coords = c("PtE", "euclidean"), normalized = TRUE, repl = NULL, repl_col = NULL, group = NULL, group_col = NULL, n.samples = 100, seed = 0L, probs = c(0.025, 0.5, 0.975), return_original_order = TRUE, num.threads = NULL, include = NULL, exclude = NULL, drop = FALSE, tolerance_merge = 1e-05, ..., data = deprecated() )## S3 method for class 'inla_metric_graph_spde' predict( object, cmp, bru_fit, newdata = NULL, formula = NULL, data_coords = c("PtE", "euclidean"), normalized = TRUE, repl = NULL, repl_col = NULL, group = NULL, group_col = NULL, n.samples = 100, seed = 0L, probs = c(0.025, 0.5, 0.975), return_original_order = TRUE, num.threads = NULL, include = NULL, exclude = NULL, drop = FALSE, tolerance_merge = 1e-05, ..., data = deprecated() )
object |
An |
cmp |
The 'inlabru' component used to fit the model. |
bru_fit |
A fitted model using 'inlabru' or 'INLA'. |
newdata |
A data.frame of covariates needed for the prediction. The locations must be normalized PtE. |
formula |
A formula where the right hand side defines an R expression to evaluate for each generated sample. If NULL, the latent and hyperparameter states are returned as named list elements. See Details for more information. |
data_coords |
It decides which coordinate system to use. If |
normalized |
if |
repl |
Which replicates? If there is no replicates, one
can set |
repl_col |
Column containing the replicates. If the replicate is the internal group variable, set the replicates
to ".group". If not replicates, set to |
group |
Which groups? If there is no groups, one
can set |
group_col |
Which "column" of the data contains the group variable? |
n.samples |
Integer setting the number of samples to draw in order to calculate the posterior statistics. The default is rather low but provides a quick approximate result. |
seed |
Random number generator seed passed on to |
probs |
A numeric vector of probabilities with values in the standard unit interval to be passed to stats::quantile |
return_original_order |
Should the predictions be returned in the original order? |
num.threads |
Specification of desired number of threads for parallel computations. Default NULL, leaves it up to 'INLA'. When seed != 0, overridden to "16:1" |
include |
Character vector of component labels that are needed by the predictor expression; Default: NULL (include all components that are not explicitly excluded) |
exclude |
Character vector of component labels that are not used by the predictor expression. The exclusion list is applied to the list as determined by the include parameter; Default: NULL (do not remove any components from the inclusion list) |
drop |
logical; If keep=FALSE, data is a SpatialDataFrame, and the prediciton summary has the same number of rows as data, then the output is a SpatialDataFrame object. Default FALSE. |
tolerance_merge |
Tolerance for merging prediction points into original points to increase stability. |
... |
Additional arguments passed on to |
data |
A list with predictions.
Auxiliar function to obtain predictions of the field using 'inlabru' and 'rSPDE'.
## S3 method for class 'rspde_metric_graph' predict( object, cmp, bru_fit, newdata = NULL, formula = NULL, data_coords = c("PtE", "euclidean"), normalized = TRUE, n.samples = 100, seed = 0L, probs = c(0.025, 0.5, 0.975), num.threads = NULL, include = NULL, exclude = NULL, drop = FALSE, ..., data = deprecated() )## S3 method for class 'rspde_metric_graph' predict( object, cmp, bru_fit, newdata = NULL, formula = NULL, data_coords = c("PtE", "euclidean"), normalized = TRUE, n.samples = 100, seed = 0L, probs = c(0.025, 0.5, 0.975), num.threads = NULL, include = NULL, exclude = NULL, drop = FALSE, ..., data = deprecated() )
object |
An |
cmp |
The 'inlabru' component used to fit the model. |
bru_fit |
A fitted model using 'inlabru' or 'INLA'. |
newdata |
A data.frame of covariates needed for the prediction. The locations must be normalized PtE. |
formula |
A formula where the right hand side defines an R expression to evaluate for each generated sample. If NULL, the latent and hyperparameter states are returned as named list elements. See Details for more information. |
data_coords |
It decides which coordinate system to use. If |
normalized |
if |
n.samples |
Integer setting the number of samples to draw in order to calculate the posterior statistics. The default is rather low but provides a quick approximate result. |
seed |
Random number generator seed passed on to inla.posterior.sample |
probs |
A numeric vector of probabilities with values in the standard unit interval to be passed to stats::quantile. |
num.threads |
Specification of desired number of threads for parallel computations. Default NULL, leaves it up to 'INLA'. When seed != 0, overridden to "16:1" |
include |
Character vector of component labels that are needed by the predictor expression; Default: NULL (include all components that are not explicitly excluded) |
exclude |
Character vector of component labels that are not used by the predictor expression. The exclusion list is applied to the list as determined by the include parameter; Default: NULL (do not remove any components from the inclusion list) |
drop |
logical; If keep=FALSE, data is a SpatialDataFrame, and the prediciton summary has the same number of rows as data, then the output is a SpatialDataFrame object. Default FALSE. |
... |
Additional arguments passed on to inla.posterior.sample. |
data |
A list with predictions.
rspde_metric_graph objects obtained by using inlabru
Auxiliar function to transform the predictions of the field into a plot friendly object.
process_rspde_predictions(pred, graph, PtE = NULL)process_rspde_predictions(pred, graph, PtE = NULL)
pred |
The predictions of the field obtained by using |
graph |
The original |
PtE |
Normalized locations of the points on the edge. |
A list with predictions.
psp object to a metric graph objectThis function converts a psp object (from the spatstat package) into a metric graph object.
psp.to.graph(psp.object)psp.to.graph(psp.object)
psp.object |
A |
A metric graph object with edges defined by the segments in the psp object.
Obtains samples of a Whittle-Matérn field on a metric graph.
sample_spde( kappa, tau, range, sigma, sigma_e = 0, alpha = 1, directional = FALSE, graph, PtE = NULL, type = "manual", posterior = FALSE, nsim = 1, method = c("conditional", "Q"), BC = 1 )sample_spde( kappa, tau, range, sigma, sigma_e = 0, alpha = 1, directional = FALSE, graph, PtE = NULL, type = "manual", posterior = FALSE, nsim = 1, method = c("conditional", "Q"), BC = 1 )
kappa |
Range parameter. |
tau |
Precision parameter. |
range |
Practical correlation range parameter. |
sigma |
Marginal standard deviation parameter. |
sigma_e |
Standard deviation of the measurement noise. |
alpha |
Smoothness parameter. |
directional |
should we use directional model currently only for alpha=1 |
graph |
A |
PtE |
Matrix with locations (edge, normalized distance on edge) where the samples should be generated. |
type |
If "manual" is set, then sampling is done at the locations
specified in |
posterior |
Sample conditionally on the observations? |
nsim |
Number of samples to be generated. |
method |
Which method to use for the sampling? The options are "conditional" and "Q". Here, "Q" is more stable but takes longer. |
BC |
Boundary conditions for degree 1 vertices. BC = 0 gives Neumann boundary conditions and BC = 1 gives stationary boundary conditions. |
Samples a Gaussian Whittle-Matérn field on a metric graph, either from the prior or conditionally on observations
on the graph, where are independent standard Gaussian variables.
The parameters for the field can either be specified in terms of tau and kappa
or practical correlation range and marginal standard deviation.
Matrix or vector with the samples.
dplyr::select() function for datasets on metric graphsSelects columns on metric graphs, while keeps the spatial positions.
## S3 method for class 'metric_graph_data' select(.data, ...)## S3 method for class 'metric_graph_data' select(.data, ...)
.data |
The data list or |
... |
Additional parameters to be passed to |
A tidyr::tibble with the resulting selected columns.
Selected Inverse Calculation
selected_inv(Q)selected_inv(Q)
Q |
A sparse matrix in dgCMatrix format |
A numeric vector containing the selected inverse
Calls simulate.metric_graph() with parallel = TRUE. The edge loop is
distributed over a doParallel/foreach cluster.
simulate_parallel(graph, ..., n_cores = NULL, cluster = NULL)simulate_parallel(graph, ..., n_cores = NULL, cluster = NULL)
graph |
A |
... |
Further arguments passed to |
n_cores |
Number of parallel workers. |
cluster |
An already-registered |
Numeric vector (nsim = 1) or matrix with nsim columns.
V <- rbind(c(0,0), c(1,0), c(1,1), c(0,1)) E <- rbind(c(1,2), c(2,3), c(3,4), c(4,1)) g <- metric_graph$new(V = V, E = E) t_norm <- seq(0.1, 0.9, by = 0.2) PtE <- do.call(rbind, lapply(1:4, function(e) cbind(e, t_norm))) u <- simulate_parallel(g, alpha = 1, method = "kriging", kappa = 1, tau = 1, PtE = PtE, n_cores = 2)V <- rbind(c(0,0), c(1,0), c(1,1), c(0,1)) E <- rbind(c(1,2), c(2,3), c(3,4), c(4,1)) g <- metric_graph$new(V = V, E = E) t_norm <- seq(0.1, 0.9, by = 0.2) PtE <- do.call(rbind, lapply(1:4, function(e) cbind(e, t_norm))) u <- simulate_parallel(g, alpha = 1, method = "kriging", kappa = 1, tau = 1, PtE = PtE, n_cores = 2)
Simulation with starting value u0
simulate_spacetime(graph, t, kappa, rho, gamma, alpha, beta, sigma, u0, BC = 0)simulate_spacetime(graph, t, kappa, rho, gamma, alpha, beta, sigma, u0, BC = 0)
graph |
A |
t |
Vector of time points. |
kappa |
Spatial range parameter. |
rho |
Drift parameter. |
gamma |
Temporal range parameter. |
alpha |
Smoothness parameter (integer) for spatial operator. |
beta |
Smoothness parameter (integer) for Q-Wiener process. |
sigma |
Variance parameter. |
u0 |
Starting value. |
BC |
Which boundary condition to use (0,1). Here, 0 is no adjustment on the boundary and 1 results in making the boundary condition stationary. |
Precision matrix.
The function samples a Gaussian random field based on a
fitted model using graph_lme().
## S3 method for class 'graph_lme' simulate( object, nsim = 1, seed = NULL, sample_latent = FALSE, posterior = FALSE, which_repl = NULL, ... )## S3 method for class 'graph_lme' simulate( object, nsim = 1, seed = NULL, sample_latent = FALSE, posterior = FALSE, which_repl = NULL, ... )
object |
A |
nsim |
The number of simulations. |
seed |
an object specifying if and how the random number generator should be initialized ('seeded'). |
sample_latent |
If |
posterior |
Should posterior samples be generated? If |
which_repl |
Which replicates to generate the samples. If |
... |
Currently not used. |
A list containing elements samples, edge_number and distance_on_edge. Each of them is a list, whose indexes are the replicates, and in samples a matrix is given with nsim columns, each one being a sample. edge_number and distance_on_edges contain the respective edge numbers and distances on edge for each sampled element. The locations of the samples are the location of the data in which the model was fitted.
Draws unconditional (prior) samples of a Whittle-Matérn field on a metric graph using one of two exact algorithms from Section 6.6 of the paper.
## S3 method for class 'metric_graph' simulate( object, nsim = 1, seed = NULL, alpha = 1, method = c("direct", "kriging", "extended"), impl = c("cpp", "R"), kappa, tau, range, sigma, PtE = NULL, type = "manual", BC = 1, parallel = FALSE, n_cores = NULL, cluster = NULL, ... )## S3 method for class 'metric_graph' simulate( object, nsim = 1, seed = NULL, alpha = 1, method = c("direct", "kriging", "extended"), impl = c("cpp", "R"), kappa, tau, range, sigma, PtE = NULL, type = "manual", BC = 1, parallel = FALSE, n_cores = NULL, cluster = NULL, ... )
object |
A |
nsim |
Number of samples. Returns a vector (nsim = 1) or matrix (nsim > 1) of sampled values. |
seed |
Integer seed for |
alpha |
Smoothness parameter (1 or 2). |
method |
Simulation algorithm: |
impl |
Implementation: |
kappa |
Range parameter. |
tau |
Precision parameter. |
range |
Practical correlation range (alternative to |
sigma |
Marginal standard deviation (alternative to |
PtE |
Matrix with columns |
type |
Location specification: |
BC |
Boundary condition for degree-1 vertices: 1 = stationary (default), 0 = Neumann. |
parallel |
Logical. Use a parallel cluster for the edge loop? |
n_cores |
Number of parallel workers. Ignored if |
cluster |
An already-registered |
... |
Ignored. |
Algorithm A ("direct"): interior values on each edge are drawn from the
bridge conditional via a dense
Cholesky of the bridge covariance. Cost:
per edge. Preferred when is small (roughly ).
Algorithm B ("kriging"): an unconditioned Matérn process is simulated on
each edge by a linear Markov recursion, then the bridge boundary data are
imposed by a kriging correction (Theorem 2 / Proposition 4). Cost:
per edge. Preferred for large .
Both algorithms produce draws from exactly the same finite-dimensional distribution; they differ only in computational cost.
The two-step procedure is:
Draw the vertex (boundary) state from the vertex precision via a sparse Cholesky.
For each edge (independently given the vertex state), draw the interior values using the chosen algorithm.
When parallel = TRUE the edge loop is distributed over a
doParallel/foreach cluster. Reproducibility requires passing a seed
so that per-edge seeds are derived deterministically.
Numeric vector (nsim = 1) or matrix with nsim columns of field
values at the requested locations, ordered to match PtE.
# Small square graph, alpha = 1 V <- rbind(c(0,0), c(1,0), c(1,1), c(0,1)) E <- rbind(c(1,2), c(2,3), c(3,4), c(4,1)) g <- metric_graph$new(V = V, E = E) t_norm <- seq(0.1, 0.9, by = 0.2) PtE <- do.call(rbind, lapply(1:4, function(e) cbind(e, t_norm))) u <- simulate(g, alpha = 1, method = "direct", kappa = 1, tau = 1, PtE = PtE) # Method B on a larger graph, parallel u2 <- simulate(g, alpha = 2, method = "kriging", range = 1, sigma = 1, PtE = PtE, parallel = TRUE, n_cores = 2)# Small square graph, alpha = 1 V <- rbind(c(0,0), c(1,0), c(1,1), c(0,1)) E <- rbind(c(1,2), c(2,3), c(3,4), c(4,1)) g <- metric_graph$new(V = V, E = E) t_norm <- seq(0.1, 0.9, by = 0.2) PtE <- do.call(rbind, lapply(1:4, function(e) cbind(e, t_norm))) u <- simulate(g, alpha = 1, method = "direct", kappa = 1, tau = 1, PtE = PtE) # Method B on a larger graph, parallel u2 <- simulate(g, alpha = 2, method = "kriging", range = 1, sigma = 1, PtE = PtE, parallel = TRUE, n_cores = 2)
Computes the covariance function for a Whittle-Matérn field.
spde_covariance(P, kappa, tau, range, sigma, alpha, graph, directional = F)spde_covariance(P, kappa, tau, range, sigma, alpha, graph, directional = F)
P |
Location (edge number and normalized location on the edge) for the location to evaluate the covariance function at. |
kappa |
Parameter kappa from the SPDE. |
tau |
Parameter tau from the SPDE. |
range |
Range parameter. |
sigma |
Standard deviation parameter. |
alpha |
Smoothness parameter (1 or 2). |
graph |
A |
directional |
bool is the model a directional or not. directional only works for alpha=1 |
Compute the covariance function where
P is the provided location and are all locations in the mesh
of the graph.
Vector with the covariance function evaluate at the mesh locations.
Extract field and parameter values and distributions for a metric graph spde effect from an 'INLA' result object.
spde_metric_graph_result( inla, name, metric_graph_spde, compute.summary = TRUE, n_samples = 5000, n_density = 1024 )spde_metric_graph_result( inla, name, metric_graph_spde, compute.summary = TRUE, n_samples = 5000, n_density = 1024 )
inla |
An 'INLA' object obtained from a call to |
name |
A character string with the name of the 'rSPDE' effect in the model. |
metric_graph_spde |
The |
compute.summary |
Should the summary be computed? |
n_samples |
The number of samples to be used if parameterization is |
n_density |
The number of equally spaced points to estimate the density. |
If the model was fitted with matern parameterization (the default),
it returns a list containing:
marginals.range |
Marginal densities for the range parameter. |
marginals.log.range |
Marginal densities for log(range). |
marginals.sigma |
Marginal densities for std. deviation. |
marginals.log.sigma |
Marginal densities for log(std. deviation). |
marginals.values |
Marginal densities for the field values. |
summary.log.range |
Summary statistics for log(range). |
summary.log.sigma |
Summary statistics for log(std. deviation). |
summary.values |
Summary statistics for the field values. |
If compute.summary is TRUE, then the list will also contain
summary.kappa |
Summary statistics for kappa. |
summary.tau |
Summary statistics for tau. |
If the model was fitted with the spde parameterization, it returns a list containing:
marginals.kappa |
Marginal densities for kappa. |
marginals.log.kappa |
Marginal densities for log(kappa). |
marginals.log.tau |
Marginal densities for log(tau). |
marginals.tau |
Marginal densities for tau. |
marginals.values |
Marginal densities for the field values. |
summary.log.kappa |
Summary statistics for log(kappa). |
summary.log.tau |
Summary statistics for log(tau). |
summary.values |
Summary statistics for the field values. |
If compute.summary is TRUE, then the list will also contain
summary.kappa |
Summary statistics for kappa. |
summary.tau |
Summary statistics for tau. |
Computes the precision matrix for all vertices for a Whittle-Matérn field.
spde_precision(kappa, tau, alpha, graph, BC = 1, build = TRUE)spde_precision(kappa, tau, alpha, graph, BC = 1, build = TRUE)
kappa |
Range parameter. |
tau |
Precision parameter. |
alpha |
Smoothness parameter (1 or 2). |
graph |
A |
BC |
Set boundary conditions for degree=1 vertices. BC =0 gives Neumann boundary conditions and BC=1 gives stationary boundary conditions. |
build |
If |
Precision matrix or list.
Computes the variance function for a Whittle-Matérn field. Warning is not feasible for large graph due to matrix inversion
spde_variance( kappa, tau, range, sigma, alpha, graph, BC = 1, include_vertices = FALSE, directional = F )spde_variance( kappa, tau, range, sigma, alpha, graph, BC = 1, include_vertices = FALSE, directional = F )
kappa |
Parameter kappa from the SPDE. |
tau |
Parameter tau from the SPDE. |
range |
Range parameter. |
sigma |
Standard deviation parameter. |
alpha |
Smoothness parameter (1 or 2). |
graph |
A |
BC |
boundary conditions |
include_vertices |
Should the variance at the vertices locations be included in the returned vector? |
directional |
bool is the model a directional or not. directional only works for alpha=1 |
Compute the variance where
are all locations in the mesh
of the graph.
Vector with the variance function evaluate at the mesh locations.
stlpp object to a metric graph objectThis function converts an stlpp object (from the stlnpp package) into a metric graph object.
stlpp.to.graph(stlpp.obj, ...)stlpp.to.graph(stlpp.obj, ...)
stlpp.obj |
An |
... |
Additional arguments to be passed to the |
A metric graph object
dplyr::summarise() function for datasets on metric graphsCreates summaries, while keeps the spatial positions.
## S3 method for class 'metric_graph_data' summarise(.data, ..., .include_graph_groups = FALSE, .groups = NULL)## S3 method for class 'metric_graph_data' summarise(.data, ..., .include_graph_groups = FALSE, .groups = NULL)
.data |
The data list or |
... |
Additional parameters to be passed to |
.include_graph_groups |
Should the internal graph groups be included in the grouping variables? The default is |
.groups |
A vector of strings containing the names of the columns to be additionally grouped, when computing the summaries. The default is |
A tidyr::tibble with the resulting selected columns.
graph_lme ObjectsFunction providing a summary of results related to metric graph mixed effects regression models.
## S3 method for class 'graph_lme' summary(object, all_times = FALSE, ...)## S3 method for class 'graph_lme' summary(object, all_times = FALSE, ...)
object |
an object of class |
all_times |
Show all computed times. |
... |
not used. |
An object of class summary_graph_lme containing information
about a graph_lme object.
metric_graph ObjectsFunction providing a summary of several informations/characteristics of a metric graph object.
## S3 method for class 'metric_graph' summary( object, messages = FALSE, compute_characteristics = NULL, check_euclidean = NULL, check_distance_consistency = NULL, ... )## S3 method for class 'metric_graph' summary( object, messages = FALSE, compute_characteristics = NULL, check_euclidean = NULL, check_distance_consistency = NULL, ... )
object |
an object of class |
messages |
Should message explaining how to build the results be given for missing quantities? |
compute_characteristics |
Should the characteristics of the graph be computed? If |
check_euclidean |
Check if the graph has Euclidean edges? If |
check_distance_consistency |
Check the distance consistency assumption?#' If |
... |
not used. |
An object of class summary_graph_lme containing information
about a metric_graph object.
inla_rspde
model from a rspde.result objectSummary for posteriors of 'rSPDE' field parameters in their original scales.
## S3 method for class 'metric_graph_spde_result' summary(object, digits = 6, ...)## S3 method for class 'metric_graph_spde_result' summary(object, digits = 6, ...)
object |
A |
digits |
Integer, used for number formatting with signif() |
... |
Currently not used. |
A data.frame containing the summary.
This function creates a new metric_graph object from an existing one, preserving all data, edge weights, mesh, distances, and other components while ensuring compatibility with the current package version. The new graph is created with minimal changes by disabling merges and other transformations.
update_graph(old_graph, verbose = TRUE)update_graph(old_graph, verbose = TRUE)
old_graph |
A metric_graph object from an older version of the package |
verbose |
Logical. Print progress messages. Default is TRUE. |
This function is useful when loading metric graphs created with older versions of the MetricGraph package. It ensures that all components (vertices, edges, data, mesh, distances, etc.) are preserved while updating the internal structure to be compatible with the current package version.
The function works by:
Extracting all components from the old graph
Creating a new graph with settings that minimize structural changes
Restoring all computed components (mesh, distances, etc.)
Re-adding observation data if present
A new metric_graph object compatible with the current package version
## Not run: # Load an old graph object old_graph <- readRDS("old_graph.rds") # Update to current version new_graph <- update_graph(old_graph) # Or use the method directly new_graph <- old_graph$update_graph() ## End(Not run)## Not run: # Load an old graph object old_graph <- readRDS("old_graph.rds") # Update to current version new_graph <- update_graph(old_graph) # Or use the method directly new_graph <- old_graph$update_graph() ## End(Not run)