Normalization 是为了样本之间可以比较,用来矫正系统误差。例如上样量A样本是B样本的两倍,最后得出A样本里所有蛋白都是B样本蛋白的两倍,显然是不对的。这种现象在基因测序中也存在,例如测序深度差异等,常用的R包 edgeR 等也有不同的 Normalization 方法。
最简单最粗暴的方法是假设是大部分蛋白是没有发生变化的,只有少数改变了,只要每个样本除以自身所有蛋白丰度和,就可以矫正误差。但显然也有明显的弊端,如果某些蛋白丰度极高,凭一己之力改变了丰度之和,就无法正确矫正。如下
A | B |
---|---|
1 | 2 |
2 | 4 |
3 | 6 |
10 | 8 |
因此,将丰度总和作为Normalization是不太可取的。因此也有其他的一些方法,取出样本中一部分代表总体来进行矫正。例如取中位数,取四分之一和四分之三分位数之间的样本来剔除极端值等。
参考
下面文章来自 Nature -- Proteogenomics connects somatic mutations to signalling in breast cancer
QC 过滤
首先作者对样本进行了过滤。reference 是混合样本,因为无论是 TMT 还是 iTRAQ 标记都只能标记有限样本,需要一个混合样本做参照,使在不同批次间可以比较。我们看下图每个样本与 reference的比值取对数结果大部分是符合预期的单峰分布(右),以0(1倍)为中心高斯(正太)分布,也有一些样本是明显的双峰分布(左)。
作者使用 R 包 mclust 双重高斯混合模型进行聚类,较小均值的77个样本通过QC。
Normalization
其实用的就是 z-score 方法的变种,(x-均值)/标准差 。区别是,这里并不是用的总样本的标准差。
首先假设样本中只有一部分蛋白发生了改变,另一部分没有发生改变,双峰原因是因为污染等,而没有发生上下调的蛋白拥有较小的标准差。
为了归一化前面讲的进样样和系统误差,采用了下面方式,使用 mixtools 包。
以单峰模型估计出均值
library(mixtools)
d<-density(na.omit(dat1[,1]), bw="SJ", kernel="gaussian") # Gaussian kernel density estimate
m <- d$x[which.max(d$y)] # 众数作为均值
plot(d)
双峰模型估计两个标准差
model<-normalmixEM(na.omit(dat1[,1]),mean.constr=c(m,m))
sigma = min(model$sigma)
plot(model,2)
使用最小的标准差标准化
(dat1[,1] - m)/sigma
效果
矫正前
校正后
最后
如有错误,欢迎指正
其他方法参考文献 A systematic evaluation of normalization methods in quantitative label-free proteomics