{"id":32111226,"url":"https://github.com/mangiolalaboratory/sccomp","last_synced_at":"2025-10-20T14:20:13.558Z","repository":{"id":38015895,"uuid":"337031313","full_name":"MangiolaLaboratory/sccomp","owner":"MangiolaLaboratory","description":"Mixed-effect model to test differences in cell type proportions from single-cell data, in R","archived":false,"fork":false,"pushed_at":"2025-09-18T00:52:07.000Z","size":110424,"stargazers_count":111,"open_issues_count":13,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-07T21:39:05.707Z","etag":null,"topics":["batch-correction","bayesian","composition","cytof","differential-proportion","microbiome","multilevel","proportions","r-package","random-effects","single-cell","unwanted-variation"],"latest_commit_sha":null,"homepage":"https://mangiolalaboratory.github.io/sccomp/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MangiolaLaboratory.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-02-08T10:01:14.000Z","updated_at":"2025-08-28T12:55:25.000Z","dependencies_parsed_at":"2023-01-30T02:45:56.521Z","dependency_job_id":"49d8896e-bcd7-497b-bfa6-6fa353695d30","html_url":"https://github.com/MangiolaLaboratory/sccomp","commit_stats":{"total_commits":1074,"total_committers":5,"mean_commits":214.8,"dds":"0.012104283054003684","last_synced_commit":"40cdf2d9a3f17cb5cfdc144111fb3319567d53e8"},"previous_names":["mangiolalaboratory/sccomp"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/MangiolaLaboratory/sccomp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MangiolaLaboratory%2Fsccomp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MangiolaLaboratory%2Fsccomp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MangiolaLaboratory%2Fsccomp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MangiolaLaboratory%2Fsccomp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MangiolaLaboratory","download_url":"https://codeload.github.com/MangiolaLaboratory/sccomp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MangiolaLaboratory%2Fsccomp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280104443,"owners_count":26272752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-20T02:00:06.978Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["batch-correction","bayesian","composition","cytof","differential-proportion","microbiome","multilevel","proportions","r-package","random-effects","single-cell","unwanted-variation"],"created_at":"2025-10-20T14:20:09.676Z","updated_at":"2025-10-20T14:20:13.548Z","avatar_url":"https://github.com/MangiolaLaboratory.png","language":"R","readme":"sccomp: Differential Composition and Variability Analysis for\nSingle-Cell Data\n================\nStefano Mangiola\n2025-07-18\n\n\u003c!-- badges: start --\u003e\n\n[![Lifecycle:maturing](https://img.shields.io/badge/lifecycle-maturing-blue.svg)](https://www.tidyverse.org/lifecycle/#maturing)\n[![R build\nstatus](https://github.com/stemangiola/sccomp/workflows/R-CMD-check/badge.svg)](https://github.com/stemangiola/sccomp/actions/)\n\u003c!-- badges: end --\u003e\n\n# \u003cimg src=\"inst/logo-01.png\" height=\"139px\" width=\"120px\"/\u003e\n\n**sccomp** is a powerful R package designed for comprehensive\ndifferential composition and variability analysis in single-cell\ngenomics, proteomics, and microbiomics data.\n\n## Why sccomp?\n\nFor cellular omic data, no method for differential variability analysis\nexists, and methods for differential composition analysis only take a\nfew fundamental data properties into account. Here we introduce\n**sccomp**, a generalised method for differential composition and\nvariability analyses capable of jointly modelling data count\ndistribution, compositionality, group-specific variability, and\nproportion mean-variability association, while being robust to outliers.\n\n\u003cimg src=\"inst/cartoon_methods.png\" width=\"100%\"/\u003e\n\n### Comprehensive Method Comparison\n\n- **I**: Data are modelled as counts.\n- **II**: Group proportions are modelled as compositional.\n- **III**: The proportion variability is modelled as cell-type specific.\n- **IV**: Information sharing across cell types, mean–variability\n  association.\n- **V**: Outlier detection or robustness.\n- **VI**: Differential variability analysis.\n- **VII** Mixed effect modelling\n- **VIII** Removal unwanted effects\n\n| Method | Year | Model | I | II | III | IV | V | VI | VII | VIII |\n|----|----|----|----|----|----|----|----|----|----|----|\n| **sccomp** | 2023 | Sum-constrained Beta-binomial | ● | ● | ● | ● | ● | ● | ● | ● |\n| **scCODA** | 2021 | Dirichlet-multinomial | ● | ● |  |  |  |  |  |  |\n| **quasi-binom.** | 2021 | Quasi-binomial | ● |  | ● |  |  |  |  |  |\n| **rlm** | 2021 | Robust-log-linear |  | ● |  |  | ● |  |  |  |\n| **propeller** | 2021 | Logit-linear + limma |  | ● | ● | ● |  |  |  |  |\n| **ANCOM-BC** | 2020 | Log-linear |  | ● | ● |  |  |  |  |  |\n| **corncob** | 2020 | Beta-binomial | ● |  | ● |  |  |  |  |  |\n| **scDC** | 2019 | Log-linear |  | ● | ● |  |  |  |  |  |\n| **dmbvs** | 2017 | Dirichlet-multinomial | ● | ● |  |  |  |  |  |  |\n| **MixMC** | 2016 | Zero-inflated Log-linear |  | ● | ● |  |  |  |  |  |\n| **ALDEx2** | 2014 | Dirichlet-multinomial | ● | ● |  |  |  |  |  |  |\n\n### Scientific Citation\n\nMangiola, Stefano, Alexandra J. Roth-Schulze, Marie Trussart, Enrique\nZozaya-Valdés, Mengyao Ma, Zijie Gao, Alan F. Rubin, Terence P. Speed,\nHeejung Shim, and Anthony T. Papenfuss. 2023. “Sccomp: Robust\nDifferential Composition and Variability Analysis for Single-Cell Data.”\nProceedings of the National Academy of Sciences of the United States of\nAmerica 120 (33): e2203828120. \u003chttps://doi.org/10.1073/pnas.2203828120\u003e\n[PNAS - sccomp: Robust differential composition and variability analysis\nfor single-cell\ndata](https://www.pnas.org/doi/full/10.1073/pnas.2203828120)\n\n### Talk\n\n\u003ca href=\"https://www.youtube.com/watch?v=R_lt58We9nA\u0026ab_channel=RConsortium\" target=\"_blank\"\u003e\n\u003cimg src=\"https://img.youtube.com/vi/R_lt58We9nA/mqdefault.jpg\" alt=\"Watch the video\" width=\"280\" height=\"180\" border=\"10\" /\u003e\n\u003c/a\u003e\n\n# Installation Guide\n\n`sccomp` is based on `cmdstanr` which provides the latest version of\n`cmdstan` the Bayesian modelling tool. `cmdstanr` is not on CRAN, so we\nneed to have 3 simple step process (that will be prompted to the user is\nforgot).\n\n1.  R installation of `sccomp`\n2.  R installation of `cmdstanr`\n3.  `cmdstanr` call to `cmdstan` installation\n\n**Bioconductor**\n\n``` r\nif (!requireNamespace(\"BiocManager\")) install.packages(\"BiocManager\")\n\n# Step 1\nBiocManager::install(\"sccomp\")\n\n# Step 2\ninstall.packages(\"cmdstanr\", repos = c(\"https://stan-dev.r-universe.dev/\", getOption(\"repos\")))\n\n# Step 3\ncmdstanr::check_cmdstan_toolchain(fix = TRUE) # Just checking system setting\ncmdstanr::install_cmdstan()\n```\n\n**Github**\n\n``` r\n# Step 1\ndevtools::install_github(\"MangiolaLaboratory/sccomp\")\n\n# Step 2\ninstall.packages(\"cmdstanr\", repos = c(\"https://stan-dev.r-universe.dev/\", getOption(\"repos\")))\n\n# Step 3\ncmdstanr::check_cmdstan_toolchain(fix = TRUE) # Just checking system setting\ncmdstanr::install_cmdstan()\n```\n\n## Core Functions\n\n| Function | Description |\n|----|----|\n| `sccomp_estimate` | Fit the model onto the data, and estimate the coefficients |\n| `sccomp_remove_outliers` | Identify outliers probabilistically based on the model fit, and exclude them from the estimation |\n| `sccomp_test` | Calculate the probability that the coefficients are outside the H0 interval (i.e. test_composition_above_logit_fold_change) |\n| `sccomp_replicate` | Simulate data from the model, or part of the model |\n| `sccomp_predict` | Predicts proportions, based on the model, or part of the model |\n| `sccomp_remove_unwanted_effects` | Removes the variability for unwanted factors |\n| `plot` | Plots summary plots to assess significance |\n\n# Analysis Tutorial\n\n``` r\nlibrary(dplyr)\nlibrary(sccomp)\nlibrary(ggplot2)\nlibrary(forcats)\nlibrary(tidyr)\ndata(\"seurat_obj\")\ndata(\"sce_obj\")\ndata(\"counts_obj\")\n```\n\n## Binary Factor Analysis\n\nOf the output table, the estimate columns start with the prefix `c_`\nindicate `composition`, or with `v_` indicate `variability` (when\nformula_variability is set).\n\n### From Seurat, SingleCellExperiment, metadata objects\n\n``` r\nsccomp_result = \n  sce_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type, \n    sample = \"sample\", \n    cell_group = \"cell_group\", \n    cores = 1,\n    verbose = FALSE\n  ) |\u003e \n  sccomp_test()\n```\n\n### From counts\n\n``` r\nsccomp_result = \n  counts_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type, \n    sample = \"sample\",\n    cell_group = \"cell_group\",\n    abundance = \"count\", \n    cores = 1, verbose = FALSE\n  ) |\u003e \n  sccomp_test()\n```\n\nHere you see the results of the fit, the effects of the factor on\ncomposition and variability. You also can see the uncertainty around\nthose effects.\n\nThe output is a tibble containing the **Following columns**\n\n- `cell_group` - The cell groups being tested.\n- `parameter` - The parameter being estimated from the design matrix\n  described by the input `formula_composition` and\n  `formula_variability`.\n- `factor` - The covariate factor in the formula, if applicable (e.g.,\n  not present for Intercept or contrasts).\n- `c_lower` - Lower (2.5%) quantile of the posterior distribution for a\n  composition (c) parameter.\n- `c_effect` - Mean of the posterior distribution for a composition (c)\n  parameter.\n- `c_upper` - Upper (97.5%) quantile of the posterior distribution for a\n  composition (c) parameter.\n- `c_pH0` - Probability of the null hypothesis (no difference) for a\n  composition (c). This is not a p-value.\n- `c_FDR` - False-discovery rate of the null hypothesis for a\n  composition (c).\n- `v_lower` - Lower (2.5%) quantile of the posterior distribution for a\n  variability (v) parameter.\n- `v_effect` - Mean of the posterior distribution for a variability (v)\n  parameter.\n- `v_upper` - Upper (97.5%) quantile of the posterior distribution for a\n  variability (v) parameter.\n- `v_pH0` - Probability of the null hypothesis for a variability (v).\n- `v_FDR` - False-discovery rate of the null hypothesis for a\n  variability (v).\n- `count_data` - Nested input count data.\n\n``` r\nsccomp_result\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~type \n    ##   Variability formula: ~1 \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 36 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 72 × 19\n    ##    cell_group parameter   factor c_lower c_effect c_upper   c_pH0   c_FDR c_rhat\n    ##    \u003cchr\u003e      \u003cchr\u003e       \u003cchr\u003e    \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e   \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e\n    ##  1 B1         (Intercept) \u003cNA\u003e    0.946     1.19   1.45   0       0        1.000\n    ##  2 B1         typecancer  type   -0.927    -0.611 -0.288  7.50e-4 6.82e-5  1.000\n    ##  3 B2         (Intercept) \u003cNA\u003e    0.507     0.765  1.04   0       0        1.00 \n    ##  4 B2         typecancer  type   -0.991    -0.669 -0.359  0       0        1.00 \n    ##  5 B3         (Intercept) \u003cNA\u003e   -0.582    -0.331 -0.0661 4.17e-2 3.52e-3  1.00 \n    ##  6 B3         typecancer  type   -0.577    -0.280  0.0152 1.21e-1 2.47e-2  1.00 \n    ##  7 BM         (Intercept) \u003cNA\u003e   -1.23     -0.968 -0.716  0       0        1.00 \n    ##  8 BM         typecancer  type   -0.587    -0.286  0.0191 1.14e-1 1.62e-2  1.00 \n    ##  9 CD4 1      (Intercept) \u003cNA\u003e    0.201     0.367  0.535  1.00e-3 7.00e-5  1.00 \n    ## 10 CD4 1      typecancer  type   -0.0129    0.205  0.410  1.67e-1 3.04e-2  1.00 \n    ## # ℹ 62 more rows\n    ## # ℹ 10 more variables: c_ess_bulk \u003cdbl\u003e, c_ess_tail \u003cdbl\u003e, v_lower \u003cdbl\u003e,\n    ## #   v_effect \u003cdbl\u003e, v_upper \u003cdbl\u003e, v_pH0 \u003cdbl\u003e, v_FDR \u003cdbl\u003e, v_rhat \u003cdbl\u003e,\n    ## #   v_ess_bulk \u003cdbl\u003e, v_ess_tail \u003cdbl\u003e\n\n## Outlier Identification\n\n`sccomp` can identify outliers probabilistically and exclude them from\nthe estimation.\n\n``` r\nsccomp_result = \n  counts_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type, \n    sample = \"sample\",\n    cell_group = \"cell_group\",\n    abundance = \"count\", \n    cores = 1, verbose = FALSE\n  ) |\u003e \n  \n  # max_sampling_iterations is used her to not exceed the maximum file size for GitHub action of 100Mb\n  sccomp_remove_outliers(cores = 1, verbose = FALSE, max_sampling_iterations = 2000) |\u003e # Optional\n  sccomp_test()\n```\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n## Visualization and Summary Plots\n\nA plot of group proportions, faceted by groups. The blue boxplots\nrepresent the posterior predictive check. If the model is descriptively\nadequate for the data, the blue boxplots should roughly overlay the\nblack boxplots, which represent the observed data. The outliers are\ncoloured in red. A boxplot will be returned for every (discrete)\ncovariate present in formula_composition. The colour coding represents\nthe significant associations for composition and/or variability.\n\n``` r\nsccomp_result |\u003e \n  sccomp_boxplot(factor = \"type\")\n```\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n![](inst/figures/unnamed-chunk-8-1.png)\u003c!-- --\u003e\n\nYou can plot proportions adjusted for unwanted effects. This is helpful\nespecially for complex models, where multiple factors can significantly\nimpact the proportions.\n\n``` r\nsccomp_result |\u003e \n  sccomp_boxplot(factor = \"type\", remove_unwanted_effects = TRUE)\n```\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n![](inst/figures/unnamed-chunk-9-1.png)\u003c!-- --\u003e\n\nA plot of estimates of differential composition (c\\_) on the x-axis and\ndifferential variability (v\\_) on the y-axis. The error bars represent\n95% credible intervals. The dashed lines represent the minimal effect\nthat the hypothesis test is based on. An effect is labelled as\nsignificant if it exceeds the minimal effect according to the 95%\ncredible interval. Facets represent the covariates in the model.\n\n``` r\nsccomp_result |\u003e \n  plot_1D_intervals()\n```\n\n![](inst/figures/unnamed-chunk-10-1.png)\u003c!-- --\u003e\n\nWe can plot the relationship between abundance and variability. As we\ncan see below, they are positively correlated. sccomp models this\nrelationship to obtain a shrinkage effect on the estimates of both the\nabundance and the variability. This shrinkage is adaptive as it is\nmodelled jointly, thanks to Bayesian inference.\n\n``` r\nsccomp_result |\u003e \n  plot_2D_intervals()\n```\n\n![](inst/figures/unnamed-chunk-11-1.png)\u003c!-- --\u003e\n\nYou can produce the series of plots calling the `plot` method.\n\n``` r\nsccomp_result |\u003e plot() \n```\n\n## Model Proportions Directly (e.g. from deconvolution)\n\n**Note:** If counts are available, we strongly discourage the use of\nproportions, as an important source of uncertainty (i.e., for rare\ngroups/cell types) is not modeled.\n\nThe use of proportions is better suited for modelling deconvolution\nresults (e.g., of bulk RNA data), in which case counts are not\navailable.\n\nProportions should be greater than 0. Assuming that zeros derive from a\nprecision threshold (e.g., deconvolution), zeros are converted to the\nsmallest non-zero value.\n\n``` r\nsccomp_result = \n  counts_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type, \n    sample = \"sample\",\n    cell_group = \"cell_group\",\n    abundance = \"proportion\", \n    cores = 1, verbose = FALSE\n  ) |\u003e \n  sccomp_test()\n```\n\n## Continuous Factor Analysis\n\n`sccomp` is able to fit arbitrary complex models. In this example we\nhave a continuous and binary covariate.\n\n``` r\nres =\n    seurat_obj |\u003e\n    sccomp_estimate(\n      formula_composition = ~ type + continuous_covariate, \n      sample = \"sample\", \n      cell_group = \"cell_group\",\n      cores = 1, verbose=FALSE\n    )\n\nres\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~type + continuous_covariate \n    ##   Variability formula: ~1 \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 30 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 90 × 15\n    ##    cell_group        parameter factor c_lower c_effect c_upper c_rhat c_ess_bulk\n    ##    \u003cchr\u003e             \u003cchr\u003e     \u003cchr\u003e    \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e      \u003cdbl\u003e\n    ##  1 B immature        (Interce… \u003cNA\u003e     0.567   0.834    1.11   1.00       3604.\n    ##  2 B immature        typeheal… type     1.02    1.35     1.67   1.000      3998.\n    ##  3 B immature        continuo… conti…  -0.277   0.0479   0.373  1.000      3755.\n    ##  4 B mem             (Interce… \u003cNA\u003e    -0.978  -0.674   -0.362  1.00       3907.\n    ##  5 B mem             typeheal… type     1.21    1.57     1.95   1.00       3564.\n    ##  6 B mem             continuo… conti…  -0.275   0.0684   0.411  1.00       3928.\n    ##  7 CD4 cm S100A4     (Interce… \u003cNA\u003e     1.33    1.55     1.79   1.00       3739.\n    ##  8 CD4 cm S100A4     typeheal… type     0.859   1.13     1.40   1.00       4241.\n    ##  9 CD4 cm S100A4     continuo… conti…  -0.103   0.172    0.458  1.00       3766.\n    ## 10 CD4 cm high cyto… (Interce… \u003cNA\u003e    -0.923  -0.582   -0.242  1.000      4070.\n    ## # ℹ 80 more rows\n    ## # ℹ 7 more variables: c_ess_tail \u003cdbl\u003e, v_lower \u003cdbl\u003e, v_effect \u003cdbl\u003e,\n    ## #   v_upper \u003cdbl\u003e, v_rhat \u003cdbl\u003e, v_ess_bulk \u003cdbl\u003e, v_ess_tail \u003cdbl\u003e\n\n## Random Effect Modeling (Mixed-Effect Modeling)\n\n`sccomp` supports multilevel modeling by allowing the inclusion of\nrandom effects in the compositional and variability formulas. This is\nparticularly useful when your data has hierarchical or grouped\nstructures, such as measurements nested within subjects, batches, or\nexperimental units. By incorporating random effects, sccomp can account\nfor variability at different levels of your data, improving model fit\nand inference accuracy.\n\n### Random Intercept Model\n\nIn this example, we demonstrate how to fit a random intercept model\nusing sccomp. We’ll model the cell-type proportions with both fixed\neffects (e.g., treatment) and random effects (e.g., subject-specific\nvariability).\n\nHere is the input data\n\n``` r\nseurat_obj[[]] |\u003e as_tibble()\n```\n\n    ## # A tibble: 106,297 × 9\n    ##    cell_group nCount_RNA nFeature_RNA group__ group__wrong sample type  group2__\n    ##    \u003cchr\u003e           \u003cdbl\u003e        \u003cint\u003e \u003cchr\u003e   \u003cchr\u003e        \u003cchr\u003e  \u003cchr\u003e \u003cchr\u003e   \n    ##  1 CD4 naive           0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  2 Mono clas…          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  3 CD4 cm S1…          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  4 B immature          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  5 CD8 naive           0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  6 CD4 naive           0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  7 Mono clas…          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  8 CD4 cm S1…          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ##  9 CD4 cm hi…          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ## 10 B immature          0            0 GROUP1  1            SI-GA… canc… GROUP21 \n    ## # ℹ 106,287 more rows\n    ## # ℹ 1 more variable: continuous_covariate \u003cdbl\u003e\n\n``` r\nres = \n  seurat_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type + (1 | group__), \n    sample = \"sample\",\n    cell_group = \"cell_group\",\n    bimodal_mean_variability_association = TRUE,\n    cores = 1, verbose = FALSE\n  ) \n\nres\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~type + (1 | group__) \n    ##   Variability formula: ~1 \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 30 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 180 × 15\n    ##    cell_group parameter        factor c_lower c_effect c_upper c_rhat c_ess_bulk\n    ##    \u003cchr\u003e      \u003cchr\u003e            \u003cchr\u003e    \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e      \u003cdbl\u003e\n    ##  1 B immature (Intercept)      \u003cNA\u003e     0.500   0.846   1.16    1.00        218.\n    ##  2 B immature typehealthy      type     0.755   1.21    1.65    1.00        115.\n    ##  3 B immature (Intercept)___G… \u003cNA\u003e    -0.320   0.0226  0.478   1.00        127.\n    ##  4 B immature (Intercept)___G… \u003cNA\u003e    -0.105   0.233   0.703   1.000       128.\n    ##  5 B immature (Intercept)___G… \u003cNA\u003e    -0.101   0.225   0.620   1.00        184.\n    ##  6 B immature (Intercept)___G… \u003cNA\u003e    -0.711  -0.288   0.0297  1.00        201.\n    ##  7 B mem      (Intercept)      \u003cNA\u003e    -0.857  -0.466  -0.0933  1.00        130.\n    ##  8 B mem      typehealthy      type     0.797   1.27    1.78    1.00        103.\n    ##  9 B mem      (Intercept)___G… \u003cNA\u003e    -0.469   0.0137  0.484   1.02        123.\n    ## 10 B mem      (Intercept)___G… \u003cNA\u003e    -0.166   0.271   0.763   1.01        161.\n    ## # ℹ 170 more rows\n    ## # ℹ 7 more variables: c_ess_tail \u003cdbl\u003e, v_lower \u003cdbl\u003e, v_effect \u003cdbl\u003e,\n    ## #   v_upper \u003cdbl\u003e, v_rhat \u003cdbl\u003e, v_ess_bulk \u003cdbl\u003e, v_ess_tail \u003cdbl\u003e\n\n### Random Effect Model (random slopes)\n\n`sccomp` can model random slopes. We provide an example below.\n\n``` r\nres = \n  seurat_obj |\u003e\n  sccomp_estimate(\n      formula_composition = ~ type + (type | group__),\n      sample = \"sample\",\n      cell_group = \"cell_group\",\n      bimodal_mean_variability_association = TRUE,\n      cores = 1, verbose = FALSE\n    )\n\nres\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~type + (type | group__) \n    ##   Variability formula: ~1 \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 30 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 240 × 15\n    ##    cell_group parameter        factor c_lower c_effect c_upper c_rhat c_ess_bulk\n    ##    \u003cchr\u003e      \u003cchr\u003e            \u003cchr\u003e    \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e      \u003cdbl\u003e\n    ##  1 B immature (Intercept)      \u003cNA\u003e    0.466    0.836   1.20     1.01      135. \n    ##  2 B immature typehealthy      type    0.758    1.20    1.62     1.00      139. \n    ##  3 B immature (Intercept)___G… \u003cNA\u003e   -0.234    0.0271  0.331    1.00      235. \n    ##  4 B immature typehealthy___G… \u003cNA\u003e   -0.233    0.0139  0.330    1.02      127. \n    ##  5 B immature (Intercept)___G… \u003cNA\u003e   -0.179    0.142   0.488    1.08       11.3\n    ##  6 B immature typehealthy___G… \u003cNA\u003e   -0.140    0.0934  0.433    1.01      125. \n    ##  7 B immature (Intercept)___G… \u003cNA\u003e   -0.0735   0.197   0.535    1.02      119. \n    ##  8 B immature (Intercept)___G… \u003cNA\u003e   -0.675   -0.242   0.0492   1.00      111. \n    ##  9 B mem      (Intercept)      \u003cNA\u003e   -1.01    -0.568  -0.205    1.00      181. \n    ## 10 B mem      typehealthy      type    0.902    1.35    1.89     1.01      113. \n    ## # ℹ 230 more rows\n    ## # ℹ 7 more variables: c_ess_tail \u003cdbl\u003e, v_lower \u003cdbl\u003e, v_effect \u003cdbl\u003e,\n    ## #   v_upper \u003cdbl\u003e, v_rhat \u003cdbl\u003e, v_ess_bulk \u003cdbl\u003e, v_ess_tail \u003cdbl\u003e\n\n### Nested Random Effects\n\nIf you have a more complex hierarchy, such as measurements nested within\nsubjects and subjects nested within batches, you can include multiple\ngrouping variables. Here `group2__` is nested within `group__`.\n\n``` r\nres = \n  seurat_obj |\u003e\n  sccomp_estimate(\n      formula_composition = ~ type + (type | group__) + (1 | group2__),\n      sample = \"sample\",\n      cell_group = \"cell_group\",\n      bimodal_mean_variability_association = TRUE,\n      cores = 1, verbose = FALSE\n    )\n\nres\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~type + (type | group__) + (1 | group2__) \n    ##   Variability formula: ~1 \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 30 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 300 × 15\n    ##    cell_group parameter       factor  c_lower c_effect c_upper c_rhat c_ess_bulk\n    ##    \u003cchr\u003e      \u003cchr\u003e           \u003cchr\u003e     \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e      \u003cdbl\u003e\n    ##  1 B immature (Intercept)     \u003cNA\u003e    0.444     0.795   1.38     1.02       60.0\n    ##  2 B immature typehealthy     type    0.808     1.25    1.70     1.02       78.8\n    ##  3 B immature (Intercept)___… \u003cNA\u003e   -0.154     0.0833  0.450    1.01       93.5\n    ##  4 B immature typehealthy___… \u003cNA\u003e   -0.166     0.0629  0.431    1.01       84.9\n    ##  5 B immature (Intercept)___… \u003cNA\u003e   -0.205     0.0588  0.315    1.01      182. \n    ##  6 B immature typehealthy___… \u003cNA\u003e   -0.168     0.0513  0.342    1.01      157. \n    ##  7 B immature (Intercept)___… \u003cNA\u003e   -0.123     0.213   0.609    1.02       71.4\n    ##  8 B immature (Intercept)___… \u003cNA\u003e   -0.728    -0.256   0.0495   1.04       59.2\n    ##  9 B immature (Intercept)___… \u003cNA\u003e   -0.432    -0.105   0.141    1.01      111. \n    ## 10 B immature (Intercept)___… \u003cNA\u003e   -0.00115   0.233   0.584    1.00       76.6\n    ## # ℹ 290 more rows\n    ## # ℹ 7 more variables: c_ess_tail \u003cdbl\u003e, v_lower \u003cdbl\u003e, v_effect \u003cdbl\u003e,\n    ## #   v_upper \u003cdbl\u003e, v_rhat \u003cdbl\u003e, v_ess_bulk \u003cdbl\u003e, v_ess_tail \u003cdbl\u003e\n\n## Result Interpretation and Communication\n\nThe estimated effects are expressed in the unconstrained space of the\nparameters, similar to differential expression analysis that expresses\nchanges in terms of log fold change. However, for differences in\nproportion, logit fold change must be used, which is harder to interpret\nand understand.\n\nTherefore, we provide a more intuitive proportional fold change that can\nbe more easily understood. However, these cannot be used to infer\nsignificance (use sccomp_test() instead), and a lot of care must be\ntaken given the nonlinearity of these measures (a 1-fold increase from\n0.0001 to 0.0002 carries a different weight than a 1-fold increase from\n0.4 to 0.8).\n\nFrom your estimates, you can specify which effects you are interested in\n(this can be a subset of the full model if you wish to exclude unwanted\neffects), and the two points you would like to compare.\n\nIn the case of a categorical variable, the starting and ending points\nare categories.\n\n``` r\nres |\u003e \n   sccomp_proportional_fold_change(\n     formula_composition = ~  type,\n     from =  \"healthy\", \n     to = \"cancer\"\n    ) |\u003e \n  select(cell_group, statement)\n```\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n    ## # A tibble: 30 × 2\n    ##    cell_group           statement                                \n    ##    \u003cchr\u003e                \u003cglue\u003e                                   \n    ##  1 B immature           2.1-fold decrease (from 0.1105 to 0.0521)\n    ##  2 B mem                2.4-fold decrease (from 0.0331 to 0.0136)\n    ##  3 CD4 cm high cytokine 8-fold increase (from 0.0015 to 0.0121)  \n    ##  4 CD4 cm ribosome      3.7-fold increase (from 0.0072 to 0.0262)\n    ##  5 CD4 cm S100A4        1.5-fold decrease (from 0.1497 to 0.1007)\n    ##  6 CD4 em high cytokine 4.7-fold increase (from 0.0022 to 0.0105)\n    ##  7 CD4 naive            1.5-fold decrease (from 0.1115 to 0.0748)\n    ##  8 CD4 ribosome         3.1-fold decrease (from 0.085 to 0.0278) \n    ##  9 CD8 em 1             1.2-fold increase (from 0.0485 to 0.0571)\n    ## 10 CD8 em 2             3.9-fold increase (from 0.0053 to 0.0204)\n    ## # ℹ 20 more rows\n\n## Contrasts Analysis\n\n``` r\nseurat_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ 0 + type, \n    sample = \"sample\",\n    cell_group = \"cell_group\", \n    cores = 1, verbose = FALSE\n  ) |\u003e \n  sccomp_test( contrasts =  c(\"typecancer - typehealthy\", \"typehealthy - typecancer\"))\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~0 + type \n    ##   Variability formula: ~1 \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 30 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 60 × 11\n    ##    cell_group   parameter factor c_lower c_effect c_upper   c_pH0   c_FDR c_rhat\n    ##    \u003cchr\u003e        \u003cchr\u003e     \u003cchr\u003e    \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e   \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e\n    ##  1 B immature   typecanc… \u003cNA\u003e    -1.90    -1.35   -0.810 0       0           NA\n    ##  2 B immature   typeheal… \u003cNA\u003e     0.810    1.35    1.90  0       0           NA\n    ##  3 B mem        typecanc… \u003cNA\u003e    -2.24    -1.66   -1.04  0       0           NA\n    ##  4 B mem        typeheal… \u003cNA\u003e     1.04     1.66    2.24  0       0           NA\n    ##  5 CD4 cm S100… typecanc… \u003cNA\u003e    -1.46    -0.990  -0.512 2.50e-4 4.17e-5     NA\n    ##  6 CD4 cm S100… typeheal… \u003cNA\u003e     0.512    0.990   1.46  2.50e-4 4.17e-5     NA\n    ##  7 CD4 cm high… typecanc… \u003cNA\u003e     0.964    1.58    2.20  0       0           NA\n    ##  8 CD4 cm high… typeheal… \u003cNA\u003e    -2.20    -1.58   -0.964 0       0           NA\n    ##  9 CD4 cm ribo… typecanc… \u003cNA\u003e     0.350    0.938   1.53  3.  e-3 9.55e-4     NA\n    ## 10 CD4 cm ribo… typeheal… \u003cNA\u003e    -1.53    -0.938  -0.350 3.  e-3 9.55e-4     NA\n    ## # ℹ 50 more rows\n    ## # ℹ 2 more variables: c_ess_bulk \u003cdbl\u003e, c_ess_tail \u003cdbl\u003e\n\n## Categorical Factor Analysis (Bayesian ANOVA)\n\nThis is achieved through model comparison with `loo`. In the following\nexample, the model with association with factors better fits the data\ncompared to the baseline model with no factor association. For model\ncomparisons `sccomp_remove_outliers()` must not be executed as the\nleave-one-out must work with the same amount of data, while outlier\nelimination does not guarantee it.\n\nIf `elpd_diff` is away from zero of \\\u003e 5 `se_diff` difference of 5, we\nare confident that a model is better than the other\n[reference](https://discourse.mc-stan.org/t/interpreting-elpd-diff-loo-package/1628/2?u=stemangiola).\nIn this case, -79.9 / 11.5 = -6.9, therefore we can conclude that model\none, the one with factor association, is better than model two.\n\n``` r\nlibrary(loo)\n\n# Fit first model\nmodel_with_factor_association = \n  seurat_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type, \n    sample = \"sample\", \n    cell_group = \"cell_group\", \n    inference_method = \"hmc\",\n    enable_loo = TRUE,\n    verbose = FALSE\n  )\n\n# Fit second model\nmodel_without_association = \n  seurat_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ 1, \n    sample = \"sample\", \n    cell_group = \"cell_group\", \n    inference_method = \"hmc\",\n    enable_loo = TRUE,\n    verbose = FALSE\n  )\n\n# Compare models\nloo_compare(\n   attr(model_with_factor_association, \"fit\")$loo(),\n   attr(model_without_association, \"fit\")$loo()\n)\n```\n\n    ##        elpd_diff se_diff\n    ## model1   0.0       0.0  \n    ## model2 -83.6      10.4\n\n## Differential Variability Analysis\n\nWe can model the cell-group variability also dependent on the type, and\nso test differences in variability\n\n``` r\nres = \n  seurat_obj |\u003e\n  sccomp_estimate( \n    formula_composition = ~ type, \n    formula_variability = ~ type,\n    sample = \"sample\",\n    cell_group = \"cell_group\",\n    cores = 1, verbose = FALSE\n  )\n\nres\n```\n\n    ## sccomp model\n    ## ============\n    ## \n    ## Model specifications:\n    ##   Family: multi_beta_binomial \n    ##   Composition formula: ~type \n    ##   Variability formula: ~type \n    ##   Inference method: pathfinder \n    ## \n    ## Data: Samples: 20   Cell groups: 30 \n    ## \n    ## Column prefixes: c_ -\u003e composition parameters  v_ -\u003e variability parameters\n    ## \n    ## Convergence diagnostics:\n    ##   For each parameter, n_eff is the effective sample size and R_k_hat is the potential\n    ##   scale reduction factor on split chains (at convergence, R_k_hat = 1).\n    ## \n    ## # A tibble: 60 × 15\n    ##    cell_group        parameter factor c_lower c_effect c_upper c_rhat c_ess_bulk\n    ##    \u003cchr\u003e             \u003cchr\u003e     \u003cchr\u003e    \u003cdbl\u003e    \u003cdbl\u003e   \u003cdbl\u003e  \u003cdbl\u003e      \u003cdbl\u003e\n    ##  1 B immature        (Interce… \u003cNA\u003e    0.523     0.819   1.13   1.00      3685. \n    ##  2 B immature        typeheal… type    1.01      1.38    1.71   1.00      1873. \n    ##  3 B mem             (Interce… \u003cNA\u003e   -1.07     -0.663  -0.270  1.00       206. \n    ##  4 B mem             typeheal… type    1.16      1.58    2.02   1.00       195. \n    ##  5 CD4 cm S100A4     (Interce… \u003cNA\u003e    1.45      1.70    1.96   1.000     1206. \n    ##  6 CD4 cm S100A4     typeheal… type    0.590     0.896   1.19   1.00       285. \n    ##  7 CD4 cm high cyto… (Interce… \u003cNA\u003e   -0.993    -0.605  -0.212  1.00       592. \n    ##  8 CD4 cm high cyto… typeheal… type   -1.90     -1.21   -0.553  1.00        62.8\n    ##  9 CD4 cm ribosome   (Interce… \u003cNA\u003e   -0.0706    0.303   0.676  1.00      3661. \n    ## 10 CD4 cm ribosome   typeheal… type   -1.34     -0.925  -0.496  1.00       891. \n    ## # ℹ 50 more rows\n    ## # ℹ 7 more variables: c_ess_tail \u003cdbl\u003e, v_lower \u003cdbl\u003e, v_effect \u003cdbl\u003e,\n    ## #   v_upper \u003cdbl\u003e, v_rhat \u003cdbl\u003e, v_ess_bulk \u003cdbl\u003e, v_ess_tail \u003cdbl\u003e\n\n**Plot 1D significance plot**\n\n``` r\nplots = res |\u003e sccomp_test() |\u003e plot()\n```\n\n    ## Running standalone generated quantities after 1 MCMC chain, with 1 thread(s) per chain...\n    ## \n    ## Chain 1 finished in 0.0 seconds.\n\n``` r\nplots$credible_intervals_1D\n```\n\n![](inst/figures/unnamed-chunk-23-1.png)\u003c!-- --\u003e\n\n**Plot 2D significance plot** Data points are cell groups. Error bars\nare the 95% credible interval. The dashed lines represent the default\nthreshold fold change for which the probabilities (c_pH0, v_pH0) are\ncalculated. pH0 of 0 represent the rejection of the null hypothesis that\nno effect is observed.\n\nThis plot is provided only if differential variability has been tested.\nThe differential variability estimates are reliable only if the linear\nassociation between mean and variability for `(intercept)` (left-hand\nside facet) is satisfied. A scatterplot (besides the Intercept) is\nprovided for each category of interest. For each category of interest,\nthe composition and variability effects should be generally\nuncorrelated.\n\n``` r\nplots$credible_intervals_2D\n```\n\n![](inst/figures/unnamed-chunk-24-1.png)\u003c!-- --\u003e\n\n# Recommended Settings for Different Data Types\n\n## For Single-Cell RNA Sequencing\n\nWe recommend setting `bimodal_mean_variability_association  = TRUE`. The\nbimodality of the mean-variability association can be confirmed from the\nplots\\$credible_intervals_2D (see below).\n\n## For CyTOF and Microbiome Data\n\nWe recommend setting `bimodal_mean_variability_association  = FALSE`\n(Default).\n\n## MCMC Chain Visualization\n\nIt is possible to directly evaluate the posterior distribution. In this\nexample, we plot the Monte Carlo chain for the slope parameter of the\nfirst cell type. We can see that it has converged and is negative with\nprobability 1.\n\n``` r\nlibrary(cmdstanr)\nlibrary(posterior)\nlibrary(bayesplot)\n\n# Assuming res contains the fit object from cmdstanr\nfit \u003c- res |\u003e attr(\"fit\")\n\n# Extract draws for 'beta[2,1]'\ndraws \u003c- as_draws_array(fit$draws(\"beta[2,1]\"))\n\n# Create a traceplot for 'beta[2,1]'\nmcmc_trace(draws, pars = \"beta[2,1]\") + theme_bw()\n```\n\n![](inst/figures/unnamed-chunk-25-1.png)\u003c!-- --\u003e\n\n``` r\nsessionInfo()\n```\n\n    ## R version 4.5.0 (2025-04-11)\n    ## Platform: x86_64-apple-darwin20\n    ## Running under: macOS Sonoma 14.6.1\n    ## \n    ## Matrix products: default\n    ## BLAS:   /Library/Frameworks/R.framework/Versions/4.5-x86_64/Resources/lib/libRblas.0.dylib \n    ## LAPACK: /Library/Frameworks/R.framework/Versions/4.5-x86_64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1\n    ## \n    ## locale:\n    ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8\n    ## \n    ## time zone: Australia/Adelaide\n    ## tzcode source: internal\n    ## \n    ## attached base packages:\n    ## [1] stats     graphics  grDevices utils     datasets  methods   base     \n    ## \n    ## other attached packages:\n    ##  [1] bayesplot_1.12.0   posterior_1.6.1    cmdstanr_0.9.0     loo_2.8.0         \n    ##  [5] tidyr_1.3.1        forcats_1.0.0      ggplot2_3.5.2.9001 sccomp_2.1.16     \n    ##  [9] instantiate_0.2.3  dplyr_1.1.4       \n    ## \n    ## loaded via a namespace (and not attached):\n    ##  [1] tidyselect_1.2.1            farver_2.1.2               \n    ##  [3] S7_0.2.0                    fastmap_1.2.0              \n    ##  [5] SingleCellExperiment_1.30.1 tensorA_0.36.2.1           \n    ##  [7] dotCall64_1.2               digest_0.6.37              \n    ##  [9] lifecycle_1.0.4             SeuratObject_5.1.0         \n    ## [11] processx_3.8.6              magrittr_2.0.3             \n    ## [13] compiler_4.5.0              rlang_1.1.6                \n    ## [15] tools_4.5.0                 utf8_1.2.6                 \n    ## [17] yaml_2.3.10                 data.table_1.17.8          \n    ## [19] knitr_1.50                  S4Arrays_1.8.1             \n    ## [21] labeling_0.4.3              sp_2.2-0                   \n    ## [23] DelayedArray_0.34.1         plyr_1.8.9                 \n    ## [25] RColorBrewer_1.1-3          abind_1.4-8                \n    ## [27] withr_3.0.2                 purrr_1.1.0                \n    ## [29] BiocGenerics_0.54.0         grid_4.5.0                 \n    ## [31] stats4_4.5.0                future_1.58.0              \n    ## [33] progressr_0.15.1            globals_0.18.0             \n    ## [35] scales_1.4.0                SummarizedExperiment_1.38.1\n    ## [37] cli_3.6.5                   rmarkdown_2.29             \n    ## [39] crayon_1.5.3                generics_0.1.4             \n    ## [41] future.apply_1.20.0         rstudioapi_0.17.1          \n    ## [43] reshape2_1.4.4              httr_1.4.7                 \n    ## [45] tzdb_0.5.0                  stringr_1.5.1              \n    ## [47] parallel_4.5.0              XVector_0.48.0             \n    ## [49] matrixStats_1.5.0           vctrs_0.6.5                \n    ## [51] Matrix_1.7-3                jsonlite_2.0.0             \n    ## [53] callr_3.7.6                 IRanges_2.42.0             \n    ## [55] hms_1.1.3                   patchwork_1.3.1            \n    ## [57] S4Vectors_0.46.0            ggrepel_0.9.6              \n    ## [59] listenv_0.9.1               spam_2.11-1                \n    ## [61] glue_1.8.0                  parallelly_1.45.0          \n    ## [63] codetools_0.2-20            ps_1.9.1                   \n    ## [65] distributional_0.5.0        stringi_1.8.7              \n    ## [67] gtable_0.3.6                GenomeInfoDb_1.44.0        \n    ## [69] GenomicRanges_1.60.0        UCSC.utils_1.4.0           \n    ## [71] tibble_3.3.0                pillar_1.11.0              \n    ## [73] htmltools_0.5.8.1           GenomeInfoDbData_1.2.14    \n    ## [75] R6_2.6.1                    rprojroot_2.1.0            \n    ## [77] evaluate_1.0.4              lattice_0.22-7             \n    ## [79] Biobase_2.68.0              readr_2.1.5                \n    ## [81] backports_1.5.0             Rcpp_1.1.0                 \n    ## [83] SparseArray_1.8.0           checkmate_2.3.2            \n    ## [85] xfun_0.52                   fs_1.6.6                   \n    ## [87] MatrixGenerics_1.20.0       pkgconfig_2.0.3\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmangiolalaboratory%2Fsccomp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmangiolalaboratory%2Fsccomp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmangiolalaboratory%2Fsccomp/lists"}