This S4 class is used to wrap spatial analysis methods, taking inspiration
from the caret
and tidymodels
packages.
Usage
SFEMethod(
name,
fun,
reorganize_fun,
package,
variate = c("uni", "bi", "multi"),
scope = c("global", "local"),
title = NULL,
default_attr = NA,
args_not_check = NA,
joint = FALSE,
use_graph = TRUE,
use_matrix = FALSE,
dest = c("reducedDim", "colData")
)
# S4 method for SFEMethod
info(x, type)
# S4 method for SFEMethod
is_local(x)
# S4 method for SFEMethod
fun(x)
# S4 method for SFEMethod
reorganize_fun(x)
# S4 method for SFEMethod
args_not_check(x)
# S4 method for SFEMethod
is_joint(x)
# S4 method for SFEMethod
use_graph(x)
# S4 method for SFEMethod
use_matrix(x)
Arguments
- name
Name of the method, used by user-facing functions to specify the method to use, such as "moran" for Moran's I.
- fun
Function to run the method. See Details.
- reorganize_fun
Function to reorganize results to add to the SFE object. See Details.
- package
Name of the package whose implementation of the method is used here, used to check if the package is installed.
- variate
How many variables this method works with, must be one of "uni" for univariate, "bi" for bivariate, or "multi" for multivariate.
- scope
Either "global", returning one result for the entire dataset, or "local", returning one result for each spatial location. For multivariate methods, this is irrelevant.
- title
Descriptive title to show when plotting the results.
- default_attr
For local methods that return multiple fields, such as local Moran values and their p-values, the default field to use when plotting.
- args_not_check
A character vector indicating which argument are not to be checked when comparing parameters in with those of a previous run.
- joint
Logical, whether it makes sense to run this method to multiple samples jointly. If
TRUE
, thenfun
must be able to handle an adjacency matrix for thelistw
argument because there's no straightforward way to concatenatelistw
objects from multiple samples.- use_graph
Logical, to indicate whether the method uses a spatial neighborhood graph because unifying the user facing functions have an argument asking for the graph as most though not all methods require the graph.
- use_matrix
Logical, whether the function in slot
fun
takes a matrix as input. The argument is only used for bivariate methods.- dest
Whether the results are more appropriate for
reducedDim
orcolData
. Only used for multivariate methods. This overrides the "local" field ininfo
.- x
A
SFEMethod
object- type
One of the names of the
info
slot, see slot documentation.
Value
The constructor returns a SFEMethod
object. The getters return
the content of the corresponding slots.
Details
The fun
slot should be specified as such:
For all methods, there must be arguments x
for a vector, listw
for a listw
object specifying the spatial neighborhood graph,
zero.policy
specifying what to do with cells without neighbors
(default NULL, use global option value; if TRUE assign zero to the lagged
value of zones without neighbours, if FALSE assign NA), and optionally other
method specific arguments and ...
to pass to the underlying imported
function. If the original function implementing the method in the package has
different argument names or orders, write a thin wrapper to rearrange and/or
rename the arguments.
For univariate methods that use a spatial neighborhood graph, the first two
arguments must be x
and listw
. For univariate methods that
don't use a spatial neighborhood graph, such as the variogram, the first two
arguments must be x
for a numeric vector and coords_df
for a
sf
data frame with cell locations and optionally other regressors. The
formula
argument is optional and can have defaults specifying
regressors to use.
For bivariate methods, the first three arguments must be x
, y
,
and listw
.
For multivariate methods, the argument x
is mandatory, for the matrix
input. These arguments must be present but can be optional by having
defaults: listw
and ncomponents
to set the number of dimentions
in the output.
The reorganize_fun
slot should be specified as such:
Univariate methods are meant to be run separately for each gene, so the input
to reorganize_fun
in the argument out
should be a list of
outputs; each element of the list corresponds to the output of a gene.
For univariate global methods, different fields of the result should be
columns of a data frame with one row so results for multiple features will be
a data frame. The arguments should be out
, and name
to rename
the primary field if a more informative name is needed, and ...
for
other arguments specific to methods. The output of reorganize_fun
should be a DataFrame
whose rows correspond to the genes and columns
correspond to fields in the output.
For univariate local methods, the arguments should be out
, nb
for a neighborhood list used for multiple testing correction, and
p.adjust.method
for a method to correct for multiple testing as in
p.adjust
, and ...
. The output of reorganize_fun
should be a list of reorganized output. Each element of the list corresponds
to a gene, and the reorganized content of the element can be a vector,
matrix, or data frame, but they must all have the same dimensions for all
genes. Each element of the vector, or each row of the matrix or data frame
corresponds to a cell.
For multivariate methods whose results go into reducedDim
,
reorganize_fun
should have one argument out
for the raw output.
The output of reorganize_fun
should be the cell embedding matrix ready
to be added to reducedDim
. Other relevant information such as gene
loadings and eigenvalues should be added to the attributes of the cell
embedding matrix.
For multivariate methods whose results can go into colData
, the
arguments should be out
, nb
, and p.adjust.method
. Unlike
the univariate local counterpart, out
takes the raw output instead of
a list of outputs. The output of reorganize_fun
is a vector or a data
frame ready to be added to colData
.
Slots
info
A named character vector specifying information about the method.
fun
The function implementing the method. See Details.
reorganize_fun
Function to convert output from
fun
into a format to store in the SFE object. See Details.misc
Miscellaneous information on how the method interacts with the rest of the package. This should be a named list.
Examples
moran <- SFEMethod(
name = "moran", title = "Moran's I", package = "spdep", variate = "uni",
scope = "global",
fun = function(x, listw, zero.policy = NULL)
spdep::moran(x, listw, n = length(listw$neighbours), S0 = spdep::Szero(listw),
zero.policy = zero.policy),
reorganize_fun = Voyager:::.moran2df
)