CRISPR筛选分析MAGeCK¶
一句话概述¶
MAGeCK是CRISPR-Cas9全基因组筛选数据分析的"行业标准"工具——白话说就是:当你用CRISPR一次性敲除几万个基因,然后看哪些基因对细胞生存最关键时,MAGeCK就是帮你从海量数据中找出"关键基因"的计算工具。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| CRISPR筛选原理 | 用sgRNA文库同时靶向数万基因,通过正/负筛选找关键基因 |
| sgRNA文库 | 如Brunello(人)、Brie(鼠),每个基因4条sgRNA,含1000条对照 |
| 正筛选 | 处理后活下来的细胞中富集的基因(如耐药基因) |
| 负筛选 | 处理后消失的细胞中丢失的基因(如必需基因) |
| MAGeCK count | 把FASTQ reads比对到sgRNA文库,统计每条sgRNA的read数 |
| MAGeCK test (RRA) | Robust Rank Aggregation,从sgRNA排名推断基因重要性 |
| MAGeCK mle | 最大似然估计,计算beta score(类似log fold change) |
| MAGeCKFlute | R包,提供质控、拷贝数校正、通路富集等下游分析 |
| beta score | MLE输出的基因效应值,正=正选择,负=负选择 |
| BAGEL2 | 替代工具,负筛选中利用先验知识提高信噪比 |
各步骤详解¶
第一步:理解CRISPR筛选实验¶
白话解释: 想象你有一座城市(细胞群),城市里每栋房子(细胞)都被随机安装了一种"拆迁炸弹"(sgRNA,靶向不同基因)。加药后,有些房子倒了(基因被敲除后细胞死了),有些没倒。统计最后还站着的和倒了的,就知道哪些基因对抗药性/存活重要。
实验流程:
1. 细胞 → 感染sgRNA病毒文库(每个细胞获得1条sgRNA)
2. 扩增2-3天 → 收集基线样本(Day0/T0)
3. 加药处理 / 继续培养 → 收集终点样本(Day14/T14)
4. 提取基因组DNA → PCR扩增sgRNA区域 → 测序
5. 分析:比较T0 vs T14的sgRNA丰度变化
第二步:安装MAGeCK¶
白话解释: MAGeCK是Python写的命令行工具,用conda安装最方便。需要Python 3环境。
# 方法1:conda安装(推荐)
conda create -n mageck python=3.9 # 创建Python 3.9环境
conda activate mageck # 激活环境
pip install mageck # pip安装MAGeCK
# 方法2:从源码安装
git clone https://github.com/liulab-dfci/MAGeCK.git # 克隆仓库
cd MAGeCK # 进入目录
python setup.py install # 安装
# 验证安装
mageck -v # 显示版本号
# 安装MAGeCKFlute(R包,用于下游分析)
# 在R中运行:
# BiocManager::install("MAGeCKFlute")
第三步:MAGeCK count——sgRNA计数¶
白话解释: 把测序得到的reads"认回"到它们对应的sgRNA。就像考试后,把每张答题卡归还给对应的学生。
# mageck count:从FASTQ统计每条sgRNA的read数
mageck count \ # 计数命令
-l library.csv \ # sgRNA文库文件(sgRNA名, 序列, 基因名)
-n sample_output \ # 输出文件名前缀
--sample-label "Day0,Day14_ctrl,Day14_drug" \ # 样本标签
--fastq Day0.fastq.gz Day14_ctrl.fastq.gz Day14_drug.fastq.gz \ # FASTQ文件
--norm-method median # 归一化方法:中位数比值法
# 输出文件说明:
# sample_output.count.txt → sgRNA计数矩阵
# sample_output.count_normalized.txt → 归一化后的计数
# sample_output.countsummary.txt → 质控统计(mapping率等)
# sgRNA文库文件格式(library.csv):
# sgRNA_name sgRNA_sequence Gene
# GENE1_sg1 ACGTACGTACGTACGTACGT GENE1
# GENE1_sg2 TGCATGCATGCATGCATGCA GENE1
# Non-Targeting_1 AAAAAAAAAAAAAAAAAAAAA NonTargetingControl
质控检查:
# 查看计数统计结果
cat sample_output.countsummary.txt # 查看每个样本的mapping率
# 关键指标:
# - Mapped ratio > 60% → 好
# - Gini index < 0.2 → sgRNA分布均匀,好
# - Zero-count sgRNAs < 1% → 文库覆盖充分
第四步:MAGeCK test (RRA)——基因排名¶
白话解释: RRA(Robust Rank Aggregation)是MAGeCK的核心算法。它看每个基因的4条sgRNA是不是"一致地"变多或变少。如果4条sgRNA都显著减少,说明这个基因确实重要(不是偶然)。
# mageck test:RRA方法检测显著基因
mageck test \ # 统计检验命令
-k sample_output.count.txt \ # 输入:sgRNA计数矩阵
-t Day14_drug \ # 处理组样本名
-c Day0 \ # 对照组样本名
-n drug_vs_day0 \ # 输出前缀
--normcounts-to-file # 输出归一化计数
# 主要输出文件:
# drug_vs_day0.gene_summary.txt → 基因级别结果(最重要!)
# drug_vs_day0.sgrna_summary.txt → sgRNA级别结果
# gene_summary.txt关键列:
# id → 基因名
# neg|score → 负选择得分(越小越显著)
# neg|p-value → 负选择p值
# neg|fdr → 负选择FDR校正后p值
# neg|rank → 负选择排名
# pos|score → 正选择得分
# pos|p-value → 正选择p值
# pos|fdr → 正选择FDR
第五步:MAGeCK mle——高级分析¶
白话解释: MLE(最大似然估计)比RRA更强大,可以同时比较多个条件,输出beta score(类似fold change)。适合复杂实验设计。
# 准备design matrix(实验设计矩阵)
# design_matrix.txt:
# Samples baseline treatment
# Day0 1 0
# Day14_ctrl 1 0
# Day14_drug 1 1
# 运行MAGeCK MLE
mageck mle \ # MLE命令
-k sample_output.count.txt \ # 输入计数矩阵
-d design_matrix.txt \ # 实验设计矩阵
-n mle_result \ # 输出前缀
--norm-method median \ # 归一化方法
--control-sgrna NonTargetingControl # 对照sgRNA标识
# 输出:mle_result.gene_summary.txt
# 关键列:
# Gene → 基因名
# treatment|beta → beta score(正=正选择,负=负选择)
# treatment|p-value → p值
# treatment|fdr → FDR
# treatment|wald-p-value → Wald检验p值
第六步:MAGeCKFlute下游分析(R)¶
白话解释: MAGeCKFlute是R包,帮你做质控、画图、跑通路富集分析。
library(MAGeCKFlute) # 加载MAGeCKFlute
# ===== 方法1:用RRA结果(FluteRRA) =====
# 读取gene summary文件
fluterra <- ReadRRA(
"drug_vs_day0.gene_summary.txt" # RRA结果文件
)
# 火山图:展示正/负选择基因
VolcanoView(
fluterra, # 数据
x = "Score", # x轴:RRA score
y = "FDR", # y轴:FDR
Label = "id" # 标签:基因名
)
# 通路富集分析
enrich_neg <- EnrichAB(
fluterra$id[fluterra$neg.fdr < 0.05], # 负选择显著基因
organism = "hsa" # 人类基因
)
# ===== 方法2:用MLE结果(FluteMLE) =====
mle_data <- ReadBeta("mle_result.gene_summary.txt") # 读取MLE结果
# 拷贝数校正(重要!基因拷贝数影响筛选结果)
# 高拷贝数基因在CRISPR筛选中可能假阳性
FluteMLE(
mle_data, # MLE beta scores
treatname = "treatment", # 处理组名
organism = "hsa", # 物种
incorporateDepmap = FALSE # 是否整合DepMap数据
)
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
mageck count: 0 reads mapped | 文库文件中sgRNA序列与FASTQ不匹配 | 检查sgRNA序列方向、是否含adapter |
Python version error | Python版本兼容性问题 | 使用conda安装推荐的Python 3版本,或用bioconda渠道安装 |
No significant genes found | 筛选效果弱或样本不够 | 降低FDR阈值,或增加生物学重复 |
design matrix error | 设计矩阵格式不对 | 确保tab分隔,列名对应sample label |
Gini index too high (>0.5) | sgRNA分布极不均匀 | 检查文库质量,可能需要重新感染 |
negative control not found | 对照sgRNA名称不匹配 | 检查文库文件中NonTargeting的命名 |
速查表¶
# ========== MAGeCK分析速查 ==========
# 1. sgRNA计数
mageck count -l library.csv -n output --sample-label "T0,T14" --fastq T0.fq T14.fq
# 2. RRA检验(简单两组比较)
mageck test -k output.count.txt -t Treatment -c Control -n result
# 3. MLE分析(多条件比较)
mageck mle -k output.count.txt -d design.txt -n result
# 4. 查看结果
head result.gene_summary.txt # 基因排名
# 负选择:看neg|fdr列 < 0.05的基因(必需基因/药物靶点)
# 正选择:看pos|fdr列 < 0.05的基因(耐药基因/抑制子)
# 5. R下游分析
# library(MAGeCKFlute)
# flute <- ReadRRA("result.gene_summary.txt")
# VolcanoView(flute)
面试高频问题¶
Q1: CRISPR筛选中正选择和负选择分别是什么?
正选择(positive selection):处理后某些sgRNA的reads增多,说明对应基因被敲除后让细胞获得了生长优势(如耐药)。负选择(negative selection):某些sgRNA的reads减少或消失,说明对应基因是细胞存活所必需的。MAGeCK同时检测两个方向。
Q2: MAGeCK的RRA和MLE有什么区别?什么时候用哪个?
RRA:简单的两组比较(对照 vs 处理),基于sgRNA排名聚合,适合入门。MLE:最大似然估计,输出beta score,可以处理复杂实验设计(多时间点、多条件),还能纳入对照sgRNA校正。简单实验用RRA,复杂实验用MLE。
Q3: 为什么需要拷贝数校正?
CRISPR切割高拷贝数区域(如癌细胞中的扩增区域)会产生多个DNA双链断裂,导致细胞死亡——这不是因为基因功能丧失,而是因为"被切太多次"。所以高拷贝数基因在负筛选中容易出现假阳性。MAGeCKFlute可以用DepMap数据做拷贝数校正。
Q4: sgRNA文库的设计有什么讲究?
主流文库:Brunello(人,~77,000条sgRNA,每基因4条)、Brie(鼠)。关键要素:(1) 每个基因至少3-4条sgRNA以增加可靠性;(2) 包含1000+非靶向对照sgRNA;(3) 选择高效sgRNA(GC含量40-70%、无脱靶位点)。
Q5: 除了MAGeCK,还有哪些CRISPR筛选分析工具?
BAGEL2:贝叶斯方法,利用已知必需基因作为先验,负筛选时信噪比更高。CRISPRcleanR:专门处理拷贝数偏差。JACKS:联合分析多个筛选实验的sgRNA效率。CasTLE:考虑sgRNA效率差异的假设检验。MAGeCK是使用最广泛的,多数发表论文选用MAGeCK。