Skip to contents

Spatially variable gene (SVG) calling using the SpaNorm model.

Usage

SpaNormSVG(spe, verbose = TRUE)

# S4 method for class 'SpatialExperiment'
SpaNormSVG(spe, verbose = TRUE)

Arguments

spe

a SpatialExperiment or Seurat object, with the count data stored in 'counts' or 'data' assays respectively, and a SpaNorm model fit.

verbose

a logical, specifying whether to show update messages (default TRUE).

Value

a SpatialExperiment or Seurat object with F-statistics, false discovery rates (FDRs). For SpatialExperiment objects, these are stored in the rowData.

Details

SpaNorm SVG calling works by using the SpaNorm model fit for data normalisation to perform a likelihood ratio test (LRT). The model used for normalisation is considered to be the full model. A second nested model is fit without the splines representing biology. These nested models are then compared using a LRT to identify genes where the splines representing biology contain strong signal.

Examples


library(SpatialExperiment)
library(ggplot2)

data(HumanDLPFC)

HumanDLPFC = SpaNorm(HumanDLPFC, sample.p = 0.05, df.tps = 2, tol = 1e-2)
#> (1/2) Fitting SpaNorm model
#> 201 cells/spots sampled to fit model
#> iter:  1, estimating gene-wise dispersion
#> iter:  1, log-likelihood: -1187433.488691
#> iter:  1, fitting NB model
#> iter:  1, iter:  1, log-likelihood: -1187433.488691
#> iter:  1, iter:  2, log-likelihood: -838266.840382
#> iter:  1, iter:  3, log-likelihood: -746231.809177
#> iter:  1, iter:  4, log-likelihood: -729894.353035
#> iter:  1, iter:  5, log-likelihood: -727408.866633
#> iter:  1, iter:  6, log-likelihood: -727022.291523
#> iter:  1, iter:  7, log-likelihood: -726949.523417
#> iter:  1, iter:  8, log-likelihood: -726930.462434 (converged)
#> iter:  2, estimating gene-wise dispersion
#> iter:  2, log-likelihood: -726617.003911
#> iter:  2, fitting NB model
#> iter:  2, iter:  1, log-likelihood: -726617.003911
#> iter:  2, iter:  2, log-likelihood: -726494.926214
#> iter:  2, iter:  3, log-likelihood: -726489.067430 (converged)
#> iter:  3, log-likelihood: -726489.067430 (converged)
#> (2/2) Normalising data
HumanDLPFC = SpaNormSVG(HumanDLPFC)
#> (1/3) Retrieving SpaNorm model
#> (2/3) Fitting Null SpaNorm model
#> 201 cells/spots sampled to fit model
#> iter:  1, estimating gene-wise dispersion
#> iter:  1, log-likelihood: -1187433.488691
#> iter:  1, fitting NB model
#> iter:  1, iter:  1, log-likelihood: -1187433.488691
#> iter:  1, iter:  2, log-likelihood: -842112.924870
#> iter:  1, iter:  3, log-likelihood: -753956.997579
#> iter:  1, iter:  4, log-likelihood: -738736.488390
#> iter:  1, iter:  5, log-likelihood: -736641.494834
#> iter:  1, iter:  6, log-likelihood: -736460.116450
#> iter:  1, iter:  6, log-likelihood: -736460.116450
#> iter:  1, iter:  6, log-likelihood: -736460.116450
#> iter:  1, iter:  7, log-likelihood: -736460.116450 (converged)
#> iter:  2, estimating gene-wise dispersion
#> iter:  2, log-likelihood: -736441.141889
#> iter:  2, fitting NB model
#> iter:  2, iter:  1, log-likelihood: -736441.141889
#> iter:  2, iter:  1, log-likelihood: -736441.141889
#> iter:  2, iter:  1, log-likelihood: -736441.141889
#> iter:  2, iter:  2, log-likelihood: -736441.141889
#> iter:  2, iter:  2, log-likelihood: -736441.141889
#> iter:  2, iter:  2, log-likelihood: -736441.141889
#> iter:  2, iter:  3, log-likelihood: -736441.141889 (converged)
#> iter:  3, log-likelihood: -736441.141889 (converged)
#> (3/3) Finding SVGs
#> 1237 SVGs found (FDR < 0.05)
head(rowData(HumanDLPFC))
#> DataFrame with 6 rows and 5 columns
#>                   gene_name   gene_biotype     svg.F       svg.p     svg.fdr
#>                 <character>    <character> <numeric>   <numeric>   <numeric>
#> ENSG00000188976       NOC2L protein_coding   0.00000 1.00000e+00 1.00000e+00
#> ENSG00000188290        HES4 protein_coding  18.00973 1.13958e-14 1.91539e-13
#> ENSG00000187608       ISG15 protein_coding   0.00000 1.00000e+00 1.00000e+00
#> ENSG00000188157        AGRN protein_coding   2.96848 1.84287e-02 7.30241e-02
#> ENSG00000078808        SDF4 protein_coding   0.00000 1.00000e+00 1.00000e+00
#> ENSG00000176022     B3GALT6 protein_coding   0.00000 1.00000e+00 1.00000e+00