Seen Perturbation Prediction
============================


.. raw:: html

     <p style="margin:0.8em 0 1em; padding: 0.8em 1.2em; background: linear-gradient(135deg, rgba(139, 0, 0, 0.08) 0%, rgba(139, 0, 0, 0.03) 100%); border-left: 4px solid #8B0000; border-radius: 4px;">
       <strong>💡 Tip:</strong> Click the&nbsp;
       <span style="color:#8B0000;font-weight:bold;font-size:1.1em;">+</span>
       in the <em>first column</em> to expand detailed method descriptions.
     </p>

   <style>
   td.details-control { 
     width:20px; 
     text-align:center; 
     cursor:pointer;
     color: #8B0000;
     font-weight: bold;
     font-size: 1.2em;
   }
   td.details-control::before { content:'+'; }
   tr.shown td.details-control::before { content:'-'; }
   td.published { text-align:center; font-weight:bold; }
   .table-container { width:100%; overflow-x:auto; }
   a.github-link {
     display:inline-block; font-size:1.2em; vertical-align:middle; color:inherit;
   }
   a.github-link:hover { color:#8B0000; }
   
   /* Task and Model badges */
   .badge {
     display: inline-block;
     padding: 0.25em 0.6em;
     margin: 0.15em;
     font-size: 0.85em;
     font-weight: 500;
     line-height: 1;
     border-radius: 12px;
     white-space: nowrap;
   }
   
   .task-badge {
     background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     color: white;
     border: 1px solid rgba(102, 126, 234, 0.3);
   }
   
   .model-badge {
     background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
     color: white;
     border: 1px solid rgba(245, 87, 108, 0.3);
   }
   
   html[data-theme="light"] .task-badge {
     background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);
   }
   
   html[data-theme="light"] .model-badge {
     background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
     box-shadow: 0 2px 4px rgba(245, 87, 108, 0.2);
   }
   
   /* Method name styling */
   td a[href*="doi.org"],
   td a[href*="nature.com"],
   td a[href*="biorxiv.org"],
   td a[href*="cell.com"] {
     font-weight: 600;
     color: #8B0000;
     text-decoration: none;
     transition: all 0.2s ease;
   }
   
   td a[href*="doi.org"]:hover,
   td a[href*="nature.com"]:hover,
   td a[href*="biorxiv.org"]:hover,
   td a[href*="cell.com"]:hover {
     color: #b30000;
     text-decoration: underline;
   }
   
   /* Published status icons */
   td.published {
     font-size: 1.2em;
   }
   
   /* Expandable description styling */
   .expanded-description {
     padding: 1em;
     background: rgba(139, 0, 0, 0.05);
     border-left: 3px solid #8B0000;
     line-height: 1.6;
     font-size: 0.95em;
   }
   
   html[data-theme="light"] .expanded-description {
     background: rgba(139, 0, 0, 0.03);
   }
   </style>

   <div class="table-container">
     <table id="methods-table" class="display" style="width:100%">
       <thead>
         <tr>
           <th></th><th>Method</th><th>Year</th><th>Task</th>
           <th>Model</th><th>Published</th><th>Code</th>
         </tr>
       </thead>
       <tbody>
         <tr data-description="CausCell integrates causal representation learning with diffusion-based generative modeling to generate counterfactual single-cell data. It disentangles observed and unobserved concepts using concept-specific adversarial discriminators and links the resulting latent representations through a structural causal model encoded as a directed acyclic graph.">
           <td class="details-control"></td>
           <td><a href="https://www.nature.com/articles/s41467-025-62008-1">CausCell</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Causal Structure</span><span class="badge task-badge">Combinatorial Effect Prediction</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Diffusion</span><span class="badge model-badge">Auxilary Classifiers</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/bm2-lab/CausCell" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="CellBox models cellular responses to perturbations, by linking molecular and phenotypic outcomes through a unified nonlinear ODE-based model, aimed at simulating dynamic cellular behavior. The framework uses gradient descent with automatic differentiation to infer ODE network interaction parameters, facilitating exposure to novel perturbations and prediction of cell responses. ">
           <td class="details-control"></td>
           <td><a href="https://www.cell.com/cell-systems/pdf/S2405-4712(20)30464-6.pdf">CellBox</a></td>
           <td>2021</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Combinatorial Effect Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">ODE</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/sanderlab/CellBox" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="CytoBridge approximates the Unbalanced Mean Field Schrödinger Bridge (UMFSB) to model unbalanced stochastic cell dynamics with cell-cell interactions from snapshot data. It uses neural networks and flow matching to infer transition velocity, growth/death rates, and interaction potentials. The framework offers a unified approach to model time-series transcriptomics, elucidating how intercellular communication influences cellular processes and behaviors. ">
           <td class="details-control"></td>
           <td><a href="https://openreview.net/pdf?id=Z6DJJIN8IJ">CytoBridge</a></td>
           <td>2025</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Trace Cell Populations</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Neural ODE</span><span class="badge model-badge">Flow Matching</span><span class="badge model-badge">Optimal Transport</span><span class="badge model-badge">Time-resolved</span><span class="badge model-badge">Mean Field Model</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/zhenyiizhang/CytoBridge.git" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="DeepRUOT solves an Regularized Unbalanced Optimal Transport (RUOT) problem to reconstruct stochastic dynamics from sparse time-resolved snapshots. By introducing Fisher-regularization, the method simultaneously infers the transition velocity, growth/death rates without any prior knowledge. The framework transforms time-series transcriptomics data into a virtual dynamical system to identify single-cell growth and transition patterns, eliminating false transitions, and constructing the Waddington developmental landscape.">
           <td class="details-control"></td>
           <td><a href="https://openreview.net/forum?id=gQlxd3Mtru">DeepRUOT</a></td>
           <td>2025</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Trace Cell Populations</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Neural ODE</span><span class="badge model-badge">Flow Matching</span><span class="badge model-badge">Optimal Transport</span><span class="badge model-badge">Time-resolved</span><span class="badge model-badge">Fisher-regularized Unbalanced Dynamics</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/zhenyiizhang/DeepRUOTv2.git" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="A VAE that disentangles control and pertubed cells into a latent space organized by a causal DAG. The encoder produces a Gaussian latent code z, while an intervention encoder transforms intervention one-hot encodings into two embeddings - a soft assignment vector that targets specific latent dimensions and a scalar capturing the intervention’s magnitude. Multiplying and adding these embeddings to z yields a modified latent vector that simulates a soft intervention, whereas zeroing them recovers the control condition. A causal layer then processes the latent vectors using an upper-triangular matrix G, which enforces an acyclic causal structure and propagates intervention effects among the latent factors. The decoder is applied twice - once to the modified latent code to generate virtual counterfactual outputs that reconstruct interventional outcomes, and once to the unmodified code to recover control samples. This dual decoding forces the model to disentangle intervention-specific effects from the intrinsic data distribution. The training objective combines reconstruction error to reconstruct control samples, a discrepancy loss (e.g., MMD) to align virtual counterfactuals with observed interventional data, KL divergence on the latent space, and an L1 penalty on G to enforce sparsity.">
           <td class="details-control"></td>
           <td><a href="https://openreview.net/forum?id=o16sYKHk3S&noteId=2EQ6cmfPHg">discrepancy-VAE</a></td>
           <td>2023</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Combinatorial Effect Prediction</span><span class="badge task-badge">Causal Structure</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">Disentanglement via Virtual Counterfactuals</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/uhlerlab/discrepancy_vae" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="Dr.VAE uses a Variational Autoencoder that predicts drug response from transcriptomic perturbation signatures. It models transcription change as a linear function within a low-dimensional latent space, defined by encoder and decoder neural networks. For paired expression samples from treated and control conditions, Dr.VAE accurately predicts treated expression.">
           <td class="details-control"></td>
           <td><a href="https://academic.oup.com/bioinformatics/article/35/19/3743/5372343">Dr.VAE</a></td>
           <td>2019</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/rampasek/DrVAE" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="The Factorized Causal Representation (FCR) framework disentangles cell representations into three latent blocks: z_x, which captures context-specific (covariate) effects and is invariant to treatment; z_t, which encodes direct treatment effects and is invariant to context; and z_{tx}, which represents interactions between treatment and context. It additionally handles interacting covariates by using a variational autoencoder framework augmented with adversarial regularisation. This regularisation enforces the invariance of z_x across treatments and the variability of z_t with respect to covariates. Moreover, the conditional independence of the interaction term z_{tx} from both z_x and z_t, is promoted through permutation-based discriminators.">
           <td class="details-control"></td>
           <td><a href="https://arxiv.org/pdf/2410.22472">FCR</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">Adversarial</span><span class="badge model-badge">Perturbation-covariate Interactions</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/Genentech/fcr" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="LEMUR is a PCA based algorithm that defines condition dependent embedings to analyze differences in differentialy expressed genes across conditions. For each condition a separate embeding matrix is learned and reconstructed using a shared matrix. This is used to generate counterfactual estimates for each cell and condition, which is used to infer label-free DE genes and neighborhoods. ">
           <td class="details-control"></td>
           <td><a href="https://www.nature.com/articles/s41588-024-01996-0">LEMUR</a></td>
           <td>2025</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Differential Analysis</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Multi-condition PCA</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/const-ae/pylemur" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="Metric Flow Matching (MFM) constructs probability paths between source and target distributions by interpolating geodesics following a data-dependent Riemannian metric, ensuring that interpolations remain close to the data manifold rather than being straight lines in Euclidean space. MFM first learns these geodesics by minimizing a special cost function, and then regresses a vector field along a geodesic-based corrected path using a conditional flow matching objective.">
           <td class="details-control"></td>
           <td><a href="https://proceedings.neurips.cc/paper_files/paper/2024/file/f381114cf5aba4e45552869863deaaa7-Paper-Conference.pdf">MFM</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Trace Cell Populations</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Flow Matching</span><span class="badge model-badge">Optimal Transport</span><span class="badge model-badge">Time-resolved</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/kksniak/metric-flow-matching.git" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="MichiGAN is a two-step approach that first uses a β-TCVAE - a variant of the variational autoencoder that penalizes total correlation among latent variables to promote disentangled representations. These latent representations (posterior means or samples) are then used to condition a Wasserstein GAN, the generator of which similarly to the VAE reconstructs the data from the latent variables, while attempting to &#39;fool&#39; a discriminator whether the samples were real or generated. Counterfactual predictions are done via latent space arithmetics as in scGEN.">
           <td class="details-control"></td>
           <td><a href="https://link.springer.com/article/10.1186/s13059-021-02373-4">MichiGAN</a></td>
           <td>2021</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Unsupervised Disentanglement</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Combinatorial Effect Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">conditioned GAN</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/welch-lab/MichiGAN" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="MMFM (Multi-Marginal Flow Matching) builds on Flow Matching to model cell trajectories across time and conditions. MMFM generalises the Conditional Flow Matching framework to incorporate multiple time points using a spline-based conditional probability path. Moreover, it leverages ideas from classifier-free guidance to incorporate multiple conditions.">
           <td class="details-control"></td>
           <td><a href="https://openreview.net/pdf?id=hwnObmOTrV">MMFM</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Trace Cell Populations</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Flow Matching</span><span class="badge model-badge">Optimal Transport</span><span class="badge model-badge">Time-resolved</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="github.com/Genentech/MMFM" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="PRESCIENT models cellular differentiation as a stochastic diffusion process, where the drift term is parameterised as the negative gradient of a neural network-learned potential function. The model is trained using time-series single-cell RNA-seq data, and fits the potential function by minimizing the regularised Wasserstein distance between simulated and observed cell populations at each time point, explicitly incorporating cell proliferation by weighting cells according to their expected number of descendants. PRESCIENT can simulate differentiation trajectories for both observed and (in silico) perturbed cell states, enabling the prediction of cell fate outcomes under various genetic interventions.">
           <td class="details-control"></td>
           <td><a href="https://www.nature.com/articles/s41467-021-23518-w">Prescient</a></td>
           <td>2021</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Trace Cell Populations</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Context Transfer</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Diffusion</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/gifford-lab/prescient" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="A VAE that encodes input data into background latent variables and learns sparse, global (salient) embeddings representing the effects of perturbations. These sparse salient embeddings are modeled using a joint relaxed straight-through (Beta-)Bernoulli distribution (mask) and a normally distributed latent space. This method captures perturbation-specific effects as an additive shift to the background representation, analogous to additive shift methods, but it can also be thought as a multi-condition extention to the contrastive framework (limited to two latent variables (case vs. control), to a more general setup capable of learning global embeddings for each perturbation. As in some contrastive methods, for perturbation samples, the perturbation (global) embeddings are added to the background latent variables to reconstruct the data, while for control samples, the perturbation embeddings are effectively set to zero. ">
           <td class="details-control"></td>
           <td><a href="https://proceedings.neurips.cc/paper_files/paper/2023/hash/0001ca33ba34ce0351e4612b744b3936-Abstract-Conference.html">SAMS-VAE</a></td>
           <td>2023</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Causal Structure</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Combinatorial Effect Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">NB likelihood</span><span class="badge model-badge">Conditional Latent Embeddings</span><span class="badge model-badge">Addative Shift</span><span class="badge model-badge">Sparse Mechanism Shift</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/insitro/sams-vae" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="scCausalVI is a causality-aware generative model that disentangles inherent cellular heterogeneity from treatment-induced effects in perturbational single-cell RNA-seq data. It encodes structural causal model (SCM) principles into a deep variational inference framework, learning two distinct but interrelated latent factor sets: background factors capturing intrinsic cellular states and treatment effect factors encoding condition-specific transcriptional changes. A Squeeze-and-Excitation Networks (SENet) attention mechanism adaptively scales treatment effects per cell, enabling cell-state-specific response modeling at single-cell resolution. When batch information is available, scCausalVI simultaneously disentangles batch effects, treatment effects, and baseline cellular states in multi-source data integration. Through cross-condition in silico prediction, scCausalVI predicts gene expression profiles under hypothetical scenarios by intervening on condition assignments within the SCM. This enables identification of treatment-responsive cells via permutation-based significance testing, as well as identification of susceptible versus resistant subpopulations by computationally projecting treated cells back to untreated states. Downstream differential expression and pathway analyses on these virtual cells identified subpopulations reveal molecular signatures and regulatory mechanisms underlying differential cellular responses, facilitating the discovery of therapeutic targets and mechanistic drivers of disease susceptibility. ">
           <td class="details-control"></td>
           <td><a href="https://doi.org/10.1016/j.cels.2025.101443">scCausalVI</a></td>
           <td>2025</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Causal Structure</span><span class="badge task-badge">Unsupervised Disentanglement</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Perturbation Responsiveness</span><span class="badge task-badge">Differential Analysis</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Variational Autoencoder</span><span class="badge model-badge">Structural Causal Model</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/ShaokunAn/scCausalVI" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="A VAE that encodes shared-bio latent factors that capture biological variation (e.g. cell-type differences) and unshared-bio factors that capture condition-specific signals via separate encoders. Shared factors follow a standard normal prior, while unshared factors use a condition-specific Gaussian mixture prior. The invariance of the shared latent variables is enforced via an MMD penalty, while conditon-encoding in the unshared latent variables is promoted via a classification penalty. Group lasso is used to regularise condition-specific encoders, and it&#39;s (penalty) weights are used to select key genes per condition. scDisInFac enables perturbation predictions in multi-batch, multi-condition settings using scGEN-style arithmetics on the unshared space.">
           <td class="details-control"></td>
           <td><a href="https://www.nature.com/articles/s41467-024-45227-w">scDisInFact</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Contrastive Disentanglement</span><span class="badge task-badge">Nonlinear Gene Programmes</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Combinatorial Effect Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">NB likelihood</span><span class="badge model-badge">Adversarial</span><span class="badge model-badge">Gaussian Mixture Model</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/ZhangLabGT/scDisInFact" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="scELMo first converts gene and cell metadata into textual descriptions and uses GPT-3.5 to generate fixed-length embeddings, which are integrated with normalised expression values by arithmetic or weighted averaging in a zero-shot framework to yield cell embeddings. For some tasks, these embeddings and are fine-tuned via a compact neural adaptor trained with combined classification and contrastive losses. These embeddings are also fed into CPA’s conditional variational autoencoder and GEARS’s graph neural network for perturbation response prediction">
           <td class="details-control"></td>
           <td><a href="https://www.biorxiv.org/content/10.1101/2023.12.07.569910v2">scELMo</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Converts gene/cell metadata into text embeddings</span><span class="badge model-badge">Integrates text and expression embeddings</span><span class="badge model-badge">Fine-tunes embeddings via a lightweight neural adaptor</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/HelloWorldLTY/scELMo" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="scPreGAN is a deep generative model that predicts the response of single-cell expression to perturbation by integrating an autoencoder and a generative adversarial network. The model extracts common information from unperturbed and perturbed data using an encoder network, and then generates perturbed data using a generator network. scPreGAN outperforms state-of-the-art methods on three real world datasets, capturing the complicated distribution of cell expression and generating prediction data with the same expression abundance as real data.">
           <td class="details-control"></td>
           <td><a href="https://academic.oup.com/bioinformatics/article/38/13/3377/6593485">scPreGan</a></td>
           <td>2022</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">AE</span><span class="badge model-badge">GAN</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/ JaneJiayiDong/scPreGAN" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="SENA replaces discrepancy‑VAE&#39;s encoder by using a gene-to-pathway mask that applies a soft weighting, via the pathway activity scores α, to the gene expression inputs. In this design, each weight in the encoder is elementwise multiplied by a mask M that assigns full weight to genes known to belong to a pathway and a tunable, lower weight (λ) to genes outside the pathway. This allows the model to primarily capture the signal of annotated genes while still letting unannotated genes contribute, thereby forming interpretable latent factors as linear combinations of pathway activities. ">
           <td class="details-control"></td>
           <td><a href="https://openreview.net/forum?id=NjlafBAahz">SENA</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Causal Structure</span><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Combinatorial Effect Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Discrepancy-VAE architecture</span><span class="badge model-badge">VAE</span><span class="badge model-badge">PK Representations</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/ML4BM-Lab/SENA" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="A VAE  that combines the sparse mechanism shift from SVAE+ with learning a probabilistic pairing between cells and unobserved auxiliary variables. These auxilary variables correspond to the observed perturbation labels in SVAE+, but here they are learned in a data-driven way (rather than passed as static labels) which in turn enables counterfactual context-transfer scenarios.">
           <td class="details-control"></td>
           <td><a href="https://openreview.net/pdf?id=8hptqO7sfG">svae-ligr</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Causal Structure</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">NB likelihood</span><span class="badge model-badge">Sparse Mechanism Shift</span><span class="badge model-badge">Generative/Experience Replay</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/theislab/svaeligr" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="A VAE that integrates recent advances in sparse mechanism shift modeling for single-cell data, inferring a causal structure where perturbation labels identify the latent variables affected by each perturbation. The method constructs a graph identifying which latent variables are influenced by specific perturbations, promoting disentaglement and enabling biological interpretability, such as uncovering perturbations affecting shared processes. A key modelling contribution is its probabilistic sparsity approach (relaxed straight-through Beta-Bernoulli) on the global sparse embeddings (graph),  improving upon its predecessor, SVAE. As such, the latent space can be seen as being modelled from a Spike-and-Slab prior.">
           <td class="details-control"></td>
           <td><a href="https://proceedings.mlr.press/v213/lopez23a/lopez23a.pdf">sVAE+</a></td>
           <td>2023</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Multi-component Disentanglement</span><span class="badge task-badge">Causal Structure</span><span class="badge task-badge">Nonlinear Gene Programmes</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">VAE</span><span class="badge model-badge">NB likelihood</span><span class="badge model-badge">Sparse Mechanism Shift</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="https://github.com/Genentech/sVAE" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="trVAE is a conditional variational autoencoder, which applies Maximum Mean Discrepancy regularization to the first layer of its decoder. This forces the model to learn condition-invariant features, enabling it to transform samples between conditions and predict OOD responses, such as unseen cell-type specific response to seen perturbations. ">
           <td class="details-control"></td>
           <td><a href="https://academic.oup.com/bioinformatics/article/36/Supplement_2/i610/6055927#409207818">trVAE</a></td>
           <td>2020</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span><span class="badge task-badge">Multi-component Disentanglement</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">CVAE</span></div></td>


           <td class="published"><span style="color: #2E8B57;">✓</span></td>
            <td><a href="github.com/theislab/trvae" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
         <tr data-description="GraphVCI predecessor, almost identical architecture, excluding the prior knowledge graphs.">
           <td class="details-control"></td>
           <td><a href="https://arxiv.org/abs/2209.05935">VCI</a></td>
           <td>2024</td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge task-badge">Context Transfer</span><span class="badge task-badge">Seen Perturbation Prediction</span></div></td>

           <td><div style="display: flex; flex-wrap: wrap; gap: 0.3em;"><span class="badge model-badge">Dual-branch variational bayes causal inference framework</span></div></td>


           <td class="published"><span style="color: #DC143C;">✗</span></td>
            <td><a href="https://github.com/yulun-rayn/variational-causal-inference" class="github-link">
                  <i class="fab fa-github" aria-hidden="true"></i>
                  <span class="sr-only">GitHub</span>
                </a></td>
         </tr>
       </tbody>
     </table>
   </div>

.. raw:: html

   <script>
   jQuery(function($){
      $('#methods-table').DataTable({
        order:      [[2,'desc']],
        pageLength: 10,
        lengthMenu: [5,10,20,50,200],
        scrollX:    true,
        autoWidth:  false
      });
     $('#methods-table tbody').on('click','td.details-control',function(){
       var tr = $(this).closest('tr'),
           row = $('#methods-table').DataTable().row(tr);
       if(row.child.isShown()){
         row.child.hide(); tr.removeClass('shown');
       } else {
         row.child('<div class="expanded-description">'+tr.data('description')+'</div>').show();
         tr.addClass('shown');
       }
     });
   });
   </script>

