Skip to content
Back to skills

Consensus Clustering Analysis

ASecurity

Use when identifying stable sample subtypes from bulk expression matrices with ConsensusClusterPlus, including PAC-based model selection and consensus matrix/CDF visualization. NOT for: differential expression analysis, single-cell clustering workflows, or non-expression tables.

  • 1,793 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 6, 2026
datagobashexpressawstestinggit

Works with

  • cli

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned June 6, 2026

npx -y skills add aipoch/medical-research-skills --skill consensus-clustering-analysis --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Consensus Clustering Analysis?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Consensus Clustering Analysis
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aipoch-consensus-clustering-analysis/badge)](https://www.skillsdirectory.com/skills/aipoch-consensus-clustering-analysis)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: consensus-clustering-analysis
description: "Use when identifying stable sample subtypes from bulk expression matrices with ConsensusClusterPlus, including PAC-based model selection and consensus matrix/CDF visualization. NOT for: differential expression analysis, single-cell clustering workflows, or non-expression tables."
license: MIT
author: AIPOCH
---
> **Source**: [https://github.com/aipoch/medical-research-skills](https://github.com/aipoch/medical-research-skills)

# Consensus Clustering Analysis

## When to Use

Use this skill when you need to identify stable sample subtypes from a bulk expression matrix with `ConsensusClusterPlus`, compare candidate clustering settings with PAC, and export consensus matrix/CDF visualizations.

Do not use this skill for differential expression analysis, single-cell clustering, or non-expression tabular data.

## When to Read External Files

| Situation | File to Read | Purpose |
|-----------|--------------|---------|
| **Need algorithm details** | `references/algorithm.md` | Consensus clustering, PAC scoring, and preprocessing assumptions |
| **Need to run analysis** | `scripts/main.R` | Execute: `Rscript scripts/main.R --input_file ... --group_file ...` |
| **Encounter errors** | `references/troubleshooting.md` | Common errors and solutions |
| **Need CLI examples** | `references/cli-guide.md` | Detailed CLI usage examples with verified local runs |

---

## Usage

```bash
Rscript scripts/main.R \
  --input_file ./expression_matrix.csv \
  --group_file ./groups.csv \
  --disease_group case \
  --max_k 4 \
  --output_dir ./output/ \
  --gene_selection highly_variable \
  --top_n 5000 \
  --reps 1000 \
  --p_item 0.8 \
  --p_feature 1.0 \
  --timeout_seconds 3600 \
  --seed 42
```

---

## Arguments

| Short | Long | Type | Default | Description |
|-------|------|------|---------|-------------|
| `-i` | `--input_file` | character | **required** | Expression matrix file (genes as rows, samples as columns) |
| `-g` | `--group_file` | character | **required** | Group information file (sample ID + group columns) |
| `-d` | `--disease_group` | character | `case` | Group label retained for clustering |
| `-k` | `--max_k` | integer | `4` | Maximum cluster count to evaluate |
| `-o` | `--output_dir` | character | `./output/` | Output directory |
| `-m` | `--gene_selection` | character | `highly_variable` | Gene selection mode: `highly_variable` or `custom` |
| `-n` | `--top_n` | integer | `5000` | Number of top variable genes to keep |
| `-l` | `--gene_list` | character | `NULL` | Custom gene list file when `gene_selection=custom` |
| `-c` | `--center_data` | logical | `TRUE` | Median-center each gene before clustering |
| `-r` | `--reps` | integer | `1000` | Consensus resampling repetitions |
|  | `--p_item` | double | `0.8` | Sample resampling proportion |
|  | `--p_feature` | double | `1.0` | Feature resampling proportion |
| `-t` | `--timeout_seconds` | integer | `3600` | Elapsed timeout in seconds |
| `-s` | `--seed` | integer | `42` | Random seed for reproducibility |

---

## Input Format

### Expression Matrix (input_file)

Genes as rows, samples as columns, CSV/TSV/TXT format with gene ID in the first column.

```csv
,Sample01,Sample02,Sample03
TSPAN6,1.8479,1.8318,3.8276
TNMD,0.0349,0.0533,1.3889
```

### Group File (group_file)

Delimited text file with sample ID and group columns.

```csv
sample,group
Sample01,case
Sample02,control
Sample03,case
```

### Gene List (gene_list)

Optional plain text or single-column CSV file with one gene symbol per line.

```csv
TNMD
DPM1
SCYL3
```

---

## Output Files

| File | Description |
|------|-------------|
| `Cluster_res.csv` | PAC summary for each distance/algorithm combination with `is_best` marking the selected model |
| `genes_for_clustering.csv` | Selected genes and gene selection mode |
| `samples_for_clustering.csv` | Samples retained after disease-group filtering |
| `result_<distance>_<algorithm>/` | Method-specific consensus outputs and `PAC_scores.csv` |
| `Consensus Matrix Plot.pdf` | Consensus matrix heatmap for the optimal model |
| `CDF curve Plot.pdf` | CDF curves for the optimal method |
| `session_info.txt` | R session and package version info |

---

## Workflow

### Step 1: Validate Input
- Check file existence
- Detect sample and group columns in the group file
- Validate sample matching between expression matrix and group file

### Step 2: Prepare Clustering Matrix
- Filter samples by the requested disease group
- Select genes using `highly_variable` or `custom`
- Median-center genes if requested

### Step 3: Run Consensus Clustering
- Evaluate supported distance and clustering algorithm combinations
- Compute PAC scores across candidate K values
- Select the optimal model by minimum PAC

### Step 4: Generate Outputs
- Save result tables
- Generate consensus matrix and CDF plots
- Record session information for reproducibility

---

## Methods

### ConsensusClusterPlus
Repeated subsampling is used to estimate cluster stability across candidate K values and clustering settings.

### PAC Score
The proportion of ambiguous clustering is computed as `CDF(0.9) - CDF(0.1)` from lower-triangle consensus values. Lower PAC indicates more stable clustering.

### Gene Selection
- `highly_variable`: rank genes by median absolute deviation
- `custom`: use the intersection of the provided gene list and matrix row names

---

## Examples

### Basic Usage
```bash
Rscript scripts/main.R \
  -i expression_matrix.csv \
  -g groups.csv \
  -d case \
  -k 3 \
  -r 20 \
  -o output/example_basic \
  -t 120
```

### With a Custom Gene List
```bash
Rscript scripts/main.R \
  -i expression_matrix.csv \
  -g groups.csv \
  -d case \
  -m custom \
  -l genes.csv \
  -k 4 \
  -r 20 \
  -o output/example_custom \
  -t 120
```

### Without Median Centering
```bash
Rscript scripts/main.R \
  -i expression_matrix.csv \
  -g groups.csv \
  -d case \
  -c FALSE \
  -k 3 \
  -r 20 \
  -o output/example_rawscale \
  -t 120
```

---

## Error Handling

### Common Errors

| Error | Cause | Solution |
|-------|-------|----------|
| `SKILL_FILE_NOT_FOUND` | Input file does not exist | Check file path and permissions |
| `SKILL_MISSING_COLUMNS` | Group file lacks sample/group columns | Verify column names in the group file |
| `SKILL_SAMPLE_MISMATCH` | Sample names do not match | Ensure group file sample IDs match matrix columns |
| `SKILL_INVALID_PARAMETER` | CLI value is invalid | Check allowed options and numeric ranges |
| `SKILL_INVALID_DATA` | Too few samples/genes remain after filtering | Lower `max_k` or review the input data |
| `SKILL_TIMEOUT` | Run exceeded the configured timeout | Increase `timeout_seconds` or reduce `reps` |
| `SKILL_DEPENDENCY_MISSING` | Required R package is not installed | Install missing packages before rerunning |

**IF error persists**, READ: `references/troubleshooting.md`

---

## Testing

### Smoke Check

```bash
# Check help
Rscript scripts/main.R --help

# Run analysis
Rscript scripts/main.R \
  -i tests/data/expression_matrix.csv \
  -g tests/data/groups.csv \
  -d case \
  -k 3 \
  -r 20 \
  -o output/example_basic \
  -t 120
```

### Validation Commands

```bash
# Inspect selected model
cat output/example_basic/Cluster_res.csv

# Check output plots exist
ls -la output/example_basic
```

---

## Implementation Checklist

- [x] CLI parsing with `optparse`
- [x] `set.seed()` for reproducibility
- [x] `requireNamespace()` dependency checks
- [x] Session info recording
- [x] `data.table::fread()` input reading
- [x] File reading instructions in `SKILL.md`
- [x] Modular script structure (<150 lines per file)
- [x] Test data provided
- [x] Error handling with `SKILL_*` codes
- [x] Scripts in `scripts/` directory
- [x] References in `references/` directory

---

*Last updated: 2026-04-17 | Version: 1.0.0*

Files in this skill

  • DESCRIPTION549 B
  • SKILL.md7.7 KB
  • eval_report_consensus-clustering-analysis_result.json14.5 KB
  • references/algorithm.md2.2 KB
  • references/cli-guide.md11.1 KB
  • references/troubleshooting.md2.9 KB
  • scripts/functions_analysis.R5.6 KB
  • scripts/io_utils.R2 KB
  • scripts/main.R5.1 KB
  • scripts/run_analysis.R5.8 KB
  • scripts/utils.R3.6 KB
  • scripts/visualization.R2.8 KB
  • tests/data/expression_matrix.csv47 KB
  • tests/data/genes.csv267 B
  • tests/data/groups.csv674 B
  • tests/run_tests.R773 B
  • tests/testthat.R889 B
  • tests/testthat/setup.R251 B
  • tests/testthat/test-cli-smoke.R5.5 KB
  • tests/testthat/test-functions.R2.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.