Skip to content

PCA

PCA(主成分分析 Principle Component Analysis)是一种很常用的数据降维和聚类的方法。

PCA的原理可以简要的概括为,使用能够代表样本中大多数位点差异的变量代替所有变量,从而降低变量个数、放大样本簇之间的差异、便于数据可视化。

PCA降维的原理涉及一系列数学推导,这里我不想列出这些繁琐的公式,而是以数据从二维降低到一维为例,简要说明这个过程。

如上图,我们现在有6个样本,有x和y两个变量表征它们的差异。现在数据点的分布是二维的,我们需要降低到一维。

首先,计算这些样本的均值,然后平移整个坐标轴使坐标轴的原点与样本均值重合。

之后,选择一条过原点的直线并旋转,使得所有样本点到这条直线的距离的平方和最小。

这样一条直线就是我们所需要的降维后的坐标轴,其包含了大多数位点的差异信息。如此,我们完成了数据从二维降低到一维的过程。

对于多维数据,思路与之类似。

贴一个R语言代码:

# PCA
probesetvar <- apply(data, 1, var) 
# data是我们的数据(二维矩阵),其中横坐标为样本,纵坐标为变量(经常是基因id)
ord = order(probesetvar, decreasing=TRUE)[1:200]
# TOP200的变量
pca = prcomp(t(data[ord,]), scale=TRUE)
ss  = summary(pca)
# visualize
png(filename = paste0("PCA_result",".png") ,width = 1024, height = 960)
plot(pca$x[,1:2],pch=c(1,1,1,1,1,2,2,2,2,2),col=c(1,1,1,1,1,2,2,2,2,2),cex=2) 
# pch和col对应散点的形状和颜色参数,可调。
title(main="PCA result(after correct batch effect)")
dev.off()

--wanyu