Communitygithub.com

scvelo

Análisis de velocidad de ARN con scVelo. Estima transiciones de estado celular a partir de la dinámica de ARNm no empalmado/empalmado, infiere direcciones de trayectoria, calcula tiempo latente e identifica genes impulsores en datos de scRNA-seq. Complementa a Scanpy/scVI-tools para inferencia de trayectorias.

¿Qué es scvelo?

scVelo es el paquete líder en Python para el análisis de velocidad de ARN (RNA velocity) en datos de secuenciación de ARN de célula única. Permite inferir transiciones de estado celular modelando la cinética de splicing del ARN, utilizando la relación entre ARN no empalmado (pre-ARNm) y empalmado (ARNm maduro) para determinar si un gen se está regulando al alza o a la baja en cada célula. Esto posibilita la reconstrucción de trayectorias de desarrollo y la identificación de decisiones de destino celular sin necesidad de datos de series temporales. La habilidad es compatible con plataformas como Claude Code, Cursor y Codex, y está diseñada para complementar a Scanpy y scVI-tools. El flujo de trabajo típico incluye la carga de datos, preprocesamiento, estimación de velocidad, cálculo de tiempo latente, análisis de genes impulsores y visualización de flechas o flujos en proyecciones UMAP. scVelo ofrece varios modelos (estocástico, determinista y dinámico), siendo el modelo dinámico el recomendado para análisis precisos y publicables.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/K-Dense-AI/scientific-agent-skills/tree/main/skills/scvelo

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

scVelo — Análisis de Velocidad de ARN

Resumen

scVelo es el paquete líder en Python para el análisis de velocidad de ARN en datos de scRNA-seq. Infiere transiciones de estado celular modelando la cinética del splicing de ARN — utilizando la proporción de abundancias de ARN no empalmado (pre-ARNm) a empalmado (ARNm maduro) para determinar si un gen se está regulando al alza o a la baja en cada célula. Esto permite reconstruir trayectorias de desarrollo e identificar decisiones de destino celular sin necesidad de datos de series temporales.

Instalación: uv pip install scvelo

Recursos clave:

Cuándo usar esta habilidad

Usa scVelo cuando:

  • Inferencia de trayectorias a partir de datos instantáneos: Determinar en qué dirección se están diferenciando las células
  • Predicción de destino celular: Identificar células progenitoras y sus destinos posteriores
  • Identificación de genes impulsores: Encontrar genes cuya dinámica explica mejor las trayectorias observadas
  • Biología del desarrollo: Modelar hematopoyesis, neurogénesis, transiciones epitelio-mesenquimales
  • Estimación de tiempo latente: Ordenar células a lo largo de un pseudotiempo derivado de la dinámica de splicing
  • Complemento a Scanpy: Añadir información direccional a las proyecciones UMAP

Prerrequisitos

scVelo requiere matrices de recuento tanto para ARN no empalmado como empalmado. Estas se generan mediante:

  1. STARsolo o kallisto|bustools con modo lamanno
  2. CLI de velocyto: velocyto run10x / velocyto run
  3. alevin-fry / simpleaf con salida de empalmado/no empalmado

Los datos se almacenan en un objeto AnnData con layers["spliced"] y layers["unspliced"].

Flujo de trabajo estándar de velocidad de ARN

1. Configuración y carga de datos

import scvelo as scv
import scanpy as sc
import numpy as np
import matplotlib.pyplot as plt

# Configurar opciones
scv.settings.verbosity = 3       # Mostrar pasos de cálculo
scv.settings.presenter_view = True
scv.settings.set_figure_params('scvelo')

# Cargar datos (AnnData con capas spliced/unspliced)
# Opción A: Cargar desde loom (salida de velocyto)
adata = scv.read("cellranger_output.loom", cache=True)

# Opción B: Fusionar loom de velocyto con AnnData procesado con Scanpy
adata_processed = sc.read_h5ad("processed.h5ad")  # Tiene UMAP, clústeres
adata_velocity = scv.read("velocyto.loom")
adata = scv.utils.merge(adata_processed, adata_velocity)

# Verificar capas
print(adata)
# obs × var: N × G
# layers: 'spliced', 'unspliced' (requerido)
# obsm['X_umap'] (requerido para visualización)

2. Preprocesamiento

# Filtrar y normalizar. A partir de scVelo 0.3, filter_and_normalize() solo filtra
# genes y normaliza por célula -- ya no toma n_top_genes y ya no
# aplica transformación logarítmica, por lo que el paso de log y la selección de HVG vienen de Scanpy.
scv.pp.filter_and_normalize(
    adata,
    min_shared_counts=20    # Recuentos mínimos en spliced+unspliced
)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata, n_top_genes=2000, subset=True)

# Calcular momentos de primer y segundo orden (medias y varianzas)
# knn_connectivities debe calcularse primero
sc.pp.neighbors(adata, n_neighbors=30, n_pcs=30)
scv.pp.moments(
    adata,
    n_pcs=30,
    n_neighbors=30
)

3. Estimación de velocidad — Modelo estocástico

El modelo estocástico es rápido y adecuado para análisis exploratorios:

# Velocidad estocástica (más rápida, menos precisa)
scv.tl.velocity(adata, mode='stochastic')
scv.tl.velocity_graph(adata)

# Visualizar
scv.pl.velocity_embedding_stream(
    adata,
    basis='umap',
    color='leiden',
    title="Velocidad de ARN (Estocástica)"
)

4. Estimación de velocidad — Modelo dinámico (Recomendado)

El modelo dinámico ajusta la cinética completa de splicing y es más preciso:

# Recuperar dinámica (intensivo computacionalmente; ~10-30 min para 10K células)
scv.tl.recover_dynamics(adata, n_jobs=4)

# Calcular velocidad a partir del modelo dinámico
scv.tl.velocity(adata, mode='dynamical')
scv.tl.velocity_graph(adata)

5. Tiempo latente

El modelo dinámico permite calcular un tiempo latente compartido (pseudotiempo):

# Calcular tiempo latente
scv.tl.latent_time(adata)

# Visualizar tiempo latente en UMAP
scv.pl.scatter(
    adata,
    color='latent_time',
    color_map='gnuplot',
    size=80,
    title='Tiempo latente'
)

# Identificar genes principales ordenados por tiempo latente
top_genes = adata.var['fit_likelihood'].sort_values(ascending=False).index[:300]
scv.pl.heatmap(
    adata,
    var_names=top_genes,
    sortby='latent_time',
    col_color='leiden',
    n_convolve=100
)

6. Análisis de genes impulsores

# Identificar genes con mejor ajuste de velocidad
scv.tl.rank_velocity_genes(adata, groupby='leiden', min_corr=0.3)
df = scv.DataFrame(adata.uns['rank_velocity_genes']['names'])
print(df.head(10))

# Velocidad y coherencia
scv.tl.velocity_confidence(adata)
scv.pl.scatter(
    adata,
    c=['velocity_length', 'velocity_confidence'],
    cmap='coolwarm',
    perc=[5, 95]
)

# Retratos de fase para genes específicos
scv.pl.velocity(adata, ['Cpe', 'Gnao1', 'Ins2'],
               ncols=3, figsize=(16, 4))

7. Flechas de velocidad y pseudotiempo

# Gráfico de flechas en UMAP
scv.pl.velocity_embedding(
    adata,
    arrow_length=3,
    arrow_size=2,
    color='leiden',
    basis='umap'
)

# Gráfico de flujo (visualización más limpia)
scv.pl.velocity_embedding_stream(
    adata,
    basis='umap',
    color='leiden',
    smooth=0.8,
    min_mass=4
)

# Pseudotiempo de velocidad (alternativa al tiempo latente)
scv.tl.velocity_pseudotime(adata)
scv.pl.scatter(adata, color='velocity_pseudotime', cmap='gnuplot')

8. Gráfico de trayectoria PAGA

# Gráfico PAGA con transiciones informadas por velocidad
scv.tl.paga(adata, groups='leiden')
df = scv.get_df(adata, 'paga/transitions_confidence', precision=2).T
df.style.background_gradient(cmap='Blues').format('{:.2g}')

# Trazar PAGA con velocidad
scv.pl.paga(
    adata,
    basis='umap',
    size=50,
    alpha=0.1,
    min_edge_width=2,
    node_size_scale=1.5
)

Script de flujo de trabajo completo

import scvelo as scv
import scanpy as sc

def run_rna_velocity(adata, n_top_genes=2000, mode='dynamical', n_jobs=4):
    """
    Flujo de trabajo completo de velocidad de ARN.

    Args:
        adata: AnnData con capas 'spliced' y 'unspliced', UMAP en obsm
        n_top_genes: Número de genes altamente variables principales para velocidad
        mode: 'stochastic' (rápido) o 'dynamical' (preciso)
        n_jobs: Trabajos paralelos para el modelo dinámico

    Returns:
        AnnData procesado con información de velocidad
    """
    scv.settings.verbosity = 2

    # 1. Preprocesamiento (scVelo 0.3 eliminó log/HVG de filter_and_normalize)
    scv.pp.filter_and_normalize(adata, min_shared_counts=20)
    sc.pp.log1p(adata)
    sc.pp.highly_variable_genes(adata, n_top_genes=n_top_genes, subset=True)

    if 'neighbors' not in adata.uns:
        sc.pp.neighbors(adata, n_neighbors=30)

    scv.pp.moments(adata, n_pcs=30, n_neighbors=30)

    # 2. Estimación de velocidad
    if mode == 'dynamical':
        scv.tl.recover_dynamics(adata, n_jobs=n_jobs)

    scv.tl.velocity(adata, mode=mode)
    scv.tl.velocity_graph(adata)

    # 3. Análisis posteriores
    if mode == 'dynamical':
        scv.tl.latent_time(adata)
        scv.tl.rank_velocity_genes(adata, groupby='leiden', min_corr=0.3)

    scv.tl.velocity_confidence(adata)
    scv.tl.velocity_pseudotime(adata)

    return adata

Campos clave de salida en AnnData

Después de ejecutar el flujo de trabajo, se añaden los siguientes campos:

UbicaciónClaveDescripción
adata.layersvelocityVelocidad de ARN por gen por célula
adata.layersfit_tTiempo latente ajustado por gen por célula
adata.obsmvelocity_umapVectores de velocidad 2D en UMAP
adata.obsvelocity_pseudotimePseudotiempo derivado de la velocidad
adata.obslatent_timeTiempo latente del modelo dinámico
adata.obsvelocity_lengthVelocidad de cada célula
adata.obsvelocity_confidencePuntuación de confianza por célula
adata.varfit_likelihoodCalidad del ajuste del modelo por gen
adata.varfit_alphaTasa de transcripción
adata.varfit_betaTasa de splicing
adata.varfit_gammaTasa de degradación
adata.unsvelocity_graphMatriz de probabilidades de transición célula-célula

Comparación de modelos de velocidad

ModeloVelocidadPrecisiónCuándo usarlo
stochasticRápidoModeradaExploratorio; conjuntos de datos grandes
deterministicMedioModeradaCinética lineal simple
dynamicalLentoAltaCalidad de publicación; identifica genes impulsores

Mejores prácticas

  • Comienza con el modo estocástico para exploración; cambia a dinámico para el análisis final
  • Buena cobertura de lecturas no empalmadas: Las lecturas cortas (< 100 pb) pueden perder cobertura de intrones
  • Mínimo 2,000 células: La velocidad de ARN es ruidosa con menos células
  • La velocidad debe ser coherente: Las flechas deben seguir la biología conocida; la aleatoriedad indica problemas
  • El ancho de banda k-NN importa: Demasiados pocos vecinos → velocidad ruidosa; demasiados → demasiado suavizada
  • Verificación de cordura: Las células raíz (progenitoras) deben tener altas proporciones de no empalmado/empalmado para genes marcadores
  • El modelo dinámico requiere estados cinéticos distintos: Funciona mejor para procesos de diferenciación claros

Solución de problemas

ProblemaSolución
Falta la capa de no empalmadoVuelve a ejecutar velocyto o usa STARsolo con --soloFeatures Gene Velocyto
Muy pocos genes de velocidadReduce min_shared_counts; verifica la profundidad de secuenciación
Flechas con apariencia aleatoriaPrueba diferentes valores de n_neighbors o modelo de velocidad
Error de memoria con el modelo dinámicoEstablece n_jobs=1; reduce n_top_genes
Velocidad negativa en todas partesVerifica que las capas spliced/unspliced no estén intercambiadas

Recursos adicionales

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

adaptyv

How to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.

aeon

This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.

alphagenome

Look up precomputed AlphaGenome Atlas effects for any GRCh38 single-nucleotide variant (AVI score with Phred and 18 SHAP feature attributions, plus raw and quantile scores for RNA-seq, DNase, ATAC, ChIP-TF, ChIP-histone, CAGE, PRO-cap, splicing, polyadenylation and contact-map tracks), score variants or scan windows on demand with the AlphaGenome model for human and mouse (variant scoring, in silico mutagenesis, REF-versus-ALT track prediction), and build Atlas website deep links. Use when the user mentions AlphaGenome, AlphaGenome Atlas, AVI or AlphaGenome Variant Impact, DeepMind variant effect prediction, or wants to prioritise or mechanistically interpret non-coding, regulatory, splicing, enhancer, promoter, or chromatin-accessibility effects of SNVs from a VCF, credible set, or region. Research use only; not a clinical tool.

analytical-method-validation

Plan, execute, and document validation, verification, and transfer of analytical procedures under the governing framework - ICH Q2(R2) and Q14, USP <1220>/<1225>/<1226>, ICH M10 bioanalytical, CLSI EP, or ISO/IEC 17025. Use for HPLC, LC-MS/MS, GC, CE, ICP-MS, dissolution, qNMR, qPCR, NIR, and ligand binding or cell-based assays whenever the question is whether a procedure is fit for its intended purpose. Triggers include

anndata

Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.

arbor

Autonomously improve a real artifact (code, training recipe, agent harness, data pipeline, prompt) against an objective and an evaluator, using Hypothesis Tree Refinement (HTR) from the Arbor paper. Use this whenever someone wants to iteratively optimize something over many experiments without overfitting — e.g.

arboreto

Infer gene regulatory networks (GRNs) from gene expression data using scalable algorithms (GRNBoost2, GENIE3). Use when analyzing transcriptomics data (bulk RNA-seq, single-cell RNA-seq) to identify transcription factor-target gene relationships and regulatory interactions. Supports distributed computation for large-scale datasets.

astropy

Core Python library for astronomy and astrophysics workflows that need Astropy APIs, including units/quantities, coordinates, FITS I/O, tables, time systems, WCS, and cosmology. Use when implementing or debugging astronomical data analysis code with Astropy.

autoskill

Observe the user

benchling-integration

Benchling Python SDK and REST API integration for registry entities, inventory, ELN entries, workflows, Benchling Apps, and Data Warehouse queries. Use when automating lab data with benchling-sdk or the v2 API.

bgpt-paper-search

Search scientific papers and retrieve structured experimental data extracted from full-text studies via the BGPT MCP server. Returns 25+ fields per paper including methods, results, sample sizes, quality scores, and conclusions. Use for literature reviews, evidence synthesis, and finding experimental details not available in abstracts alone.

bids

>

biopython

Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.

bioservices

Unified Python interface to 40+ bioinformatics services. Use when querying multiple databases (UniProt, KEGG, ChEMBL, Reactome) in a single workflow with consistent API. Best for cross-database analysis, ID mapping across services. For quick single-database lookups use gget; for sequence/file manipulation use biopython.

bulk-rnaseq

End-to-end bulk RNA-seq orchestrator — takes raw FASTQ reads through QC and trimming (FastQC, fastp/Trim Galore), alignment and quantification (STAR, Salmon, featureCounts), assembles a gene-level counts matrix, then hands off to differential expression (pydeseq2), pathway/GSEA enrichment (pathway-enrichment), and publication figures (scientific-visualization). Use whenever the user has bulk RNA-seq reads or quant output and wants a complete, reproducible differential-expression workflow — e.g.

cellxgene-census

Query the CZ CELLxGENE Census programmatically for versioned public single-cell and spatial transcriptomics data. Use when you need population-scale cell metadata, gene expression slices, Census summary counts, source H5AD URIs/downloads, embeddings, spatial Census data, or reference atlas comparisons across organisms, tissues, diseases, assays, and cell types. For analyzing your own local single-cell data use scanpy, anndata, or scvi-tools.

cirq

Google quantum computing framework. Use when targeting Google Quantum AI hardware, designing noise-aware circuits, or running quantum characterization experiments. Best for Google hardware, noise modeling, and low-level circuit design. For IBM hardware use qiskit; for quantum ML with autodiff use pennylane; for physics simulations use qutip.

citation-management

Comprehensive citation management for academic research. Search OpenAlex, PubMed, and Google Scholar for papers, extract accurate metadata, validate citations, and generate properly formatted BibTeX entries. This skill should be used when you need to find papers, verify citation information, convert DOIs to BibTeX, or ensure reference accuracy in scientific writing.

clinical-decision-support

Prepare and validate research-only clinical decision-support evaluation, evidence-profile, cohort, survival, biomarker/model, privacy, and governance artifacts. Use for aggregate or synthetic research documentation and traceability—not patient care or live clinical operation.

clinical-reports

Create safety-bounded draft structures and run local deterministic checks for clinical case, diagnostic, trial, safety, and aggregate research reports. Use only with synthetic, de-identified, or aggregate inputs and verified source-fact manifests; every output requires qualified review.

Skills relacionados