数据预处理中的“离群样本”

最近有同学在数据预处理阶段总遇到让人头疼的“离群样本”,这些异常值就像潜伏的卧底,看起来无害,实际上却能把整个数据分析结果拖垮。测序过程中任何一个小瑕疵,比如污染、细胞死亡或者提取失败,都可能让GC含量、比对率、表达量瞬间出现异常。而均值、方差和相关性这些常规统计量对异常值又非常敏感,随便删掉它们很可能让重复实验变得更糟糕。与其为了追求数量而忽视质量,不如先学会识别异常样本再进行取舍,把宝贵的测序资源留给真正的数据。 那么异常样本长什么样呢?一般来说有几个关键指标可以注意:GC含量漂移超过±5%是个预警信号,超过±10%就要拉响警报了;比对率低于组内中位数20%的样本很可能有问题;表达量要么全军覆没(counts=0),要么集体爆表(FPKM>10000);菌群构成突变也是一个重要信号;单细胞线粒体比例失衡也需要注意。还有就是在PCA图上显示为离群点。 一种简单有效的方法是利用层级聚类或者PCA生成树状图来识别异常样本。比如蓝框里的51-52号样本出现了枝长拉长的现象,提示存在异常。但问题在于左边那排42号样本是否也需要被打上标签呢?这个问题没有绝对的答案,只能靠经验和后续验证来相互校准。 接下来我们来了解一下Z-score,它可以告诉我们某个观测值偏离总体均值多少倍标准差。具体操作就是用观测值减去总体均值再除以标准差。我们可以用R语言来模拟一组数据并进行Z-score计算:首先模拟30个符合正态分布的数值和一个10的异常值;然后计算Z-score并四舍五入;接着计算稳健中位数绝对偏差(MAD);最后用MAD来计算稳健的Z-score并判断是否大于3倍标准差作为异常点。 除了单点检测外,Z-score还可以扩展到样本间相似度上。我们可以使用Pearson或Spearman算出每对样本的相关系数矩阵,然后行均值与列均值双低的样本就可以判定为离群点了。结合聚类树和PCA双重验证机制就能有效降低误杀率。 Z-score不仅可以用于数据清洗还能美化热图展示结果。把原始计数转为Z值按行标准化后每行自己跟自己比就能突出组内差异;颜色映射选择对数正态或蓝色系就能一眼锁定异常点。 最后总结一下整个流程:先画聚类树或PCA图肉眼扫一遍标出可疑孤岛;再算Z-score用稳健统计量对正态假设进行处理;最后通过聚类、相关系数、PCA三重投票交叉验证“三票离场”原则排除任何两轮不一致的样本。掌握这套组合拳就能在实验初期把“污染、失败、伪差异”挡在统计门外了。