Skills Agentes

Pydeseq2

Análisis de expresión génica diferencial para RNA-seq bulk con PyDESeq2: diseños formulaicos, tests de Wald, corrección FDR, shrinkage de LFC y visualización de resultados.

Reemplaza a: DESeq2 en R (para flujos de trabajo en Python)

Solicitaread write edit bash
Estrellas
34.8k

en todo el repo

Actividad
60

0–100, la ruta de este skill

Actualizado
el mes pasado

último commit aquí

Commits
5

últimos 90 días

Contexto
3k tok

42 tok en reposo

Paquete
6 archivos

54 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add K-Dense-AI/scientific-agent-skills --skill pydeseq2 --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Ejecuta el flujo completo de PyDESeq2: carga de datos, ajuste del modelo, tests de Wald y exportación de resultados.
  • Soporta diseños formulaicos de un factor o multifactor, incluyendo efectos de batch y covariables.
  • Aplica corrección de pruebas múltiples (FDR) y shrinkage opcional de log fold change (apeGLM) para ranking y visualización.
  • Incluye un script de línea de comandos (`scripts/run_deseq2_analysis.py`) para análisis estándar.

Úsalo cuando

  • Analizar datos de conteo de RNA-seq bulk para expresión diferencial.
  • Comparar expresión génica entre condiciones experimentales (por ejemplo, tratado vs control).
  • Realizar diseños multifactor con efectos de batch o covariables.
  • Convertir un flujo de trabajo de DESeq2 en R a Python.

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Analiza la expresión diferencial de este RNA-seq con PyDESeq2
    • Compara la expresión génica entre tratado y control
    • Convierte este pipeline de DESeq2 en R a PyDESeq2
    • Aplica shrinkage de LFC para visualizar estos resultados

    SKILL.md

    En inglés

    PyDESeq2

    Overview

    PyDESeq2 is a Python implementation of DESeq2 for differential expression analysis with bulk RNA-seq data. Design and execute complete workflows from data loading through result interpretation, including formulaic single-factor and multi-factor designs, Wald tests with multiple testing correction, optional apeGLM shrinkage, and integration with pandas and AnnData.

    When to Use This Skill

    This skill should be used when:

    • Analyzing bulk RNA-seq count data for differential expression
    • Comparing gene expression between experimental conditions (e.g., treated vs control)
    • Performing multi-factor designs accounting for batch effects or covariates
    • Converting R-based DESeq2 workflows to Python
    • Integrating differential expression analysis into Python-based pipelines
    • Users mention "DESeq2", "differential expression", "RNA-seq analysis", or "PyDESeq2"

    Quick Start Workflow

    For users who want to perform a standard differential expression analysis:

    import pandas as pd
    from pydeseq2.dds import DeseqDataSet
    from pydeseq2.default_inference import DefaultInference
    from pydeseq2.ds import DeseqStats
    
    # 1. Load data
    counts_df = pd.read_csv("counts.csv", index_col=0).T  # Transpose to samples × genes
    metadata = pd.read_csv("metadata.csv", index_col=0)
    
    # 2. Filter low-count genes
    genes_to_keep = counts_df.columns[counts_df.sum(axis=0) >= 10]
    counts_df = counts_df[genes_to_keep]
    
    # 3. Make the reference level explicit and fit DESeq2
    metadata["condition"] = pd.Categorical(
        metadata["condition"], categories=["control", "treated"]
    )
    inference = DefaultInference(n_cpus=4)
    dds = DeseqDataSet(
        counts=counts_df,
        metadata=metadata,
        design="~condition",
        refit_cooks=True,
        inference=inference,
    )
    dds.deseq2()
    
    # 4. Perform statistical testing
    ds = DeseqStats(
        dds,
        contrast=["condition", "treated", "control"],
        inference=inference,
    )
    ds.summary()
    
    # 5. Access results
    results = ds.results_df
    significant = results[results.padj < 0.05]
    print(f"Found {len(significant)} significant genes")
    

    Core Workflow Steps

    The six steps, with code, are in references/core_workflow_steps.md:

    1. Data preparation — raw integer counts with genes as columns and samples as rows, and matching metadata. Never feed normalized or transformed values to DESeq2.
    2. Design specification — the design factors and the reference level for each.
    3. DESeq2 fitting — size factors, dispersions, and the GLM fit.
    4. Statistical testing — Wald tests for a named contrast.
    5. Optional LFC shrinkage — for ranking and visualization.
    6. Result export — the results table with adjusted p-values.

    Multi-factor designs, contrasts, and interaction terms are in references/analysis_patterns.md.

    Using the Analysis Script

    This skill includes a complete command-line script for standard analyses:

    # Basic usage
    python scripts/run_deseq2_analysis.py \
      --counts counts.csv \
      --metadata metadata.csv \
      --design "~condition" \
      --contrast condition treated control \
      --output results/
    
    # With additional options
    python scripts/run_deseq2_analysis.py \
      --counts counts.csv \
      --metadata metadata.csv \
      --design "~batch + condition" \
      --contrast condition treated control \
      --output results/ \
      --min-counts 10 \
      --alpha 0.05 \
      --n-cpus 4 \
      --shrink-coeff "condition[T.treated]" \
      --plots
    

    Script features:

    • Automatic data loading and validation
    • Gene and sample filtering
    • Complete DESeq2 pipeline execution
    • Statistical testing with customizable parameters
    • Result export (CSV and portable AnnData/H5AD)
    • Explicit LFC shrinkage coefficient support for PyDESeq2 0.5.x
    • Optional visualization (volcano and MA plots)

    Refer users to scripts/run_deseq2_analysis.py when they need a standalone analysis tool or want to batch process multiple datasets.

    Result Interpretation

    Identifying Significant Genes

    # Filter by adjusted p-value
    significant = ds.results_df[ds.results_df.padj < 0.05]
    
    # Filter by both significance and effect size
    sig_and_large = ds.results_df[
        (ds.results_df.padj < 0.05) &
        (abs(ds.results_df.log2FoldChange) > 1)
    ]
    
    # Separate up- and down-regulated
    upregulated = significant[significant.log2FoldChange > 0]
    downregulated = significant[significant.log2FoldChange < 0]
    
    print(f"Upregulated: {len(upregulated)}")
    print(f"Downregulated: {len(downregulated)}")
    

    Ranking and Sorting

    # Sort by adjusted p-value
    top_by_padj = ds.results_df.sort_values("padj").head(20)
    
    # Sort by absolute fold change (use shrunk values)
    ds.lfc_shrink(coeff="condition[T.treated]")
    ds.results_df["abs_lfc"] = abs(ds.results_df.log2FoldChange)
    top_by_lfc = ds.results_df.sort_values("abs_lfc", ascending=False).head(20)
    
    # Sort by a combined metric
    ds.results_df["score"] = -np.log10(ds.results_df.padj) * abs(ds.results_df.log2FoldChange)
    top_combined = ds.results_df.sort_values("score", ascending=False).head(20)
    

    Quality Metrics

    # Check normalization (size factors should be close to 1)
    print("Size factors:", dds.obs["size_factors"])
    
    # Examine dispersion estimates
    import matplotlib.pyplot as plt
    plt.hist(dds.var["dispersions"], bins=50)
    plt.xlabel("Dispersion")
    plt.ylabel("Frequency")
    plt.title("Dispersion Distribution")
    plt.show()
    
    # Check p-value distribution (should be mostly flat with peak near 0)
    plt.hist(ds.results_df.pvalue.dropna(), bins=50)
    plt.xlabel("P-value")
    plt.ylabel("Frequency")
    plt.title("P-value Distribution")
    plt.show()
    

    Visualization Guidelines

    Volcano Plot

    Visualize significance vs effect size:

    import matplotlib.pyplot as plt
    import numpy as np
    
    results = ds.results_df.copy()
    results["-log10(padj)"] = -np.log10(results.padj)
    
    plt.figure(figsize=(10, 6))
    significant = results.padj < 0.05
    
    plt.scatter(
        results.loc[~significant, "log2FoldChange"],
        results.loc[~significant, "-log10(padj)"],
        alpha=0.3, s=10, c='gray', label='Not significant'
    )
    plt.scatter(
        results.loc[significant, "log2FoldChange"],
        results.loc[significant, "-log10(padj)"],
        alpha=0.6, s=10, c='red', label='padj < 0.05'
    )
    
    plt.axhline(-np.log10(0.05), color='blue', linestyle='--', alpha=0.5)
    plt.xlabel("Log2 Fold Change")
    plt.ylabel("-Log10(Adjusted P-value)")
    plt.title("Volcano Plot")
    plt.legend()
    plt.savefig("volcano_plot.png", dpi=300)
    

    MA Plot

    Show fold change vs mean expression:

    plt.figure(figsize=(10, 6))
    
    plt.scatter(
        np.log10(results.loc[~significant, "baseMean"] + 1),
        results.loc[~significant, "log2FoldChange"],
        alpha=0.3, s=10, c='gray'
    )
    plt.scatter(
        np.log10(results.loc[significant, "baseMean"] + 1),
        results.loc[significant, "log2FoldChange"],
        alpha=0.6, s=10, c='red'
    )
    
    plt.axhline(0, color='blue', linestyle='--', alpha=0.5)
    plt.xlabel("Log10(Base Mean + 1)")
    plt.ylabel("Log2 Fold Change")
    plt.title("MA Plot")
    plt.savefig("ma_plot.png", dpi=300)
    

    Troubleshooting Common Issues

    Data Format Problems

    Issue: "Index mismatch between counts and metadata"

    Solution: Ensure sample names match exactly

    print("Counts samples:", counts_df.index.tolist())
    print("Metadata samples:", metadata.index.tolist())
    
    # Take intersection if needed
    common = counts_df.index.intersection(metadata.index)
    counts_df = counts_df.loc[common]
    metadata = metadata.loc[common]
    

    Issue: "All genes have zero counts"

    Solution: Check if data needs transposition

    print(f"Counts shape: {counts_df.shape}")
    # If genes > samples, transpose is needed
    if counts_df.shape[1] < counts_df.shape[0]:
        counts_df = counts_df.T
    

    Design Matrix Issues

    Issue: "Design matrix is not full rank"

    Cause: Confounded variables (e.g., all treated samples in one batch)

    Solution: Remove confounded variable or add interaction term

    # Check confounding
    print(pd.crosstab(metadata.condition, metadata.batch))
    
    # Either simplify design or add interaction
    design = "~condition"  # Remove batch
    # OR
    design = "~condition + batch + condition:batch"  # Model interaction
    

    No Significant Genes

    Diagnostics:

    # Check dispersion distribution
    plt.hist(dds.var["dispersions"], bins=50)
    plt.show()
    
    # Check size factors
    print(dds.obs["size_factors"])
    
    # Look at top genes by raw p-value
    print(ds.results_df.nsmallest(20, "pvalue"))
    

    Possible causes:

    • Small effect sizes
    • High biological variability
    • Insufficient sample size
    • Technical issues (batch effects, outliers)

    Reference Documentation

    For comprehensive details beyond this workflow-oriented guide:

    • API Reference (references/api_reference.md): Complete documentation of PyDESeq2 classes, methods, and data structures. Use when needing detailed parameter information or understanding object attributes.

    • Workflow Guide (references/workflow_guide.md): In-depth guide covering complete analysis workflows, data loading patterns, multi-factor designs, troubleshooting, and best practices. Use when handling complex experimental designs or encountering issues.

    Load these references into context when users need:

    • Detailed API documentation: Read references/api_reference.md
    • Comprehensive workflow examples: Read references/workflow_guide.md
    • Troubleshooting guidance: Read references/workflow_guide.md (see Troubleshooting section)

    Key Reminders

    1. Data orientation matters: Count matrices typically load as genes × samples but need to be samples × genes. Always transpose with .T if needed.

    2. Sample filtering: Remove samples with missing metadata before analysis to avoid errors.

    3. Gene filtering: Filter low-count genes (e.g., < 10 total reads) to improve power and reduce computational time.

    4. Design formula order: Put adjustment variables before the variable of interest (e.g., "~batch + condition" not "~condition + batch").

    5. LFC shrinkage timing: Apply shrinkage after statistical testing and only for visualization/ranking purposes. P-values remain based on unshrunken estimates.

    6. Result interpretation: Use padj < 0.05 for significance, not raw p-values. The Benjamini-Hochberg procedure controls false discovery rate.

    7. Contrast specification: The format is [variable, test_level, reference_level] where test_level is compared against reference_level.

    8. Save intermediate objects: Prefer dds.to_picklable_anndata().write_h5ad("dds_result.h5ad") for portable outputs. Only load pickle files that you created yourself and trust.

    Installation and Requirements

    uv pip install pydeseq2==0.5.4
    

    System requirements:

    • Python 3.11+
    • PyDESeq2 0.5.4
    • pandas 2.2.0+
    • numpy 2.0.0+
    • scipy 1.12.0+
    • scikit-learn 1.4.0+
    • anndata 0.11.0+
    • formulaic 1.0.2+ and formulaic-contrasts 0.2.0+

    Optional for visualization:

    • matplotlib
    • seaborn

    Additional Resources

    Reproducido de K-Dense-AI/scientific-agent-skills bajo licencia MIT license. Leer esta página en markdown.

    Archivos

    6 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere Python >=3.11 y dependencias compatibles con PyDESeq2 0.5.4.

    Necesita en el PATH:python

    Detalles

    Creador
    K-Dense-AI
    Categoría
    Investigación
    Licencia
    MIT license
    Recursos incluidos
    scripts en python + referencias
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de K-Dense-AI/scientific-agent-skills

    Este repo incluye 163 skills. Si instalas uno, normalmente ya tienes los demás.

    Gestión integral de citas académicas: busca en OpenAlex, PubMed y Google Scholar, extrae metadatos precisos, valida citas y genera entradas BibTeX correctamente formateadas.

    Costo de contexto al activarse
    3.7k tok
    Tamaño del paquete
    21 archivos
    Última actualización
    hace 28 días
    investigacion

    Realiza revisiones bibliográficas sistemáticas y completas usando varias bases académicas (PubMed, arXiv, bioRxiv, Semantic Scholar). Genera markdown y PDF con citas verificadas en varios estilos (APA, Nature, Vancouver).

    Costo de contexto al activarse
    3.2k tok
    Tamaño del paquete
    12 archivos
    Última actualización
    hace 15 días
    investigacion

    Crea decks de diapositivas y presentaciones para charlas de investigación: PowerPoint, presentaciones de conferencia, seminarios, defensas de tesis. Da estructura, plantillas, guía de tiempos y validación visual.

    Costo de contexto al activarse
    5.1k tok
    Tamaño del paquete
    24 archivos
    Última actualización
    hace 15 días
    documentos

    Crea infografías profesionales con Nano Banana Pro AI y refinamiento iterativo inteligente. Usa Gemini 3.6 Flash para revisar la calidad e integra investigación con Perplexity Sonar. Soporta 10 tipos, 8 estilos y paletas para daltonismo.

    Costo de contexto al activarse
    2.7k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 15 días
    diseno ui

    Crea pósteres de investigación profesionales en LaTeX con beamerposter, tikzposter o baposter, para conferencias y comunicación científica: layout, colores, columnas múltiples e integración de figuras.

    Costo de contexto al activarse
    3.9k tok
    Tamaño del paquete
    17 archivos
    Última actualización
    hace 15 días
    documentos

    Crea diagramas científicos de calidad de publicación con la IA Nano Banana 2 y refinamiento iterativo inteligente. Gemini 3.6 Flash revisa la calidad y solo regenera si está por debajo del umbral de tu tipo de documento.

    Costo de contexto al activarse
    4.1k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 15 días
    diseno ui

    Skills relacionados

    Astropy

    34.8k

    Librería Python central para astronomía y astrofísica: unidades/cantidades, coordenadas, E/S de FITS, tablas, sistemas de tiempo, WCS y cosmología, para implementar o depurar código con Astropy.

    Costo de contexto al activarse
    3.6k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    el mes pasado
    investigacion

    Integración con el SDK de Python de Benchling y su API REST para entidades del registro, inventario, entradas del cuaderno electrónico (ELN), workflows, Benchling Apps y consultas al Data Warehouse.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    el mes pasado
    investigacion

    Busca papers científicos y obtiene datos experimentales estructurados extraídos de estudios a texto completo vía el servidor MCP de BGPT: más de 25 campos por paper (métodos, resultados, muestras, calidad, conclusiones).

    Costo de contexto al activarse
    713 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    investigacion