This implementation uses the RSpectra
package to efficiently compute a
small subset of eigenvalues and eigenvectors, as a small subset is typically
used. Hence it's much faster and memory efficient than the original
implementation in adespatial
. However, this implementation here does
not support row and column weighting other than the standard ones for PCA.,
so the adespatial
implementation is more general.
Arguments
- x
A matrix whose columns are features and rows are cells.
- listw
A
listw
object, a spatial neighborhood graph for the cells inx
. The length must be equal to the number of row ofx
.- nfposi
Number of positive eigenvalues and their eigenvectors to compute.
- nfnega
Number of nega eigenvalues and their eigenvectors to compute. These indicate negative spatial autocorrelation.
- scale
Logical, whether to scale the data.
Value
A matrix for the cell embeddings in each spatial PC, with attribute
loading
for the eigenvectors or gene loadings, and attribute
eig
for the eigenvalues.
Note
Eigen decomposition will fail if any feature has variance zero leading to NaN in the scaled matrix.
References
Dray, S., Said, S. and Debias, F. (2008) Spatial ordination of vegetation data using a generalization of Wartenberg's multivariate spatial correlation. Journal of vegetation science, 19, 45-56.
Examples
library(SFEData)
library(scater)
sfe <- McKellarMuscleData("small")
#> see ?SFEData and browseVignettes('SFEData') for documentation
#> loading from cache
sfe <- sfe[,sfe$in_tissue]
sfe <- logNormCounts(sfe)
inds <- order(rowSums(logcounts(sfe)), decreasing = TRUE)[1:50]
mat <- logcounts(sfe)[inds,]
g <- findVisiumGraph(sfe)
out <- multispati_rsp(t(mat), listw = g, nfposi = 10, nfnega = 10)