Every method below is compared with an independent reference, usually the package that defined it, run as a separate program on the same inputs. The tier says how closely: exact, a relative difference of at most 1e-10, for closed-form results; close, at most 1e-6, for iterative fits; calibrated, within simulation error with the same calls, for methods that draw random rotations. Where CytePool differs from the reference on purpose, the Validation page reports each difference with its size; its sections give every check.
Implemented¶
| Method | CytePool | Checked against | Tier | Script |
|---|---|---|---|---|
| Pseudobulk profiles pooled from cells | from_cells | scanpy 1.12.4, decoupler 2.2.0 | exact | pool_cells.py |
| Bulk counts as a cube | from_bulk | decoupler 2.2.0 | exact | pool_cells.py |
| Selecting, merging groups, pooling samples; means, variances, detection | Cube | scanpy 1.12.4 | exact | cube.py |
| Cube files | write_cube, read_cube | zarr-python 3.4.1 | exact | cube_files.py |
| Reads of selected features from cube files | read_cube, Cube.select | zarr-python 3.4.1 | exact | cube_reads.py |
| Fingerprints of cubes | Cube.fingerprint, Cube.digests | the documented encoding, with zarr-python 3.4.1 | exact | cube_fingerprints.py |
| AnnData and MuData layouts of scanpy, decoupler and LIANA | to_anndata, from_anndata, to_mudata, from_mudata | scanpy 1.12.4, decoupler 2.2.0, LIANA 1.10.0, anndata 0.13.4, mudata 0.4.1 | exact | anndata_conversion.py |
TMM, upper-quartile and RLE factors; CPM and log-CPM; filterByExpr | tmm_factors, upper_quartile_factors, rle_factors, cpm, log_cpm, filter_by_expression | edgeR 4.4.0 | exact | normalization.py |
| DESeq2’s median-of-ratios size factors | median_ratio_size_factors | DESeq2 1.46.0 | exact | normalization.py |
| Model matrices from R formulas, named contrasts, design checks | Design, model_matrix, make_contrasts, Design.check | R 4.4.3, limma 3.62.1, lme4 2.0.6 | exact | design.py |
Linear models of every gene, contrasts (limma’s lmFit, contrasts.fit) | fit_linear_model, contrasts_fit | limma 3.62.1 | exact | linear_models.py |
| Mixed models with random intercepts by REML or ML, Satterthwaite’s t-tests | fit_mixed_model, fixed_effect_tests | lme4 2.0.6, lmerTest 3.2.1 | close | mixed_models.py |
| voom precision weights, limma’s span rule | voom, choose_lowess_span | limma 3.62.1, edgeR 4.4.0 | exact; close on rarefied counts | voom.py |
Sample quality weights (arrayWeights, voomWithQualityWeights) | sample_quality_weights, voom_with_quality_weights | limma 3.62.1, edgeR 4.4.0 | close | sample_quality_weights.py |
Negative binomial models of every gene (edgeR’s glmFit), deviances | fit_negative_binomial_model, negative_binomial_deviance, negative_binomial_unit_deviance | edgeR 4.4.0, mpmath 1.3.0 | close | negative_binomial_fits.py |
Quasi-likelihood F-tests (edgeR 4’s glmQLFit, glmQLFTest) | fit_quasi_likelihood, quasi_likelihood_f_test, common_dispersion, average_log_cpm | edgeR 4.4.0, limma 3.62.1, mpmath 1.3.0 | close | quasi_likelihood.py |
| DESeq2’s dispersions, Wald tests and likelihood ratio tests | fit_deseq2, deseq2_dispersions, deseq2_wald_test, deseq2_likelihood_ratio_test | DESeq2 1.46.0, PyDESeq2 0.5.4 | close | deseq2_tests.py |
| Empirical Bayes moderation, moderated t and F, B-statistics, TREAT | moderated_statistics, treat, squeeze_variances, fit_f_distribution, fit_f_distribution_robust, fit_f_distribution_likelihood | limma 3.62.1 | exact; close for the robust and likelihood priors | empirical_bayes.py |
| Gene-set tests camera and fry | camera, fry | limma 3.62.1 | exact; close with robust moderation; 1e-3 for fry’s default standardization, which differs on purpose | gene_set_tests.py |
| Rotation gene-set tests roast, mroast and romer | roast, mroast, romer | limma 3.62.1 | calibrated; exact given limma’s rotations | rotation_gene_set_tests.py |
Adjustment for multiple testing (R’s p.adjust) | adjust_p_values | R 4.4.3 | exact | multiple_testing.py |
| limma-voom and limma-trend on every cell type of a cube | limma_voom, limma_trend | limma 3.62.1, edgeR 4.4.0 | exact; close with robust moderation | differential_expression.py |
| Options for pseudobulk data: quality weights, weights from cell numbers, a minimum count, adjustment across cell types | limma_voom, limma_trend | limma 3.62.1, edgeR 4.4.0 | exact; close with quality weights | differential_expression_options.py |
| dream on every cell type of a cube | dream_voom, voom_with_dream_weights, moderated_fixed_effect_tests | variancePartition 1.36.2, limma 3.62.1, lme4 1.1-38, lmerTest 3.1-3 | close | dream.py |
| limma-voom on published single-cell data (Kang et al. 2018) | from_cells, limma_voom | limma 3.62.1, edgeR 4.4.0 | exact | interferon_stimulated_pbmcs.py |
| Cell-type composition (speckle’s propeller) | propeller | speckle 1.6.0, limma 3.62.1 | exact; close for the robust prior | composition_tests.py |
Meta-analysis by fixed and random effects (metafor’s rma.uni) | meta_analysis, differential_expression_meta_analysis | metafor 5.0.1 | exact; close for REML and Paule-Mandel | meta_analysis.py |
| Figures of limma, edgeR, DESeq2, speckle and metafor (MDS, voom’s trend, plotSA, MD and volcano plots, barcode plots, dispersions, composition, forest plots) | cytepool.plotting | limma 3.62.1, edgeR 4.4.0, DESeq2 1.46.0, speckle 1.6.0, metafor 5.0.1 | exact for what is drawn; close for plotSA’s prior | plotting.py |
| Tails and quantiles of distributions, special functions | cytepool.stats.distributions, cytepool.stats.special | mpmath 1.3.0 | exact (1e-15 to 1e-12) | distributions.py |
| LOWESS, natural spline bases | lowess, natural_spline_basis | R 4.4.3 | close for LOWESS; exact for spline bases | smoothing.py |
Not implemented yet¶
These methods come up in the questions that studies ask (Overview) and have no CytePool function yet:
variance partitioning, random slopes, Kenward-Roger’s degrees of freedom and F-tests of several contrasts in mixed models;
composition tests with precision weights or random effects (crumblr), and Bayesian count models of composition;
pathway and transcription-factor activity scores;
ligand-receptor scoring and differential cell-cell interactions;
dose-response fits, benchmark doses and drug synergy;
factorization of samples across cell types;
shrinkage of effects across conditions (mashr) and meta-regression;
edgeR’s quasi-likelihood F-tests and DESeq2’s tests on every cell type of a cube, and DESeq2’s shrunken fold changes.