生物信息分析中的数据预处理

在生物信息分析里,数据预处理最怕遇到那些深藏不露的异常样本。它们会像卧底一样悄悄污染整个数据集,让 GC 含量、比对率还有表达量的数据直接乱套。要是碰到污染、细胞死了或者提取失败这些小麻烦,GC 含量很容易飘出±5%,稍微严重点的甚至能超过±10%。比对率要是跌到了组内中位数的20%以下,基本也就没法用了。表达量的分布也很奇怪,不是全都降到了0,就是全都飙到了FPKM超过10000。有时候菌群结构也会突变,本来的优势菌突然消失了,罕见菌却猛涨100倍。还有线粒体比例失衡这种情况也很常见。 不过最直接的办法是看图形。用 PCA 做出的图上要是出现了孤零零的点,像是被踢出群聊的那种状态,基本就能确定有异常样本了。这时候可以试着用聚类树来帮忙。不管是用层级聚类还是PCA生成树状图,只要蓝框里的51-52那一对出现了特别长的枝条,就说明有问题。不过左边那一排42要不要也标成异常,这就没绝对的标准了,还得看后续的验证结果。 要想更精准地识别异常值,Z-score是个很好用的工具。它的计算方法很简单,就是把观测值减去总体均值,再除以标准差。这就好比是在正态世界里量距离的尺子。我们可以用 R 语言来模拟一下这个过程。先设定个种子数模拟一组数据,再把10作为异常值加进去。计算Z-score的时候可以用 scale 函数来处理。如果用更稳健的中位数绝对偏差(MAD)来代替标准差的话效果会更好。当Z-score超过3倍标准差的时候就可以判定是异常值了。 把Z-score的思路扩展到样本间的相似度分析上也很实用。可以用 Pearson 或 Spearman 算出每对样本的相关系数矩阵。如果某个样本的行均值和列均值都低于同组均值减3σ的话,就说明它跟群体的语言不通了。这时候再结合聚类树和PCA的结果进行交叉验证,那种“三票离场”的机制就能把误杀率降到最低。 热图也可以用Z-score来美化。先把原始计数转成Z值然后按行标准化,这样每行就都是自己跟自己比了。颜色映射的时候可以选择对数正态或者蓝色系,这样一眼就能看出哪些样本颜色特别红或者特别绿了。 最后总结一下这套流程就像“三步曲”一样简单:先画树或PCA图来肉眼扫一遍找出可疑点;然后用稳健统计量MAD算Z-score对正态假设来个“降维打击”;最后再用聚类、相关系数、PCA三重投票来交叉验证。只要满足“三票离场”的原则,也就是任何两轮结果不一致的样本直接淘汰就可以了。掌握了这套组合拳,就能在实验初期把污染、失败还有伪差异都挡在门外了。