tooluniverse-rnaseq-deseq2

Production-ready RNA-seq differential expression analysis using PyDESeq2. Performs DESeq2 normalization, dispersion estimation, Wald testing, LFC shrinkage, and result filtering. Handles multi-factor designs, multiple contrasts, batch effects, and integrates with gene enrichment (gseapy) and ToolUniverse annotation tools (UniProt, Ensembl, OpenTargets). Supports CSV/TSV/H5AD input formats and any organism. Use when analyzing RNA-seq count matrices, identifying DEGs, performing differential expression with statistical rigor, or answering questions about gene expression changes.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "tooluniverse-rnaseq-deseq2" with this command: npx skills add mims-harvard/tooluniverse/mims-harvard-tooluniverse-tooluniverse-rnaseq-deseq2

RNA-seq Differential Expression Analysis (DESeq2)

Differential expression analysis of RNA-seq count data using PyDESeq2, with enrichment analysis (gseapy) and gene annotation via ToolUniverse.

BixBench Coverage: Validated on 53 BixBench questions across 15 computational biology projects.

Core Principles

  1. Data-first - Load and validate count data and metadata BEFORE any analysis
  2. Statistical rigor - Proper normalization, dispersion estimation, multiple testing correction
  3. Flexible design - Single-factor, multi-factor, and interaction designs
  4. Threshold awareness - Apply user-specified thresholds exactly (padj, log2FC, baseMean)
  5. Reproducible - Set random seeds, document all parameters
  6. Question-driven - Parse what the user is actually asking; extract the specific answer
  7. Enrichment integration - Chain DESeq2 results into pathway/GO enrichment when requested

When to Use

  • RNA-seq count matrices needing differential expression analysis
  • DESeq2, DEGs, padj, log2FC questions
  • Dispersion estimates or diagnostics
  • GO, KEGG, Reactome enrichment on DEGs
  • Specific gene expression changes between conditions
  • Batch effect correction in RNA-seq

Required Packages

import pandas as pd, numpy as np
from pydeseq2.dds import DeseqDataSet
from pydeseq2.ds import DeseqStats
import gseapy as gp          # enrichment (optional)
from tooluniverse import ToolUniverse  # annotation (optional)

Analysis Workflow

Step 1: Parse the Question

Extract: data files, thresholds (padj/log2FC/baseMean), design factors, contrast, direction, enrichment type, specific genes. See question_parsing.md.

Step 2: Load & Validate Data

Load counts + metadata, ensure samples-as-rows/genes-as-columns, verify integer counts, align sample names, remove zero-count genes. See data_loading.md.

Step 2.5: Inspect Metadata (REQUIRED)

List ALL metadata columns and levels. Categorize as biological interest vs batch/block. Build design formula with covariates first, factor of interest last. See design_formula_guide.md.

Step 3: Run PyDESeq2

Set reference level via pd.Categorical, create DeseqDataSet, call dds.deseq2(), extract DeseqStats with contrast, run Wald test, optionally apply LFC shrinkage. See pydeseq2_workflow.md.

Tool boundaries:

  • Python (PyDESeq2): ALL DESeq2 analysis
  • ToolUniverse: ONLY gene annotation (ID conversion, pathway context)
  • gseapy: Enrichment analysis (GO/KEGG/Reactome)

Step 4: Filter Results

Apply padj, log2FC, baseMean thresholds. Split by direction if needed. See result_filtering.md.

Step 5: Dispersion Analysis (if asked)

Key columns: genewise_dispersions, fitted_dispersions, MAP_dispersions, dispersions. See dispersion_analysis.md.

Step 6: Enrichment (optional)

Use gseapy enrich() with appropriate gene set library. See enrichment_analysis.md.

Step 7: Gene Annotation (optional)

Use ToolUniverse for ID conversion and gene context only. See output_formatting.md.

Common Patterns

PatternTypeKey Operation
1DEG countlen(results[(padj<0.05) & (abs(lfc)>0.5)])
2Gene valueresults.loc['GENE', 'log2FoldChange']
3DirectionFilter log2FoldChange > 0 or < 0
4Set opsdegs_A - degs_B for unique DEGs
5Dispersion(dds.var['genewise_dispersions'] < thr).sum()

See bixbench_examples.md for all 10 patterns with examples.

Error Quick Reference

ErrorFix
No matching samplesTranspose counts; strip whitespace
Dispersion trend no convergefit_type='mean'
Contrast not foundCheck metadata['factor'].unique()
Non-integer countsRound to int OR use t-test
NaN in padjIndependent filtering removed genes

See troubleshooting.md for full debugging guide.

Known Limitations

  • PyDESeq2 vs R DESeq2: Numerical differences exist for very low dispersion genes (<1e-05). For exact R reproducibility, use rpy2.
  • gseapy vs R clusterProfiler: Results may differ. See r_clusterprofiler_guide.md.

Reference Files

Utility Scripts

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Research

tooluniverse-literature-deep-research

No summary provided by upstream source.

Repository SourceNeeds Review
Research

tooluniverse-image-analysis

No summary provided by upstream source.

Repository SourceNeeds Review
Research

tooluniverse-disease-research

No summary provided by upstream source.

Repository SourceNeeds Review
Research

tooluniverse-drug-research

No summary provided by upstream source.

Repository SourceNeeds Review
tooluniverse-rnaseq-deseq2 | V50.AI