These functions perform bivariate spatial analysis. In this version, the
bivariate global method supported are lee
,
lee.mc
, and lee.test
from spdep
, and cross
variograms from gstat
(use cross_variogram
and
cross_variogram_map
for type
argument, see
variogram-internal
). Global Lee statistic is computed by my own
implementation that is much faster than that in spdep
. Bivariate local
methods supported are lee
(use locallee
for type
argument) and localmoran_bv
a bivariate version of Local Moran
in spdep
.
Usage
# S4 method for ANY
calculateBivariate(
x,
y = NULL,
type,
listw = NULL,
coords_df = NULL,
BPPARAM = SerialParam(),
zero.policy = NULL,
returnDF = TRUE,
p.adjust.method = "BH",
name = NULL,
...
)
# S4 method for SpatialFeatureExperiment
calculateBivariate(
x,
type,
feature1,
feature2 = NULL,
colGraphName = 1L,
colGeometryName = 1L,
sample_id = "all",
exprs_values = "logcounts",
BPPARAM = SerialParam(),
zero.policy = NULL,
returnDF = TRUE,
p.adjust.method = "BH",
swap_rownames = NULL,
name = NULL,
...
)
runBivariate(
x,
type,
feature1,
feature2 = NULL,
colGraphName = 1L,
colGeometryName = 1L,
sample_id = "all",
exprs_values = "logcounts",
BPPARAM = SerialParam(),
swap_rownames = NULL,
zero.policy = NULL,
p.adjust.method = "BH",
name = NULL,
overwrite = FALSE,
...
)
Arguments
- x
A numeric matrix whose rows are features/genes, or a numeric vector (then
y
must be specified), or aSpatialFeatureExperiment
(SFE) object with such a matrix in an assay.- y
A numeric matrix whose rows are features/genes, or a numeric vector. Bivariate statics will be computed for all pairwise combinations of row names of x and row names of y, except in cross variogram where combinations within x and y are also computed.
- type
An
SFEMethod
object, or a string matching the name of anSFEMethod
object. The methods mentioned above correspond toSFEMethod
objects already implemented in the Voyager package. UselistSFEMethods
to see which methods are available. You can implement newSFEMethod
objects to apply Voyager functions to other spatial analysis methods. This is in part inspired by thecaret
,parsnip
, andBiocSingular
packages.- listw
Weighted neighborhood graph as a
spdep
listw
object. Not used when the method specified intype
does not use a spatial neighborhood graph, such as the variogram.- coords_df
A
sf
data frame specifying location of each cell. Not used when the method specified intype
uses a spatial neighborhood graph. Must be specified otherwise.- BPPARAM
A
BiocParallelParam
object specifying whether and how computing the metric for numerous genes shall be parallelized.- zero.policy
default
attr(listw, "zero.policy")
as set whenlistw
was created, if attribute not set, use global option value; if TRUE assign zero to the lagged value of zones without neighbours, if FALSE assign NA- returnDF
Logical, when the results are not added to a SFE object, whether the results should be formatted as a
DataFrame
.- p.adjust.method
Method to correct for multiple testing, passed to
p.adjustSP
. Methods allowed are inp.adjust.methods
.- name
Name to use to store the results, defaults to the name in the
SFEMethod
object passed to argumenttype
. Can be set to distinguish between results from the same method but with different parameters.- ...
Other arguments passed to S4 method (for convenience wrappers like
calculateMoransI
) or method used to compute metrics as specified by the argumenttype
(as in more general functions likecalculateUnivariate
). See documentation of functions with the same name as specified intype
in thespdep
package for the method specific arguments. For variograms, see.variogram
.- feature1
ID or symbol of the first genes in SFE object, for the argument
x
.- feature2
ID or symbol of the second genes in SFE object, for the argument
x
. Mandatory if length offeature1
is 1.- colGraphName
Name of the listw graph in the SFE object that corresponds to entities represented by columns of the gene count matrix. Use
colGraphNames
to look up names of the available graphs for cells/spots. Note that for multiplesample_id
s, it is assumed that all of them have a graph of this same name.- colGeometryName
Name of a
colGeometry
sf
data frame whose numeric columns of interest are to be used to compute the metric. UsecolGeometryNames
to look up names of thesf
data frames associated with cells/spots. In the SFE method ofcalculateUnivariate
, this is to specify location of cells for methods that don't take a spatial neighborhood graph such as the variogram. If the geometry is not of typePOINT
, thenspatialCoords(x)
is used instead.- sample_id
Sample(s) in the SFE object whose cells/spots to use. Can be "all" to compute metric for all samples; the metric is computed separately for each sample.
- exprs_values
Integer scalar or string indicating which assay of x contains the expression values.
- swap_rownames
Column name of
rowData(object)
to be used to identify features instead ofrownames(object)
when labeling plot elements. If not found inrowData
, then rownames of the gene count matrix will be used.- overwrite
Logical, whether to overwrite existing results with the same name. Defaults to
FALSE
.
Value
The calculateBivariate
function returns a correlation matrix
for global Lee, and the results for the each pair of genes for other
methods. Global results are not stored in the SFE object. Some methods
return one result for each pair of genes, while some return pairwise
results for more than 2 genes jointly. Local results are stored in the
localResults
field in the SFE object, with name the
concatenation the two gene names separated by two underscores (__
).
Examples
library(SFEData)
library(scater)
library(scran)
library(SpatialFeatureExperiment)
library(SpatialExperiment)
sfe <- McKellarMuscleData()
#> see ?SFEData and browseVignettes('SFEData') for documentation
#> downloading 1 resources
#> retrieving 1 resource
#> loading from cache
sfe <- sfe[,sfe$in_tissue]
sfe <- logNormCounts(sfe)
gs <- modelGeneVar(sfe)
hvgs <- getTopHVGs(gs, fdr.threshold = 0.01)
g <- colGraph(sfe, "visium") <- findVisiumGraph(sfe)
# Matrix method
mat <- logcounts(sfe)[hvgs[1:5],]
df <- df2sf(spatialCoords(sfe), spatialCoordsNames(sfe))
out <- calculateBivariate(mat, type = "lee", listw = g)
out <- calculateBivariate(mat, type = "cross_variogram", coords_df = df)
# SFE method
out <- calculateBivariate(sfe, type = "lee",
feature1 = c("Myh1", "Myh2", "Csrp3"), swap_rownames = "symbol")
out2 <- calculateBivariate(sfe, type = "lee.test", feature1 = "Myh1",
feature2 = "Myh2", swap_rownames = "symbol")
sfe <- runBivariate(sfe, type = "locallee", feature1 = "Myh1",
feature2 = "Myh2", swap_rownames = "symbol")