如何识别数据中的“异常样本”?

说到数据处理,最怕碰见那种躲在暗处的异常样本。要是碰上污染、细胞死了,或者测序出了岔子,GC含量、比对率还有表达量都会立马跳票。这时候你要是直接把这些样本删掉,只会让后面的实验更难搞。所以咱们得先学会识别,把真正的“真数据”给留下来。 那什么样的样本才算是异常呢?看关键指标就知道。GC含量只要飘了±5%就挺危险,要是飘到了±10%,警报就得拉响。比对率要是比组里的中值低了20%,那基本上就是“躺平”了。表达量也不太平,不是全军覆没变成0,就是集体爆表超过10000个FPKM。菌群构成突变也很吓人,优势菌突然不见了,罕见菌却暴涨了100倍。还有单细胞线粒体比例失衡也很明显。 除了这些直接的指标,PCA图形里要是出现了离群的孤岛,那也是在告诉你这儿有问题。这时候我们可以先画一个聚类树。不管是层级聚类还是PCA都能生成这个图。如果有个样本像51和52那样枝长突然变长了,那它大概率就是个异常者。 不过光靠看树也不行啊。左边那一排像42号的样本该不该也被打上标签呢?这里可没有绝对的标准,只能靠经验去判断。 这时候就轮到Z-score上场了。它就是正态世界里的一把尺子。简单来说就是用观测值减去总体均值再除以标准差。R语言里写几句代码就能算出来。比如我在模拟数据里加了个异常值10,用稳健的中位数绝对偏差MAD去处理一下会更稳。 输出结果一看就明白了,只有那个10被标记成TRUE,剩下的全是良民。其实我们不光可以单点检测单个样本的Z-score,还能扩展到样本间的相似度上来算。用Pearson或者Spearman算出来的相关系数矩阵里行均值和列均值都特别低(都低于同组均值减3个标准差)的那个样本肯定就是离群者。 再结合前面的聚类树和PCA来交叉验证一下——这种“三票离场”的机制能让误杀率降到最低。而且热图美化也离不开Z-score的功劳。把原始计数转换成Z值再按行标准化就能突出组内的差异了。颜色选对数正态或者蓝色系就能一眼看出哪些是“爆红”或者“墨绿”的异常样本。 最后总结一下流程:先画个树或PCA来扫一遍可疑的孤岛;然后用稳健统计量MAD来给正态假设降维打击;最后拿聚类、相关系数还有PCA来三重投票——只要有两轮不一致的就直接淘汰掉。 掌握这套组合拳后你就不会被那些污染、失败还有伪差异给困扰了,后续做差分表达、通路富集和机器学习的时候就能跑在高质量数据上了。