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
45.9k

en todo el repo

Actividad
60

0–100, la ruta de este skill

Actualizado
hace 2 meses

ú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. Ver el pack scientific-agent-skills entero y su comando de instalación

    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 2 meses
    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 2 meses
    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 2 meses
    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 2 meses
    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 2 meses
    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 2 meses
    diseno ui

    Skills relacionados

    Astropy

    45.9k

    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
    hace 2 meses
    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
    hace 2 meses
    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
    hace 2 meses
    investigacion