Przejdź do treści
Biblioteka skilli
Nauka i badania · Analiza

pydeseq

/pydeseq

Wykonuje analizę różnicowej ekspresji genów w macierzach zliczeń bulk RNA-seq w Pythonie, w przepływie podobnym do DESeq2: testy Walda, korekta FDR i opcjonalne kurczenie LFC.

Licencja
MIT
Ostatnia zmiana repozytorium
17.09.2026

Ocena i bezpieczeństwo

95/ 100Klasa: dobry
Format20 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
5
Skrypty
1
Komentarze HTML
0
Adresy URL w SKILL.md
2
Przestarzałość

Brak sygnałów. Repozytorium zmienione 17.09.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 1 skrypt w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: scripts/run_deseq2_analysis.py

Co robi i kiedy

Wykonuje analizę różnicowej ekspresji genów w macierzach zliczeń bulk RNA-seq w Pythonie, w przepływie podobnym do DESeq2: testy Walda, korekta FDR i opcjonalne kurczenie LFC.

Oryginalny opis (EN)

Differential gene expression analysis for bulk RNA-seq count matrices using a DESeq2-like workflow in Python; use when you need Wald tests, FDR correction, and optional LFC shrinkage for condition/batch/covariate designs.

Jak działa

  1. When to Use
  2. Key Features
  3. Dependencies
  4. Example Usage
  5. Implementation Details
Sekcje z nagłówków SKILL.md, w oryginale · 213 linii, 767 słów
Podgląd SKILL.md
---
name: pydeseq
description: "Differential gene expression analysis for bulk RNA-seq count matrices using a DESeq2-like workflow in Python; use when you need Wald tests, FDR correction, and optional LFC shrinkage for condition/batch/covariate designs."
license: MIT
author: AIPOCH
---
> **Source**: [https://github.com/aipoch/medical-research-skills](https://github.com/aipoch/medical-research-skills)

## When to Use

Use this skill when you need to run DESeq2-style differential expression in Python, especially in these scenarios:

1. **Case vs control bulk RNA-seq** from a raw integer count matrix (e.g., treated vs control).
2. **Multi-factor designs** to adjust for batch effects or covariates (e.g., `~ batch + condition`, `~ age + condition`).
3. **DESeq2 migration** when converting an R DESeq2 workflow into a Python pipeline.
4. **Pipeline integration** where results must stay in Python objects (pandas/AnnData) for downstream QC, plots, or reporting.
5. **Requests mentioning** “DESeq2”, “differential expression”, “Wald test”, “FDR/padj”, “volcano plot”, “MA plot”, or “PyDESeq2”.

## Key Features

- End-to-end DESeq2-like workflow: normalization (size factors), dispersion estimation/shrinkage, LFC fitting, outlier handling.
- **Wald tests** for differential expression with **Benjamini–Hochberg FDR** (`padj`).
- **Design formulas** in Wilkinson/R-style notation (single-factor and multi-factor).
- **Contrast-based comparisons**: `[variable, test_group, reference_group]`.
- Optional **Cook’s distance** outlier filtering and refitting.
- Optional **LFC shrinkage** (apeGLM-style) for visualization/ranking.
- Works naturally with **pandas** and can interoperate with **AnnData**.

## Dependencies

Minimum environment (as documented in the source material):

- Python **3.10–3.11**
- `pydeseq2` (install via pip/uv)
- `pandas` **>= 1.4.3**
- `numpy` **>= 1.23.0**
- `scipy` **>= 1.11.0**
- `scikit-learn` **>= 1.1.1**
- `anndata` **>= 0.8.0** (optional, for AnnData I/O)

Optional plotting:

- `matplotlib` (recommended)
- `seaborn` (optional)

Installation:

```bash
uv pip install pydeseq2
```

## Example Usage

The following script is a complete, runnable example for a standard treated-vs-control analysis.

```python
import pandas as pd
import numpy as np

from pydeseq2.dds import DeseqDataSet
from pydeseq2.ds import DeseqStats

# -----------------------------
# 1) Load inputs
# -----------------------------
# counts.csv is commonly stored as genes x samples; transpose to samples x genes.
counts_df = pd.read_csv("counts.csv", index_col=0).T
metadata = pd.read_csv("metadata.csv", index_col=0)

# Ensure sample alignment
common = counts_df.index.intersection(metadata.index)
counts_df = counts_df.loc[common]
metadata = metadata.loc[common]

# -----------------------------
# 2) Basic filtering
# -----------------------------
# Remove genes with very low total counts
min_total_counts = 10
genes_to_keep = counts_df.columns[counts_df.sum(axis=0) >= min_total_counts]
counts_df = counts_df[genes_to_keep]

# Drop samples with missing condition
metadata = metadata.dropna(subset=["condition"])
counts_df = counts_df.loc[metadata.index]

# -----------------------------
# 3) Fit DESeq2 model
# -----------------------------
dds = DeseqDataSet(
    counts=counts_df,
    metadata=metadata,
    design="~ condition",
    refit_cooks=True,
    n_cpus=1,
)
dds.deseq2()

# -----------------------------
# 4) Wald test with contrast
# -----------------------------
ds = DeseqStats(
    dds,
    contrast=["condition", "treated", "control"],
    alpha=0.05,
    cooks_filter=True,
    independent_filter=True,
)
ds.summary()

# -----------------------------
# 5) Results + optional shrinkage
# -----------------------------
res = ds.results_df.copy()
sig = res[res["padj"] < 0.05].sort_values("padj")
print(f"Significant genes (padj < 0.05): {len(sig)}")

# Optional: shrink LFC for visualization/ranking (p-values do not change)
ds.lfc_shrink()
res_shrunk = ds.results_df.copy()

# Export
res.to_csv("deseq2_results.csv")
res_shrunk.to_csv("deseq2_results_shrunk_lfc.csv")
sig.to_csv("significant_genes.csv")

# -----------------------------
# 6) Minimal volcano plot (optional)
# -----------------------------
try:
    import matplotlib.pyplot as plt

    plot_df = res.copy()
    plot_df["neglog10_padj"] = -np.log10(plot_df["padj"].clip(lower=1e-300))
    is_sig = plot_df["padj"] < 0.05

    plt.figure(figsize=(9, 5))
    plt.scatter(
        plot_df.loc[~is_sig, "log2FoldChange"],
        plot_df.loc[~is_sig, "neglog10_padj"],
        s=10,
        alpha=0.3,
        c="gray",
        label="Not significant",
    )
    plt.scatter(
        plot_df.loc[is_sig, "log2FoldChange"],
        plot_df.loc[is_sig, "neglog10_padj"],
        s=10,
        alpha=0.6,
        c="red",
        label="padj < 0.05",
    )
    plt.axhline(-np.log10(0.05), linestyle="--", color="blue", alpha=0.5)
    plt.xlabel("Log2 Fold Change")
    plt.ylabel("-Log10(adjusted p-value)")
    plt.title("Volcano Plot")
    plt.legend()
    plt.tight_layout()
    plt.savefig("volcano_plot.png", dpi=300)
except ImportError:
    pass
```

## Implementation Details

### Inputs and orientation

- **Counts matrix** must be **samples × genes** with **non-negative integer** counts.
- Many files are stored as **genes × samples**; transpose with `.T` after loading.

### Design formula (Wilkinson/R-style)

- Use strings like:
  - `~ condition` (single factor)
  - `~ batch + condition` (batch-adjusted)
  - `~ age + condition` (continuous covariate)
  - `~ group + condition + group:condition` (interaction)
- Put **adjustment variables first** (e.g., `~ batch + condition`) so the primary effect is interpreted cleanly.

### What `dds.deseq2()` does (high level)

The fitting pipeline typically includes:

1. **Size factor** estimation (library-size normalization)
2. **Gene-wise dispersion** estimation
3. Dispersion **trend** fitting and **prior** estimation
4. **MAP dispersion** shrinkage
5. **Log2 fold change** fitting under the specified design
6. **Cook’s distance** outlier detection
7. Optional **refitting** after outlier handling (`refit_cooks=True`)

### Statistical testing and multiple testing correction

- `DeseqStats(...).summary()` runs **Wald tests** for the requested coefficient/contrast.
- Output columns commonly include:
  - `baseMean`: mean normalized expression
  - `log2FoldChange`, `lfcSE`, `stat`
  - `pvalue`: raw p-value
  - `padj`: **Benjamini–Hochberg FDR** adjusted p-value
- Use `padj < alpha` (commonly 0.05) for significance.

### Contrast specification

- Format: `contrast=["variable", "test_group", "reference_group"]`
- Example: `["condition", "treated", "control"]` tests treated relative to control.

### LFC shrinkage (optional)

- `ds.lfc_shrink()` applies shrinkage to **log2FoldChange** for more stable ranking/plots.
- Shrinkage is intended for **visualization and prioritization**; statistical significance is still based on the (unshrunken) Wald test p-values.

### Notes on bundled references/scripts

If your repository includes them, use:
- `references/api_reference.md` for parameter/object details.
- `references/workflow_guide.md` for extended workflows and troubleshooting.
- `scripts/run_deseq2_analysis.py` for a CLI-style batch workflow (counts/metadata/design/contrast/output, optional plots).
Pliki w paczce (5)
  • SKILL.md 7 KB
  • pydeseq2_audit_result_v1.json 12 KB
  • references/api_reference.md 7 KB
  • references/workflow_guide.md 13 KB
  • scripts/run_deseq2_analysis.py 12 KB

Wersje

W bazie nie ma innych skilli o nazwie pydeseq.

Migawka bazy z 28.10.2026 · wersja paczki 49ba2564e3fb (skrót SHA-256 całej paczki)

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100pydeseq2
    Wykonuje analizę ekspresji różnicowej bulk RNA-seq w PyDESeq2: walidacja liczników, formuły projektu, kontrasty, testy Walda, korekta FDR, shrinkage LFC i wizualizacja wyników.
  • 100alterlab-pydeseq2
    Wykonuje analizę różnicowej ekspresji genów w bulk RNA-seq z PyDESeq2: normalizacja, dyspersja, testy Walda, korekta FDR oraz wykresy wulkanu i MA.
  • 98pydeseq2-differential-expression
    Analizuje różnicową ekspresję w bulk RNA-seq przez PyDESeq2: normalizacja, modele dwumianu ujemnego, test Walda z korektą BH-FDR, skurczenie LFC oraz wykresy volcano i MA.
  • 95bio-differential-expression-deseq2-basics
    Wykonuje analizę ekspresji różnicowej w bulk RNA-seq przez DESeq2: model ujemny dwumianowy, testy Walda i LRT, kurczenie LFC, filtrowanie niezależne i formuły z parowaniem, batch i interakcjami.
  • 95bio-data-visualization-volcano-and-ma-plots
    Tworzy wykresy wulkanu i MA z wyników ekspresji różnicowej, z kurczeniem LFC, progami FDR, rozsądnym rozmieszczeniem etykiet w EnhancedVolcano, ggplot2 i matplotlib.
  • 100rna-seq-analysis
    Prowadzi analizę bulk RNA-seq: dopasowanie odczytów w STAR, kwantyfikację w Salmon i featureCounts oraz ekspresję różnicową w DESeq2, z wykresami wulkanowymi.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.