This is a test version of Biostars. For the public version, visit https://www.biostars.org.
How to subset features (genes, peaks, cells) scientifically when analyzing single cell multiomics dataset (scRNA-seq + scATAC-seq)?

I am working with a rice single-cell multi-omics dataset (scRNA-seq and scATAC-seq) (link_paper: https://doi.org/10.1038/s41586-025-09251-0)

The dataset features are

Cells   Total_Genes Total_Peaks    Cell types
115395  37960           82219               32

Since the complete dataset is bigger in size, I am planning to work with tissues. The tissue-wise data characteristics are:

Dataset Tissue  Modality    Cells   Sparsity    Total_features  Groups
Full    Bud RNA 8858    0.9642  37960   8
Full    Bud ATAC    8858    0.9714  82219   8
Full    Flag    RNA 4394    0.9754  37960   5
Full    Flag    ATAC    4394    0.9457  82219   5
Full    leaf    RNA 13771   0.9743  37960   6
Full    leaf    ATAC    13771   0.9778  82219   6
Full    Root    RNA 31108   0.9576  37960   9
Full    Root    ATAC    31108   0.9844  82219   9
Full    SAM RNA 13791   0.9634  37960   7
Full    SAM ATAC    13791   0.9827  82219   7
Full    Seed    RNA 6276    0.9831  37960   5
Full    Seed    ATAC    6276    0.9747  82219   5
Full    SP  RNA 17457   0.9696  37960   10
Full    SP  ATAC    17457   0.9738  82219   10
Full    ST  RNA 19740   0.9713  37960   6
Full    ST  ATAC    19740   0.9777  82219   6

Is anyone help me to filter the features of genes, peaks, and cell numbers into minimum values (probably 3000-6000 genes, 6000-18000 peaks, and <20000 cells)? Can I go with highly variable features of genes and peaks?

With this feature extracted dataset, I will go for further downstream analysis. So, this feature extraction step is very necessary and also, I cannot go with bigger size dataset due to computational complexity of many models and hardware limitations.

Thanks in advance.

multi-omics single-cell r

1 answer

HVGs are fine for the RNA side. 3000 is a normal choice, Seurat defaults to 2000.

For ATAC I wouldn't use variable features though. Peak counts are close to binary, so mean and variance are tightly coupled and "highly variable" doesn't mean what it means for expression. The usual approach there is frequency-based -- keep peaks accessible in at least some fraction of cells, which in Signac is FindTopFeatures(min.cutoff = 'q5') or similar. Worth knowing that the standard LSI workflow (RunTFIDF then FindTopFeatures then RunSVD) already downweights ubiquitous peaks, so plenty of people don't do aggressive peak selection at all.

For cells, sample stratified by cell type rather than at random. You have 32 types across the full data and some of them will be rare, so uniform downsampling will quietly delete them. A fixed number per type with a floor tends to work better than proportional sampling if the rare populations matter to you.

One thing to be careful about: use the selected features for dimensionality reduction and clustering, but don't carry the subset into differential expression or marker identification. Testing only genes you picked for being variable is a selection bias and it inflates what comes out the other end.

Also worth checking whether you need to cut this hard at all. Per tissue, 8858 cells x 37960 genes at 96% sparsity is a fairly small sparse matrix. If something is blowing up your memory it's often an operation quietly densifying the matrix rather than the data size itself -- worth profiling before you throw away features.

Log in to answer this question.