Skip to content
Back to skills

Cibersort Immune Infiltration Analysis

ASecurity

Use when estimating relative immune cell infiltration from a bulk expression matrix with a CIBERSORT-style nu-SVR deconvolution workflow based on an LM22 signature matrix, comparing one case group against one control group, and generating structured tables plus immune-fraction plots. NOT for single-cell RNA-seq, spatial data, clinical diagnosis, or workflows that require the original hosted CIBERSORT web service.

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

Works with

  • cli

Security analysis

A100/100

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

Scanned June 6, 2026

npx -y skills add aipoch/medical-research-skills --skill cibersort-immune-infiltration-analysis --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cibersort Immune Infiltration Analysis?

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

Security grade badge for Cibersort Immune Infiltration Analysis
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aipoch-cibersort-immune-infiltration-analysis/badge)](https://www.skillsdirectory.com/skills/aipoch-cibersort-immune-infiltration-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: cibersort-immune-infiltration-analysis
description: Use when estimating relative immune cell infiltration from a bulk expression matrix with a CIBERSORT-style nu-SVR deconvolution workflow based on an LM22 signature matrix, comparing one case group against one control group, and generating structured tables plus immune-fraction plots. NOT for single-cell RNA-seq, spatial data, clinical diagnosis, or workflows that require the original hosted CIBERSORT web service.
license: MIT
author: AIPOCH
---
> **Source**: [https://github.com/aipoch/medical-research-skills](https://github.com/aipoch/medical-research-skills)

# CIBERSORT Immune Infiltration Analysis

## When to Use

- Estimate relative immune cell fractions from a bulk expression matrix.
- Compare one case group against one control group after deconvolution.
- Generate structured tables, a serialized result object, and optional PDF plots.

## When Not to Use

- Single-cell RNA-seq, spatial transcriptomics, or clustering tasks.
- Absolute clinical interpretation or treatment recommendation.
- Workflows that require the original online CIBERSORT service instead of a local R implementation.

## Workflow

1. Confirm that the expression matrix, group file, and signature matrix are available.
2. Run `scripts/main.R` with the case and control groups.
3. Review the full result table, derived summary tables, and optional plots.
4. Inspect `run_record.txt` and `output_manifest.txt` after each run, including failed validation attempts.

## When to Read External Files

| Situation | File to Read | Purpose |
|-----------|--------------|---------|
| Need to run the analysis | `scripts/main.R` | CLI entry point |
| Need algorithm details | `references/algorithm.md` | HQ reference workflow and result interpretation |
| Encounter an error | `references/troubleshooting.md` | Error codes and environment fixes |
| Need CLI examples or the baseline record | `references/cli-guide.md` | Example commands and validation notes |
| Need packaged test inputs | `tests/data/` | Demo expression matrix, group file, and LM22 file |

## Usage

```bash
Rscript scripts/main.R \
  --input_file ./expression_matrix.csv \
  --group_file ./group_info.csv \
  --signature_file ./LM22.txt \
  --case_group treatment \
  --control_group control \
  --output_dir ./output \
  --qn false \
  --seed 42
```

## Arguments

| Short | Long | Type | Default | Description |
|-------|------|------|---------|-------------|
| `-i` | `--input_file` | file | required | Expression matrix with genes as rows and samples as columns |
| `-g` | `--group_file` | file | required | Group annotation table |
| `-a` | `--case_group` | string | required | Case group label |
| `-b` | `--control_group` | string | required | Control group label |
| `-o` | `--output_dir` | dir | `./output` | Output directory |
|  | `--signature_file` | file | `tests/data/LM22.txt` when present | Signature matrix file |
|  | `--sample_col` | string/int | none | Optional sample column name or 1-based index |
|  | `--group_col` | string/int | none | Optional group column name or 1-based index |
|  | `--gene_id_case` | string | `upper` | Gene ID normalization: `asis`, `upper`, or `lower` |
|  | `--auto_unlog` | boolean | `true` | Apply `2^x` only if the expression matrix passes a conservative log-scale heuristic |
|  | `--min_mean_expression` | numeric | `1` | Minimum mean expression before deconvolution |
|  | `--perm` | integer | `1000` | Permutation count for empirical p-value estimation; `0` keeps the run lightweight but records `P-value` as `NA` |
|  | `--qn` | boolean | `true` | Apply quantile normalization to the mixture matrix |
|  | `--svm_cores` | integer | `1` | Worker count for the nu-SVR model selection step |
|  | `--make_plots` | boolean | `true` | Generate PDF plots |
|  | `--plot_width` | numeric | `16` | Default plot width in inches |
|  | `--plot_height` | numeric | `10` | Default plot height in inches |
| `-s` | `--seed` | integer | `42` | Random seed |
| `-t` | `--timeout_seconds` | integer | `0` | Optional timeout in seconds; `0` disables it |
|  | `--verbose` | boolean | `true` | Print progress logs |

## Input Format

### Expression Matrix

CSV or TSV. The first column must contain gene identifiers. Remaining columns must be numeric sample-level expression values.

When `--auto_unlog=true`, the workflow reports summary statistics and applies `2^x` only if the matrix passes a conservative log-scale heuristic. If the matrix is ambiguous, the values are left unchanged and the startup log explains why.

If duplicate gene identifiers are present, they are consolidated after gene-ID normalization by taking the per-sample maximum before downstream filtering and deconvolution.

```csv
gene,Sample1,Sample2,Sample3
TP53,10.2,8.5,9.1
CXCL9,4.3,6.1,5.7
```

### Group File

CSV or TSV with one sample column and one group column.

```csv
sample,group
Sample1,control
Sample2,treatment
Sample3,treatment
```

### Signature Matrix

The packaged default is `tests/data/LM22.txt`. A custom signature matrix must contain one gene column followed by immune-cell signature columns.

All immune-cell signature columns must be numeric and finite. If duplicate gene identifiers are present, they are consolidated by taking the per-cell-type maximum before gene intersection.

## Output Files

| File | Description |
|------|-------------|
| `data/cibersort_input.rds` | Serialized aligned input matrices used by the local algorithm |
| `data/cibersort_null_distribution.rds` | Serialized permutation null distribution |
| `data/cibersort_result.rds` | Serialized result object with cell fractions, metrics, runtime settings, and heatmap rendering metadata |
| `table/CIBERSORT_Results.csv` | Full result table in CSV format |
| `table/CIBERSORT-Results.txt` | Full result table in tab-delimited text format |
| `table/cibersort_cell_fractions_wide.csv` | Wide-format immune cell fraction table |
| `table/cibersort_cell_fractions_long.csv` | Long-format immune cell fraction table |
| `table/cibersort_group_compare.csv` | Case-vs-control comparison summary |
| `table/cibersort_quality_metrics.csv` | Sample-level `P-value`, `Correlation`, and `RMSE` table |
| `table/immune_cell_correlation_matrix.csv` | Spearman correlation matrix across immune cell types |
| `table/immune_cell_correlation_pvalue.csv` | P-value matrix aligned to the correlation matrix |
| `plot/immune_cell_composition_sample.pdf` | Sample-level stacked composition plot when `--make_plots=true` |
| `plot/immune_group_boxplot.pdf` | Group comparison boxplot when `--make_plots=true` |
| `plot/immune_correlation_heatmap.pdf` | Immune-cell correlation heatmap when `--make_plots=true` |
| `session_info.txt` | R session information |
| `output_manifest.txt` | Append-only output manifest for successful and failed runs |
| `run_record.txt` | Append-only structured run record, including runtime notes and failed-run summaries |

When `--make_plots=false`, the `plot/` directory may still exist as part of the standard output layout, but no PDF plot files are written.

When `--perm=0`, the workflow logs a warning and completes without empirical permutation testing, so the `P-value` column is recorded as `NA`.

When a rerun targets an existing `--output_dir` and then fails validation or execution, the previous successful payload is preserved and the failure is appended to `run_record.txt` and `output_manifest.txt`.

## Error Handling

| Error Code | Meaning | Solution |
|------------|---------|----------|
| `SKILL_FILE_NOT_FOUND` | An input file or signature matrix was not found | Check the file path and rerun |
| `SKILL_MISSING_COLUMNS` | A required column is missing | Fix the input schema |
| `SKILL_EMPTY_DATA` | No usable genes, samples, or deconvolution outputs remain | Check the data, filtering, or signature overlap |
| `SKILL_INVALID_PARAMETER` | A CLI parameter is missing or invalid | Review the argument table and input values |
| `SKILL_SAMPLE_MISMATCH` | Expression samples and group annotations do not align | Harmonize sample identifiers |
| `SKILL_PACKAGE_NOT_FOUND` | A required R package is missing | Install the missing package |
| `SKILL_TIMEOUT` | The configured time limit was exceeded | Increase `--timeout_seconds` or set it to `0` |

If the error persists, READ: `references/troubleshooting.md`

## Input Validation

This skill accepts:

- A bulk expression matrix file in CSV or TSV format with one gene column and numeric sample columns.
- A group annotation file in CSV or TSV format with one sample column and one group column.
- Exactly one case group label and one control group label for comparison.
- An optional custom signature matrix compatible with the documented LM22-style schema.

Do not use this skill for:

- Single-cell RNA-seq, spatial transcriptomics, or cell clustering workflows.
- Clinical diagnosis, treatment recommendation, or patient-level medical decision making.
- Requests that need the hosted CIBERSORT web service rather than this local R implementation.
- Multi-group study designs that require more than one case group versus one control group in a single run.

If the user's request is outside this scope, do not proceed with the workflow. Instead respond:

> "cibersort-immune-infiltration-analysis is designed for local CIBERSORT-style immune deconvolution from a bulk expression matrix with one case group and one control group. Your request appears to be outside this scope. Please provide compatible bulk-expression inputs and group labels, or use a more appropriate tool for your task."

## Testing

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

Rscript tests/run_tests.R

Rscript tests/test_skill.R
```

Validated packaged test path:

```bash
Rscript scripts/main.R \
  --input_file tests/data/expression_matrix.csv \
  --group_file tests/data/group_info.csv \
  --signature_file tests/data/LM22.txt \
  --case_group Tumor \
  --control_group Healthy \
  --output_dir tests/output \
  --perm 25 \
  --qn false \
  --svm_cores 1 \
  --seed 42
```

Container note:

- The packaged test path uses `--qn false` because `preprocessCore::normalize.quantiles()` may trigger environment-level thread failures in some containers.
- If you need a quantile-normalized run, validate that environment first and record the result in `references/cli-guide.md`.
- `tests/run_tests.R` also checks that a failed rerun does not erase an existing successful payload directory.

Files in this skill

  • SKILL.md10.2 KB
  • eval_report_cibersort-immune-infiltration-analysis_result.json18.9 KB
  • references/algorithm.md3.7 KB
  • references/cli-guide.md7.8 KB
  • references/troubleshooting.md5 KB
  • scripts/cli_options.R3.9 KB
  • scripts/deconvolution.R2.7 KB
  • scripts/functions.R4.6 KB
  • scripts/io.R5.9 KB
  • scripts/main.R2.6 KB
  • scripts/recording.R106 B
  • scripts/recording_helpers.R2.2 KB
  • scripts/recording_reports.R5.5 KB
  • scripts/run_analysis.R9.1 KB
  • scripts/utils.R3.1 KB
  • scripts/visualization.R2.6 KB
  • tests/data/expression_matrix.csv39.2 KB
  • tests/data/group_info.csv202 B
  • tests/run_tests.R4.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.