个人经验:我刚用NGS数据时,总以为reads越长越好。但其实不同平台各有优势。Illumina的短读长(2×150bp)最成熟,建库成本低;PacBio长读长能跨重复区域,但错误率高。大多数实战项目,我会先用Illumina做主测序,再用长读长做gap filling。两套数据一起用,效果比单用任何一套都稳。
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTACGTAGATTCAGCGTTGTCGGAATACTCGGAATACTCG
+
IIIIIIIIIIIIIII:IIII:IIIII8IIII6IIIIIII
- **第一行**:以`@`开头,是read的标识符。包含仪器ID、flow cell位置、lane编号、tile坐标、cluster XY坐标。这部分信息在做质量控制时特别有用——你能通过tile坐标看有没有局部污染。
- **第二行**:测出来的碱基序列,用ATCGN表示。N代表这个碱基没确定下来。
- **第三行**:以`+`开头,一般重复第一行的内容,但很多工具直接写个`+`完事。
- **第四行**:质量分字符串。每个字符对应一个Q值,字符数和第二行的碱基数必须一致。
关键提醒:四行必须完整!少一行或者多一个换行,解析器就会报错。我见过太多新手把FASTQ格式搞乱,然后问“为什么samtools报错”。先检查文件结构,这是排查问题的第一原则。
Q = -10 × log₁₀(P_error)
其中P_error是碱基识别错误的概率。举个例子:
- Q30:P_error = 0.001,也就是说每1000个碱基里有1个可能出错
- Q20:P_error = 0.01,每100个碱基里有1个可能出错
- Q10:P_error = 0.1,每10个碱基里有1个可能出错
### 质量分与碱基准确率的关系
下表是我做质量控制时常用的参考:
| Phred质量分Q | 错误概率P_error | 碱基准确率 | 常用阈值 |
|:---:|:---:|:---:|:---:|
| Q10 | 0.10 (1/10) | 90% | 最低可接受 |
| Q20 | 0.01 (1/100) | 99% | 一般质控标准 |
| Q30 | 0.001 (1/1000) | 99.9% | 高质量标准 |
| Q40 | 0.0001 (1/10000) | 99.99% | 极致高精度 |
### ASCII编码映射
质量分在FASTQ文件里用ASCII字符表示。最常见的是**Phred+33**编码方式:
ASCII值 = Q + 33
Q=0 → ASCII 33 → '!'
Q=10 → ASCII 43 → '+'
Q=20 → ASCII 53 → '5'
Q=30 → ASCII 63 → '?'
Q=40 → ASCII 73 → 'I'
常见的坑:我曾经从公共数据库下载一批数据,解压后跑FastQC,发现质量分全乱套了。排查了半天才发现,原来是Phred+33和Phred+64混在一起了。旧版Solexa(Illumina前身)用的是Phred+64编码,现在基本都用Phred+33。如果你看到质量分曲线在Q40以上突然变成问号等诡异形状,八成是编码搞混了。
Sample1_S1_L001_R1_001.fastq.gz
Sample1_S1_L001_R2_001.fastq.gz
各部分含义:
- **Sample1**:样本名称
- **S1**:样本编号(由测序仪自动生成)
- **L001**:lane编号
- **R1/R2**:Read 1(正向)或Read 2(反向)
- **001**:分卷编号
个人习惯:拿到数据后,我第一步会用zcat检查默认的read数量。匹配的R1和R2文件行数必须一样,否则说明数据不完整。顺便看一下第一行的@标识符,确认仪器型号是否与预期一致。这一步能发现很多低级错误。