资讯动态

CUTTag spike-in数据生信分析全流程:从比对到peak calling的实操要点

发布时间:2026/10/2 17:05:58 来源:尧图企业网站定制
开头拿到一个加了 spike in 的 CUTTag 数据很多人第一反应是这不就是比对、call peak 嘛和普通样本有什么区别实际上区别大了。spike in 的引入直接改变了你对测序深度的理解方式、比对结果的解读方式、甚至 peak calling 的阈值设定逻辑。简单说加了 spike in 的样本多了一套内部校准的维度而这套维度处理不好你的数据可能从源头就已经偏了。这篇文章我会从我的实际分析经验出发完整梳理加了 spike in 的 CUTTag 样品在生信分析全流程中的关键节点包括为什么要做 spike in、比对和过滤的坑、双容器策略的数学逻辑、两种主流 peak calling 工具的差异以及我在多个项目里踩过的真实问题。不管你是刚接触 CUTTag 的新手还是被 spike in 缩放因子绕晕的老手这篇文章应该都能省你不少弯路。1. 项目核心思路拆解spike in 到底解决了什么问题1.1 CUTTag 的技术本质与 spike in 的定位CUTTag 全称是 Cleavage Under Targets and Tagmentation算是 ChIP-seq 的一种升级替代方案。它的核心是把 Protein A/G-Tn5 融合蛋白引导到抗体结合的位置然后通过 Mg2 激活 Tn5 转座酶在目标蛋白结合的位置附近进行 tagmentation也就是边切割边加接头。相比传统 ChIP-seqCUTTag 的背景低很多需要的细胞量少很多甚至可以做到单细胞级别。但正因为 CUTTag 不需要交联、不需要超声打断整个流程的操作步骤少技术噪音的引入点就相对集中。其中一个很实际的痛点就是不同样本之间细胞数量、抗体结合效率、tagmentation 效率很难做到完全一致。你今天处理 10 万个细胞明天处理 5 万个细胞表面上你按照同样的 protocol 走了一遍但最终每个样本的 reads 分布可能差异巨大。这时候你就需要一个共同的内参来把这些技术差异校正掉。spike in 就是那个内参。我们在实验时向每个样本的反应体系中加入等量已知的外源 DNA常见的有 E. coli DNA 或者加了相应抗体的 E. coli 染色质。这些外源 DNA 会和样本内源染色质一起经历完整的 CUTTag 流程——包括 tagmentation、文库扩增、测序。因为在所有样本中加入的量是固定的所以每个样本中比对到 spike in 基因组上的 reads 比例就可以反映出这个样本在实验过程中的整体效率。效率高的样本spike in reads 就多效率低的样本spike in reads 就少。校准的逻辑就是用这个比例把测序深度统一到同一个水平上再比较。1.2 spike in 和传统测序深度的区别和联系这里需要先分清两个概念原始测序深度和有效测序深度。原始测序深度就是你测序仪上跑的 reads 数通常用 million 为单位。不同样本如果测序量不同原始深度自然不同。但在 CUTTag 里即使两个样本测序量完全一样也不代表它们处于同一水平。原因在于样本本身的 tagmentation 效率不同。假设样本 A 的 tagmentation 效率高10 million reads 里能比对上的有效 reads 有 8 million样本 B 效率低10 million reads 里可能只有 4 million 是有效的。这两组数据放到一起比较就必须先通过 spike in 调整缩放。我遇到过很多刚接触的人会混淆一个点认为加了 spike in 之后只需要把比对到 spike in 的 reads 去掉就行。大错特错。spike in reads 的真正价值不在去掉而在用来计算缩放因子。计算逻辑很简单单样本缩放因子 样本中比对到 spike in 基因组的 mapped reads 数 / 该样本总 mapped reads 数这个缩放因子的含义是每单位内源染色质 reads 所对应的 spike in 校准值。后续不管是做归一化、画 track、还是传进 peak caller 做峰值检测都要把这个缩放因子考虑进去。我个人的实践习惯是在拿到比对后的 BAM 文件后先做一次 spike in 比例的快速统计如果几个样本之间 spike in 比例差异超过 5 倍以上我会先回头检查实验记录确认是不是哪一步加样出了问题而不是直接往下做分析。这个检查比后面所有分析步骤都重要因为根本性的实验偏差是后面任何算法都纠正不回来的。1.3 spike in 在 CUTTag 分析中的特定角色说得更具体一点spike in 在 CUTTag 分析中至少承担了三个层面的功能。第一是样本间可比性。不同处理组、不同时间点、不同细胞类型之间的 CUTTag 信号强度差异可能来自生物学差异也可能来自实验批次差异。spike in 为这种比较提供了一个共同的标尺。第二是绝对定量参考。如果你想知道某个转录因子在基因组上的结合量到底增加了还是减少了spike in 可以帮你计算出标准化后的信号强度变化倍数。这种倍数变化比单纯的 reads 数变化更可靠。第三是质控指标。spike in 比对比例过高说明样本中内源染色质可能太少比例过低则说明实验效率低下。这个指标在 ChIP-seq 里就存在类似情况但是在 CUTTag 中由于背景低、信噪比高spike in 比例几乎直接反映了实验操作质量的优劣。我曾经用同一个 CUTTag 文库做过一次对比实验一份数据从比对开始就严格按 spike in 校准流程走另一份不做校准直接测序深度归一化。结果在某个转录因子的结合定量分析中两个处理组之间的差异方向完全相反。这个血的教训让我之后每次处理 CUTTag 数据都先确认样本是否加了 spike in校准和没校准完全是两套分析思路。2. 核心细节解析与实操要点从原始数据到比对2.1 数据格式与文件组织原则拿到测序下机数据后通常你会得到两个文件双端测序或者一个文件单端测序的 FASTQ。CUTTag 很多 protocol 推荐双端测序因为双端数据在比对时可以更准确地处理重复区域对 Tn5 整合位点的精确识别也更有优势。我的文件组织习惯是project/ |--- raw_data/ | |--- sample1_R1.fastq.gz | |--- sample1_R2.fastq.gz | |--- sample2_R1.fastq.gz | |--- sample2_R2.fastq.gz |--- alignment/ |--- spikein_counts/ |--- peaks/ |--- tracks/不同样本的 FASTQ 文件放在 raw_data 里后续每一步的分析结果单独建目录。这样做的好处是每一步都有清晰的位置任何一步出了问题都能快速定位到对应文件。我见过不少人把所有中间文件堆在一个目录里最后自己都分不清哪个是哪个浪费时间也容易出错。2.2 质控的根本目标死循环还是放行质控是生物信息分析的第一步但在 CUTTag 中质控的核心目标更加集中。CUTTag 文库的 insert size 很短一般在 100-300 bp 之间接头序列含量可能比较高尤其是当起始细胞数很少的时候比如不到 1000 个细胞PCR 循环数必须增加接头指数性扩增会很明显。质控工具有很多我常用 fastp。对于 CUTTag 数据fastp 的参数设置我会稍微调整核心是去掉接头和低质量碱基但不要过度修剪。过度修剪会导致 reads 变短反而影响后续比对。我的建议参数如下fastp \ -i sample_R1.fastq.gz \ -I sample_R2.fastq.gz \ -o clean_R1.fastq.gz \ -O clean_R2.fastq.gz \ --detect_adapter_for_pe \ --trim_poly_g \ --cut_front \ --cut_tail \ --length_required 30 \ -h sample_fastp.html \ -j sample_fastp.json--detect_adapter_for_pe会自适应检测双端接头序列--length_required 30保证修剪后保留至少 30 bp低于这个长度直接丢弃。这里有个容易踩的坑--cut_front这个参数如果不加是默认关闭的。低质量碱基通常出现在 read 的 3 端即末尾cut_tail 处理末尾足够。但如果你的数据某项质量指标在 5 端也有问题就需要打开 cut_front。质控完事的判断标准是什么我个人的经验是看两个指标Q30 比例85% 算健康、duplication ratePCR 重复比例CUTTag 比 ChIP-seq 高是正常的但如果超过 70% 要谨慎。快速扫一眼 fastp 的 html 报告确认没有异常就可以放心进入比对环节。2.3 比对和过滤器spike in 样本的比对策略核心CUTTag 中最常用、最稳定的比对工具是 bowtie2。它比对速度快对短片段支持好而且专门处理双端数据的 pairing 情况表现很好。很多主流的 CUTTag 分析流程包括 ENCODE 官方推荐的流程都是用 bowtie2 做比对。对于加了 spike in 的样本比对策略有一个关键差异你需要分别比对到两个参考基因组上——spike in 基因组和你的目标物种基因组。这两个比对是独立进行的用同一个 BAM 文件作为输入分别输出到不同的结果文件里。先比对到 spike in 基因组。这一步的目的是统计有多少 reads 来自 spiked-in DNA。用 bowtie2 的命令示例bowtie2 \ --local \ --very-sensitive-local \ --no-unal \ --no-mixed \ --no-discordant \ --phred33 \ -I 10 \ -X 700 \ -x spikein_genome_index \ -1 clean_R1.fastq.gz \ -2 clean_R2.fastq.gz \ -S spikein.sam我这里加了几个关键参数值得说明。--local是局部比对模式允许 reads 两端有一定程度的 soft-clipping在处理 Tn5 产生的含 adapter 的 reads 时容错性更好。--no-mixed和--no-discordant确保只有正确的双端配对才被保留防止单端 reads 乱比提高假阳性。-I 10和-X 700设置 insert size 范围CUTTag 的片段长度范围比 ChIP-seq 短700 bp 上限足够了。比对到目标基因组的命令本质上一样只是换了个 indexbowtie2 \ --local \ --very-sensitive-local \ --no-unal \ --no-mixed \ --no-discordant \ --phred33 \ -I 10 \ -X 700 \ -x mouse_genome_index \ -1 clean_R1.fastq.gz \ -2 clean_R2.fastq.gz \ -S sample.sam比对完之后紧接着就要做 filtering。这一步非常关键因为在 CUTTag 中Tn5 转座酶在切割的同时加接头目标位置附近会产生一段很短的间隔片段这些片段的比对质量通常很低MAPQ 低如果不滤掉会严重影响后续 peak calling 的准确性。常见的比对后处理流程是samtools view -h -F 0x904 -q 30 sample.sam sample.filtered.sam-F 0x904的含义是去掉 reads unmapped (0x4)、mate unmapped (0x8)、以及非 primary 比对 (0x100) 的 reads。-q 30把 MAPQ 低于 30 的 reads 剔除。这个过滤标准对绝大多数 CUTTag 数据适用但如果你用的是自定义的参考基因组且注释不完整MAPQ 阈值可以适当降到 10-20 之间否则可能滤掉过多 reads。过滤后别忘了做一件极其重要的事情——去除 PCR duplicates。CUTTag 起始量低PCR 扩增不可避免重复 reads 会严重扭曲信号强度。用 Picard 的 MarkDuplicates 或者 samtools markdup 均可但我更推荐 Picard因为它对双端数据的 duplicate 判定更严格picard MarkDuplicates \ Isample.filtered.sam \ Osample.dedup.bam \ Mdedup_metrics.txt \ REMOVE_DUPLICATEStrue这里有个原则如果后续你要做 copy number 分析建议不要直接删重复而是仅标记但对常规 CUTTag 的 peak calling 和差异分析直接删除重复是业界共识。删完重复之后把 BAM 文件用samtools sort排序并建立索引比对这一步才算完整结束。3. 实操过程与核心环节实现缩放因子的计算与选择3.1 从比对结果到 spike in 缩放因子现在你手上有两个 BAM 文件一个比对到 spike in 基因组一个比对到目标基因组。接下来要做的是统计每个样本中比对到 spike in 的 reads 数。这一步简单粗暴samtools view -c spikein.sorted.bam samtools view -c sample.sorted.bam前者得到比对到 spike in 基因组的 read pairs 数后者得到目标基因组上的 read pairs 数。注意这里我们要用的是read pairs 数而不是单个 reads 数双端测序中一个片段会测出两条 reads但生物学意义的单位是片段所以计算时要除以 2或者在比对时让 samtools 直接按 pair 统计。我一般在过滤后的 BAM 上直接统计samtools view -c -F 0x904 sample.dedup.sorted.bam-F 0x904保证只统计有效的 pair。这个数值就是你的total mapped reads。单个样本的 spike in scaling factor 计算方式是scale_factor (total mapped reads) / (spike_in mapped reads)用公式表示就是def compute_scale_factor(total_reads, spikein_reads): return total_reads / spikein_reads这个因子的最终用途是给每个样本的 signal 做归一化让不同样本之间可以公平比较。然而这里真的有一个非常容易踩的坑不同 protocol 对 scale factor 的定义方向可能相反。有的 protocol 用的是spike_in reads / total reads有的用的是total reads / spike_in reads。如果你直接把别人的脚本拿过来用下了对齐的结论后才发现方向反了那整个分析白做了。我的习惯是算完因子之后立刻做一个 sanity check——取一个已知不会变化的区域比如 ACTB 启动子看不同样本的信号值是否与预期一致。如果一致说明方向对了如果不一致就要检查因子方向。3.2 双容器策略target genome 和 spike in 的互斥过滤在比对完成后很可能出现一种情况一部分 reads 既比对上了 target genome又比对上了 spike in 基因组。为什么因为这两个基因组之间可能存在小片段同源序列特别是当你使用 E. coli 基因组做 spike in 时某些抗体的 off-target 结合产生的 DNA 片段可能在序列上有一定相似性。为了保证后续分析的清洁推荐做一次互斥过滤。操作不复杂取出比对到 spike in 的 reads 的唯一标识read name在目标基因组比对结果中过滤掉这些 reads。# 提取 spike in 比对的 read names samtools view spikein.dedup.sorted.bam | cut -f1 | sort -u spikein_reads.txt # 从目标基因组 BAM 中过滤这些 reads samtools view sample.dedup.sorted.bam \ | grep -v -F -f spikein_reads.txt \ | samtools view -bS - sample.target_only.bam这个操作可以让最终的分析数据更干净。我自己的经验是在读段与 spike in 基因组有偶然 match 时这部分重叠占比通常在 0.1%-1% 之间看起来不多但对于低丰度区域的 peak 检测来说影响可能是致命的。特别是做 histone mark 的分析时背景信号和多比对 reads 的干扰会让后续的差异分析出现假阳性。不过有一个细节值得提一下如果从 spike in 比对结果中提取 read names需要注意-F 0x904这个过滤同样要应用否则你会把比对到 spike in 但其实是低质量比对的 reads 的 read name 也提取出来然后误删了目标基因组上的有效 reads。正确的提取命令应该是samtools view -F 0x904 spikein.dedup.sorted.bam | cut -f1 | sort -u spikein_reads.txt这个坑我踩过一次。某个项目里我把 spike in reads 名单和多叉一堆低质量比对混在一起过滤后目标 BAM 里的有效 reads 直接少了 20%一开始还以为样本出了问题后面才发现是过滤名单搞错了。3.3 两种标准化策略对比全基因组缩放 vs spike in 缩放在得到干净的目标基因组 BAM 后下一步是决定用哪种标准化策略来生成 signal track 和进行 peak calling。CUTTag 分析中主要有两种策略一种是传统的 cpm / 全基因组缩放另一种是 spike in 缩放。本质上前者假设每个样本的测序总量相同后者通过 spike in 对样本的实际有效量进行校准。从矩阵的角度看两者的差异标准化方式公式适用场景局限CPM / 全基因组缩放每个位点 reads / 总 mapped reads * 10^6样本间 tagmentation 效率较一致时无法校正片段化效率差异Spike in 缩放每个位点 reads / spike_in mapped reads样本间效率不一致、需绝对定量时对 spike in 量的准确度要求很高许多分析流程会默认用全基因组缩放——因为计算简单只需要每个样本的总 mapped reads。但加了 spike in 的样本那些有经验的实验室会特别提醒你如果你是加了 spike in 的样本请务必使用 spike in scaling factor 做后续处理否则加 spike in 就失去了意义。为什么有的实验室不推荐全局缩放举个例子两个样本在实验时起始细胞数不同A 样本有 10 万个细胞B 样本有 3 万个细胞但你为了比较两者加入的抗体量是一致的。结果 B 样本的信号强度从生物学上讲应该只有 A 的 30% 左右但如果你用 CPM 对总 reads 做归一化会把 B 样本的所有信号放大到与 A 一样的水平最终得出B 的结合量与 A 相同的错误结论。而 spike in 缩放会自动识别 B 样本的 tagmentation 效率低因为起始模板少缩放后信号值就会偏低更接近真实情况。3.4 实操上我用这两种策略的处理路径如果你手上只有目标基因组 BAM并且确定样本没有加 spike in那么老老实实用 CPM 或者bamCoverage --normalizeUsing CPM生成 track 都可以peak calling 时用 MACS2 默认参数即可。如果样本加了 spike in我的推荐路径是用缩放因子对 BAM 进行 reads weight 化或者在 track 生成时直接传入缩放因子或者在 peak calling 时使用支持 scaling factor 的算法。3.5 生成 track 和 peak 调用的常用命令生成归一化 track使用 deepTools 的 bamCoveragebamCoverage \ --bam sample.target_only.dedup.bam \ --outFileName sample.spikein.bw \ --scaleFactor 1.35 \ --normalizeUsing CPM \ --binSize 10 \ --smoothLength 30 \ --effectiveGenomeSize 2652783500 \ --ignoreForNormalization chrM这里--scaleFactor是放你的 spike in scale factor 值--normalizeUsing CPM会再按总 reads 做一次 CPM 归一化。注意如果你已经用了 scaleFactor再叠加 CPM 会重复归一化可能导致信号整体偏移。这个组合方式在不同流程中有不同解释我的建议是二选一不传--scaleFactor仅--normalizeUsing CPM这是全基因组缩放适合没有 spike in 的样本。传--scaleFactor但不加--normalizeUsing CPM这时生成的 track 是每百万 spike in reads 信号可直接用于样本间比较。严格来说传了 scaleFactor 就不要再加 CPM。很多流程里加上 CPM 是因为不知道 scaleFactor 应该放入什么语义结果做个重复归一化导致数值离谱。如果你不确定可以用一个已知的 housekeeping 基因区域做 sanity check比较几个样本看信号比例是否符合预期。peak calling的部分加 spike in 样本的两个选择是 MACS2 或 SEACR。MACS2 的调用基础参数macs2 callpeak \ -t sample.target_only.dedup.bam \ -f BAMPE \ -g mm \ -n sample \ -q 0.05 \ --outdir macs2_peaks \ --nomodel \ --shift -100 \ --extsize 200 \ --keep-dup auto-f BAMPE告诉 MACS2 输入是双端 BAM它会利用插入片段长度信息进行建模。--shift -100和--extsize 200的搭配常用于 Tn5 类数据把 read 的中心位置往回偏移 100 bp并把片段扩展到 200 bp模拟 Tn5 结合位点的实际分布。这些参数对 CUTTag 这种片段本身就很短的数据非常重要。SEACR 则是专门为低背景染色质数据设计的写法上更粗暴直接不依赖模型只基于信号强度分布统计SEACR_1.3.sh \ sample.spikein.bg \ norm \ stringent \ sample.seacr它需要输入 bedGraph 格式而不是 BAM。很多人会先跑 MACS2 拿到 bedGraph再丢给 SEACR。但 SEACR 官方推荐的输入其实不需要 MACS2 处理直接由bedtools genomecov生成的 bedGraph 就可以bedtools genomecov \ -ibam sample.target_only.dedup.bam \ -bg \ -pc \ sample.bg我个人的体会是CUTTag 数据里 SEACR 比 MACS2 更适合 histone modification 的检测但对 TF转录因子类数据 MACS2 更稳定。两个都跑一下用交集做保守结果也是行业里的常见玩法。4. 常见问题与排查技巧实录亲手踩过的坑与解法4.1 问题一spike in 比例异常高20%或者异常低0.1%这种情况我遇到过不止一次。spike in 比例高最常见的原因是样本的细胞数过少或抗体标记效率低导致内源染色质 tagmentation 不足外源 DNA 相对占据主导。如果只是个别样本高优先检查细胞计数和洗涤步骤是不是出了偏差。spike in 比例低则要小心是不是操作时忘了加 spike in DNA或者加的量错误。有一次我拿到一个样本的 spike in 比例是 0.02%几乎和没加成一样查实验记录发现当天用的 spike in DNA 储备液浓度算错了加了原来浓度的十分之一。从数据上就能发现的问题可以避免后续一路错下去。排查建议分析早期建立一个质量监控表列出每个样本的原始 reads 数比对到 target 基因组的 reads 数比对到 spike in 基因组的 reads 数spike in 比例计算出的 scale factor所有样本放在一个表格里看分布。如果出现离群样本第一时间和实验侧沟通而不是直接代入后续流程。4.2 问题二PCR 重复率过高导致有效 reads 数不足CUTTag 起始样本量低PCR 循环数一多duplication rate 很容易涨上去。有一个教训比较深刻某个样本的 duplication 率达到了 75%按常规过滤逻辑直接去重最后有效数据只有 60 万 reads连最基本的 peak 都招呼不出来。如果后续遇到类似情况我有两个建议不要盲目增加测序量来补救如果你已经知道这个文库的 duplication 率高再多测同样只会得到更多重复。需要回到实验端减少 PCR 循环数或者使用没有扩增偏好的文库构建方案。分析端降低 MAPQ 阈值时要谨慎当有效 reads 不足时有人会把 MAPQ 从 30 降到 10 来抢救数据。这在 low complexity 区域的读数确实能多出来一些但 noise 比例也会相应上升。如果降阈值救回来的数据质量特别差宁可放弃这个样本也不要带病入模型因为后面差异分析中的假阳性会让你更头疼。4.3 问题三SEACR 和 MACS2 的结果差异巨大这很正常我自己经常遇到。主要原因有两个SEACR 对 background 的判断更依赖读到局部信号分布特性适合 sharp 和 broad 并存的数据MACS2 的 Poisson 模型假设在低深度数据下容易失效而 SEACR 不需要模型的 assumption更接近非参数方法。处理方案上如果没有明确偏好我通常的做法是TF 类数据用 MACS2 作为主结果SEACR 作为辅助验证。Histone mark 类数据用 SEACR 为主MACS2 为辅。两组工具都跑出来的 peak 作为高置信集合只在一个工具中出现的 peak 单独标记为候选。这样做的好处是你可以保留一个核心集用于下游功能富集、motif 分析也能提供一个候选集供进一步筛选。从发表文章的角度看这个策略也更稳健。4.4 问题四IGV 可视化时信号爆表或者全平这一步的问题通常出在缩放的 normalization 语义搞混。如果你在 bamCoverage 时传了 scaleFactor 又叠加了 CPM信号值很容易高到离谱比如某些区域直接超过 100整体 track 看起来全部重叠在一起无法观察差异。检查思路是这样确认你设定的 track 信号单位是什么。如果是 reads per million spike in reads那你取的 scaleFactor 应该是total mapped reads / spike_in mapped reads的倒数两个概念千万不要混用。我自己的 track 生成习惯是bamCoverage \ --bam sample.target_only.dedup.bam \ --outFileName sample.spikein.bw \ --scaleFactor 0.74 \ --binSize 10 \ --smoothLength 30 \ --effectiveGenomeSize 2652783500 \ --ignoreForNormalization chrM注意不叠加 CPM。生成后去 IGV 里把样本和对照放在一起看如果几个样本在一个一直有表达的基因位置的信号趋势一致说明 track 没问题可以继续往下分析。4.5 问题五重复样本间相关性差生物学重复之间的 Pearson correlation 在 CUTTag 里通常要求达到 0.8 以上才算合格低于 0.7 基本不推荐继续做差异分析。但这个标准在不同细胞类型和不同抗体下有弹性我自己做过一个 H3K27me3 的项目重复相关性长期在 0.65-0.75 徘徊后来发现是 spike in 比例在两个重复之间差了 3 倍。在应用 spike in normalization 之后相关性提升到 0.88说明主要问题出在技术差异而不是生物学差异。所以当你发现重复间的相关性不好先不要质疑生物学先把两个样本的 spike in 比例调出来看。如果差的倍数大那大概率是实验步骤中的加样或洗涤差异可以尝试通过更严格的 scale factor 修正如果 spike in 比例正常但相关性就差那就要考虑换抗体批次或者重新审视细胞状态是否一致。5. 实操心得spike in 数据处理的一页纸总结最后按项目成员常用的方式整理几条如果只记住这些的要点方便每次跑流程时对照比对要双路并行target 基因组和 spike in 基因组分别比对互不干扰不能合成一个 index。过滤从严MAPQ 30去 unmapped去非 primary去 duplicate 是安全基线特殊原因要放松必须记录理由。scale factor 方向要想清楚建议脚本中统一用total / spike_in并在你生成的输出文件名里标注。不要相信自己的记忆力你三周后看到这个文件一定不记得方向。标准化二选一用了 spike in scale factor 就不要再叠加 CPM。叠加了 CPM 就不要再用 scale factor否则结果没人能解释。质控表格先行每个样本的原始 reads、比对率、spike in 比例、duplication 率、scale factor全部列一张表分析开始前先看表格不直接跑下游。peak calling 建议双跑TF 用 MACS2 主跑 SEACR 验证Histone 用 SEACR 主跑 MACS2 验证最后按交集和差集分层。结尾我在实际项目中养成的一个习惯是不管手头的数据要不要出图都先跑一遍 qc spike in 统计的流程把每个样本的 scale factor 放在表格里端详一会儿。这个习惯帮我提前拦截过好几批实验端已经出问题的数据也让我在后来的多次项目答辩中能够清晰解释每个样本为什么被排除、为什么某个样本信号偏低是因为技术而不是生物变异。CUTTag 加了 spike in 之后分析流程多了一道工序也多了很多可诊断的信息量处理得当的话这套数据能给到你的结论密度远比常规 ChIP-seq 高。希望这篇基于实操总结出来的经验能帮你在跑第一遍 spike in CUTTag 的时候少走几个弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑