Skip to contents

Identifies "central" response and predictor genes from NeighbourNet meta-networks by decomposing each meta-network into principal components (via singular value decomposition, SVD) and selecting genes with the highest absolute loadings on leading singular vectors. These loadings correspond to each gene’s eigenvector centrality within the meta-network, capturing genes that are most influential in the overall co-expression structure. The function optionally operates directly on a supplied meta-network tensor or retrieves it from a Seurat object prepared by the NeighbourNet workflow.

Usage

select.central.genes(
  seurat.obj = NULL,
  network = NULL,
  n.net = NULL,
  k = 1,
  n.per.component = 4,
  keep.responses = FALSE
)

Arguments

seurat.obj

A Seurat object containing NeighbourNet results, with both cell-specific networks and meta-networks stored in the NNet.mod list within the misc slot. This list is generated by run.nn.reg and subsequently updated by build.meta.network.

network

Optional 3D tensor of networks with dimension order (responses x predictors x cells).

n.net

A integer specifying the number of leading meta-networks from which central genes are extracted

k

A integer specifying the number of leading eigenvectors (components) to extract from each meta-network when scoring central genes.

n.per.component

Integer; number of top-scoring genes to select per eigenvector and per meta-network. Default: 4.

keep.responses

A logical to control whether responses are also selected.

  • If FALSE (default), both responses and predictors are selected based on eigenvector centrality scores.

  • If TRUE, all responses are retained (no selection) and only predictors are selected as central genes.

Value

A list with elements:

  • central.responses: Character vector of selected central response genes. When keep.responses = TRUE, this may contain all responses.

  • central.predictors: Character vector of selected central predictor genes.

  • response.module: Factor giving the meta-network membership label ("M1", "M2", ...) for each unique central.responses. Set to NULL when all responses are kept without assignment.

  • predictor.module: Factor giving the meta-network membership label for each unique central.predictors. Set to NULL when all predictors are kept without assignment.

Details

Eigenvector centrality interpretation

  • Each meta-network is treated as a weighted bipartite graph between response and predictor genes.

  • The singular vectors from SVD represent the principal axes of variation in this bipartite graph. Genes with high absolute loadings on leading singular vectors have strong co-expression links with other highly connected genes. This is analogous to high eigenvector centrality in network theory.

  • Selecting top-loading genes across singular vectors therefore yields a set of “hub-like” genes that summarise the co-expression pattern of each meta-network.

Selection strategy

  • For each meta-network, a truncated SVD is applied to the weighted adjancency matrix.

  • Absolute singular vector loadings are used as eigenvector centrality scores.

  • Genes with the highest loadings per component (up to n.per.component) are selected.

  • Previously selected genes are zeroed out before selecting additional components, ensuring diverse representation across meta-networks.

Examples

# From a Seurat object with NNet meta-networks
sel <- select.central.genes(seurat.obj,
                            n.net = 5,
                            k = 2,
                            n.per.component = 3)
#> Error: object 'seurat.obj' not found

# View top eigen-central genes
head(sel$central.predictors)
#> Error: object 'sel' not found