本文へ移動
cccskills
無料GitHub で公開

bio-crispr-screens-copy-number-correction

Corrects the gene-independent copy-number artifact in CRISPR-Cas9 screens (Aguirre 2016 / Munoz 2016 Cancer Discov) where amplified loci appear essential from DNA-damage burden of simultaneous cuts. Covers the gene-independent DNA-damage / G2-arrest mechanism, CRISPRcleanR (Iorio 2018) unsupervised pre-hoc correction, CERES (Meyers 2017) joint CN + gene-effect model, Chronos (Dempster 2021) DepMap-standard population-dynamics + CN model with lowest residual bias, the decision tree by data availability, the Spearman LFC-vs-CN diagnostic, focal-amplification examples (ERBB2 in HER2+, MYC in colorectal, FGFR1 in head and neck), and CRISPRi/a alternatives that bypass the artifact. Use when screening cancer cell lines, diagnosing essentiality at amplified loci, choosing CRISPRcleanR / CERES / Chronos, deciding whether CN correction is needed before MAGeCK / BAGEL2 / drugZ, or switching from Cas9 to CRISPRi.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md18.2 KB
  • examples/run_crispr_cleanr.R2.6 KB
  • usage-guide.md7.1 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Version Compatibility

Reference examples tested with: CRISPRcleanR 3.0+ (R; github.com/francescojm/CRISPRcleanR), Chronos 2.0+ (https://github.com/broadinstitute/chronos), CERES (legacy, superseded by Chronos), pandas 2.2+, numpy 1.26+, scipy 1.12+.

Before using code patterns, verify installed versions match. If versions differ:

  • R: packageVersion('CRISPRcleanR'); ?ccr.GWclean
  • Python: pip show crispr_chronos; python -c 'import chronos; print(chronos.__file__)'

If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.

Copy-Number Bias Correction in CRISPR Screens

"Correct copy-number artifacts in my cancer-cell-line screen" -> Identify gene-independent depletion at amplified loci, apply CRISPRcleanR (pre-hoc, unsupervised, position-based) or Chronos (joint model, supervised with CN profile) to remove the artifact, then proceed to hit calling on corrected data.

  • R: CRISPRcleanR::ccr.GWclean() for unsupervised pre-hoc correction (no CN profile required)
  • Python: Chronos (crispr_chronos) for joint cell-population dynamics + CN modeling
  • Python: CERES (legacy, superseded by Chronos)

The Copy-Number Artifact (Mechanism)

Aguirre AJ et al 2016 Cancer Discov 6:914 and Munoz DM et al 2016 Cancer Discov 6:900 demonstrated that focal amplification regions in cancer cell lines appear systematically "essential" in CRISPR-Cas9 screens, independent of the gene's actual biology. The mechanism:

  1. A focal amplification creates 4-50+ copies of a genomic region.
  2. Each sgRNA targeting a gene in that region cuts at all copies simultaneously.
  3. Multiple cuts trigger a DNA-damage response and G2 arrest, in both TP53-mutant and TP53-wild-type lines but with larger magnitude in wild-type (Aguirre 2016).
  4. Cells arrest in G2 phase; the sgRNA appears depleted because its bearer cells don't proliferate.
  5. The depletion is proportional to the number of simultaneous cuts, not the gene's essentiality.

Consequence: ERBB2 appears essential in HER2-amplified SK-BR-3. MYC appears essential in MYC-amplified colorectal lines (10+ copies). FGFR1 appears essential in FGFR1-amplified head-and-neck lines. These are all false positives.

Affects: All Cas9-KO screens in cancer cell lines. Universal, not conditional. Cannot be remediated by sequencing depth, library size, or replicate count. Requires explicit correction.

The p53-dependence of Cas9-cut toxicity in general was characterized later, by Haapaniemi 2018 and Ihry 2018.

Bypassed by:

  • CRISPRi (catalytically dead Cas9, no DNA damage) -> no artifact
  • CRISPRa (catalytically dead Cas9) -> no artifact
  • Base editing (single-strand nick + deaminase) -> reduced artifact
  • Prime editing (nick + RT) -> reduced artifact

Correction Method Decision Tree

Available dataRecommended methodWhy
Cell-line panel without matched CN profileCRISPRcleanRUnsupervised; uses genomic position only
Single cell line with matched WGS/SNP-array CNCRISPRcleanR or ChronosEither works; Chronos more rigorous
DepMap-scale (1000+ cell lines, longitudinal)ChronosPopulation-dynamics + screen quality + CN; DepMap quarterly standard
Single cell line, multi-timepointChronosLeverages longitudinal counts
Need to integrate with downstream MAGeCKCRISPRcleanR (pre-hoc)Outputs corrected counts for any downstream tool
Multiple cell lines + multiple batchesChronosJoint modeling of all dimensions

CRISPRcleanR (Iorio 2018) - Unsupervised Pre-Hoc

Goal: Correct copy-number bias without requiring matched CN profile by detecting position-based systematic enrichment / depletion patterns.

Approach: Order sgRNAs by chromosomal coordinate; detect segments where sgRNAs show systematic depletion (or enrichment) inconsistent with single-gene biology; shift these segments toward the global mean. The intuition: focal amplifications create depletion bands extending tens to hundreds of kb; non-amplified essential genes are punctate.

library(CRISPRcleanR)

# Load library annotation (sgRNA -> chromosomal coordinates)
data(KY_Library_v1.0)   # KY library; replace with your library annotation
# OR use ccr.PrepareAnnotations() to make custom

# Load count data with first 2 cols: sgRNA, gene, then sample counts
counts <- read.table('counts.txt', header=TRUE, sep='\t')

# 1. Normalize and compute logFC
norm_counts <- ccr.NormfoldChanges(filename='counts.txt', min_reads=30,
                                     EXPname='my_screen',
                                     libraryAnnotation=KY_Library_v1.0)

# 2. Compute genome-sorted sgRNA fold changes
gw_log_fc <- ccr.logFCs2chromPos(norm_counts$logFCs,
                                   KY_Library_v1.0)

# 3. Apply CRISPRcleanR correction
corrected <- ccr.GWclean(gw_log_fc, display=TRUE, label='my_screen')
# Output: corrected$corrected_logFCs and corrected$segments
# corrected_logFCs can replace LFCs downstream

# 4. Re-derive corrected counts for downstream MAGeCK
corrected_counts <- ccr.correctCounts('my_screen',
                                        norm_counts$norm_counts,
                                        corrected,
                                        KY_Library_v1.0,
                                        OutDir='./')

Key parameter: min_reads=30 is the lower-count threshold for inclusion. This must match the library-coverage strategy; too high removes legitimate guides, too low keeps noisy guides.

Output: Pre-corrected LFCs and counts that can be fed into MAGeCK / BAGEL2 / drugZ as if they were the original screen data. The correction is independent of CN profile (unsupervised) and works on cell lines without matched WGS.

Chronos (Dempster 2021) - Joint Population-Dynamics + CN Model

Goal: Estimate gene fitness while jointly accounting for copy-number-driven depletion, screen quality, and longitudinal cell-population dynamics.

Approach: Model the cell population over time as an ODE driven by per-gene fitness effects; add a separate term for copy-number-driven depletion; estimate all parameters via maximum-likelihood with regularization. Outputs a "gene effect score" normalized against the empirical distributions of essential and non-essential reference genes.

# Chronos (pip install crispr_chronos, or pip install git+https://github.com/broadinstitute/chronos)
import chronos
from chronos.hit_calling import get_probability_dependent

# Inputs
# 1. Counts: rows = sgRNA, columns = samples (per-timepoint per-cell-line)
# 2. Sequence map: sgRNA -> cell line -> sample timepoint
# 3. Guide-gene map
# 4. Copy-number profile per cell line (applied AFTER training, not at construction)

# All three inputs are dicts of DataFrame keyed by library name, not bare DataFrames.
model = chronos.Chronos(
    sequence_map={'screen': sequence_map},
    guide_gene_map={'screen': guide_gene_map},
    readcounts={'screen': counts_df},
)
model.train(nepochs=301)
gene_effects = model.gene_effect                      # attribute, not a method call

# Copy-number correction is a separate post-hoc step, not a constructor argument
gene_effects_cn = chronos.alternate_CN(gene_effects, copy_number_df)
gene_probabilities = get_probability_dependent(gene_effects_cn, negative_control_genes, positive_control_genes)

DepMap convention: A gene-effect score <-1 corresponds to "essential" in that cell line; <-0.5 is "depleting." Each DepMap release (quarterly) provides Chronos gene effects and probabilities.

Critical: Chronos benefits most from longitudinal data (multiple timepoints per cell line) but can run with multiple cell lines at a single timepoint. Copy number is optional: Chronos trains without it and alternate_CN applies the correction afterwards. For a single screen (one line, one timepoint) without a matched CN profile, use CRISPRcleanR instead.

CERES (Legacy, Superseded by Chronos)

Meyers RM et al 2017 Nat Genet 49:1779 introduced the first formal CN-correction method at DepMap scale. CERES decomposes per-sgRNA LFC as sgRNA_efficacy * gene_effect - CN_term(copy_number), fitting jointly. Superseded by Chronos at DepMap in 2021 due to Chronos' better handling of screen quality and longitudinal data. CERES remains useful for cross-validation.

Detect Uncorrected CN Bias

Goal: Verify that copy-number bias is corrected (or detect it in raw data).

Approach: For genes with matched CN profile, compute Spearman ρ between gene-level LFC and copy number. A negative correlation (-ρ) indicates amplified genes are depleted, i.e., CN artifact.

import pandas as pd
from scipy.stats import spearmanr

def detect_cn_bias(gene_lfc_df, cn_df):
    '''Test whether gene-level LFC negatively correlates with copy number.
    A bias-free screen has Spearman rho near zero between CN and LFC.'''
    merged = gene_lfc_df.merge(cn_df, on='gene')
    rho, p = spearmanr(merged['copy_number'], merged['lfc'])
    return {
        'cn_lfc_rho': rho,
        'p_value': p,
        'amplified_mean_lfc': merged[merged['copy_number'] > 4]['lfc'].mean(),
        'diploid_mean_lfc': merged[(merged['copy_number'] >= 1.5) & (merged['copy_number'] <= 2.5)]['lfc'].mean(),
        'bias_present': rho < -0.1 and p < 0.01,
    }

Threshold (operational convention): Spearman ρ <-0.10 between LFC and CN indicates significant CN bias. Even modest amplifications generate detectable artifact. Run this diagnostic before AND after correction.

Reconciliation: When CN Correction Fails

If post-CRISPRcleanR or post-Chronos the CN-LFC Spearman is still significantly negative, the correction is incomplete. Possible causes:

  1. Insufficient CN resolution: A specific 4-copy region went undetected. Refine CN profile with deeper WGS.
  2. CRISPRcleanR position-based correction missed it: The amplification is small relative to the segmentation algorithm's resolution. Use Chronos with matched CN profile.
  3. Genomic rearrangement creates a "ghost" amplification: A complex rearrangement appears as normal CN but Cas9 cuts at multiple sites due to translocation breakpoints. Combine WGS structural variants with the analysis.
  4. Cell line has an unusually strong cut-toxicity response: The artifact may persist; use CRISPRi screens for that line.

Apply CN Correction to Pipeline

Workflow:

1. mageck count (raw counts)
2. screen-qc verification
3. CN diagnostic: Spearman of LFC vs CN (if CN profile available)
4. If bias detected:
   a. CRISPRcleanR (pre-hoc) -> corrected counts -> MAGeCK / BAGEL2 / drugZ
   OR
   b. Chronos (joint model with CN profile) -> gene effects directly
5. Re-diagnose: Spearman of CORRECTED LFC vs CN should be near zero
6. Hit calling

For DepMap-style large panels:

Chronos handles batch + CN + screen quality in one step; no pre-correction needed.

For Project Score-style panel (Behan 2019):

CRISPRcleanR was used historically; cross-check with Chronos when CN profile available.

Failure Modes

CRISPRcleanR removes legitimate essential signal

Trigger: A genuine essential gene happens to lie in a region with adjacent uncorrected non-essential signal; the segment-based correction includes the essential. Mechanism: CRISPRcleanR's ccr.GWclean() segments sgRNAs by position; segments containing multiple genes with directional consistency are corrected as a unit. Symptom: A known essential drops out of post-correction hit list. Fix: Inspect segments manually; if a known essential was within a corrected segment, investigate. Cross-check with non-CN-corrected MAGeCK + BAGEL2 to see if essential was a hit pre-correction.

Chronos fails on single-timepoint or single-cell-line data

Trigger: Chronos requires multiple timepoints (or multiple cell lines) for population-dynamics estimation. Mechanism: Single observation per condition leaves model under-determined. Symptom: Chronos errors out or produces flat gene-effect distributions. Fix: Use CRISPRcleanR (which handles single-timepoint single-line); collect multi-timepoint data for Chronos.

Spearman ρ still negative after CRISPRcleanR

Trigger: Amplification is too small or complex for the segment-based approach. Mechanism: CRISPRcleanR detects systematic spatial patterns; isolated 4-copy regions can slip through. Symptom: Post-correction Spearman ρ -0.05 to -0.10 between LFC and CN. Fix: Refine CN profile (deeper WGS); apply Chronos with matched CN as alternative; or supplement with focal-amplification-aware methods.

Cell line lacks matched CN profile

Trigger: Newly characterized line or rare patient-derived line; WGS not done. Mechanism: Chronos requires CN as input; CRISPRcleanR doesn't but works better with it. Symptom: Cannot apply Chronos; CRISPRcleanR less precise without supervised CN. Fix: Run SNP-array (cheap, fast) or low-coverage WGS to obtain CN profile; in interim, use CRISPRcleanR unsupervised mode.

CN amplification at non-coding region drives apparent essentiality

Trigger: Amplification at a gene-poor region; sgRNAs at edge genes get artifactually depleted. Mechanism: Even non-essential genes adjacent to amplifications are depleted because the Cas9 cuts are at the amplified loci. Symptom: Non-essential genes near amplification show LFC <0. Fix: Inspect chromosomal position of "essential" hits; flag genes within 100 kb of known amplifications for orthogonal validation. This is the classic Aguirre 2016 observation.

CRISPRi/a Alternative

For variant-function or non-cancer-line essentiality screens, switching to CRISPRi (catalytically dead dCas9-KRAB) avoids the artifact entirely. No DNA double-strand breaks = no DNA-damage G2 arrest = no copy-number-driven depletion.

ApproachCN artifactWhen to use
Cas9 KOYES; requires correctionLoss-of-function essentiality, traditional screens
CRISPRiNOCancer lines with focal amps; knockdown of cuttable-toxic genes
CRISPRaNOGain-of-function; activation screens
Base editingReduced (single-strand nick)Variant function
Prime editingReducedPrecise edits

See [[library-design]] for CRISPRi (Dolcetto) and CRISPRa (Calabrese) library options.

Quantitative Thresholds

ThresholdValueSource / Rationale
Spearman ρ (CN vs LFC)<-0.10 -> bias presentOperational convention
Copies for detectable artifact>6Operational convention; response scales with copy number (Aguirre 2016)
CRISPRcleanR min_reads30 (default)Iorio 2018; lower thresholds in low-coverage screens
Chronos gene-effect threshold for "essential"<-1 (cancer line)DepMap convention
Chronos gene-probability for "essential">0.5DepMap convention (dependency-probability cutoff)
Post-correction Spearman ρabs(ρ) <0.05Acceptable correction quality
Cell-line CN profile resolution≥SNP-array levelBelow this, CRISPRcleanR unsupervised

Common Errors

Error / symptomCauseSolution
Chronos errors on single-timepoint screenInsufficient longitudinal dataUse CRISPRcleanR instead
CRISPRcleanR removes a known essentialSegment-based over-correctionManually inspect segments; cross-check with non-corrected
Spearman ρ still -0.15 after correctionMethod too coarse for the ampRefine CN profile; use Chronos
ERBB2 listed as essential in SK-BR-3Uncorrected HER2 amplificationAlways apply correction before hit calling
CN profile missing for newly characterized lineProfile not generatedRun SNP-array / low-coverage WGS
Hits restricted to non-amplified regions onlyOver-correctionReduce CRISPRcleanR aggressiveness; check known biology

References

  • Aguirre AJ et al. 2016. Cancer Discov 6:914. Copy-number gene-independent toxicity.
  • Munoz DM et al. 2016. Cancer Discov 6:900. CN amplification CRISPR artifacts.
  • Haapaniemi E et al. 2018. Nat Med 24:927. Cas9 cutting induces a p53-mediated DNA-damage response.
  • Ihry RJ et al. 2018. Nat Med 24:939. p53 inhibits Cas9 engineering in human pluripotent stem cells.
  • Meyers RM et al. 2017. Nat Genet 49:1779. CERES; first formal CN correction at DepMap scale.
  • Iorio F et al. 2018. BMC Genomics 19:604. CRISPRcleanR.
  • Dempster JM et al. 2021. Genome Biol 22:343. Chronos.
  • Behan FM et al. 2019. Nature 568:511. Project Score with CRISPRcleanR-corrected data.
  • Pacini C et al. 2021. Nat Commun 12:1661. Integrated cross-study dependencies; DepMap quality scoring.
  • DepMap Q4 2024+ data releases. https://depmap.org/portal/

Related Skills

  • crispr-screens/screen-qc - CN-LFC Spearman diagnostic; pre-correction QC
  • crispr-screens/library-design - Switch to Dolcetto (CRISPRi) to bypass artifact
  • crispr-screens/mageck-analysis - MAGeCK on CRISPRcleanR-corrected counts
  • crispr-screens/bagel-essentiality - BAGEL2 on CRISPRcleanR-corrected counts
  • crispr-screens/hit-calling - Cancer-line hit calling with Chronos
  • crispr-screens/batch-correction - Chronos handles batch + CN jointly
  • crispr-screens/jacks-analysis - JACKS does not handle CN bias
  • clinical-databases/clinvar-lookup - Variant annotation downstream
  • copy-number/copy-ratio-segmentation - CN profile derivation upstream

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Predicts ADMET properties using ADMETlab 3.0 (119 platform features, including 77 prediction models with modeled-endpoint uncertainty), ADMET-AI, DeepChem MolNet, and chemprop D-MPNN with explicit handling of OECD QSAR principles, applicability domain assessment, calibration, hERG/CYP/AMES endpoints, and PAINS / Lipinski / Ro5 / Veber / BBB druglikeness filters. Use when filtering compounds for drug-likeness, prioritizing leads by predicted safety, or building an in-house ADMET QSAR model.

日本語の概要は準備中です。原文の説明を表示しています。

GPTomics/bioSkills1,2192026年8月15日 更新

Trim PCR primers from aligned reads in amplicon-panel BAMs using samtools ampliconclip. Use when processing SARS-CoV-2 ARTIC, hereditary cancer panels, ctDNA hot-spot panels, or any amplicon assay where primer-derived bases would falsely confirm reference at primer footprints.

日本語の概要は準備中です。原文の説明を表示しています。

GPTomics/bioSkills1,2192026年8月15日 更新

Filter alignments by flags, mapping quality, and regions using samtools view and pysam. Use when extracting specific reads, removing low-quality alignments, or subsetting to target regions.

日本語の概要は準備中です。原文の説明を表示しています。

GPTomics/bioSkills1,2192026年8月15日 更新

Create and use BAI/CSI indices for BAM/CRAM files using samtools and pysam. Use when enabling random access to alignment files or fetching specific genomic regions.

日本語の概要は準備中です。原文の説明を表示しています。

GPTomics/bioSkills1,2192026年8月15日 更新

Read, write, and convert multiple sequence alignment files using Biopython Bio.AlignIO. Supports Clustal, PHYLIP, Stockholm, FASTA, Nexus, and other alignment formats for phylogenetics and conservation analysis. Use when reading, writing, or converting alignment file formats.

日本語の概要は準備中です。原文の説明を表示しています。

GPTomics/bioSkills1,2192026年8月15日 更新

Parse and analyze multiple sequence alignments using Biopython. Extract sequences, identify conserved regions, analyze gaps, work with annotations, and manipulate alignment data for downstream analysis. Use when parsing or manipulating multiple sequence alignments.

日本語の概要は準備中です。原文の説明を表示しています。

GPTomics/bioSkills1,2192026年8月15日 更新

GPTomics のスキルをすべて見る

このスキルの問題を報告する