跳转至

PCA 与 SVD 的关系是什么?为什么组学里我们其实在用 SVD?

PCA 找最大方差方向,SVD 给出它的数值解。

长答案

设中心化后的数据矩阵为 \(X\in\mathbb{R}^{n\times p}\),行是样本,列是特征。PCA 第一主成分要找一个单位向量 \(v\),使投影方差最大: $$ \max_{|v|=1}\frac{1}{n-1}|Xv|^2 =\max_{|v|=1}v^\top\left(\frac{X^\top X}{n-1}\right)v $$

用拉格朗日乘子: $$ L(v,\lambda)=v^\top S v-\lambda(v^\top v-1),\qquad S=\frac{X^\top X}{n-1} $$ 求导: $$ \frac{\partial L}{\partial v}=2Sv-2\lambda v=0 $$ 所以: $$ Sv=\lambda v $$ PCA 的 loading 是协方差矩阵 \(S\) 的特征向量。

SVD(singular value decomposition)把 \(X\) 分解为: $$ X=U\Sigma V^\top $$ 于是: $$ X^\top X=V\Sigma^\top U^\top U\Sigma V^\top=V\Sigma^2V^\top $$ 因为 \(U^\top U=I\)。所以 \(X^\top X\) 的特征向量就是 \(V\),特征值是 \(\sigma_k^2\)。PCA score 是: $$ XV=U\Sigma $$

组学里我们说“跑 PCA”,多数软件实际算的是中心化/缩放矩阵的 SVD,而不是显式构造 \(p\times p\) 协方差矩阵。

为什么这么设计

SVD 数值上更稳定,也适合 \(p\gg n\) 的组学矩阵。RNA-seq 可能 20,000 genes、几十样本;显式求协方差浪费且易病态。scRNA 更夸张,稀疏矩阵上用 truncated SVD 才可行。

为什么 PCA 能看到 batch?因为它只关心最大方差方向,不知道哪个方向是 biological condition。若 batch 解释的方差最大,PC1 就是 batch。

⚠️ 容易混淆 / 常见误解

误解 1:PCA 是聚类方法。
为什么是错的:PCA 是线性投影;聚类结构只是投影后的可视化现象。

误解 2:PC1 一定是最重要生物信号。
为什么是错的:PC1 是最大方差,不是最大生物意义。

误解 3:PCA 前是否 scaling 无所谓。
为什么是错的:不 scaling 时高方差特征主导;scaling 后每列方差等权,问题变了。

横向连接

  • [[_concepts/batch-effects-causes-and-cures]]
  • [[_concepts/umap-tsne-what-they-preserve]]
  • [[04-scRNAseq/pca-in-singlecell]]
  • [[11-3D-genome/ab-compartments-pc1]]
  • [[15-multiomics-integration/jive-snmf-shared-individual]]

我现在的理解状态

#待 Peter 确认

参考

  • Pearson (1901), Philosophical Magazine
  • Hotelling (1933), Journal of Educational Psychology
  • Eckart & Young (1936), Psychometrika
  • Alter et al. (2000), PNAS